summaryrefslogtreecommitdiff
path: root/pjlib/src/pj/ssl_sock_common.c
diff options
context:
space:
mode:
Diffstat (limited to 'pjlib/src/pj/ssl_sock_common.c')
-rw-r--r--pjlib/src/pj/ssl_sock_common.c26
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[],