Changeset 5532
- Timestamp:
- Jan 18, 2017 10:55:35 AM (8 years ago)
- Location:
- pjproject/branches/projects/uwp
- Files:
-
- 30 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/branches/projects/uwp
- Property svn:mergeinfo changed
/pjproject/trunk merged: 5516-5525,5527,5530-5531
- Property svn:mergeinfo changed
-
pjproject/branches/projects/uwp/aconfigure
r5513 r5532 642 642 ac_no_opencore_amrwb 643 643 ac_no_opencore_amrnb 644 ec_curve_present645 set_curve_present646 644 libcrypto_present 647 645 libssl_present 648 646 openssl_h_present 649 ac_ssl_has_sigalg650 ac_ssl_has_ec651 647 ac_ssl_has_aes_gcm 652 648 ac_no_ssl … … 760 756 oldincludedir 761 757 includedir 758 runstatedir 762 759 localstatedir 763 760 sharedstatedir … … 882 879 sharedstatedir='${prefix}/com' 883 880 localstatedir='${prefix}/var' 881 runstatedir='${localstatedir}/run' 884 882 includedir='${prefix}/include' 885 883 oldincludedir='/usr/include' … … 1134 1132 silent=yes ;; 1135 1133 1134 -runstatedir | --runstatedir | --runstatedi | --runstated \ 1135 | --runstate | --runstat | --runsta | --runst | --runs \ 1136 | --run | --ru | --r) 1137 ac_prev=runstatedir ;; 1138 -runstatedir=* | --runstatedir=* | --runstatedi=* | --runstated=* \ 1139 | --runstate=* | --runstat=* | --runsta=* | --runst=* | --runs=* \ 1140 | --run=* | --ru=* | --r=*) 1141 runstatedir=$ac_optarg ;; 1142 1136 1143 -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb) 1137 1144 ac_prev=sbindir ;; … … 1271 1278 datadir sysconfdir sharedstatedir localstatedir includedir \ 1272 1279 oldincludedir docdir infodir htmldir dvidir pdfdir psdir \ 1273 libdir localedir mandir 1280 libdir localedir mandir runstatedir 1274 1281 do 1275 1282 eval ac_val=\$$ac_var … … 1424 1431 --sharedstatedir=DIR modifiable architecture-independent data [PREFIX/com] 1425 1432 --localstatedir=DIR modifiable single-machine data [PREFIX/var] 1433 --runstatedir=DIR modifiable per-process data [LOCALSTATEDIR/run] 1426 1434 --libdir=DIR object code libraries [EPREFIX/lib] 1427 1435 --includedir=DIR C header files [PREFIX/include] … … 2345 2353 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 2346 2354 as_fn_error $? "failed to load site script $ac_site_file 2347 See \`config.log' for more details" "$LINENO" 5 2355 See \`config.log' for more details" "$LINENO" 5; } 2348 2356 fi 2349 2357 done … … 2488 2496 case $ac_cv_build in 2489 2497 *-*-*) ;; 2490 *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5 2498 *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; 2491 2499 esac 2492 2500 build=$ac_cv_build … … 2521 2529 case $ac_cv_host in 2522 2530 *-*-*) ;; 2523 *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5 2531 *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; 2524 2532 esac 2525 2533 host=$ac_cv_host … … 2554 2562 case $ac_cv_target in 2555 2563 *-*-*) ;; 2556 *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5 2564 *) as_fn_error $? "invalid value of canonical target" "$LINENO" 5;; 2557 2565 esac 2558 2566 target=$ac_cv_target … … 2891 2899 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 2892 2900 as_fn_error $? "no acceptable C compiler found in \$PATH 2893 See \`config.log' for more details" "$LINENO" 5 2901 See \`config.log' for more details" "$LINENO" 5; } 2894 2902 2895 2903 # Provide some information about the compiler. … … 3006 3014 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 3007 3015 as_fn_error 77 "C compiler cannot create executables 3008 See \`config.log' for more details" "$LINENO" 5 3016 See \`config.log' for more details" "$LINENO" 5; } 3009 3017 else 3010 3018 { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5 … … 3049 3057 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 3050 3058 as_fn_error $? "cannot compute suffix of executables: cannot compile and link 3051 See \`config.log' for more details" "$LINENO" 5 3059 See \`config.log' for more details" "$LINENO" 5; } 3052 3060 fi 3053 3061 rm -f conftest conftest$ac_cv_exeext … … 3108 3116 as_fn_error $? "cannot run C compiled programs. 3109 3117 If you meant to cross compile, use \`--host'. 3110 See \`config.log' for more details" "$LINENO" 5 3118 See \`config.log' for more details" "$LINENO" 5; } 3111 3119 fi 3112 3120 fi … … 3160 3168 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 3161 3169 as_fn_error $? "cannot compute suffix of object files: cannot compile 3162 See \`config.log' for more details" "$LINENO" 5 3170 See \`config.log' for more details" "$LINENO" 5; } 3163 3171 fi 3164 3172 rm -f conftest.$ac_cv_objext conftest.$ac_ext … … 4554 4562 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 4555 4563 as_fn_error $? "C preprocessor \"$CPP\" fails sanity check 4556 See \`config.log' for more details" "$LINENO" 5 4564 See \`config.log' for more details" "$LINENO" 5; } 4557 4565 fi 4558 4566 … … 5044 5052 *) 5045 5053 as_fn_error $? "unknown endianness 5046 presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 5054 presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; 5047 5055 esac 5048 5056 … … 7617 7625 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 7618 7626 as_fn_error $? "Error: unable to recognize your IPP installation. Make sure the paths and ARCH suffix are set correctly, run with --help for more info 7619 See \`config.log' for more details" "$LINENO" 5 7627 See \`config.log' for more details" "$LINENO" 5; } 7620 7628 fi 7621 7629 rm -f core conftest.err conftest.$ac_objext \ … … 7673 7681 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 7674 7682 as_fn_error $? "Unable to find to find built binaries under $IPPSAMPLES/speech-codecs/{bin,_bin}. Have you built the IPP samples? 7675 See \`config.log' for more details" "$LINENO" 5 7683 See \`config.log' for more details" "$LINENO" 5; } 7676 7684 fi 7677 7685 else … … 7679 7687 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 7680 7688 as_fn_error $? "unable to find $IPPSAMPLES/speech-codecs/bin/*gcc*/lib or $IPPSAMPLES/speech-codecs/_bin/*gcc*/lib directory. Have you built the samples? 7681 See \`config.log' for more details" "$LINENO" 5 7689 See \`config.log' for more details" "$LINENO" 5; } 7682 7690 fi 7683 7691 … … 7687 7695 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 7688 7696 as_fn_error $? "There's something wrong with this script, directory $IPPSAMP_DIR does not exist 7689 See \`config.log' for more details" "$LINENO" 5 7697 See \`config.log' for more details" "$LINENO" 5; } 7690 7698 exit 1; 7691 7699 fi … … 7701 7709 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 7702 7710 as_fn_error $? "bug in this script: unsupported IPP version 7703 See \`config.log' for more details" "$LINENO" 5 7711 See \`config.log' for more details" "$LINENO" 5; } 7704 7712 fi 7705 7713 … … 7708 7716 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 7709 7717 as_fn_error $? "$IPPSAMP_LIBS doesn't exist in $IPPSAMP_DIR 7710 See \`config.log' for more details" "$LINENO" 5 7718 See \`config.log' for more details" "$LINENO" 5; } 7711 7719 fi 7712 7720 … … 7744 7752 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} 7745 7753 as_fn_error $? "no 7746 See \`config.log' for more details" "$LINENO" 5 7754 See \`config.log' for more details" "$LINENO" 5; } 7747 7755 fi 7748 7756 rm -f core conftest.err conftest.$ac_objext \ … … 7789 7797 7790 7798 ac_ssl_has_aes_gcm=0 7791 7792 ac_ssl_has_ec=07793 7794 ac_ssl_has_sigalg=07795 7799 7796 7800 # Check whether --enable-ssl was given. … … 7955 7959 $as_echo "OpenSSL AES GCM support not found, SRTP will only support AES CM cryptos" >&6; } 7956 7960 fi 7957 7958 # Check if OpenSSL supports setting curve algorithm7959 # and has elliptic curve7960 7961 { $as_echo "$as_me:${as_lineno-$LINENO}: checking OpenSSL setting curve functions" >&57962 $as_echo_n "checking OpenSSL setting curve functions... " >&6; }7963 set_curve_present=07964 7965 ec_curve_present=07966 7967 cat confdefs.h - <<_ACEOF >conftest.$ac_ext7968 /* end confdefs.h. */7969 #include <openssl/ssl.h>7970 7971 int7972 main ()7973 {7974 SSL_set1_curves(NULL, NULL, 0);7975 7976 ;7977 return 0;7978 }7979 _ACEOF7980 if ac_fn_c_try_link "$LINENO"; then :7981 set_curve_present=17982 { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&57983 $as_echo "ok" >&6; }7984 7985 else7986 7987 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&57988 $as_echo "no" >&6; }7989 7990 fi7991 rm -f core conftest.err conftest.$ac_objext \7992 conftest$ac_exeext conftest.$ac_ext7993 7994 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EC_curve_nid2nist in -lssl" >&57995 $as_echo_n "checking for EC_curve_nid2nist in -lssl... " >&6; }7996 if ${ac_cv_lib_ssl_EC_curve_nid2nist+:} false; then :7997 $as_echo_n "(cached) " >&67998 else7999 ac_check_lib_save_LIBS=$LIBS8000 LIBS="-lssl $LIBS"8001 cat confdefs.h - <<_ACEOF >conftest.$ac_ext8002 /* end confdefs.h. */8003 8004 /* Override any GCC internal prototype to avoid an error.8005 Use char because int might match the return type of a GCC8006 builtin and then its argument prototype would still apply. */8007 #ifdef __cplusplus8008 extern "C"8009 #endif8010 char EC_curve_nid2nist ();8011 int8012 main ()8013 {8014 return EC_curve_nid2nist ();8015 ;8016 return 0;8017 }8018 _ACEOF8019 if ac_fn_c_try_link "$LINENO"; then :8020 ac_cv_lib_ssl_EC_curve_nid2nist=yes8021 else8022 ac_cv_lib_ssl_EC_curve_nid2nist=no8023 fi8024 rm -f core conftest.err conftest.$ac_objext \8025 conftest$ac_exeext conftest.$ac_ext8026 LIBS=$ac_check_lib_save_LIBS8027 fi8028 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ssl_EC_curve_nid2nist" >&58029 $as_echo "$ac_cv_lib_ssl_EC_curve_nid2nist" >&6; }8030 if test "x$ac_cv_lib_ssl_EC_curve_nid2nist" = xyes; then :8031 ec_curve_present=18032 fi8033 8034 if test "x$set_curve_present" = "x1" -a "x$ec_curve_present" = "x1"; then8035 ac_ssl_has_ec=18036 { $as_echo "$as_me:${as_lineno-$LINENO}: result: OpenSSL has elliptic curve support" >&58037 $as_echo "OpenSSL has elliptic curve support" >&6; }8038 else8039 { $as_echo "$as_me:${as_lineno-$LINENO}: result: OpenSSL elliptic curve algorithm unsupported" >&58040 $as_echo "OpenSSL elliptic curve algorithm unsupported" >&6; }8041 fi8042 8043 { $as_echo "$as_me:${as_lineno-$LINENO}: checking OpenSSL setting sigalg" >&58044 $as_echo_n "checking OpenSSL setting sigalg... " >&6; }8045 cat confdefs.h - <<_ACEOF >conftest.$ac_ext8046 /* end confdefs.h. */8047 #include <openssl/ssl.h>8048 8049 int8050 main ()8051 {8052 SSL_set1_sigalgs_list(NULL, NULL);8053 8054 ;8055 return 0;8056 }8057 _ACEOF8058 if ac_fn_c_try_link "$LINENO"; then :8059 ac_ssl_has_sigalg=18060 { $as_echo "$as_me:${as_lineno-$LINENO}: result: ok" >&58061 $as_echo "ok" >&6; }8062 8063 else8064 8065 { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&58066 $as_echo "no" >&6; }8067 8068 fi8069 rm -f core conftest.err conftest.$ac_objext \8070 conftest$ac_exeext conftest.$ac_ext8071 7961 8072 7962 # PJSIP_HAS_TLS_TRANSPORT setting follows PJ_HAS_SSL_SOCK … … 9400 9290 "third_party/build/os-auto.mak") CONFIG_FILES="$CONFIG_FILES third_party/build/os-auto.mak" ;; 9401 9291 9402 *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5 9292 *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; 9403 9293 esac 9404 9294 done … … 9717 9607 case $ac_mode$ac_tag in 9718 9608 :[FHL]*:*);; 9719 :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5 9609 :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;; 9720 9610 :[FH]-) ac_tag=-:-;; 9721 9611 :[FH]*) ac_tag=$ac_tag:$ac_tag.in;; … … 9745 9635 *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";; 9746 9636 esac || 9747 as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5 9637 as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;; 9748 9638 esac 9749 9639 case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac … … 9772 9662 case $ac_tag in 9773 9663 *:-:* | *:-) cat >"$ac_tmp/stdin" \ 9774 || as_fn_error $? "could not create $ac_file" "$LINENO" 5 9664 || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;; 9775 9665 esac 9776 9666 ;; -
pjproject/branches/projects/uwp/aconfigure.ac
r5513 r5532 1534 1534 AC_SUBST(ac_no_ssl) 1535 1535 AC_SUBST(ac_ssl_has_aes_gcm,0) 1536 AC_SUBST(ac_ssl_has_ec,0)1537 AC_SUBST(ac_ssl_has_sigalg,0)1538 1536 AC_ARG_ENABLE(ssl, 1539 1537 AS_HELP_STRING([--disable-ssl], … … 1570 1568 AC_MSG_RESULT([OpenSSL AES GCM support not found, SRTP will only support AES CM cryptos]) 1571 1569 fi 1572 1573 # Check if OpenSSL supports setting curve algorithm1574 # and has elliptic curve1575 1576 AC_MSG_CHECKING([OpenSSL setting curve functions])1577 AC_SUBST(set_curve_present,0)1578 AC_SUBST(ec_curve_present,0)1579 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <openssl/ssl.h>1580 ]],1581 [ SSL_set1_curves(NULL, NULL, 0);]1582 )],1583 [ set_curve_present=11584 AC_MSG_RESULT(ok)1585 ],1586 [1587 AC_MSG_RESULT(no)1588 ])1589 1590 AC_CHECK_LIB(ssl,EC_curve_nid2nist,[ec_curve_present=1])1591 if test "x$set_curve_present" = "x1" -a "x$ec_curve_present" = "x1"; then1592 [ac_ssl_has_ec=1]1593 AC_MSG_RESULT([OpenSSL has elliptic curve support])1594 else1595 AC_MSG_RESULT([OpenSSL elliptic curve algorithm unsupported])1596 fi1597 1598 AC_MSG_CHECKING([OpenSSL setting sigalg])1599 AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <openssl/ssl.h>1600 ]],1601 [SSL_set1_sigalgs_list(NULL, NULL);]1602 )],1603 [ ac_ssl_has_sigalg=11604 AC_MSG_RESULT(ok)1605 ],1606 [1607 AC_MSG_RESULT(no)1608 ])1609 1570 1610 1571 # PJSIP_HAS_TLS_TRANSPORT setting follows PJ_HAS_SSL_SOCK -
pjproject/branches/projects/uwp/pjlib/build/os-auto.mak.in
r5513 r5532 33 33 export TARGETS = $(PJLIB_LIB) $(PJLIB_SONAME) 34 34 export TARGETS_EXE = $(TEST_EXE) 35 36 ifeq (@ac_ssl_has_ec@,1)37 export PJLIB_CFLAGS += -DPJ_SSL_SOCK_OSSL_HAS_EC=138 endif39 40 ifeq (@ac_ssl_has_sigalg@,1)41 export PJLIB_CFLAGS += -DPJ_SSL_SOCK_OSSL_HAS_SIGALG=142 endif -
pjproject/branches/projects/uwp/pjlib/include/pj/config_site_sample.h
r5513 r5532 393 393 #define PJMEDIA_CODEC_SPEEX_DEFAULT_QUALITY 5 394 394 395 /* Increase number of video device's supported formats */396 #define PJMEDIA_VID_DEV_INFO_FMT_CNT 128397 398 395 /* 399 396 * PJSIP settings. -
pjproject/branches/projects/uwp/pjlib/include/pj/string.h
r5513 r5532 475 475 } 476 476 477 478 /** 479 * Find the first index of character, in a string, that does not belong to a 480 * set of characters. 481 * 482 * @param str The string. 483 * @param set_char The string containing the set of characters. 484 * 485 * @return the index of the first character in the str that doesn't belong to 486 * set_char. If str starts with a character not in set_char, return 0. 487 */ 488 PJ_DECL(pj_ssize_t) pj_strspn(const pj_str_t *str, const pj_str_t *set_char); 489 490 491 /** 492 * Find the first index of character, in a string, that does not belong to a 493 * set of characters. 494 * 495 * @param str The string. 496 * @param set_char The string containing the set of characters. 497 * 498 * @return the index of the first character in the str that doesn't belong to 499 * set_char. If str starts with a character not in set_char, return 0. 500 */ 501 PJ_DECL(pj_ssize_t) pj_strspn2(const pj_str_t *str, const char *set_char); 502 503 504 /** 505 * Find the first index of character, in a string, that belong to a set of 506 * characters. 507 * 508 * @param str The string. 509 * @param set_char The string containing the set of characters. 510 * 511 * @return the index of the first character in the str that belong to 512 * set_char. If no match is found, return the length of str. 513 */ 514 PJ_DECL(pj_ssize_t) pj_strcspn(const pj_str_t *str, const pj_str_t *set_char); 515 516 517 /** 518 * Find the first index of character, in a string, that belong to a set of 519 * characters. 520 * 521 * @param str The string. 522 * @param set_char The string containing the set of characters. 523 * 524 * @return the index of the first character in the str that belong to 525 * set_char. If no match is found, return the length of str. 526 */ 527 PJ_DECL(pj_ssize_t) pj_strcspn2(const pj_str_t *str, const char *set_char); 528 529 530 /** 531 * Find tokens from a string using the delimiter. 532 * 533 * @param str The string. 534 * @param delim The string containing the delimiter. It might contain 535 * multiple character treated as unique set. If same character 536 * was found on the set, it will be skipped. 537 * @param tok The string containing the token. 538 * @param start_idx The search will start from this index. 539 * 540 * @return the index of token from the str, or the length of the str 541 * if the token is not found. 542 */ 543 PJ_DECL(pj_ssize_t) pj_strtok(const pj_str_t *str, const pj_str_t *delim, 544 pj_str_t *tok, pj_size_t start_idx); 545 546 547 /** 548 * Find tokens from a string using the delimiter. 549 * 550 * @param str The string. 551 * @param delim The string containing the delimiter. It might contain 552 * multiple character treated as unique set. If same character 553 * was found on the set, it will be skipped. 554 * @param tok The string containing the token. 555 * @param start_idx The search will start from this index. 556 * 557 * @return the index of token from the str, or the length of the str 558 * if the token is not found. 559 */ 560 PJ_DECL(pj_ssize_t) pj_strtok2(const pj_str_t *str, const char *delim, 561 pj_str_t *tok, pj_size_t start_idx); 562 563 477 564 /** 478 565 * Find the occurence of a substring substr in string str. -
pjproject/branches/projects/uwp/pjlib/src/pj/os_info.c
r5515 r5532 99 99 100 100 static pj_uint32_t parse_version(char *str) 101 { 102 char *tok; 103 int i, maxtok; 101 { 102 int i, maxtok, found_idx; 104 103 pj_uint32_t version = 0; 104 pj_str_t in_str = pj_str(str); 105 pj_str_t token, delim; 105 106 106 107 while (*str && !pj_isdigit(*str)) … … 108 109 109 110 maxtok = 4; 110 for (tok = strtok(str, ".-"), i=0; tok && i<maxtok; 111 ++i, tok=strtok(NULL, ".-")) 111 delim = pj_str(".-"); 112 for (found_idx = pj_strtok(&in_str, &delim, &token, 0), i=0; 113 found_idx != in_str.slen && i < maxtok; 114 ++i, found_idx = pj_strtok(&in_str, &delim, &token, 115 found_idx + token.slen)) 112 116 { 113 117 int n; 114 118 115 if (!pj_isdigit(*tok ))116 break; 117 118 n = atoi(tok );119 if (!pj_isdigit(*token.ptr)) 120 break; 121 122 n = atoi(token.ptr); 119 123 version |= (n << ((3-i)*8)); 120 124 } -
pjproject/branches/projects/uwp/pjlib/src/pj/ssl_sock_ossl.c
r5513 r5532 52 52 #include <openssl/rand.h> 53 53 #include <openssl/engine.h> 54 55 #if defined(PJ_SSL_SOCK_OSSL_HAS_EC) && PJ_SSL_SOCK_OSSL_HAS_EC==1 56 extern int tls1_ec_nid2curve_id(int nid); 57 extern int tls1_ec_curve_id2nid(int curve_id); 54 #include <openssl/opensslconf.h> 55 56 #if !defined(OPENSSL_NO_EC) && OPENSSL_VERSION_NUMBER >= 0x1000200fL 57 58 # include <openssl/obj_mac.h> 59 60 static const unsigned nid_cid_map[] = { 61 NID_sect163k1, /* sect163k1 (1) */ 62 NID_sect163r1, /* sect163r1 (2) */ 63 NID_sect163r2, /* sect163r2 (3) */ 64 NID_sect193r1, /* sect193r1 (4) */ 65 NID_sect193r2, /* sect193r2 (5) */ 66 NID_sect233k1, /* sect233k1 (6) */ 67 NID_sect233r1, /* sect233r1 (7) */ 68 NID_sect239k1, /* sect239k1 (8) */ 69 NID_sect283k1, /* sect283k1 (9) */ 70 NID_sect283r1, /* sect283r1 (10) */ 71 NID_sect409k1, /* sect409k1 (11) */ 72 NID_sect409r1, /* sect409r1 (12) */ 73 NID_sect571k1, /* sect571k1 (13) */ 74 NID_sect571r1, /* sect571r1 (14) */ 75 NID_secp160k1, /* secp160k1 (15) */ 76 NID_secp160r1, /* secp160r1 (16) */ 77 NID_secp160r2, /* secp160r2 (17) */ 78 NID_secp192k1, /* secp192k1 (18) */ 79 NID_X9_62_prime192v1, /* secp192r1 (19) */ 80 NID_secp224k1, /* secp224k1 (20) */ 81 NID_secp224r1, /* secp224r1 (21) */ 82 NID_secp256k1, /* secp256k1 (22) */ 83 NID_X9_62_prime256v1, /* secp256r1 (23) */ 84 NID_secp384r1, /* secp384r1 (24) */ 85 NID_secp521r1, /* secp521r1 (25) */ 86 NID_brainpoolP256r1, /* brainpoolP256r1 (26) */ 87 NID_brainpoolP384r1, /* brainpoolP384r1 (27) */ 88 NID_brainpoolP512r1 /* brainpoolP512r1 (28) */ 89 }; 90 91 static unsigned get_cid_from_nid(unsigned nid) 92 { 93 unsigned i, cid = 0; 94 for (i=0; i<PJ_ARRAY_SIZE(nid_cid_map); ++i) { 95 if (nid == nid_cid_map[i]) { 96 cid = i+1; 97 break; 98 } 99 } 100 return cid; 101 }; 102 103 static unsigned get_nid_from_cid(unsigned cid) 104 { 105 if ((cid == 0) || (cid > PJ_ARRAY_SIZE(nid_cid_map))) 106 return 0; 107 108 return nid_cid_map[cid-1]; 109 } 110 58 111 #endif 59 112 … … 386 439 ssl->session = SSL_SESSION_new(); 387 440 388 #if defined(PJ_SSL_SOCK_OSSL_HAS_EC) && PJ_SSL_SOCK_OSSL_HAS_EC==1441 #if !defined(OPENSSL_NO_EC) && OPENSSL_VERSION_NUMBER >= 0x1000200fL 389 442 openssl_curves_num = SSL_get_shared_curve(ssl,-1); 390 443 if (openssl_curves_num > PJ_ARRAY_SIZE(openssl_curves)) … … 403 456 } 404 457 405 openssl_curves[i].id = tls1_ec_nid2curve_id(nid);458 openssl_curves[i].id = get_cid_from_nid(nid); 406 459 openssl_curves[i].name = cname; 407 460 } … … 1002 1055 static pj_status_t set_curves_list(pj_ssl_sock_t *ssock) 1003 1056 { 1004 #if defined(PJ_SSL_SOCK_OSSL_HAS_EC) && PJ_SSL_SOCK_OSSL_HAS_EC==11057 #if !defined(OPENSSL_NO_EC) && OPENSSL_VERSION_NUMBER >= 0x1000200fL 1005 1058 int ret; 1006 1059 int curves[PJ_SSL_SOCK_MAX_CURVES]; 1007 intcnt;1060 unsigned cnt; 1008 1061 1009 1062 if (ssock->param.curves_num == 0) … … 1011 1064 1012 1065 for (cnt = 0; cnt < ssock->param.curves_num; cnt++) { 1013 curves[cnt] = tls1_ec_curve_id2nid(ssock->param.curves[cnt]);1066 curves[cnt] = get_nid_from_cid(ssock->param.curves[cnt]); 1014 1067 } 1015 1068 … … 1028 1081 PJ_UNUSED_ARG(ssock); 1029 1082 #endif 1030 1031 1083 return PJ_SUCCESS; 1032 1084 } … … 1034 1086 static pj_status_t set_sigalgs(pj_ssl_sock_t *ssock) 1035 1087 { 1036 #if defined(PJ_SSL_SOCK_OSSL_HAS_SIGALG) && PJ_SSL_SOCK_OSSL_HAS_SIGALG==11088 #if OPENSSL_VERSION_NUMBER >= 0x1000200fL 1037 1089 int ret; 1038 1090 … … 1052 1104 PJ_UNUSED_ARG(ssock); 1053 1105 #endif 1054 1055 1106 return PJ_SUCCESS; 1056 1107 } -
pjproject/branches/projects/uwp/pjlib/src/pj/string.c
r4704 r5532 29 29 #endif 30 30 31 PJ_DEF(pj_ssize_t) pj_strspn(const pj_str_t *str, const pj_str_t *set_char) 32 { 33 pj_ssize_t i, j, count = 0; 34 for (i = 0; i < str->slen; i++) { 35 if (count != i) 36 break; 37 38 for (j = 0; j < set_char->slen; j++) { 39 if (str->ptr[i] == set_char->ptr[j]) 40 count++; 41 } 42 } 43 return count; 44 } 45 46 47 PJ_DEF(pj_ssize_t) pj_strspn2(const pj_str_t *str, const char *set_char) 48 { 49 pj_ssize_t i, j, count = 0; 50 for (i = 0; i < str->slen; i++) { 51 if (count != i) 52 break; 53 54 for (j = 0; set_char[j] != 0; j++) { 55 if (str->ptr[i] == set_char[j]) 56 count++; 57 } 58 } 59 return count; 60 } 61 62 63 PJ_DEF(pj_ssize_t) pj_strcspn(const pj_str_t *str, const pj_str_t *set_char) 64 { 65 pj_ssize_t i, j; 66 for (i = 0; i < str->slen; i++) { 67 for (j = 0; j < set_char->slen; j++) { 68 if (str->ptr[i] == set_char->ptr[j]) 69 return i; 70 } 71 } 72 return i; 73 } 74 75 76 PJ_DECL(pj_ssize_t) pj_strcspn2(const pj_str_t *str, const char *set_char) 77 { 78 pj_ssize_t i, j; 79 for (i = 0; i < str->slen; i++) { 80 for (j = 0; set_char[j] != 0; j++) { 81 if (str->ptr[i] == set_char[j]) 82 return i; 83 } 84 } 85 return i; 86 } 87 88 89 PJ_DEF(pj_ssize_t) pj_strtok(const pj_str_t *str, const pj_str_t *delim, 90 pj_str_t *tok, pj_size_t start_idx) 91 { 92 pj_ssize_t str_idx; 93 94 tok->slen = 0; 95 if ((str->slen == 0) || ((pj_size_t)str->slen < start_idx)) { 96 return str->slen; 97 } 98 99 tok->ptr = str->ptr + start_idx; 100 tok->slen = str->slen - start_idx; 101 102 str_idx = pj_strspn(tok, delim); 103 if (start_idx+str_idx == (pj_size_t)str->slen) { 104 return str->slen; 105 } 106 tok->ptr += str_idx; 107 tok->slen -= str_idx; 108 109 tok->slen = pj_strcspn(tok, delim); 110 return start_idx + str_idx; 111 } 112 113 114 PJ_DECL(pj_ssize_t) pj_strtok2(const pj_str_t *str, const char *delim, 115 pj_str_t *tok, pj_size_t start_idx) 116 { 117 pj_ssize_t str_idx; 118 119 tok->slen = 0; 120 if ((str->slen == 0) || ((pj_size_t)str->slen < start_idx)) { 121 return str->slen; 122 } 123 124 tok->ptr = str->ptr + start_idx; 125 tok->slen = str->slen - start_idx; 126 127 str_idx = pj_strspn2(tok, delim); 128 if (start_idx + str_idx == (pj_size_t)str->slen) { 129 return str->slen; 130 } 131 tok->ptr += str_idx; 132 tok->slen -= str_idx; 133 134 tok->slen = pj_strcspn2(tok, delim); 135 return start_idx + str_idx; 136 } 137 31 138 32 139 PJ_DEF(char*) pj_strstr(const pj_str_t *str, const pj_str_t *substr) -
pjproject/branches/projects/uwp/pjmedia/include/pjmedia-videodev/config.h
r5513 r5532 46 46 * supported by a video device. 47 47 * 48 * Default: 6448 * Default: 128 (for Android), 64 (for others) 49 49 */ 50 50 #ifndef PJMEDIA_VID_DEV_INFO_FMT_CNT 51 # define PJMEDIA_VID_DEV_INFO_FMT_CNT 64 51 # if defined(PJ_ANDROID) && PJ_ANDROID != 0 52 # define PJMEDIA_VID_DEV_INFO_FMT_CNT 128 53 # else 54 # define PJMEDIA_VID_DEV_INFO_FMT_CNT 64 55 # endif 52 56 #endif 53 57 -
pjproject/branches/projects/uwp/pjmedia/src/pjmedia/transport_ice.c
r5513 r5532 672 672 pj_ice_sess_cand *cand) 673 673 { 674 pj_str_t input; 675 char *token, *host; 676 int af; 677 pj_str_t s; 674 pj_str_t token, delim, host; 675 int af, found_idx; 678 676 pj_status_t status = PJNATH_EICEINCANDSDP; 679 677 680 678 pj_bzero(cand, sizeof(*cand)); 681 pj_strdup_with_null(pool, &input, orig_input);682 679 683 680 PJ_UNUSED_ARG(obj_name); 684 681 685 682 /* Foundation */ 686 token = strtok(input.ptr, " "); 687 if (!token) { 683 delim = pj_str(" "); 684 found_idx = pj_strtok(orig_input, &delim, &token, 0); 685 if (found_idx == orig_input->slen) { 688 686 TRACE__((obj_name, "Expecting ICE foundation in candidate")); 689 687 goto on_return; 690 688 } 691 pj_strdup 2(pool, &cand->foundation,token);689 pj_strdup(pool, &cand->foundation, &token); 692 690 693 691 /* Component ID */ 694 token = strtok(NULL, " ");695 if ( !token) {692 found_idx = pj_strtok(orig_input, &delim, &token, found_idx + token.slen); 693 if (found_idx == orig_input->slen) { 696 694 TRACE__((obj_name, "Expecting ICE component ID in candidate")); 697 695 goto on_return; 698 696 } 699 cand->comp_id = (pj_uint8_t) atoi(token);697 cand->comp_id = (pj_uint8_t)pj_strtoul(&token); 700 698 701 699 /* Transport */ 702 token = strtok(NULL, " ");703 if ( !token) {700 found_idx = pj_strtok(orig_input, &delim, &token, found_idx + token.slen); 701 if (found_idx == orig_input->slen) { 704 702 TRACE__((obj_name, "Expecting ICE transport in candidate")); 705 703 goto on_return; 706 704 } 707 if (pj_ ansi_stricmp(token, "UDP") != 0) {705 if (pj_stricmp2(&token, "UDP") != 0) { 708 706 TRACE__((obj_name, 709 707 "Expecting ICE UDP transport only in candidate")); … … 712 710 713 711 /* Priority */ 714 token = strtok(NULL, " ");715 if ( !token) {712 found_idx = pj_strtok(orig_input, &delim, &token, found_idx + token.slen); 713 if (found_idx == orig_input->slen) { 716 714 TRACE__((obj_name, "Expecting ICE priority in candidate")); 717 715 goto on_return; 718 716 } 719 cand->prio = atoi(token);717 cand->prio = pj_strtoul(&token); 720 718 721 719 /* Host */ 722 host = strtok(NULL, " ");723 if ( !host) {720 found_idx = pj_strtok(orig_input, &delim, &host, found_idx + token.slen); 721 if (found_idx == orig_input->slen) { 724 722 TRACE__((obj_name, "Expecting ICE host in candidate")); 725 723 goto on_return; 726 724 } 727 725 /* Detect address family */ 728 if (pj_ ansi_strchr(host, ':'))726 if (pj_strchr(&host, ':')) 729 727 af = pj_AF_INET6(); 730 728 else 731 729 af = pj_AF_INET(); 732 730 /* Assign address */ 733 if (pj_sockaddr_init(af, &cand->addr, pj_cstr(&s, host), 0)) {731 if (pj_sockaddr_init(af, &cand->addr, &host, 0)) { 734 732 TRACE__((obj_name, "Invalid ICE candidate address")); 735 733 goto on_return; … … 737 735 738 736 /* Port */ 739 token = strtok(NULL, " ");740 if ( !token) {737 found_idx = pj_strtok(orig_input, &delim, &token, found_idx + host.slen); 738 if (found_idx == orig_input->slen) { 741 739 TRACE__((obj_name, "Expecting ICE port number in candidate")); 742 740 goto on_return; 743 741 } 744 pj_sockaddr_set_port(&cand->addr, (pj_uint16_t) atoi(token));742 pj_sockaddr_set_port(&cand->addr, (pj_uint16_t)pj_strtoul(&token)); 745 743 746 744 /* typ */ 747 token = strtok(NULL, " ");748 if ( !token) {745 found_idx = pj_strtok(orig_input, &delim, &token, found_idx + token.slen); 746 if (found_idx == orig_input->slen) { 749 747 TRACE__((obj_name, "Expecting ICE \"typ\" in candidate")); 750 748 goto on_return; 751 749 } 752 if (pj_ ansi_stricmp(token, "typ") != 0) {750 if (pj_stricmp2(&token, "typ") != 0) { 753 751 TRACE__((obj_name, "Expecting ICE \"typ\" in candidate")); 754 752 goto on_return; … … 756 754 757 755 /* candidate type */ 758 token = strtok(NULL, " ");759 if ( !token) {756 found_idx = pj_strtok(orig_input, &delim, &token, found_idx + token.slen); 757 if (found_idx == orig_input->slen) { 760 758 TRACE__((obj_name, "Expecting ICE candidate type in candidate")); 761 759 goto on_return; 762 760 } 763 761 764 if (pj_ ansi_stricmp(token, "host") == 0) {762 if (pj_stricmp2(&token, "host") == 0) { 765 763 cand->type = PJ_ICE_CAND_TYPE_HOST; 766 764 767 } else if (pj_ ansi_stricmp(token, "srflx") == 0) {765 } else if (pj_stricmp2(&token, "srflx") == 0) { 768 766 cand->type = PJ_ICE_CAND_TYPE_SRFLX; 769 767 770 } else if (pj_ ansi_stricmp(token, "relay") == 0) {768 } else if (pj_stricmp2(&token, "relay") == 0) { 771 769 cand->type = PJ_ICE_CAND_TYPE_RELAYED; 772 770 773 } else if (pj_ ansi_stricmp(token, "prflx") == 0) {771 } else if (pj_stricmp2(&token, "prflx") == 0) { 774 772 cand->type = PJ_ICE_CAND_TYPE_PRFLX; 775 773 776 774 } else { 777 PJ_LOG(5,(obj_name, "Invalid ICE candidate type % s in candidate",778 token ));775 PJ_LOG(5,(obj_name, "Invalid ICE candidate type %.*s in candidate", 776 token.slen, token.ptr)); 779 777 goto on_return; 780 778 } … … 1839 1837 tp_ice = (struct transport_ice*) pj_ice_strans_get_user_data(ice_st); 1840 1838 1839 pj_perror(5, tp_ice->base.name, result, "ICE operation complete" 1840 " (op=%d%s)", op, 1841 (op==PJ_ICE_STRANS_OP_INIT? "/initialization" : 1842 (op==PJ_ICE_STRANS_OP_NEGOTIATION? "/negotiation":""))); 1843 1841 1844 /* Notify application */ 1842 1845 if (tp_ice->cb.on_ice_complete) -
pjproject/branches/projects/uwp/pjmedia/src/pjmedia/transport_srtp.c
r5513 r5532 1217 1217 int *tag) 1218 1218 { 1219 pj_str_t input; 1220 char *token; 1221 pj_str_t tmp; 1219 pj_str_t token, delim; 1222 1220 pj_status_t status; 1223 int itmp, token_len;1221 int itmp, found_idx; 1224 1222 1225 1223 pj_bzero(crypto, sizeof(*crypto)); 1226 pj_strdup_with_null(pool, &input, &attr->value);1227 1224 1228 1225 /* Tag */ 1229 token = strtok(input.ptr, " "); 1230 if (!token) { 1226 delim = pj_str(" "); 1227 found_idx = pj_strtok(&attr->value, &delim, &token, 0); 1228 if (found_idx == attr->value.slen) { 1231 1229 PJ_LOG(4,(THIS_FILE, "Attribute crypto expecting tag")); 1232 1230 return PJMEDIA_SDP_EINATTR; 1233 1231 } 1234 token_len = pj_ansi_strlen(token);1235 1232 1236 1233 /* Tag must not use leading zeroes. */ 1237 if (token _len > 1 && *token== '0')1234 if (token.slen > 1 && *token.ptr == '0') 1238 1235 return PJMEDIA_SDP_EINATTR; 1239 1236 1240 1237 /* Tag must be decimal, i.e: contains only digit '0'-'9'. */ 1241 for (itmp = 0; itmp < token _len; ++itmp)1242 if (!pj_isdigit(token [itmp]))1238 for (itmp = 0; itmp < token.slen; ++itmp) 1239 if (!pj_isdigit(token.ptr[itmp])) 1243 1240 return PJMEDIA_SDP_EINATTR; 1244 1241 1245 1242 /* Get tag value. */ 1246 *tag = atoi(token);1243 *tag = pj_strtoul(&token); 1247 1244 1248 1245 /* Crypto-suite */ 1249 token = strtok(NULL, " ");1250 if ( !token) {1246 found_idx = pj_strtok(&attr->value, &delim, &token, found_idx+token.slen); 1247 if (found_idx == attr->value.slen) { 1251 1248 PJ_LOG(4,(THIS_FILE, "Attribute crypto expecting crypto suite")); 1252 1249 return PJMEDIA_SDP_EINATTR; 1253 1250 } 1254 crypto->name = pj_str(token);1251 crypto->name = token; 1255 1252 1256 1253 /* Key method */ 1257 token = strtok(NULL, ":"); 1258 if (!token) { 1254 delim = pj_str(": "); 1255 found_idx = pj_strtok(&attr->value, &delim, &token, found_idx+token.slen); 1256 if (found_idx == attr->value.slen) { 1259 1257 PJ_LOG(4,(THIS_FILE, "Attribute crypto expecting key method")); 1260 1258 return PJMEDIA_SDP_EINATTR; 1261 1259 } 1262 if (pj_ ansi_stricmp(token, "inline")) {1263 PJ_LOG(4,(THIS_FILE, "Attribute crypto key method '% s' not supported!",1264 token));1260 if (pj_stricmp2(&token, "inline")) { 1261 PJ_LOG(4,(THIS_FILE, "Attribute crypto key method '%.*s' " 1262 "not supported!", token.slen, token.ptr)); 1265 1263 return PJMEDIA_SDP_EINATTR; 1266 1264 } 1267 1265 1268 /* Key */ 1269 token = strtok(NULL, "| "); 1270 if (!token) { 1266 /* Key */ 1267 delim = pj_str("| "); 1268 found_idx = pj_strtok(&attr->value, &delim, &token, found_idx+token.slen); 1269 if (found_idx == attr->value.slen) { 1271 1270 PJ_LOG(4,(THIS_FILE, "Attribute crypto expecting key")); 1272 1271 return PJMEDIA_SDP_EINATTR; 1273 1272 } 1274 tmp = pj_str(token);1275 if (PJ_BASE64_TO_BASE256_LEN(t mp.slen) > MAX_KEY_LEN) {1273 1274 if (PJ_BASE64_TO_BASE256_LEN(token.slen) > MAX_KEY_LEN) { 1276 1275 PJ_LOG(4,(THIS_FILE, "Key too long")); 1277 1276 return PJMEDIA_SRTP_EINKEYLEN; … … 1281 1280 crypto->key.ptr = (char*) pj_pool_zalloc(pool, MAX_KEY_LEN); 1282 1281 itmp = MAX_KEY_LEN; 1283 status = pj_base64_decode(&t mp, (pj_uint8_t*)crypto->key.ptr,1282 status = pj_base64_decode(&token, (pj_uint8_t*)crypto->key.ptr, 1284 1283 &itmp); 1285 1284 if (status != PJ_SUCCESS) { -
pjproject/branches/projects/uwp/pjmedia/src/pjmedia/vid_stream.c
r5513 r5532 823 823 unsigned pkt_cnt = 0; 824 824 pj_timestamp initial_time; 825 pj_timestamp null_ts ={ 0};825 pj_timestamp null_ts ={{0}}; 826 826 827 827 #if defined(PJMEDIA_STREAM_ENABLE_KA) && PJMEDIA_STREAM_ENABLE_KA != 0 -
pjproject/branches/projects/uwp/pjnath/include/pjnath/stun_msg.h
r3553 r5532 324 324 PJ_STUN_ATTR_XOR_RELAYED_ADDR = 0x0016,/**< TURN XOR-RELAYED-ADDRESS */ 325 325 PJ_STUN_ATTR_REQ_ADDR_TYPE = 0x0017,/**< REQUESTED-ADDRESS-TYPE */ 326 PJ_STUN_ATTR_REQ_ADDR_FAMILY = 0x0017,/**< REQUESTED-ADDRESS-FAMILY */ 326 327 PJ_STUN_ATTR_EVEN_PORT = 0x0018,/**< TURN EVEN-PORT */ 327 328 PJ_STUN_ATTR_REQ_TRANSPORT = 0x0019,/**< TURN REQUESTED-TRANSPORT */ … … 964 965 965 966 /** 966 * This describes the REQUESTED-ADDRESS-TYPE attribute. 967 * The REQUESTED-ADDRESS-TYPE attribute is used by clients to request 967 * According to RFC 6156, this describes the REQUESTED-ADDRESS-FAMILY 968 * attribute (formerly known as REQUESTED-ADDRESS-TYPE in the draft). 969 * The REQUESTED-ADDRESS-FAMILY attribute is used by clients to request 968 970 * the allocation of a specific address type from a server. The 969 * following is the format of the REQUESTED-ADDRESS- TYPEattribute.971 * following is the format of the REQUESTED-ADDRESS-FAMILY attribute. 970 972 971 973 \verbatim -
pjproject/branches/projects/uwp/pjnath/src/pjnath/ice_strans.c
r5513 r5532 377 377 cand->status = PJ_EPENDING; 378 378 cand->local_pref = RELAY_PREF; 379 cand->transport_id = CREATE_TP_ID(TP_TURN, idx);379 cand->transport_id = tp_id; 380 380 cand->comp_id = (pj_uint8_t) comp->comp_id; 381 381 } … … 414 414 415 415 PJ_LOG(4,(ice_st->obj_name, 416 "Comp %d: TURN relay candidate waiting for allocation", 417 comp->comp_id)); 416 "Comp %d/%d: TURN relay candidate (tpid=%d) " 417 "waiting for allocation", 418 comp->comp_id, comp->cand_cnt-1, cand->transport_id)); 418 419 419 420 return PJ_SUCCESS; … … 516 517 517 518 PJ_LOG(4,(ice_st->obj_name, 518 "Comp %d: srflx candidate starts Binding discovery", 519 comp->comp_id)); 519 "Comp %d: srflx candidate (tpid=%d) starts " 520 "Binding discovery", 521 comp->comp_id, cand->transport_id)); 520 522 521 523 pj_log_push_indent(); … … 623 625 if (cand_duplicate) { 624 626 PJ_LOG(4, (ice_st->obj_name, 625 "Comp %d: host candidate %s is a duplicate",627 "Comp %d: host candidate %s (tpid=%d) is a duplicate", 626 628 comp->comp_id, pj_sockaddr_print(&cand->addr, addrinfo, 627 sizeof(addrinfo), 3) ));629 sizeof(addrinfo), 3), cand->transport_id)); 628 630 629 631 pj_bzero(&cand->addr, sizeof(cand->addr)); … … 638 640 639 641 PJ_LOG(4,(ice_st->obj_name, 640 "Comp %d: host candidate %s added", 641 comp->comp_id, pj_sockaddr_print(&cand->addr, addrinfo, 642 sizeof(addrinfo), 3))); 642 "Comp %d/%d: host candidate %s (tpid=%d) added", 643 comp->comp_id, comp->cand_cnt-1, 644 pj_sockaddr_print(&cand->addr, addrinfo, 645 sizeof(addrinfo), 3), 646 cand->transport_id)); 643 647 } 644 648 } … … 941 945 * have not been created. 942 946 */ 943 if (!comp || comp->creating) return; 947 if (!comp || comp->creating) { 948 PJ_LOG(5, (ice_st->obj_name, "ICE init update: creating comp %d", 949 (comp?comp->comp_id:(i+1)) )); 950 return; 951 } 944 952 945 953 for (j=0; j<comp->cand_cnt; ++j) { 946 954 pj_ice_sess_cand *cand = &comp->cand_list[j]; 947 955 948 if (cand->status == PJ_EPENDING) 956 if (cand->status == PJ_EPENDING) { 957 PJ_LOG(5, (ice_st->obj_name, "ICE init update: " 958 "comp %d/%d[%s] is pending", 959 comp->comp_id, j, 960 pj_ice_get_cand_type_name(cand->type))); 949 961 return; 962 } 950 963 } 951 964 } … … 1957 1970 char ipaddr[PJ_INET6_ADDRSTRLEN+8]; 1958 1971 pj_ice_sess_cand *cand = NULL; 1959 unsigned i ;1972 unsigned i, cand_idx = 0xFF; 1960 1973 1961 1974 comp->turn[tp_idx].err_cnt = 0; … … 1973 1986 { 1974 1987 cand = &comp->cand_list[i]; 1988 cand_idx = i; 1975 1989 break; 1976 1990 } … … 2008 2022 2009 2023 PJ_LOG(4,(comp->ice_st->obj_name, 2010 "Comp %d: TURN allocation complete, relay address is %s", 2011 comp->comp_id, 2024 "Comp %d/%d: TURN allocation (tpid=%d) complete, " 2025 "relay address is %s", 2026 comp->comp_id, cand_idx, cand->transport_id, 2012 2027 pj_sockaddr_print(&rel_info.relay_addr, ipaddr, 2013 2028 sizeof(ipaddr), 3))); … … 2020 2035 { 2021 2036 pj_ice_sess_cand *cand = NULL; 2022 unsigned i ;2037 unsigned i, cand_idx = 0xFF; 2023 2038 2024 2039 /* DNS resolution or TURN transport creation/allocation … … 2040 2055 { 2041 2056 cand = &comp->cand_list[i]; 2057 cand_idx = i; 2042 2058 break; 2043 2059 } … … 2050 2066 * to the list. 2051 2067 */ 2052 if (cand) cand->status = PJ_ERESOLVE; 2068 if (cand) { 2069 cand->status = PJ_ERESOLVE; 2070 PJ_LOG(4,(comp->ice_st->obj_name, 2071 "Comp %d/%d: TURN resolving (tpid=%d) failed", 2072 comp->comp_id, cand_idx, cand->transport_id)); 2073 } 2053 2074 2054 2075 sess_init_update(comp->ice_st); -
pjproject/branches/projects/uwp/pjnath/src/pjnath/nat_detect.c
r5513 r5532 181 181 182 182 addr_len = pj_sockaddr_get_len(server); 183 pj_ bzero(&local, sizeof(pj_sockaddr));183 pj_sockaddr_init(server->addr.sa_family, &local, NULL, 0); 184 184 status = pj_sock_bind(sock, &local, addr_len); 185 185 if (status != PJ_SUCCESS) { … … 281 281 * Bind to any. 282 282 */ 283 pj_bzero(&sess->local_addr, sizeof(pj_sockaddr));284 283 addr_len = pj_sockaddr_get_len(server); 284 pj_sockaddr_init(server->addr.sa_family, &sess->local_addr, NULL, 0); 285 285 status = pj_sock_bind(sess->sock, &sess->local_addr, addr_len); 286 286 if (status != PJ_SUCCESS) -
pjproject/branches/projects/uwp/pjnath/src/pjnath/stun_msg.c
r4895 r5532 344 344 }, 345 345 { 346 /* PJ_STUN_ATTR_REQUESTED_ADDR_ TYPE, */347 "REQUESTED-ADDRESS- TYPE",346 /* PJ_STUN_ATTR_REQUESTED_ADDR_FAMILY, */ 347 "REQUESTED-ADDRESS-FAMILY", 348 348 &decode_uint_attr, 349 349 &encode_uint_attr, -
pjproject/branches/projects/uwp/pjnath/src/pjnath/turn_sock.c
r5513 r5532 429 429 pj_grp_lock_release(turn_sock->grp_lock); 430 430 return status; 431 } else if (!turn_sock->sess) { 432 /* TURN session may have been destroyed here, i.e: when DNS resolution 433 * completed synchronously and TURN allocation failed. 434 */ 435 PJ_LOG(4,(turn_sock->obj_name, "TURN session destroyed in setting " 436 "TURN server")); 437 pj_grp_lock_release(turn_sock->grp_lock); 438 return PJ_EGONE; 431 439 } 432 440 -
pjproject/branches/projects/uwp/pjsip-apps/src/pjsua/android/app/src/main/java/MainActivity.java
r5508 r5532 139 139 } 140 140 } 141 142 @Override 143 public void onCallVideoStart() { 144 MainActivity ma = ((MyHandler)ui_handler.get()).mTarget.get(); 145 SurfaceView surfaceView = (SurfaceView) 146 ma.findViewById(R.id.surfaceViewIncomingCall); 147 148 WindowHandle wh = new WindowHandle(); 149 wh.setWindow(surfaceView.getHolder().getSurface()); 150 pjsua.setVideoWindow(wh); 151 } 141 152 } 142 153 … … 262 273 public void surfaceChanged(SurfaceHolder holder, int format, int w, int h) 263 274 { 264 pjsua.setIncomingVideoRenderer(holder.getSurface()); 275 WindowHandle wh = new WindowHandle(); 276 wh.setWindow(holder.getSurface()); 277 pjsua.setVideoWindow(wh); 265 278 } 266 279 267 280 public void surfaceCreated(SurfaceHolder holder) 268 281 { 269 pjsua.setIncomingVideoRenderer(holder.getSurface()); 282 270 283 } 271 284 272 285 public void surfaceDestroyed(SurfaceHolder holder) 273 286 { 274 pjsua.setIncomingVideoRenderer(null); 287 WindowHandle wh = new WindowHandle(); 288 wh.setWindow(null); 289 pjsua.setVideoWindow(wh); 275 290 } 276 291 -
pjproject/branches/projects/uwp/pjsip-apps/src/pjsua/android/app/src/main/java/org/pjsip/pjsua
- Property svn:ignore
-
old new 1 1 Pjsua*.java 2 2 pjsua*.java 3 SWIG*.java 4 WindowHandle.java 5
-
- Property svn:ignore
-
pjproject/branches/projects/uwp/pjsip-apps/src/pjsua/android/jni/pjsua.i
r5513 r5532 15 15 %feature("director") PjsuaAppCallback; 16 16 17 /* Convert Surface object to ANativeWindow for setIncomingVideoRenderer()*/17 /* Convert Surface object to ANativeWindow */ 18 18 %typemap(in) jobject surface { 19 19 $1 = $input? (jobject)ANativeWindow_fromSurface(jenv, $input) : NULL; 20 20 } 21 21 22 %extend WindowHandle { 23 void setWindow(jobject surface) { $self->window = surface; } 24 } 25 22 26 %include "pjsua_app_callback.h" -
pjproject/branches/projects/uwp/pjsip-apps/src/pjsua/android/jni/pjsua_app_callback.cpp
r5030 r5532 31 31 static char **restart_argv; 32 32 static pjsua_callback pjsua_cb_orig; 33 static jobject callVideoSurface; 33 static pjsua_vid_win_id winId = PJSUA_INVALID_ID; 34 35 void setVideoWindow(const WindowHandle& win) 36 { 37 pjmedia_vid_dev_hwnd vhwnd; 38 39 vhwnd.info.window = win.window; 40 if (winId != PJSUA_INVALID_ID) 41 pjsua_vid_win_set_win(winId, &vhwnd); 42 } 34 43 35 44 extern const char *pjsua_app_def_argv[]; … … 58 67 med_info->stream.vid.win_in != PJSUA_INVALID_ID) 59 68 { 60 pjmedia_vid_dev_hwnd vhwnd; 61 62 /* Setup renderer surface */ 63 pj_bzero(&vhwnd, sizeof(vhwnd)); 64 vhwnd.type = PJMEDIA_VID_DEV_HWND_TYPE_ANDROID; 65 vhwnd.info.window = callVideoSurface; 66 pjsua_vid_win_set_win(med_info->stream.vid.win_in, &vhwnd); 69 winId = med_info->stream.vid.win_in; 70 registeredCallbackObject->onCallVideoStart(); 67 71 break; 68 72 } … … 163 167 } 164 168 165 166 void setIncomingVideoRenderer(jobject surface)167 {168 callVideoSurface = surface;169 }170 171 169 #endif -
pjproject/branches/projects/uwp/pjsip-apps/src/pjsua/android/jni/pjsua_app_callback.h
r5014 r5532 20 20 #define __PJSUA_APP_CALLBACK_H__ 21 21 22 #include <jni.h>23 24 22 class PjsuaAppCallback { 25 23 public: … … 27 25 virtual void onStarted(const char *msg) {} 28 26 virtual void onStopped(int restart) {} 27 virtual void onCallVideoStart() {} 29 28 }; 29 30 typedef struct WindowHandle { 31 void *window; 32 } WindowHandle; 33 34 void setVideoWindow(const WindowHandle& win); 30 35 31 36 extern "C" { … … 34 39 int pjsuaRestart(); 35 40 void setCallbackObject(PjsuaAppCallback* callback); 36 void setIncomingVideoRenderer(jobject surface);37 41 } 38 42 -
pjproject/branches/projects/uwp/pjsip-apps/src/swig/java/android/app/src/main/java/org/pjsip/pjsua2/app/MyApp.java
r5502 r5532 386 386 } 387 387 388 try { 389 sipTpConfig.setPort(SIP_PORT+1); 390 ep.transportCreate(pjsip_transport_type_e.PJSIP_TRANSPORT_TLS, 391 sipTpConfig); 392 } catch (Exception e) { 393 System.out.println(e); 394 } 395 396 /* Set SIP port back to default for JSON saved config */ 397 sipTpConfig.setPort(SIP_PORT); 398 388 399 /* Create accounts. */ 389 400 for (int i = 0; i < accCfgs.size(); i++) { -
pjproject/branches/projects/uwp/pjsip-apps/src/swig/symbols.i
r5513 r5532 34 34 35 35 typedef enum pj_ssl_sock_proto {PJ_SSL_SOCK_PROTO_DEFAULT = 0, PJ_SSL_SOCK_PROTO_SSL2 = 1 << 0, PJ_SSL_SOCK_PROTO_SSL3 = 1 << 1, PJ_SSL_SOCK_PROTO_TLS1 = 1 << 2, PJ_SSL_SOCK_PROTO_TLS1_1 = 1 << 3, PJ_SSL_SOCK_PROTO_TLS1_2 = 1 << 4, PJ_SSL_SOCK_PROTO_SSL23 = (1 << 16) - 1, PJ_SSL_SOCK_PROTO_DTLS1 = 1 << 16} pj_ssl_sock_proto; 36 37 typedef enum pj_ssl_cert_name_type {PJ_SSL_CERT_NAME_UNKNOWN = 0, PJ_SSL_CERT_NAME_RFC822, PJ_SSL_CERT_NAME_DNS, PJ_SSL_CERT_NAME_URI, PJ_SSL_CERT_NAME_IP} pj_ssl_cert_name_type; 38 39 typedef enum pj_ssl_cert_verify_flag_t {PJ_SSL_CERT_ESUCCESS = 0, PJ_SSL_CERT_EISSUER_NOT_FOUND = (1 << 0), PJ_SSL_CERT_EUNTRUSTED = (1 << 1), PJ_SSL_CERT_EVALIDITY_PERIOD = (1 << 2), PJ_SSL_CERT_EINVALID_FORMAT = (1 << 3), PJ_SSL_CERT_EINVALID_PURPOSE = (1 << 4), PJ_SSL_CERT_EISSUER_MISMATCH = (1 << 5), PJ_SSL_CERT_ECRL_FAILURE = (1 << 6), PJ_SSL_CERT_EREVOKED = (1 << 7), PJ_SSL_CERT_ECHAIN_TOO_LONG = (1 << 8), PJ_SSL_CERT_EIDENTITY_NOT_MATCH = (1 << 30), PJ_SSL_CERT_EUNKNOWN = (1 << 31)} pj_ssl_cert_verify_flag_t; 36 40 37 41 typedef enum pj_stun_nat_type {PJ_STUN_NAT_TYPE_UNKNOWN, PJ_STUN_NAT_TYPE_ERR_UNKNOWN, PJ_STUN_NAT_TYPE_OPEN, PJ_STUN_NAT_TYPE_BLOCKED, PJ_STUN_NAT_TYPE_SYMMETRIC_UDP, PJ_STUN_NAT_TYPE_FULL_CONE, PJ_STUN_NAT_TYPE_SYMMETRIC, PJ_STUN_NAT_TYPE_RESTRICTED, PJ_STUN_NAT_TYPE_PORT_RESTRICTED} pj_stun_nat_type; -
pjproject/branches/projects/uwp/pjsip-apps/src/swig/symbols.lst
r5513 r5532 3 3 pj/log.h pj_log_decoration 4 4 pj/sock_qos.h pj_qos_type pj_qos_flag pj_qos_wmm_prio pj_qos_params 5 pj/ssl_sock.h pj_ssl_cipher pj_ssl_sock_proto 5 pj/ssl_sock.h pj_ssl_cipher pj_ssl_sock_proto pj_ssl_cert_name_type pj_ssl_cert_verify_flag_t 6 6 7 7 pjnath/nat_detect.h pj_stun_nat_type -
pjproject/branches/projects/uwp/pjsip/include/pjsua2/endpoint.hpp
r5513 r5532 125 125 126 126 /** 127 * SSL certificate type and name structure. 128 */ 129 struct SslCertName 130 { 131 pj_ssl_cert_name_type type; /**< Name type */ 132 string name; /**< The name */ 133 }; 134 135 /** 136 * SSL certificate information. 137 */ 138 struct SslCertInfo 139 { 140 unsigned version; /**< Certificate version */ 141 unsigned char serialNo[20]; /**< Serial number, array 142 of octets, first index 143 is MSB */ 144 string subjectCn; /**< Subject common name */ 145 string subjectInfo; /**< One line subject, fields 146 are separated by slash, e.g: 147 "CN=sample.org/OU=HRD" */ 148 149 string issuerCn; /**< Issuer common name */ 150 string issuerInfo; /**< One line subject, fields 151 are separated by slash */ 152 153 TimeVal validityStart; /**< Validity start */ 154 TimeVal validityEnd; /**< Validity end */ 155 bool validityGmt; /**< Flag if validity 156 date/time use GMT */ 157 158 vector<SslCertName> subjectAltName; /**< Subject alternative 159 name extension */ 160 161 string raw; /**< Raw certificate in PEM 162 format, only available 163 for remote certificate */ 164 165 public: 166 /** 167 * Constructor. 168 */ 169 SslCertInfo(); 170 171 /** 172 * Check if the info is set with empty values. 173 * 174 * @return True if the info is empty. 175 */ 176 bool isEmpty() const; 177 178 /** 179 * Convert from pjsip 180 */ 181 void fromPj(const pj_ssl_cert_info &info); 182 183 private: 184 bool empty; 185 }; 186 187 /** 188 * TLS transport information. 189 */ 190 struct TlsInfo 191 { 192 /** 193 * Describes whether secure socket connection is established, i.e: TLS/SSL 194 * handshaking has been done successfully. 195 */ 196 bool established; 197 198 /** 199 * Describes secure socket protocol being used, see #pj_ssl_sock_proto. 200 * Use bitwise OR operation to combine the protocol type. 201 */ 202 unsigned protocol; 203 204 /** 205 * Describes cipher suite being used, this will only be set when connection 206 * is established. 207 */ 208 pj_ssl_cipher cipher; 209 210 /** 211 * Describes cipher name being used, this will only be set when connection 212 * is established. 213 */ 214 string cipherName; 215 216 /** 217 * Describes local address. 218 */ 219 SocketAddress localAddr; 220 221 /** 222 * Describes remote address. 223 */ 224 SocketAddress remoteAddr; 225 226 /** 227 * Describes active local certificate info. Use SslCertInfo.isEmpty() 228 * to check if the local cert info is available. 229 */ 230 SslCertInfo localCertInfo; 231 232 /** 233 * Describes active remote certificate info. Use SslCertInfo.isEmpty() 234 * to check if the remote cert info is available. 235 */ 236 SslCertInfo remoteCertInfo; 237 238 /** 239 * Status of peer certificate verification. 240 */ 241 unsigned verifyStatus; 242 243 /** 244 * Error messages (if any) of peer certificate verification, based on 245 * the field verifyStatus above. 246 */ 247 StringVector verifyMsgs; 248 249 public: 250 /** 251 * Constructor. 252 */ 253 TlsInfo(); 254 255 /** 256 * Check if the info is set with empty values. 257 * 258 * @return True if the info is empty. 259 */ 260 bool isEmpty() const; 261 262 /** 263 * Convert from pjsip 264 */ 265 void fromPj(const pjsip_tls_state_info &info); 266 267 private: 268 bool empty; 269 }; 270 271 /** 127 272 * Parameter of Endpoint::onTransportState() callback. 128 273 */ … … 133 278 */ 134 279 TransportHandle hnd; 280 281 /** 282 * The transport type. 283 */ 284 string type; 135 285 136 286 /** … … 143 293 */ 144 294 pj_status_t lastError; 295 296 /** 297 * TLS transport info, only used if transport type is TLS. Use 298 * TlsInfo.isEmpty() to check if this info is available. 299 */ 300 TlsInfo tlsInfo; 145 301 }; 146 302 … … 1030 1186 */ 1031 1187 void transportClose(TransportId id) throw(Error); 1188 1189 /** 1190 * Start graceful shutdown procedure for this transport handle. After 1191 * graceful shutdown has been initiated, no new reference can be 1192 * obtained for the transport. However, existing objects that currently 1193 * uses the transport may still use this transport to send and receive 1194 * packets. After all objects release their reference to this transport, 1195 * the transport will be destroyed immediately. 1196 * 1197 * Note: application normally uses this API after obtaining the handle 1198 * from onTransportState() callback. 1199 * 1200 * @param tp The transport. 1201 */ 1202 void transportShutdown(TransportHandle tp) throw(Error); 1032 1203 1033 1204 /************************************************************************* -
pjproject/branches/projects/uwp/pjsip/src/pjsip/sip_transport_udp.c
r5513 r5532 77 77 int is_closing; 78 78 pj_bool_t is_paused; 79 int read_loop_spin; 79 80 80 81 /* Group lock to be used by UDP transport and ioqueue key */ … … 130 131 pj_status_t status; 131 132 133 ++tp->read_loop_spin; 134 132 135 /* Don't do anything if transport is closing. */ 133 136 if (tp->is_closing) { 134 137 tp->is_closing++; 135 return;138 goto on_return; 136 139 } 137 140 138 141 /* Don't do anything if transport is being paused. */ 139 142 if (tp->is_paused) 140 return;143 goto on_return; 141 144 142 145 /* … … 228 231 */ 229 232 if (tp->is_paused) 230 return;233 break; 231 234 232 235 /* Read next packet. */ … … 244 247 245 248 } else if (status == PJ_EPENDING) { 249 break; 250 251 } else if (status == PJ_ECANCELLED) { 252 /* Socket is closing, quit loop */ 246 253 break; 247 254 … … 277 284 } 278 285 } 286 287 on_return: 288 --tp->read_loop_spin; 279 289 } 280 290 … … 624 634 return PJ_SUCCESS; 625 635 626 /* Create group lock */ 627 status = pj_grp_lock_create(tp->base.pool, NULL, &tp->grp_lock); 628 if (status != PJ_SUCCESS) 629 return status; 630 631 pj_grp_lock_add_ref(tp->grp_lock); 632 pj_grp_lock_add_handler(tp->grp_lock, tp->base.pool, tp, &udp_on_destroy); 636 /* Create group lock if not yet (don't need to do so on UDP restart) */ 637 if (!tp->grp_lock) { 638 status = pj_grp_lock_create(tp->base.pool, NULL, &tp->grp_lock); 639 if (status != PJ_SUCCESS) 640 return status; 641 642 pj_grp_lock_add_ref(tp->grp_lock); 643 pj_grp_lock_add_handler(tp->grp_lock, tp->base.pool, tp, 644 &udp_on_destroy); 645 } 633 646 634 647 /* Register to ioqueue. */ … … 1076 1089 tp = (struct udp_transport*) transport; 1077 1090 1091 /* Pause the transport first, so that any active read loop spin will 1092 * quit as soon as possible. 1093 */ 1094 tp->is_paused = PJ_TRUE; 1095 1078 1096 if (option & PJSIP_UDP_TRANSPORT_DESTROY_SOCKET) { 1079 1097 char addr_buf[PJ_INET6_ADDRSTRLEN]; … … 1139 1157 } 1140 1158 1159 /* Make sure all udp_on_read_complete() loop spin are stopped */ 1160 do { 1161 pj_thread_sleep(1); 1162 } while (tp->read_loop_spin); 1163 1141 1164 /* Re-register new or existing socket to ioqueue. */ 1142 1165 status = register_to_ioqueue(tp); -
pjproject/branches/projects/uwp/pjsip/src/pjsua-lib/pjsua_media.c
r5513 r5532 1742 1742 call->med_ch_mutex = NULL; 1743 1743 } 1744 1745 PJ_PERROR(5,(THIS_FILE, status, 1746 "Call %d: media transport initialization complete", call_id)); 1744 1747 1745 1748 if (status != PJ_SUCCESS) { -
pjproject/branches/projects/uwp/pjsip/src/pjsua2/endpoint.cpp
r5513 r5532 45 45 /////////////////////////////////////////////////////////////////////////////// 46 46 47 TlsInfo::TlsInfo() 48 : empty(true) 49 { 50 } 51 52 bool TlsInfo::isEmpty() const 53 { 54 return empty; 55 } 56 57 void TlsInfo::fromPj(const pjsip_tls_state_info &info) 58 { 59 #if defined(PJ_HAS_SSL_SOCK) && PJ_HAS_SSL_SOCK != 0 60 pj_ssl_sock_info *ssock_info = info.ssl_sock_info; 61 char straddr[PJ_INET6_ADDRSTRLEN+10]; 62 const char *verif_msgs[32]; 63 unsigned verif_msg_cnt; 64 65 empty = false; 66 established = PJ2BOOL(ssock_info->established); 67 protocol = ssock_info->proto; 68 cipher = ssock_info->cipher; 69 cipherName = pj_ssl_cipher_name(ssock_info->cipher); 70 pj_sockaddr_print(&ssock_info->local_addr, straddr, sizeof(straddr), 3); 71 localAddr = straddr; 72 pj_sockaddr_print(&ssock_info->remote_addr, straddr, sizeof(straddr),3); 73 remoteAddr = straddr; 74 verifyStatus = ssock_info->verify_status; 75 if (ssock_info->local_cert_info) 76 localCertInfo.fromPj(*ssock_info->local_cert_info); 77 if (ssock_info->remote_cert_info) 78 remoteCertInfo.fromPj(*ssock_info->remote_cert_info); 79 80 /* Dump server TLS certificate verification result */ 81 verif_msg_cnt = PJ_ARRAY_SIZE(verif_msgs); 82 pj_ssl_cert_get_verify_status_strings(ssock_info->verify_status, 83 verif_msgs, &verif_msg_cnt); 84 for (unsigned i = 0; i < verif_msg_cnt; ++i) { 85 verifyMsgs.push_back(verif_msgs[i]); 86 } 87 #endif 88 } 89 90 SslCertInfo::SslCertInfo() 91 : empty(true) 92 { 93 } 94 95 bool SslCertInfo::isEmpty() const 96 { 97 return empty; 98 } 99 100 void SslCertInfo::fromPj(const pj_ssl_cert_info &info) 101 { 102 empty = false; 103 version = info.version; 104 pj_memcpy(serialNo, info.serial_no, sizeof(info.serial_no)); 105 subjectCn = pj2Str(info.subject.cn); 106 subjectInfo = pj2Str(info.subject.info); 107 issuerCn = pj2Str(info.issuer.cn); 108 issuerInfo = pj2Str(info.issuer.info); 109 validityStart.fromPj(info.validity.start); 110 validityEnd.fromPj(info.validity.end); 111 validityGmt = PJ2BOOL(info.validity.gmt); 112 raw = pj2Str(info.raw); 113 114 for (unsigned i = 0; i < info.subj_alt_name.cnt; i++) { 115 SslCertName cname; 116 cname.type = info.subj_alt_name.entry[i].type; 117 cname.name = pj2Str(info.subj_alt_name.entry[i].name); 118 subjectAltName.push_back(cname); 119 } 120 } 121 122 /////////////////////////////////////////////////////////////////////////////// 123 47 124 UaConfig::UaConfig() 48 125 : mainThreadOnly(false) … … 559 636 560 637 prm.hnd = (TransportHandle)tp; 638 prm.type = tp->type_name; 561 639 prm.state = state; 562 640 prm.lastError = info ? info->status : PJ_SUCCESS; 641 642 #if defined(PJSIP_HAS_TLS_TRANSPORT) && PJSIP_HAS_TLS_TRANSPORT!=0 643 if (!pj_ansi_stricmp(tp->type_name, "tls") && info->ext_info && 644 (state == PJSIP_TP_STATE_CONNECTED || 645 ((pjsip_tls_state_info*)info->ext_info)-> 646 ssl_sock_info->verify_status != PJ_SUCCESS)) 647 { 648 prm.tlsInfo.fromPj(*((pjsip_tls_state_info*)info->ext_info)); 649 } 650 #endif 563 651 564 652 ep.onTransportState(prm); … … 1695 1783 } 1696 1784 1785 void Endpoint::transportShutdown(TransportHandle tp) throw(Error) 1786 { 1787 PJSUA2_CHECK_EXPR( pjsip_transport_shutdown((pjsip_transport *)tp) ); 1788 } 1789 1697 1790 /////////////////////////////////////////////////////////////////////////////// 1698 1791 /*
Note: See TracChangeset
for help on using the changeset viewer.