diff options
Diffstat (limited to 'pjlib/src/pj/ssl_sock_common.c')
-rw-r--r-- | pjlib/src/pj/ssl_sock_common.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/pjlib/src/pj/ssl_sock_common.c b/pjlib/src/pj/ssl_sock_common.c index 60248372..864a0456 100644 --- a/pjlib/src/pj/ssl_sock_common.c +++ b/pjlib/src/pj/ssl_sock_common.c @@ -19,6 +19,7 @@ #include <pj/ssl_sock.h> #include <pj/assert.h> #include <pj/errno.h> +#include <pj/pool.h> #include <pj/string.h> /* @@ -48,6 +49,31 @@ PJ_DEF(void) pj_ssl_sock_param_default(pj_ssl_sock_param *param) } +/* + * Duplicate SSL socket parameter. + */ +PJ_DEF(void) pj_ssl_sock_param_copy( pj_pool_t *pool, + pj_ssl_sock_param *dst, + const pj_ssl_sock_param *src) +{ + /* Init secure socket param */ + pj_memcpy(dst, src, sizeof(*dst)); + if (src->ciphers_num > 0) { + unsigned i; + dst->ciphers = (pj_ssl_cipher*) + pj_pool_calloc(pool, src->ciphers_num, + sizeof(pj_ssl_cipher)); + for (i = 0; i < src->ciphers_num; ++i) + dst->ciphers[i] = src->ciphers[i]; + } + + if (src->server_name.slen) { + /* Server name must be null-terminated */ + pj_strdup_with_null(pool, &dst->server_name, &src->server_name); + } +} + + PJ_DEF(pj_status_t) pj_ssl_cert_get_verify_status_strings( pj_uint32_t verify_status, const char *error_strings[], |