Changeset 5821
- Timestamp:
- Jul 15, 2018 2:09:23 PM (6 years ago)
- Location:
- pjproject/trunk
- Files:
-
- 8 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjlib/include/pj/ssl_sock.h
r5725 r5821 192 192 } pj_ssl_cert_info; 193 193 194 /** 195 * The SSL certificate buffer. 196 */ 197 typedef pj_str_t pj_ssl_cert_buffer; 194 198 195 199 /** … … 242 246 pj_ssl_cert_t **p_cert); 243 247 248 249 /** 250 * Create credential from data buffer. The certificate expected is in 251 * PEM format. 252 * 253 * @param CA_file The buffer of trusted CA list. 254 * @param cert_file The buffer of certificate. 255 * @param privkey_file The buffer of private key. 256 * @param privkey_pass The password of private key, if any. 257 * @param p_cert Pointer to credential instance to be created. 258 * 259 * @return PJ_SUCCESS when successful. 260 */ 261 PJ_DECL(pj_status_t) pj_ssl_cert_load_from_buffer(pj_pool_t *pool, 262 const pj_ssl_cert_buffer *CA_buf, 263 const pj_ssl_cert_buffer *cert_buf, 264 const pj_ssl_cert_buffer *privkey_buf, 265 const pj_str_t *privkey_pass, 266 pj_ssl_cert_t **p_cert); 244 267 245 268 /** -
pjproject/trunk/pjlib/src/pj/ssl_sock_gtls.c
r5730 r5821 190 190 }; 191 191 192 193 /* Certificate/credential structure definition. */ 194 struct pj_ssl_cert_t { 192 /* 193 * Certificate/credential structure definition. 194 */ 195 struct pj_ssl_cert_t 196 { 195 197 pj_str_t CA_file; 196 198 pj_str_t CA_path; … … 198 200 pj_str_t privkey_file; 199 201 pj_str_t privkey_pass; 202 203 /* Certificate buffer. */ 204 pj_ssl_cert_buffer CA_buf; 205 pj_ssl_cert_buffer cert_buf; 206 pj_ssl_cert_buffer privkey_buf; 200 207 }; 208 201 209 202 210 /* GnuTLS available ciphers */ … … 982 990 goto out; 983 991 } 992 993 if (cert->CA_buf.slen) { 994 gnutls_datum_t ca; 995 ca.data = (unsigned char*)cert->CA_buf.ptr; 996 ca.size = cert->CA_buf.slen; 997 ret = gnutls_certificate_set_x509_trust_mem(ssock->xcred, 998 &ca, 999 GNUTLS_X509_FMT_PEM); 1000 if (ret < 0) 1001 ret = gnutls_certificate_set_x509_trust_mem( 1002 ssock->xcred, &ca, GNUTLS_X509_FMT_DER); 1003 if (ret < 0) 1004 goto out; 1005 } 1006 1007 if (cert->cert_buf.slen && cert->privkey_buf.slen) { 1008 gnutls_datum_t cert_buf; 1009 gnutls_datum_t privkey_buf; 1010 1011 cert_buf.data = (unsigned char*)cert->CA_buf.ptr; 1012 cert_buf.size = cert->CA_buf.slen; 1013 privkey_buf.data = (unsigned char*)cert->privkey_buf.ptr; 1014 privkey_buf.size = cert->privkey_buf.slen; 1015 1016 const char *prikey_pass = cert->privkey_pass.slen 1017 ? cert->privkey_pass.ptr 1018 : NULL; 1019 ret = gnutls_certificate_set_x509_key_mem2(ssock->xcred, 1020 &cert_buf, 1021 &privkey_buf, 1022 GNUTLS_X509_FMT_PEM, 1023 prikey_pass, 1024 0); 1025 /* Load DER format */ 1026 /* 1027 if (ret != GNUTLS_E_SUCCESS) 1028 ret = gnutls_certificate_set_x509_key_mem2(ssock->xcred, 1029 &cert_buf, 1030 &privkey_buf, 1031 GNUTLS_X509_FMT_DER, 1032 prikey_pass, 1033 0); 1034 */ 1035 if (ret < 0) 1036 goto out; 1037 } 984 1038 } 985 1039 … … 2090 2144 } 2091 2145 2146 PJ_DEF(pj_status_t) pj_ssl_cert_load_from_buffer(pj_pool_t *pool, 2147 const pj_ssl_cert_buffer *CA_buf, 2148 const pj_ssl_cert_buffer *cert_buf, 2149 const pj_ssl_cert_buffer *privkey_buf, 2150 const pj_str_t *privkey_pass, 2151 pj_ssl_cert_t **p_cert) 2152 { 2153 pj_ssl_cert_t *cert; 2154 2155 PJ_ASSERT_RETURN(pool && CA_buf && cert_buf && privkey_buf, PJ_EINVAL); 2156 2157 cert = PJ_POOL_ZALLOC_T(pool, pj_ssl_cert_t); 2158 pj_strdup(pool, &cert->CA_buf, CA_buf); 2159 pj_strdup(pool, &cert->cert_buf, cert_buf); 2160 pj_strdup(pool, &cert->privkey_buf, privkey_buf); 2161 pj_strdup_with_null(pool, &cert->privkey_pass, privkey_pass); 2162 2163 *p_cert = cert; 2164 2165 return PJ_SUCCESS; 2166 } 2167 2092 2168 /* Store credentials. */ 2093 2169 PJ_DEF(pj_status_t) pj_ssl_sock_set_certificate( pj_ssl_sock_t *ssock, … … 2106 2182 pj_strdup_with_null(pool, &cert_->privkey_file, &cert->privkey_file); 2107 2183 pj_strdup_with_null(pool, &cert_->privkey_pass, &cert->privkey_pass); 2184 2185 pj_strdup(pool, &cert_->CA_buf, &cert->CA_buf); 2186 pj_strdup(pool, &cert_->cert_buf, &cert->cert_buf); 2187 pj_strdup(pool, &cert_->privkey_buf, &cert->privkey_buf); 2108 2188 2109 2189 ssock->cert = cert_; -
pjproject/trunk/pjlib/src/pj/ssl_sock_ossl.c
r5797 r5821 294 294 pj_str_t privkey_file; 295 295 pj_str_t privkey_pass; 296 297 /* Certificate buffer. */ 298 pj_ssl_cert_buffer CA_buf; 299 pj_ssl_cert_buffer cert_buf; 300 pj_ssl_cert_buffer privkey_buf; 296 301 }; 297 302 … … 964 969 #endif 965 970 } 971 972 /* Load from buffer. */ 973 if (cert->cert_buf.slen) { 974 BIO *cbio; 975 X509 *xcert = NULL; 976 977 cbio = BIO_new_mem_buf((void*)cert->cert_buf.ptr, 978 cert->cert_buf.slen); 979 if (cbio != NULL) { 980 xcert = PEM_read_bio_X509(cbio, NULL, 0, NULL); 981 if (xcert != NULL) { 982 rc = SSL_CTX_use_certificate(ctx, xcert); 983 if (rc != 1) { 984 status = GET_SSL_STATUS(ssock); 985 PJ_LOG(1, (ssock->pool->obj_name, "Error loading " 986 "chain certificate from buffer")); 987 X509_free(xcert); 988 BIO_free(cbio); 989 SSL_CTX_free(ctx); 990 return status; 991 } 992 X509_free(xcert); 993 } 994 BIO_free(cbio); 995 } 996 } 997 998 if (cert->CA_buf.slen) { 999 BIO *cbio = BIO_new_mem_buf((void*)cert->CA_buf.ptr, 1000 cert->CA_buf.slen); 1001 X509_STORE *cts = SSL_CTX_get_cert_store(ctx); 1002 1003 if (cbio && cts) { 1004 STACK_OF(X509_INFO) *inf = PEM_X509_INFO_read_bio(cbio, NULL, 1005 NULL, NULL); 1006 1007 if (inf != NULL) { 1008 int i = 0; 1009 for (; i < sk_X509_INFO_num(inf); i++) { 1010 X509_INFO *itmp = sk_X509_INFO_value(inf, i); 1011 if (itmp->x509) { 1012 X509_STORE_add_cert(cts, itmp->x509); 1013 } 1014 } 1015 } 1016 sk_X509_INFO_pop_free(inf, X509_INFO_free); 1017 BIO_free(cbio); 1018 } 1019 } 1020 1021 if (cert->privkey_buf.slen) { 1022 BIO *kbio; 1023 EVP_PKEY *pkey = NULL; 1024 1025 kbio = BIO_new_mem_buf((void*)cert->privkey_buf.ptr, 1026 cert->privkey_buf.slen); 1027 if (kbio != NULL) { 1028 pkey = PEM_read_bio_PrivateKey(kbio, NULL, 0, NULL); 1029 if (pkey) { 1030 rc = SSL_CTX_use_PrivateKey(ctx, pkey); 1031 if (rc != 1) { 1032 status = GET_SSL_STATUS(ssock); 1033 PJ_LOG(1, (ssock->pool->obj_name, "Error adding " 1034 "private key from buffer")); 1035 EVP_PKEY_free(pkey); 1036 BIO_free(kbio); 1037 SSL_CTX_free(ctx); 1038 return status; 1039 } 1040 EVP_PKEY_free(pkey); 1041 } 1042 if (ssock->is_server) { 1043 dh = PEM_read_bio_DHparams(kbio, NULL, NULL, NULL); 1044 if (dh != NULL) { 1045 if (SSL_CTX_set_tmp_dh(ctx, dh)) { 1046 options = SSL_OP_CIPHER_SERVER_PREFERENCE | 1047 #if !defined(OPENSSL_NO_ECDH) && OPENSSL_VERSION_NUMBER >= 0x10000000L 1048 SSL_OP_SINGLE_ECDH_USE | 1049 #endif 1050 SSL_OP_SINGLE_DH_USE; 1051 options = SSL_CTX_set_options(ctx, options); 1052 PJ_LOG(4,(ssock->pool->obj_name, "SSL DH " 1053 "initialized, PFS cipher-suites enabled")); 1054 } 1055 DH_free(dh); 1056 } 1057 } 1058 BIO_free(kbio); 1059 } 1060 } 966 1061 } 967 1062 … … 1233 1328 break; 1234 1329 } 1235 } 1330 } 1236 1331 } 1237 1332 … … 2555 2650 } 2556 2651 2652 PJ_DEF(pj_status_t) pj_ssl_cert_load_from_buffer(pj_pool_t *pool, 2653 const pj_ssl_cert_buffer *CA_buf, 2654 const pj_ssl_cert_buffer *cert_buf, 2655 const pj_ssl_cert_buffer *privkey_buf, 2656 const pj_str_t *privkey_pass, 2657 pj_ssl_cert_t **p_cert) 2658 { 2659 pj_ssl_cert_t *cert; 2660 2661 PJ_ASSERT_RETURN(pool && CA_buf && cert_buf && privkey_buf, PJ_EINVAL); 2662 2663 cert = PJ_POOL_ZALLOC_T(pool, pj_ssl_cert_t); 2664 pj_strdup(pool, &cert->CA_buf, CA_buf); 2665 pj_strdup(pool, &cert->cert_buf, cert_buf); 2666 pj_strdup(pool, &cert->privkey_buf, privkey_buf); 2667 pj_strdup_with_null(pool, &cert->privkey_pass, privkey_pass); 2668 2669 *p_cert = cert; 2670 2671 return PJ_SUCCESS; 2672 } 2557 2673 2558 2674 /* Set SSL socket credentials. */ … … 2573 2689 pj_strdup_with_null(pool, &cert_->privkey_file, &cert->privkey_file); 2574 2690 pj_strdup_with_null(pool, &cert_->privkey_pass, &cert->privkey_pass); 2691 2692 pj_strdup(pool, &cert_->CA_buf, &cert->CA_buf); 2693 pj_strdup(pool, &cert_->cert_buf, &cert->cert_buf); 2694 pj_strdup(pool, &cert_->privkey_buf, &cert->privkey_buf); 2575 2695 2576 2696 ssock->cert = cert_; -
pjproject/trunk/pjlib/src/pjlib-test/ssl_sock.c
r5381 r5821 28 28 #define CERT_PRIVKEY_PASS "" 29 29 30 #define TEST_LOAD_FROM_FILES 1 30 31 31 32 #if INCLUDE_SSLSOCK_TEST … … 493 494 } 494 495 496 #if (TEST_LOAD_FROM_FILE==0) 497 static pj_status_t load_cert_to_buf(pj_pool_t *pool, const pj_str_t *file_name, 498 pj_ssl_cert_buffer *buf) 499 { 500 pj_status_t status; 501 pj_oshandle_t fd = 0; 502 pj_ssize_t size = (pj_ssize_t)pj_file_size(file_name->ptr); 503 504 status = pj_file_open(pool, file_name->ptr, PJ_O_RDONLY, &fd); 505 if (status != PJ_SUCCESS) 506 return status; 507 508 buf->ptr = (char*)pj_pool_zalloc(pool, size+1); 509 status = pj_file_read(fd, buf->ptr, &size); 510 buf->slen = size; 511 512 pj_file_close(fd); 513 fd = NULL; 514 return status; 515 } 516 #endif 495 517 496 518 static int echo_test(pj_ssl_sock_proto srv_proto, pj_ssl_sock_proto cli_proto, … … 550 572 /* Set server cert */ 551 573 { 552 pj_str_t tmp1, tmp2, tmp3, tmp4; 553 554 status = pj_ssl_cert_load_from_files(pool, 555 pj_strset2(&tmp1, (char*)CERT_CA_FILE), 556 pj_strset2(&tmp2, (char*)CERT_FILE), 557 pj_strset2(&tmp3, (char*)CERT_PRIVKEY_FILE), 558 pj_strset2(&tmp4, (char*)CERT_PRIVKEY_PASS), 574 pj_str_t ca_file = pj_str(CERT_CA_FILE); 575 pj_str_t cert_file = pj_str(CERT_FILE); 576 pj_str_t privkey_file = pj_str(CERT_PRIVKEY_FILE); 577 pj_str_t privkey_pass = pj_str(CERT_PRIVKEY_PASS); 578 579 #if (defined(TEST_LOAD_FROM_FILES) && TEST_LOAD_FROM_FILES==1) 580 status = pj_ssl_cert_load_from_files(pool, &ca_file, &cert_file, 581 &privkey_file, &privkey_pass, 559 582 &cert); 583 #else 584 pj_ssl_cert_buffer ca_buf, cert_buf, privkey_buf; 585 586 status = load_cert_to_buf(pool, &ca_file, &ca_buf); 587 if (status != PJ_SUCCESS) { 588 goto on_return; 589 } 590 591 status = load_cert_to_buf(pool, &cert_file, &cert_buf); 592 if (status != PJ_SUCCESS) { 593 goto on_return; 594 } 595 596 status = load_cert_to_buf(pool, &privkey_file, &privkey_buf); 597 if (status != PJ_SUCCESS) { 598 goto on_return; 599 } 600 601 status = pj_ssl_cert_load_from_buffer(pool, &ca_buf, &cert_buf, 602 &privkey_buf, &privkey_pass, 603 &cert); 604 #endif 560 605 if (status != PJ_SUCCESS) { 561 606 goto on_return; … … 614 659 615 660 if (!client_provide_cert) { 616 pj_str_t tmp1, tmp2; 617 618 pj_strset2(&tmp1, (char*)CERT_CA_FILE); 619 pj_strset2(&tmp2, NULL); 620 status = pj_ssl_cert_load_from_files(pool, 621 &tmp1, &tmp2, &tmp2, &tmp2, 622 &cert); 661 pj_str_t ca_file = pj_str(CERT_CA_FILE); 662 pj_str_t null_str = pj_str(""); 663 664 #if (defined(TEST_LOAD_FROM_FILES) && TEST_LOAD_FROM_FILES==1) 665 status = pj_ssl_cert_load_from_files(pool, &ca_file, &null_str, 666 &null_str, &null_str, &cert); 667 #else 668 pj_ssl_cert_buffer null_buf, ca_buf; 669 670 null_buf.slen = 0; 671 672 status = load_cert_to_buf(pool, &ca_file, &ca_buf); 623 673 if (status != PJ_SUCCESS) { 624 674 goto on_return; 625 675 } 676 677 status = pj_ssl_cert_load_from_buffer(pool, &ca_buf, &null_buf, 678 &null_buf, &null_str, &cert); 679 #endif 680 if (status != PJ_SUCCESS) { 681 goto on_return; 682 } 683 626 684 } 627 685 … … 825 883 /* Set cert */ 826 884 { 827 pj_str_t tmp1, tmp2, tmp3, tmp4; 828 status = pj_ssl_cert_load_from_files(pool, 829 pj_strset2(&tmp1, (char*)CERT_CA_FILE), 830 pj_strset2(&tmp2, (char*)CERT_FILE), 831 pj_strset2(&tmp3, (char*)CERT_PRIVKEY_FILE), 832 pj_strset2(&tmp4, (char*)CERT_PRIVKEY_PASS), 885 pj_str_t ca_file = pj_str(CERT_CA_FILE); 886 pj_str_t cert_file = pj_str(CERT_FILE); 887 pj_str_t privkey_file = pj_str(CERT_PRIVKEY_FILE); 888 pj_str_t privkey_pass = pj_str(CERT_PRIVKEY_PASS); 889 890 #if (defined(TEST_LOAD_FROM_FILES) && TEST_LOAD_FROM_FILES==1) 891 status = pj_ssl_cert_load_from_files(pool, &ca_file, &cert_file, 892 &privkey_file, &privkey_pass, 833 893 &cert); 894 #else 895 pj_ssl_cert_buffer ca_buf, cert_buf, privkey_buf; 896 897 status = load_cert_to_buf(pool, &ca_file, &ca_buf); 898 if (status != PJ_SUCCESS) { 899 goto on_return; 900 } 901 902 status = load_cert_to_buf(pool, &cert_file, &cert_buf); 903 if (status != PJ_SUCCESS) { 904 goto on_return; 905 } 906 907 status = load_cert_to_buf(pool, &privkey_file, &privkey_buf); 908 if (status != PJ_SUCCESS) { 909 goto on_return; 910 } 911 912 status = pj_ssl_cert_load_from_buffer(pool, &ca_buf, &cert_buf, 913 &privkey_buf, &privkey_pass, 914 &cert); 915 #endif 834 916 if (status != PJ_SUCCESS) { 835 917 goto on_return; … … 1132 1214 /* Set cert */ 1133 1215 { 1134 pj_str_t tmp1, tmp2, tmp3, tmp4; 1135 1136 status = pj_ssl_cert_load_from_files(pool, 1137 pj_strset2(&tmp1, (char*)CERT_CA_FILE), 1138 pj_strset2(&tmp2, (char*)CERT_FILE), 1139 pj_strset2(&tmp3, (char*)CERT_PRIVKEY_FILE), 1140 pj_strset2(&tmp4, (char*)CERT_PRIVKEY_PASS), 1216 pj_str_t ca_file = pj_str(CERT_CA_FILE); 1217 pj_str_t cert_file = pj_str(CERT_FILE); 1218 pj_str_t privkey_file = pj_str(CERT_PRIVKEY_FILE); 1219 pj_str_t privkey_pass = pj_str(CERT_PRIVKEY_PASS); 1220 1221 #if (defined(TEST_LOAD_FROM_FILES) && TEST_LOAD_FROM_FILES==1) 1222 status = pj_ssl_cert_load_from_files(pool, &ca_file, &cert_file, 1223 &privkey_file, &privkey_pass, 1141 1224 &cert); 1225 #else 1226 pj_ssl_cert_buffer ca_buf, cert_buf, privkey_buf; 1227 1228 status = load_cert_to_buf(pool, &ca_file, &ca_buf); 1229 if (status != PJ_SUCCESS) { 1230 goto on_return; 1231 } 1232 1233 status = load_cert_to_buf(pool, &cert_file, &cert_buf); 1234 if (status != PJ_SUCCESS) { 1235 goto on_return; 1236 } 1237 1238 status = load_cert_to_buf(pool, &privkey_file, &privkey_buf); 1239 if (status != PJ_SUCCESS) { 1240 goto on_return; 1241 } 1242 1243 status = pj_ssl_cert_load_from_buffer(pool, &ca_buf, &cert_buf, 1244 &privkey_buf, &privkey_pass, 1245 &cert); 1246 #endif 1142 1247 if (status != PJ_SUCCESS) { 1143 1248 goto on_return; -
pjproject/trunk/pjsip/include/pjsip/sip_transport_tls.h
r5649 r5821 101 101 */ 102 102 pj_str_t privkey_file; 103 104 /** 105 * Certificate of Authority (CA) buffer. If ca_list_file, ca_list_path, 106 * cert_file or privkey_file are set, this setting will be ignored. 107 */ 108 pj_ssl_cert_buffer ca_buf; 109 110 /** 111 * Public endpoint certificate buffer, which will be used as client- 112 * side certificate for outgoing TLS connection, and server-side 113 * certificate for incoming TLS connection. If ca_list_file, ca_list_path, 114 * cert_file or privkey_file are set, this setting will be ignored. 115 */ 116 pj_ssl_cert_buffer cert_buf; 117 118 /** 119 * Optional private key buffer of the endpoint certificate to be used. 120 * If ca_list_file, ca_list_path, cert_file or privkey_file are set, 121 * this setting will be ignored. 122 */ 123 pj_ssl_cert_buffer privkey_buf; 103 124 104 125 /** … … 340 361 pj_strdup_with_null(pool, &dst->sigalgs, &src->sigalgs); 341 362 pj_strdup_with_null(pool, &dst->entropy_path, &src->entropy_path); 363 364 pj_strdup(pool, &dst->ca_buf, &src->ca_buf); 365 pj_strdup(pool, &dst->cert_buf, &src->cert_buf); 366 pj_strdup(pool, &dst->privkey_buf, &src->privkey_buf); 367 342 368 if (src->ciphers_num) { 343 369 unsigned i; -
pjproject/trunk/pjsip/include/pjsua2/siptypes.hpp
r5807 r5821 144 144 */ 145 145 string password; 146 147 /** 148 * Certificate of Authority (CA) buffer. If CaListFile, certFile or 149 * privKeyFile are set, this setting will be ignored. 150 */ 151 string CaBuf; 152 153 /** 154 * Public endpoint certificate buffer, which will be used as client- 155 * side certificate for outgoing TLS connection, and server-side 156 * certificate for incoming TLS connection. If CaListFile, certFile or 157 * privKeyFile are set, this setting will be ignored. 158 */ 159 string certBuf; 160 161 /** 162 * Optional private key buffer of the endpoint certificate to be used. 163 * If CaListFile, certFile or privKeyFile are set, this setting will 164 * be ignored. 165 */ 166 string privKeyBuf; 146 167 147 168 /** -
pjproject/trunk/pjsip/src/pjsip/sip_transport_tls.c
r5649 r5821 587 587 if (listener->tls_setting.cert_file.slen || 588 588 listener->tls_setting.ca_list_file.slen || 589 listener->tls_setting.ca_list_path.slen) 589 listener->tls_setting.ca_list_path.slen || 590 listener->tls_setting.privkey_file.slen) 590 591 { 591 592 status = pj_ssl_cert_load_from_files2(pool, … … 598 599 if (status != PJ_SUCCESS) 599 600 goto on_error; 601 } else if (listener->tls_setting.ca_buf.slen || 602 listener->tls_setting.cert_buf.slen|| 603 listener->tls_setting.privkey_buf.slen) 604 { 605 status = pj_ssl_cert_load_from_buffer(pool, 606 &listener->tls_setting.ca_buf, 607 &listener->tls_setting.cert_buf, 608 &listener->tls_setting.privkey_buf, 609 &listener->tls_setting.password, 610 &listener->cert); 611 if (status != PJ_SUCCESS) 612 goto on_error; 600 613 } 601 614 -
pjproject/trunk/pjsip/src/pjsua2/siptypes.cpp
r5807 r5821 164 164 ts.privkey_file = str2Pj(this->privKeyFile); 165 165 ts.password = str2Pj(this->password); 166 ts.ca_buf = str2Pj(this->CaBuf); 167 ts.cert_buf = str2Pj(this->certBuf); 168 ts.privkey_buf = str2Pj(this->privKeyBuf); 166 169 ts.method = this->method; 167 170 ts.ciphers_num = (unsigned)this->ciphers.size(); … … 189 192 this->privKeyFile = pj2Str(prm.privkey_file); 190 193 this->password = pj2Str(prm.password); 194 this->CaBuf = pj2Str(prm.ca_buf); 195 this->certBuf = pj2Str(prm.cert_buf); 196 this->privKeyBuf = pj2Str(prm.privkey_buf); 191 197 this->method = (pjsip_ssl_method)prm.method; 192 198 this->proto = prm.proto; … … 211 217 NODE_READ_STRING ( this_node, privKeyFile); 212 218 NODE_READ_STRING ( this_node, password); 219 NODE_READ_STRING ( this_node, CaBuf); 220 NODE_READ_STRING ( this_node, certBuf); 221 NODE_READ_STRING ( this_node, privKeyBuf); 213 222 NODE_READ_NUM_T ( this_node, pjsip_ssl_method, method); 214 223 readIntVector ( this_node, "ciphers", ciphers); … … 230 239 NODE_WRITE_STRING ( this_node, privKeyFile); 231 240 NODE_WRITE_STRING ( this_node, password); 241 NODE_WRITE_STRING ( this_node, CaBuf); 242 NODE_WRITE_STRING ( this_node, certBuf); 243 NODE_WRITE_STRING ( this_node, privKeyBuf); 232 244 NODE_WRITE_NUM_T ( this_node, pjsip_ssl_method, method); 233 245 writeIntVector ( this_node, "ciphers", ciphers);
Note: See TracChangeset
for help on using the changeset viewer.