Changeset 3110 for pjproject/trunk


Ignore:
Timestamp:
Feb 25, 2010 11:58:19 AM (15 years ago)
Author:
nanang
Message:

More ticket #1032:

  • Updated transport state notification callback to return void.
  • Updated transport state enum to only contain connected and disconnected, no more bitmask value.
  • Added direction field to SIP transport.
  • Removed remote hostname hash from transport key.
  • Updated cert info dump to return -1 when buffer is insufficient.
  • Added new error code PJSIP_TLS_ECERTVERIF.
  • Updated get_cert_name() in ssl_sock_symbian.c to use heap buffer instead of stack.
  • Minors, e.g: added prefix PJ in cipher types, docs.
Location:
pjproject/trunk
Files:
17 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjlib/include/pj/ssl_sock.h

    r3106 r3110  
    155155        pj_str_t        cn;         /**< Common name            */ 
    156156        pj_str_t        info;       /**< One line subject, fields 
    157                                          are separated by slash */ 
     157                                         are separated by slash, e.g: 
     158                                         "CN=sample.org/OU=HRD" */ 
    158159    } subject;                      /**< Subject                */ 
    159160 
     
    207208 * 
    208209 * @param ci            The certificate info. 
    209  * @param prefix        Prefix string for each line. 
     210 * @param indent        String for left indentation. 
    210211 * @param buf           The buffer where certificate info will be printed on. 
    211212 * @param buf_size      The buffer size. 
    212213 * 
    213  * @return              PJ_SUCCESS when successful. 
    214  */ 
    215 PJ_DECL(pj_status_t) pj_ssl_cert_info_dump(const pj_ssl_cert_info *ci, 
    216                                            const char *prefix, 
    217                                            char *buf, 
    218                                            pj_size_t buf_size); 
     214 * @return              The length of the dump result, or -1 when buffer size 
     215 *                      is not sufficient. 
     216 */ 
     217PJ_DECL(pj_ssize_t) pj_ssl_cert_info_dump(const pj_ssl_cert_info *ci, 
     218                                          const char *indent, 
     219                                          char *buf, 
     220                                          pj_size_t buf_size); 
    219221 
    220222 
     
    231233 * @return              PJ_SUCCESS when successful. 
    232234 */ 
    233 PJ_DECL(pj_status_t) pj_ssl_cert_verify_error_st(pj_uint32_t verify_status,  
     235PJ_DECL(pj_status_t) pj_ssl_cert_get_verify_status_strings( 
     236                                                 pj_uint32_t verify_status,  
    234237                                                 const char *error_strings[], 
    235238                                                 unsigned *count); 
     
    242245 
    243246    /* NULL */ 
    244     TLS_NULL_WITH_NULL_NULL               = 0x00000000, 
     247    PJ_TLS_NULL_WITH_NULL_NULL                  = 0x00000000, 
    245248 
    246249    /* TLS/SSLv3 */ 
    247     TLS_RSA_WITH_NULL_MD5                 = 0x00000001, 
    248     TLS_RSA_WITH_NULL_SHA                 = 0x00000002, 
    249     TLS_RSA_WITH_NULL_SHA256              = 0x0000003B, 
    250     TLS_RSA_WITH_RC4_128_MD5              = 0x00000004, 
    251     TLS_RSA_WITH_RC4_128_SHA              = 0x00000005, 
    252     TLS_RSA_WITH_3DES_EDE_CBC_SHA         = 0x0000000A, 
    253     TLS_RSA_WITH_AES_128_CBC_SHA          = 0x0000002F, 
    254     TLS_RSA_WITH_AES_256_CBC_SHA          = 0x00000035, 
    255     TLS_RSA_WITH_AES_128_CBC_SHA256       = 0x0000003C, 
    256     TLS_RSA_WITH_AES_256_CBC_SHA256       = 0x0000003D, 
    257     TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA      = 0x0000000D, 
    258     TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA      = 0x00000010, 
    259     TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA     = 0x00000013, 
    260     TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA     = 0x00000016, 
    261     TLS_DH_DSS_WITH_AES_128_CBC_SHA       = 0x00000030, 
    262     TLS_DH_RSA_WITH_AES_128_CBC_SHA       = 0x00000031, 
    263     TLS_DHE_DSS_WITH_AES_128_CBC_SHA      = 0x00000032, 
    264     TLS_DHE_RSA_WITH_AES_128_CBC_SHA      = 0x00000033, 
    265     TLS_DH_DSS_WITH_AES_256_CBC_SHA       = 0x00000036, 
    266     TLS_DH_RSA_WITH_AES_256_CBC_SHA       = 0x00000037, 
    267     TLS_DHE_DSS_WITH_AES_256_CBC_SHA      = 0x00000038, 
    268     TLS_DHE_RSA_WITH_AES_256_CBC_SHA      = 0x00000039, 
    269     TLS_DH_DSS_WITH_AES_128_CBC_SHA256    = 0x0000003E, 
    270     TLS_DH_RSA_WITH_AES_128_CBC_SHA256    = 0x0000003F, 
    271     TLS_DHE_DSS_WITH_AES_128_CBC_SHA256   = 0x00000040, 
    272     TLS_DHE_RSA_WITH_AES_128_CBC_SHA256   = 0x00000067, 
    273     TLS_DH_DSS_WITH_AES_256_CBC_SHA256    = 0x00000068, 
    274     TLS_DH_RSA_WITH_AES_256_CBC_SHA256    = 0x00000069, 
    275     TLS_DHE_DSS_WITH_AES_256_CBC_SHA256   = 0x0000006A, 
    276     TLS_DHE_RSA_WITH_AES_256_CBC_SHA256   = 0x0000006B, 
    277     TLS_DH_anon_WITH_RC4_128_MD5          = 0x00000018, 
    278     TLS_DH_anon_WITH_3DES_EDE_CBC_SHA     = 0x0000001B, 
    279     TLS_DH_anon_WITH_AES_128_CBC_SHA      = 0x00000034, 
    280     TLS_DH_anon_WITH_AES_256_CBC_SHA      = 0x0000003A, 
    281     TLS_DH_anon_WITH_AES_128_CBC_SHA256   = 0x0000006C, 
    282     TLS_DH_anon_WITH_AES_256_CBC_SHA256   = 0x0000006D, 
     250    PJ_TLS_RSA_WITH_NULL_MD5                    = 0x00000001, 
     251    PJ_TLS_RSA_WITH_NULL_SHA                    = 0x00000002, 
     252    PJ_TLS_RSA_WITH_NULL_SHA256                 = 0x0000003B, 
     253    PJ_TLS_RSA_WITH_RC4_128_MD5                 = 0x00000004, 
     254    PJ_TLS_RSA_WITH_RC4_128_SHA                 = 0x00000005, 
     255    PJ_TLS_RSA_WITH_3DES_EDE_CBC_SHA            = 0x0000000A, 
     256    PJ_TLS_RSA_WITH_AES_128_CBC_SHA             = 0x0000002F, 
     257    PJ_TLS_RSA_WITH_AES_256_CBC_SHA             = 0x00000035, 
     258    PJ_TLS_RSA_WITH_AES_128_CBC_SHA256          = 0x0000003C, 
     259    PJ_TLS_RSA_WITH_AES_256_CBC_SHA256          = 0x0000003D, 
     260    PJ_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA         = 0x0000000D, 
     261    PJ_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA         = 0x00000010, 
     262    PJ_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA        = 0x00000013, 
     263    PJ_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA        = 0x00000016, 
     264    PJ_TLS_DH_DSS_WITH_AES_128_CBC_SHA          = 0x00000030, 
     265    PJ_TLS_DH_RSA_WITH_AES_128_CBC_SHA          = 0x00000031, 
     266    PJ_TLS_DHE_DSS_WITH_AES_128_CBC_SHA         = 0x00000032, 
     267    PJ_TLS_DHE_RSA_WITH_AES_128_CBC_SHA         = 0x00000033, 
     268    PJ_TLS_DH_DSS_WITH_AES_256_CBC_SHA          = 0x00000036, 
     269    PJ_TLS_DH_RSA_WITH_AES_256_CBC_SHA          = 0x00000037, 
     270    PJ_TLS_DHE_DSS_WITH_AES_256_CBC_SHA         = 0x00000038, 
     271    PJ_TLS_DHE_RSA_WITH_AES_256_CBC_SHA         = 0x00000039, 
     272    PJ_TLS_DH_DSS_WITH_AES_128_CBC_SHA256       = 0x0000003E, 
     273    PJ_TLS_DH_RSA_WITH_AES_128_CBC_SHA256       = 0x0000003F, 
     274    PJ_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256      = 0x00000040, 
     275    PJ_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256      = 0x00000067, 
     276    PJ_TLS_DH_DSS_WITH_AES_256_CBC_SHA256       = 0x00000068, 
     277    PJ_TLS_DH_RSA_WITH_AES_256_CBC_SHA256       = 0x00000069, 
     278    PJ_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256      = 0x0000006A, 
     279    PJ_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256      = 0x0000006B, 
     280    PJ_TLS_DH_anon_WITH_RC4_128_MD5             = 0x00000018, 
     281    PJ_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA        = 0x0000001B, 
     282    PJ_TLS_DH_anon_WITH_AES_128_CBC_SHA         = 0x00000034, 
     283    PJ_TLS_DH_anon_WITH_AES_256_CBC_SHA         = 0x0000003A, 
     284    PJ_TLS_DH_anon_WITH_AES_128_CBC_SHA256      = 0x0000006C, 
     285    PJ_TLS_DH_anon_WITH_AES_256_CBC_SHA256      = 0x0000006D, 
    283286 
    284287    /* TLS (deprecated) */ 
    285     TLS_RSA_EXPORT_WITH_RC4_40_MD5        = 0x00000003, 
    286     TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5    = 0x00000006, 
    287     TLS_RSA_WITH_IDEA_CBC_SHA             = 0x00000007, 
    288     TLS_RSA_EXPORT_WITH_DES40_CBC_SHA     = 0x00000008, 
    289     TLS_RSA_WITH_DES_CBC_SHA              = 0x00000009, 
    290     TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA  = 0x0000000B, 
    291     TLS_DH_DSS_WITH_DES_CBC_SHA           = 0x0000000C, 
    292     TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA  = 0x0000000E, 
    293     TLS_DH_RSA_WITH_DES_CBC_SHA           = 0x0000000F, 
    294     TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA = 0x00000011, 
    295     TLS_DHE_DSS_WITH_DES_CBC_SHA          = 0x00000012, 
    296     TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA = 0x00000014, 
    297     TLS_DHE_RSA_WITH_DES_CBC_SHA          = 0x00000015, 
    298     TLS_DH_anon_EXPORT_WITH_RC4_40_MD5    = 0x00000017, 
    299     TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA = 0x00000019, 
    300     TLS_DH_anon_WITH_DES_CBC_SHA          = 0x0000001A, 
     288    PJ_TLS_RSA_EXPORT_WITH_RC4_40_MD5           = 0x00000003, 
     289    PJ_TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5       = 0x00000006, 
     290    PJ_TLS_RSA_WITH_IDEA_CBC_SHA                = 0x00000007, 
     291    PJ_TLS_RSA_EXPORT_WITH_DES40_CBC_SHA        = 0x00000008, 
     292    PJ_TLS_RSA_WITH_DES_CBC_SHA                 = 0x00000009, 
     293    PJ_TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA     = 0x0000000B, 
     294    PJ_TLS_DH_DSS_WITH_DES_CBC_SHA              = 0x0000000C, 
     295    PJ_TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA     = 0x0000000E, 
     296    PJ_TLS_DH_RSA_WITH_DES_CBC_SHA              = 0x0000000F, 
     297    PJ_TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA    = 0x00000011, 
     298    PJ_TLS_DHE_DSS_WITH_DES_CBC_SHA             = 0x00000012, 
     299    PJ_TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA    = 0x00000014, 
     300    PJ_TLS_DHE_RSA_WITH_DES_CBC_SHA             = 0x00000015, 
     301    PJ_TLS_DH_anon_EXPORT_WITH_RC4_40_MD5       = 0x00000017, 
     302    PJ_TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA    = 0x00000019, 
     303    PJ_TLS_DH_anon_WITH_DES_CBC_SHA             = 0x0000001A, 
    301304 
    302305    /* SSLv3 */ 
    303     SSL_FORTEZZA_KEA_WITH_NULL_SHA        = 0x0000001C, 
    304     SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA= 0x0000001D, 
    305     SSL_FORTEZZA_KEA_WITH_RC4_128_SHA     = 0x0000001E, 
     306    PJ_SSL_FORTEZZA_KEA_WITH_NULL_SHA           = 0x0000001C, 
     307    PJ_SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA   = 0x0000001D, 
     308    PJ_SSL_FORTEZZA_KEA_WITH_RC4_128_SHA        = 0x0000001E, 
    306309     
    307310    /* SSLv2 */ 
    308     SSL_CK_RC4_128_WITH_MD5               = 0x00010080, 
    309     SSL_CK_RC4_128_EXPORT40_WITH_MD5      = 0x00020080, 
    310     SSL_CK_RC2_128_CBC_WITH_MD5           = 0x00030080, 
    311     SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5  = 0x00040080, 
    312     SSL_CK_IDEA_128_CBC_WITH_MD5          = 0x00050080, 
    313     SSL_CK_DES_64_CBC_WITH_MD5            = 0x00060040, 
    314     SSL_CK_DES_192_EDE3_CBC_WITH_MD5      = 0x000700C0 
     311    PJ_SSL_CK_RC4_128_WITH_MD5                  = 0x00010080, 
     312    PJ_SSL_CK_RC4_128_EXPORT40_WITH_MD5         = 0x00020080, 
     313    PJ_SSL_CK_RC2_128_CBC_WITH_MD5              = 0x00030080, 
     314    PJ_SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5     = 0x00040080, 
     315    PJ_SSL_CK_IDEA_128_CBC_WITH_MD5             = 0x00050080, 
     316    PJ_SSL_CK_DES_64_CBC_WITH_MD5               = 0x00060040, 
     317    PJ_SSL_CK_DES_192_EDE3_CBC_WITH_MD5         = 0x000700C0 
    315318 
    316319} pj_ssl_cipher; 
  • pjproject/trunk/pjlib/src/pj/ssl_sock_common.c

    r3106 r3110  
    3131static cipher_name_t cipher_names[] = 
    3232{ 
    33     {TLS_NULL_WITH_NULL_NULL,               "NULL"}, 
     33    {PJ_TLS_NULL_WITH_NULL_NULL,               "NULL"}, 
    3434 
    3535    /* TLS/SSLv3 */ 
    36     {TLS_RSA_WITH_NULL_MD5,                 "TLS_RSA_WITH_NULL_MD5"}, 
    37     {TLS_RSA_WITH_NULL_SHA,                 "TLS_RSA_WITH_NULL_SHA"}, 
    38     {TLS_RSA_WITH_NULL_SHA256,              "TLS_RSA_WITH_NULL_SHA256"}, 
    39     {TLS_RSA_WITH_RC4_128_MD5,              "TLS_RSA_WITH_RC4_128_MD5"}, 
    40     {TLS_RSA_WITH_RC4_128_SHA,              "TLS_RSA_WITH_RC4_128_SHA"}, 
    41     {TLS_RSA_WITH_3DES_EDE_CBC_SHA,         "TLS_RSA_WITH_3DES_EDE_CBC_SHA"}, 
    42     {TLS_RSA_WITH_AES_128_CBC_SHA,          "TLS_RSA_WITH_AES_128_CBC_SHA"}, 
    43     {TLS_RSA_WITH_AES_256_CBC_SHA,          "TLS_RSA_WITH_AES_256_CBC_SHA"}, 
    44     {TLS_RSA_WITH_AES_128_CBC_SHA256,       "TLS_RSA_WITH_AES_128_CBC_SHA256"}, 
    45     {TLS_RSA_WITH_AES_256_CBC_SHA256,       "TLS_RSA_WITH_AES_256_CBC_SHA256"}, 
    46     {TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA,      "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA"}, 
    47     {TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA,      "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA"}, 
    48     {TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,     "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"}, 
    49     {TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,     "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA"}, 
    50     {TLS_DH_DSS_WITH_AES_128_CBC_SHA,       "TLS_DH_DSS_WITH_AES_128_CBC_SHA"}, 
    51     {TLS_DH_RSA_WITH_AES_128_CBC_SHA,       "TLS_DH_RSA_WITH_AES_128_CBC_SHA"}, 
    52     {TLS_DHE_DSS_WITH_AES_128_CBC_SHA,      "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"}, 
    53     {TLS_DHE_RSA_WITH_AES_128_CBC_SHA,      "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"}, 
    54     {TLS_DH_DSS_WITH_AES_256_CBC_SHA,       "TLS_DH_DSS_WITH_AES_256_CBC_SHA"}, 
    55     {TLS_DH_RSA_WITH_AES_256_CBC_SHA,       "TLS_DH_RSA_WITH_AES_256_CBC_SHA"}, 
    56     {TLS_DHE_DSS_WITH_AES_256_CBC_SHA,      "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"}, 
    57     {TLS_DHE_RSA_WITH_AES_256_CBC_SHA,      "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"}, 
    58     {TLS_DH_DSS_WITH_AES_128_CBC_SHA256,    "TLS_DH_DSS_WITH_AES_128_CBC_SHA256"}, 
    59     {TLS_DH_RSA_WITH_AES_128_CBC_SHA256,    "TLS_DH_RSA_WITH_AES_128_CBC_SHA256"}, 
    60     {TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,   "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"}, 
    61     {TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,   "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"}, 
    62     {TLS_DH_DSS_WITH_AES_256_CBC_SHA256,    "TLS_DH_DSS_WITH_AES_256_CBC_SHA256"}, 
    63     {TLS_DH_RSA_WITH_AES_256_CBC_SHA256,    "TLS_DH_RSA_WITH_AES_256_CBC_SHA256"}, 
    64     {TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,   "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"}, 
    65     {TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,   "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"}, 
    66     {TLS_DH_anon_WITH_RC4_128_MD5,          "TLS_DH_anon_WITH_RC4_128_MD5"}, 
    67     {TLS_DH_anon_WITH_3DES_EDE_CBC_SHA,     "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA"}, 
    68     {TLS_DH_anon_WITH_AES_128_CBC_SHA,      "TLS_DH_anon_WITH_AES_128_CBC_SHA"}, 
    69     {TLS_DH_anon_WITH_AES_256_CBC_SHA,      "TLS_DH_anon_WITH_AES_256_CBC_SHA"}, 
    70     {TLS_DH_anon_WITH_AES_128_CBC_SHA256,   "TLS_DH_anon_WITH_AES_128_CBC_SHA256"}, 
    71     {TLS_DH_anon_WITH_AES_256_CBC_SHA256,   "TLS_DH_anon_WITH_AES_256_CBC_SHA256"}, 
     36    {PJ_TLS_RSA_WITH_NULL_MD5,                 "TLS_RSA_WITH_NULL_MD5"}, 
     37    {PJ_TLS_RSA_WITH_NULL_SHA,                 "TLS_RSA_WITH_NULL_SHA"}, 
     38    {PJ_TLS_RSA_WITH_NULL_SHA256,              "TLS_RSA_WITH_NULL_SHA256"}, 
     39    {PJ_TLS_RSA_WITH_RC4_128_MD5,              "TLS_RSA_WITH_RC4_128_MD5"}, 
     40    {PJ_TLS_RSA_WITH_RC4_128_SHA,              "TLS_RSA_WITH_RC4_128_SHA"}, 
     41    {PJ_TLS_RSA_WITH_3DES_EDE_CBC_SHA,         "TLS_RSA_WITH_3DES_EDE_CBC_SHA"}, 
     42    {PJ_TLS_RSA_WITH_AES_128_CBC_SHA,          "TLS_RSA_WITH_AES_128_CBC_SHA"}, 
     43    {PJ_TLS_RSA_WITH_AES_256_CBC_SHA,          "TLS_RSA_WITH_AES_256_CBC_SHA"}, 
     44    {PJ_TLS_RSA_WITH_AES_128_CBC_SHA256,       "TLS_RSA_WITH_AES_128_CBC_SHA256"}, 
     45    {PJ_TLS_RSA_WITH_AES_256_CBC_SHA256,       "TLS_RSA_WITH_AES_256_CBC_SHA256"}, 
     46    {PJ_TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA,      "TLS_DH_DSS_WITH_3DES_EDE_CBC_SHA"}, 
     47    {PJ_TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA,      "TLS_DH_RSA_WITH_3DES_EDE_CBC_SHA"}, 
     48    {PJ_TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA,     "TLS_DHE_DSS_WITH_3DES_EDE_CBC_SHA"}, 
     49    {PJ_TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA,     "TLS_DHE_RSA_WITH_3DES_EDE_CBC_SHA"}, 
     50    {PJ_TLS_DH_DSS_WITH_AES_128_CBC_SHA,       "TLS_DH_DSS_WITH_AES_128_CBC_SHA"}, 
     51    {PJ_TLS_DH_RSA_WITH_AES_128_CBC_SHA,       "TLS_DH_RSA_WITH_AES_128_CBC_SHA"}, 
     52    {PJ_TLS_DHE_DSS_WITH_AES_128_CBC_SHA,      "TLS_DHE_DSS_WITH_AES_128_CBC_SHA"}, 
     53    {PJ_TLS_DHE_RSA_WITH_AES_128_CBC_SHA,      "TLS_DHE_RSA_WITH_AES_128_CBC_SHA"}, 
     54    {PJ_TLS_DH_DSS_WITH_AES_256_CBC_SHA,       "TLS_DH_DSS_WITH_AES_256_CBC_SHA"}, 
     55    {PJ_TLS_DH_RSA_WITH_AES_256_CBC_SHA,       "TLS_DH_RSA_WITH_AES_256_CBC_SHA"}, 
     56    {PJ_TLS_DHE_DSS_WITH_AES_256_CBC_SHA,      "TLS_DHE_DSS_WITH_AES_256_CBC_SHA"}, 
     57    {PJ_TLS_DHE_RSA_WITH_AES_256_CBC_SHA,      "TLS_DHE_RSA_WITH_AES_256_CBC_SHA"}, 
     58    {PJ_TLS_DH_DSS_WITH_AES_128_CBC_SHA256,    "TLS_DH_DSS_WITH_AES_128_CBC_SHA256"}, 
     59    {PJ_TLS_DH_RSA_WITH_AES_128_CBC_SHA256,    "TLS_DH_RSA_WITH_AES_128_CBC_SHA256"}, 
     60    {PJ_TLS_DHE_DSS_WITH_AES_128_CBC_SHA256,   "TLS_DHE_DSS_WITH_AES_128_CBC_SHA256"}, 
     61    {PJ_TLS_DHE_RSA_WITH_AES_128_CBC_SHA256,   "TLS_DHE_RSA_WITH_AES_128_CBC_SHA256"}, 
     62    {PJ_TLS_DH_DSS_WITH_AES_256_CBC_SHA256,    "TLS_DH_DSS_WITH_AES_256_CBC_SHA256"}, 
     63    {PJ_TLS_DH_RSA_WITH_AES_256_CBC_SHA256,    "TLS_DH_RSA_WITH_AES_256_CBC_SHA256"}, 
     64    {PJ_TLS_DHE_DSS_WITH_AES_256_CBC_SHA256,   "TLS_DHE_DSS_WITH_AES_256_CBC_SHA256"}, 
     65    {PJ_TLS_DHE_RSA_WITH_AES_256_CBC_SHA256,   "TLS_DHE_RSA_WITH_AES_256_CBC_SHA256"}, 
     66    {PJ_TLS_DH_anon_WITH_RC4_128_MD5,          "TLS_DH_anon_WITH_RC4_128_MD5"}, 
     67    {PJ_TLS_DH_anon_WITH_3DES_EDE_CBC_SHA,     "TLS_DH_anon_WITH_3DES_EDE_CBC_SHA"}, 
     68    {PJ_TLS_DH_anon_WITH_AES_128_CBC_SHA,      "TLS_DH_anon_WITH_AES_128_CBC_SHA"}, 
     69    {PJ_TLS_DH_anon_WITH_AES_256_CBC_SHA,      "TLS_DH_anon_WITH_AES_256_CBC_SHA"}, 
     70    {PJ_TLS_DH_anon_WITH_AES_128_CBC_SHA256,   "TLS_DH_anon_WITH_AES_128_CBC_SHA256"}, 
     71    {PJ_TLS_DH_anon_WITH_AES_256_CBC_SHA256,   "TLS_DH_anon_WITH_AES_256_CBC_SHA256"}, 
    7272 
    7373    /* TLS (deprecated) */ 
    74     {TLS_RSA_EXPORT_WITH_RC4_40_MD5,        "TLS_RSA_EXPORT_WITH_RC4_40_MD5"}, 
    75     {TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5,    "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5"}, 
    76     {TLS_RSA_WITH_IDEA_CBC_SHA,             "TLS_RSA_WITH_IDEA_CBC_SHA"}, 
    77     {TLS_RSA_EXPORT_WITH_DES40_CBC_SHA,     "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA"}, 
    78     {TLS_RSA_WITH_DES_CBC_SHA,              "TLS_RSA_WITH_DES_CBC_SHA"}, 
    79     {TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA,  "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA"}, 
    80     {TLS_DH_DSS_WITH_DES_CBC_SHA,           "TLS_DH_DSS_WITH_DES_CBC_SHA"}, 
    81     {TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA,  "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA"}, 
    82     {TLS_DH_RSA_WITH_DES_CBC_SHA,           "TLS_DH_RSA_WITH_DES_CBC_SHA"}, 
    83     {TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"}, 
    84     {TLS_DHE_DSS_WITH_DES_CBC_SHA,          "TLS_DHE_DSS_WITH_DES_CBC_SHA"}, 
    85     {TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"}, 
    86     {TLS_DHE_RSA_WITH_DES_CBC_SHA,          "TLS_DHE_RSA_WITH_DES_CBC_SHA"}, 
    87     {TLS_DH_anon_EXPORT_WITH_RC4_40_MD5,    "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5"}, 
    88     {TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA, "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA"}, 
    89     {TLS_DH_anon_WITH_DES_CBC_SHA,          "TLS_DH_anon_WITH_DES_CBC_SHA"}, 
     74    {PJ_TLS_RSA_EXPORT_WITH_RC4_40_MD5,        "TLS_RSA_EXPORT_WITH_RC4_40_MD5"}, 
     75    {PJ_TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5,    "TLS_RSA_EXPORT_WITH_RC2_CBC_40_MD5"}, 
     76    {PJ_TLS_RSA_WITH_IDEA_CBC_SHA,             "TLS_RSA_WITH_IDEA_CBC_SHA"}, 
     77    {PJ_TLS_RSA_EXPORT_WITH_DES40_CBC_SHA,     "TLS_RSA_EXPORT_WITH_DES40_CBC_SHA"}, 
     78    {PJ_TLS_RSA_WITH_DES_CBC_SHA,              "TLS_RSA_WITH_DES_CBC_SHA"}, 
     79    {PJ_TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA,  "TLS_DH_DSS_EXPORT_WITH_DES40_CBC_SHA"}, 
     80    {PJ_TLS_DH_DSS_WITH_DES_CBC_SHA,           "TLS_DH_DSS_WITH_DES_CBC_SHA"}, 
     81    {PJ_TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA,  "TLS_DH_RSA_EXPORT_WITH_DES40_CBC_SHA"}, 
     82    {PJ_TLS_DH_RSA_WITH_DES_CBC_SHA,           "TLS_DH_RSA_WITH_DES_CBC_SHA"}, 
     83    {PJ_TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA, "TLS_DHE_DSS_EXPORT_WITH_DES40_CBC_SHA"}, 
     84    {PJ_TLS_DHE_DSS_WITH_DES_CBC_SHA,          "TLS_DHE_DSS_WITH_DES_CBC_SHA"}, 
     85    {PJ_TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA, "TLS_DHE_RSA_EXPORT_WITH_DES40_CBC_SHA"}, 
     86    {PJ_TLS_DHE_RSA_WITH_DES_CBC_SHA,          "TLS_DHE_RSA_WITH_DES_CBC_SHA"}, 
     87    {PJ_TLS_DH_anon_EXPORT_WITH_RC4_40_MD5,    "TLS_DH_anon_EXPORT_WITH_RC4_40_MD5"}, 
     88    {PJ_TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA, "TLS_DH_anon_EXPORT_WITH_DES40_CBC_SHA"}, 
     89    {PJ_TLS_DH_anon_WITH_DES_CBC_SHA,          "TLS_DH_anon_WITH_DES_CBC_SHA"}, 
    9090 
    9191    /* SSLv3 */ 
    92     {SSL_FORTEZZA_KEA_WITH_NULL_SHA,        "SSL_FORTEZZA_KEA_WITH_NULL_SHA"}, 
    93     {SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA,"SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA"}, 
    94     {SSL_FORTEZZA_KEA_WITH_RC4_128_SHA,     "SSL_FORTEZZA_KEA_WITH_RC4_128_SHA"}, 
     92    {PJ_SSL_FORTEZZA_KEA_WITH_NULL_SHA,        "SSL_FORTEZZA_KEA_WITH_NULL_SHA"}, 
     93    {PJ_SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA,"SSL_FORTEZZA_KEA_WITH_FORTEZZA_CBC_SHA"}, 
     94    {PJ_SSL_FORTEZZA_KEA_WITH_RC4_128_SHA,     "SSL_FORTEZZA_KEA_WITH_RC4_128_SHA"}, 
    9595 
    9696    /* SSLv2 */ 
    97     {SSL_CK_RC4_128_WITH_MD5,               "SSL_CK_RC4_128_WITH_MD5"}, 
    98     {SSL_CK_RC4_128_EXPORT40_WITH_MD5,      "SSL_CK_RC4_128_EXPORT40_WITH_MD5"}, 
    99     {SSL_CK_RC2_128_CBC_WITH_MD5,           "SSL_CK_RC2_128_CBC_WITH_MD5"}, 
    100     {SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5,  "SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5"}, 
    101     {SSL_CK_IDEA_128_CBC_WITH_MD5,          "SSL_CK_IDEA_128_CBC_WITH_MD5"}, 
    102     {SSL_CK_DES_64_CBC_WITH_MD5,            "SSL_CK_DES_64_CBC_WITH_MD5"}, 
    103     {SSL_CK_DES_192_EDE3_CBC_WITH_MD5,      "SSL_CK_DES_192_EDE3_CBC_WITH_MD5"} 
     97    {PJ_SSL_CK_RC4_128_WITH_MD5,               "SSL_CK_RC4_128_WITH_MD5"}, 
     98    {PJ_SSL_CK_RC4_128_EXPORT40_WITH_MD5,      "SSL_CK_RC4_128_EXPORT40_WITH_MD5"}, 
     99    {PJ_SSL_CK_RC2_128_CBC_WITH_MD5,           "SSL_CK_RC2_128_CBC_WITH_MD5"}, 
     100    {PJ_SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5,  "SSL_CK_RC2_128_CBC_EXPORT40_WITH_MD5"}, 
     101    {PJ_SSL_CK_IDEA_128_CBC_WITH_MD5,          "SSL_CK_IDEA_128_CBC_WITH_MD5"}, 
     102    {PJ_SSL_CK_DES_64_CBC_WITH_MD5,            "SSL_CK_DES_64_CBC_WITH_MD5"}, 
     103    {PJ_SSL_CK_DES_192_EDE3_CBC_WITH_MD5,      "SSL_CK_DES_192_EDE3_CBC_WITH_MD5"} 
    104104}; 
    105105 
     
    147147 
    148148 
    149 PJ_DEF(pj_status_t) pj_ssl_cert_verify_error_st(pj_uint32_t verify_status,  
     149PJ_DEF(pj_status_t) pj_ssl_cert_get_verify_status_strings( 
     150                                                pj_uint32_t verify_status,  
    150151                                                const char *error_strings[], 
    151152                                                unsigned *count) 
  • pjproject/trunk/pjlib/src/pj/ssl_sock_dump.c

    r3106 r3110  
    2828#define THIS_FILE       "ssl_sock_dump.c" 
    2929 
    30 #define CHECK_BUF_LEN()                                                 \ 
    31     if ((len < 0) || ((p+=len) >= end)) {                               \ 
    32         *(p-1) = '\0';                                                  \ 
    33         return PJ_ETOOSMALL;                                            \ 
    34     } 
     30#define CHECK_BUF_LEN()                                         \ 
     31    if ((len < 0) || (len >= end-p)) {                          \ 
     32        *p = '\0';                                              \ 
     33        return -1;                                              \ 
     34    }                                                           \ 
     35    p += len; 
    3536 
    36 PJ_DEF(pj_status_t) pj_ssl_cert_info_dump(const pj_ssl_cert_info *ci, 
    37                                           const char *prefix, 
    38                                           char *buf, 
    39                                           pj_size_t buf_size) 
     37PJ_DEF(pj_ssize_t) pj_ssl_cert_info_dump(const pj_ssl_cert_info *ci, 
     38                                         const char *indent, 
     39                                         char *buf, 
     40                                         pj_size_t buf_size) 
    4041{ 
    4142    const char *wdays[] = {"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"}; 
     
    5455    /* Version */ 
    5556    len = pj_ansi_snprintf(p, end-p, "%sVersion    : v%d\n",  
    56                            prefix, ci->version); 
     57                           indent, ci->version); 
    5758    CHECK_BUF_LEN(); 
    5859     
    5960    /* Serial number */ 
    60     len = pj_ansi_snprintf(p, end-p, "%sSerial     : ", prefix); 
     61    len = pj_ansi_snprintf(p, end-p, "%sSerial     : ", indent); 
    6162    CHECK_BUF_LEN(); 
    6263 
     
    6970     
    7071    /* Subject */ 
    71     len = pj_ansi_snprintf( p, end-p, "%sSubject    : %.*s\n", prefix, 
     72    len = pj_ansi_snprintf( p, end-p, "%sSubject    : %.*s\n", indent, 
    7273                            ci->subject.cn.slen,  
    7374                            ci->subject.cn.ptr); 
    7475    CHECK_BUF_LEN(); 
    75     len = pj_ansi_snprintf( p, end-p, "%s             %.*s\n", prefix, 
     76    len = pj_ansi_snprintf( p, end-p, "%s             %.*s\n", indent, 
    7677                            ci->subject.info.slen, 
    7778                            ci->subject.info.ptr); 
     
    7980 
    8081    /* Issuer */ 
    81     len = pj_ansi_snprintf( p, end-p, "%sIssuer     : %.*s\n", prefix, 
     82    len = pj_ansi_snprintf( p, end-p, "%sIssuer     : %.*s\n", indent, 
    8283                            ci->issuer.cn.slen, 
    8384                            ci->issuer.cn.ptr); 
    8485    CHECK_BUF_LEN(); 
    85     len = pj_ansi_snprintf( p, end-p, "%s             %.*s\n", prefix, 
     86    len = pj_ansi_snprintf( p, end-p, "%s             %.*s\n", indent, 
    8687                            ci->issuer.info.slen, 
    8788                            ci->issuer.info.ptr); 
     
    9091    /* Validity period */ 
    9192    len = pj_ansi_snprintf( p, end-p, "%sValid from : %s %4d-%02d-%02d " 
    92                             "%02d:%02d:%02d.%03d %s\n", prefix, 
     93                            "%02d:%02d:%02d.%03d %s\n", indent, 
    9394                            wdays[pt1.wday], pt1.year, pt1.mon+1, pt1.day, 
    9495                            pt1.hour, pt1.min, pt1.sec, pt1.msec, 
     
    9798 
    9899    len = pj_ansi_snprintf( p, end-p, "%sValid to   : %s %4d-%02d-%02d " 
    99                             "%02d:%02d:%02d.%03d %s\n", prefix, 
     100                            "%02d:%02d:%02d.%03d %s\n", indent, 
    100101                            wdays[pt2.wday], pt2.year, pt2.mon+1, pt2.day, 
    101102                            pt2.hour, pt2.min, pt2.sec, pt2.msec, 
     
    108109 
    109110        len = pj_ansi_snprintf(p, end-p, "%ssubjectAltName extension\n",  
    110                                prefix); 
     111                               indent); 
    111112        CHECK_BUF_LEN(); 
    112113 
     
    131132            } 
    132133            if (type) { 
    133                 len = pj_ansi_snprintf( p, end-p, "%s      %s : %.*s\n", prefix,  
     134                len = pj_ansi_snprintf( p, end-p, "%s      %s : %.*s\n", indent,  
    134135                                        type,  
    135136                                        ci->subj_alt_name.entry[i].name.slen,  
     
    140141    } 
    141142 
    142     return PJ_SUCCESS; 
     143    return (p-buf); 
    143144} 
    144145 
  • pjproject/trunk/pjlib/src/pj/ssl_sock_symbian.cpp

    r3106 r3110  
    445445 
    446446 
    447 static pj_str_t get_cert_name(pj_pool_t *pool, 
     447static pj_str_t get_cert_name(char *buf, unsigned buf_len, 
    448448                              const CX500DistinguishedName &name) 
    449449{ 
    450450    TInt i; 
    451     char buf[1024]; 
    452451    TUint8 *p; 
    453     TInt l = sizeof(buf); 
     452    TInt l = buf_len; 
    454453     
    455454    p = (TUint8*)buf; 
     
    480479    } 
    481480     
    482     pj_str_t src, res; 
    483     pj_strset(&src, buf, sizeof(buf) - l); 
    484     pj_strdup(pool, &res, &src); 
    485      
    486     return res; 
     481    pj_str_t src; 
     482    pj_strset(&src, buf, buf_len - l); 
     483     
     484    return src; 
    487485} 
    488486                             
     
    492490                          const CX509Certificate *x) 
    493491{ 
     492    enum { tmp_buf_len = 512 }; 
     493    char *tmp_buf; 
    494494    unsigned len; 
    495495     
    496496    pj_assert(pool && ci && x); 
    497497     
     498    /* Init */ 
     499    tmp_buf = new char[tmp_buf_len]; 
    498500    pj_bzero(ci, sizeof(*ci)); 
    499501     
     
    519521            pj_strset(&ci->subject.cn, (char*)ptr8.Ptr(), ptr8.Length()); 
    520522        } 
    521         ci->subject.info = get_cert_name(pool, x->SubjectName()); 
     523        pj_str_t tmp = get_cert_name(tmp_buf, tmp_buf_len, 
     524                                     x->SubjectName()); 
     525        pj_strdup(pool, &ci->subject.info, &tmp); 
    522526    } 
    523527 
     
    533537            pj_strset(&ci->issuer.cn, (char*)ptr8.Ptr(), ptr8.Length()); 
    534538        } 
    535         ci->issuer.info = get_cert_name(pool, x->IssuerName()); 
     539        pj_str_t tmp = get_cert_name(tmp_buf, tmp_buf_len, 
     540                                     x->IssuerName()); 
     541        pj_strdup(pool, &ci->issuer.info, &tmp); 
    536542    } 
    537543     
     
    544550    valid_period.Finish().SecondsFrom(base_time, tmp_sec); 
    545551    ci->validity.end.sec = tmp_sec.Int(); 
     552     
     553    /* Deinit */ 
     554    delete [] tmp_buf; 
    546555} 
    547556 
  • pjproject/trunk/pjlib/src/pjlib-test/ssl_sock.c

    r3106 r3110  
    108108        /* Dump remote TLS certificate verification result */ 
    109109        verif_msg_cnt = PJ_ARRAY_SIZE(verif_msgs); 
    110         pj_ssl_cert_verify_error_st(si->verify_status, 
    111                                     verif_msgs, &verif_msg_cnt); 
     110        pj_ssl_cert_get_verify_status_strings(si->verify_status, 
     111                                              verif_msgs, &verif_msg_cnt); 
    112112        PJ_LOG(3,("", ".....Remote certificate verification result: %s", 
    113113                  (verif_msg_cnt == 1? verif_msgs[0]:""))); 
     
    11541154#ifndef PJ_SYMBIAN 
    11551155 
    1156     PJ_LOG(3,("", "..echo test w/ TLSv1 and TLS_RSA_WITH_DES_CBC_SHA cipher")); 
     1156    PJ_LOG(3,("", "..echo test w/ TLSv1 and PJ_TLS_RSA_WITH_DES_CBC_SHA cipher")); 
    11571157    ret = echo_test(PJ_SSL_SOCK_PROTO_TLS1, PJ_SSL_SOCK_PROTO_TLS1,  
    1158                     TLS_RSA_WITH_DES_CBC_SHA, TLS_RSA_WITH_DES_CBC_SHA,  
     1158                    PJ_TLS_RSA_WITH_DES_CBC_SHA, PJ_TLS_RSA_WITH_DES_CBC_SHA,  
    11591159                    PJ_FALSE, PJ_FALSE); 
    11601160    if (ret != 0) 
    11611161        return ret; 
    11621162 
    1163     PJ_LOG(3,("", "..echo test w/ SSLv23 and TLS_RSA_WITH_AES_256_CBC_SHA cipher")); 
     1163    PJ_LOG(3,("", "..echo test w/ SSLv23 and PJ_TLS_RSA_WITH_AES_256_CBC_SHA cipher")); 
    11641164    ret = echo_test(PJ_SSL_SOCK_PROTO_SSL23, PJ_SSL_SOCK_PROTO_SSL23,  
    1165                     TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, 
     1165                    PJ_TLS_RSA_WITH_AES_256_CBC_SHA, PJ_TLS_RSA_WITH_AES_256_CBC_SHA, 
    11661166                    PJ_FALSE, PJ_FALSE); 
    11671167    if (ret != 0) 
     
    11701170    PJ_LOG(3,("", "..echo test w/ incompatible proto")); 
    11711171    ret = echo_test(PJ_SSL_SOCK_PROTO_TLS1, PJ_SSL_SOCK_PROTO_SSL3,  
    1172                     TLS_RSA_WITH_DES_CBC_SHA, TLS_RSA_WITH_DES_CBC_SHA, 
     1172                    PJ_TLS_RSA_WITH_DES_CBC_SHA, PJ_TLS_RSA_WITH_DES_CBC_SHA, 
    11731173                    PJ_FALSE, PJ_FALSE); 
    11741174    if (ret == 0) 
     
    11771177    PJ_LOG(3,("", "..echo test w/ incompatible ciphers")); 
    11781178    ret = echo_test(PJ_SSL_SOCK_PROTO_DEFAULT, PJ_SSL_SOCK_PROTO_DEFAULT,  
    1179                     TLS_RSA_WITH_DES_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, 
     1179                    PJ_TLS_RSA_WITH_DES_CBC_SHA, PJ_TLS_RSA_WITH_AES_256_CBC_SHA, 
    11801180                    PJ_FALSE, PJ_FALSE); 
    11811181    if (ret == 0) 
     
    11841184    PJ_LOG(3,("", "..echo test w/ client cert required but not provided")); 
    11851185    ret = echo_test(PJ_SSL_SOCK_PROTO_DEFAULT, PJ_SSL_SOCK_PROTO_DEFAULT,  
    1186                     TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, 
     1186                    PJ_TLS_RSA_WITH_AES_256_CBC_SHA, PJ_TLS_RSA_WITH_AES_256_CBC_SHA, 
    11871187                    PJ_TRUE, PJ_FALSE); 
    11881188    if (ret == 0) 
     
    11911191    PJ_LOG(3,("", "..echo test w/ client cert required and provided")); 
    11921192    ret = echo_test(PJ_SSL_SOCK_PROTO_DEFAULT, PJ_SSL_SOCK_PROTO_DEFAULT,  
    1193                     TLS_RSA_WITH_AES_256_CBC_SHA, TLS_RSA_WITH_AES_256_CBC_SHA, 
     1193                    PJ_TLS_RSA_WITH_AES_256_CBC_SHA, PJ_TLS_RSA_WITH_AES_256_CBC_SHA, 
    11941194                    PJ_TRUE, PJ_TRUE); 
    11951195    if (ret != 0) 
  • pjproject/trunk/pjsip-apps/src/pjsua/pjsua_app.c

    r3106 r3110  
    27912791 * Transport status notification 
    27922792 */ 
    2793 static pj_bool_t on_transport_state(pjsip_transport *tp, pj_uint32_t state, 
    2794                                     const pjsip_transport_state_info *info) 
     2793static void on_transport_state(pjsip_transport *tp,  
     2794                               pjsip_transport_state state, 
     2795                               const pjsip_transport_state_info *info) 
    27952796{ 
    27962797    char host_port[128]; 
     
    28012802                     tp->remote_name.port); 
    28022803 
    2803     if (state & PJSIP_TP_STATE_CONNECTED) { 
    2804         PJ_LOG(3,(THIS_FILE, "SIP transport %s is connected to %s",  
    2805                  tp->type_name, host_port)); 
    2806     }  
    2807     else if (state & PJSIP_TP_STATE_ACCEPTED) { 
    2808         PJ_LOG(3,(THIS_FILE, "SIP transport %s accepted %s", 
    2809                  tp->type_name, host_port)); 
    2810     }  
    2811     else if (state & PJSIP_TP_STATE_DISCONNECTED) { 
    2812         char buf[100]; 
    2813  
    2814         snprintf(buf, sizeof(buf), "SIP transport %s is disconnected from %s", 
    2815                  tp->type_name, host_port); 
    2816         pjsua_perror(THIS_FILE, buf, info->status); 
    2817     } 
    2818     else if (state & PJSIP_TP_STATE_REJECTED) { 
    2819         char buf[100]; 
    2820  
    2821         snprintf(buf, sizeof(buf), "SIP transport %s rejected %s", 
    2822                  tp->type_name, host_port); 
    2823         pjsua_perror(THIS_FILE, buf, info->status); 
     2804    switch (state) { 
     2805    case PJSIP_TP_STATE_CONNECTED: 
     2806        { 
     2807            PJ_LOG(3,(THIS_FILE, "SIP transport %s is connected to %s",  
     2808                     tp->type_name, host_port)); 
     2809        } 
     2810        break; 
     2811 
     2812    case PJSIP_TP_STATE_DISCONNECTED: 
     2813        { 
     2814            char buf[100]; 
     2815 
     2816            snprintf(buf, sizeof(buf), "SIP transport %s is disconnected from %s", 
     2817                     tp->type_name, host_port); 
     2818            pjsua_perror(THIS_FILE, buf, info->status); 
     2819        } 
     2820        break; 
     2821 
     2822    default: 
     2823        break; 
    28242824    } 
    28252825 
     
    28282828    if (!pj_ansi_stricmp(tp->type_name, "tls") && info->ext_info && 
    28292829        (state == PJSIP_TP_STATE_CONNECTED ||  
    2830          (state & PJSIP_TP_STATE_TLS_VERIF_ERROR))) 
     2830         ((pjsip_tls_state_info*)info->ext_info)-> 
     2831                                 ssl_sock_info->verify_status != PJ_SUCCESS)) 
    28312832    { 
    28322833        pjsip_tls_state_info *tls_info = (pjsip_tls_state_info*)info->ext_info; 
    2833         pj_ssl_sock_info *ssl_sock_info = (pj_ssl_sock_info*) 
    2834                                           tls_info->ssl_sock_info; 
     2834        pj_ssl_sock_info *ssl_sock_info = tls_info->ssl_sock_info; 
    28352835        char buf[2048]; 
    28362836        const char *verif_msgs[32]; 
     
    28442844        /* Dump server TLS certificate verification result */ 
    28452845        verif_msg_cnt = PJ_ARRAY_SIZE(verif_msgs); 
    2846         pj_ssl_cert_verify_error_st(ssl_sock_info->verify_status, 
    2847                                     verif_msgs, &verif_msg_cnt); 
     2846        pj_ssl_cert_get_verify_status_strings(ssl_sock_info->verify_status, 
     2847                                              verif_msgs, &verif_msg_cnt); 
    28482848        PJ_LOG(3,(THIS_FILE, "TLS cert verification result of %s : %s", 
    28492849                             host_port, 
     
    28552855        } 
    28562856 
    2857         if (state & PJSIP_TP_STATE_TLS_VERIF_ERROR &&  
     2857        if (ssl_sock_info->verify_status && 
    28582858            !app_config.udp_cfg.tls_setting.verify_server)  
    28592859        { 
     
    28642864 
    28652865#endif 
    2866     return PJ_TRUE; 
     2866 
    28672867} 
    28682868 
  • pjproject/trunk/pjsip-apps/src/symbian_ua/ua.cpp

    r3106 r3110  
    274274 * Transport status notification 
    275275 */ 
    276 static pj_bool_t on_transport_state(pjsip_transport *tp, pj_uint32_t state, 
    277                                     const pjsip_transport_state_info *info) 
     276static void on_transport_state(pjsip_transport *tp,  
     277                               pjsip_transport_state state, 
     278                               const pjsip_transport_state_info *info) 
    278279{ 
    279280    char host_port[128]; 
     
    284285                     tp->remote_name.port); 
    285286 
    286     if (state & PJSIP_TP_STATE_CONNECTED) { 
    287         PJ_LOG(3,(THIS_FILE, "SIP transport %s is connected to %s",  
    288                  tp->type_name, host_port)); 
    289     }  
    290     else if (state & PJSIP_TP_STATE_ACCEPTED) { 
    291         PJ_LOG(3,(THIS_FILE, "SIP transport %s accepted %s", 
    292                  tp->type_name, host_port)); 
    293     }  
    294     else if (state & PJSIP_TP_STATE_DISCONNECTED) { 
    295         char buf[100]; 
    296  
    297         snprintf(buf, sizeof(buf), "SIP transport %s is disconnected from %s", 
    298                  tp->type_name, host_port); 
    299         pjsua_perror(THIS_FILE, buf, info->status); 
    300     } 
    301     else if (state & PJSIP_TP_STATE_REJECTED) { 
    302         char buf[100]; 
    303  
    304         snprintf(buf, sizeof(buf), "SIP transport %s rejected %s", 
    305                  tp->type_name, host_port); 
    306         pjsua_perror(THIS_FILE, buf, info->status); 
     287    switch (state) { 
     288    case PJSIP_TP_STATE_CONNECTED: 
     289        { 
     290            PJ_LOG(3,(THIS_FILE, "SIP transport %s is connected to %s",  
     291                     tp->type_name, host_port)); 
     292        } 
     293        break; 
     294 
     295    case PJSIP_TP_STATE_DISCONNECTED: 
     296        { 
     297            char buf[100]; 
     298 
     299            snprintf(buf, sizeof(buf), "SIP transport %s is disconnected from %s", 
     300                     tp->type_name, host_port); 
     301            pjsua_perror(THIS_FILE, buf, info->status); 
     302        } 
     303        break; 
     304 
     305    default: 
     306        break; 
    307307    } 
    308308 
     
    310310 
    311311    if (!pj_ansi_stricmp(tp->type_name, "tls") && info->ext_info && 
    312         (state == PJSIP_TP_STATE_CONNECTED ||  
    313          (state & PJSIP_TP_STATE_TLS_VERIF_ERROR))) 
     312        state == PJSIP_TP_STATE_CONNECTED)  
    314313    { 
    315314        pjsip_tls_state_info *tls_info = (pjsip_tls_state_info*)info->ext_info; 
     
    325324 
    326325#endif 
    327     return PJ_TRUE; 
    328326} 
    329327 
  • pjproject/trunk/pjsip/include/pjsip/sip_errno.h

    r2394 r3110  
    505505 */ 
    506506#define PJSIP_TLS_ETIMEDOUT     (PJSIP_ERRNO_START_PJSIP+172)   /* 171172 */ 
     507/** 
     508 * @hideinitializer 
     509 * SSL certificate verification error. 
     510 */ 
     511#define PJSIP_TLS_ECERTVERIF    (PJSIP_ERRNO_START_PJSIP+173)   /* 171173 */ 
    507512 
    508513 
  • pjproject/trunk/pjsip/include/pjsip/sip_transport.h

    r3106 r3110  
    694694 
    695695    /** 
    696      * Hash of host name. 
    697      */ 
    698     pj_uint32_t             hname; 
    699  
    700     /** 
    701696     * Destination address. 
    702697     */ 
     
    704699 
    705700} pjsip_transport_key; 
     701 
     702 
     703/** 
     704 * Enumeration of transport direction types. 
     705 */ 
     706typedef enum pjsip_transport_dir 
     707{ 
     708    PJSIP_TP_DIR_NONE,              /**< Direction not set, normally used by 
     709                                         connectionless transports such as  
     710                                         UDP transport.                     */ 
     711    PJSIP_TP_DIR_OUTGOING,          /**< Outgoing connection or client mode, 
     712                                         this is only for connection-oriented  
     713                                         transports.                        */ 
     714    PJSIP_TP_DIR_INCOMING,          /**< Incoming connection or server mode, 
     715                                         this is only for connection-oriented 
     716                                         transports.                        */ 
     717} pjsip_transport_dir; 
     718 
    706719 
    707720/** 
     
    732745    pjsip_host_port         local_name;     /**< Published name (eg. STUN). */ 
    733746    pjsip_host_port         remote_name;    /**< Remote address name.       */ 
     747    pjsip_transport_dir     dir;            /**< Connection direction.      */ 
    734748     
    735749    pjsip_endpoint         *endpt;          /**< Endpoint instance.         */ 
     
    11311145 * 
    11321146 * This is an internal function since normally application doesn't have access 
    1133  * to transport manager. Application should use pjsip_endpt_acquire_transport() 
     1147 * to transport manager. Application should use pjsip_endpt_acquire_transport2() 
    11341148 * instead. 
    11351149 * 
     
    12451259 * Enumeration of transport state types. 
    12461260 */ 
    1247 typedef enum pjsip_transport_state_type { 
    1248  
    1249     /** Transport connected.    */ 
    1250     PJSIP_TP_STATE_CONNECTED        = (1 << 0), 
    1251  
    1252     /** Transport accepted.     */ 
    1253     PJSIP_TP_STATE_ACCEPTED         = (1 << 1), 
    1254  
    1255     /** Transport disconnected. */ 
    1256     PJSIP_TP_STATE_DISCONNECTED     = (1 << 2), 
    1257  
    1258     /** Incoming connection rejected.   */ 
    1259     PJSIP_TP_STATE_REJECTED         = (1 << 3), 
    1260  
    1261     /** TLS verification error. */ 
    1262     PJSIP_TP_STATE_TLS_VERIF_ERROR  = (1 << 8) 
    1263  
    1264 } pjsip_transport_state_type; 
    1265  
    1266  
    1267 /** 
    1268  * Structure of transport state info. 
     1261typedef enum pjsip_transport_state 
     1262{ 
     1263    PJSIP_TP_STATE_CONNECTED,       /**< Transport connected, applicable only 
     1264                                         to connection-oriented transports 
     1265                                         such as TCP and TLS.               */ 
     1266    PJSIP_TP_STATE_DISCONNECTED     /**< Transport disconnected, applicable 
     1267                                         only to connection-oriented  
     1268                                         transports such as TCP and TLS.    */ 
     1269} pjsip_transport_state; 
     1270 
     1271 
     1272/** 
     1273 * Structure of transport state info passed by #pjsip_tp_state_callback. 
    12691274 */ 
    12701275typedef struct pjsip_transport_state_info { 
     
    12731278     */ 
    12741279    pj_status_t          status; 
    1275      
     1280 
    12761281    /** 
    12771282     * Optional extended info, the content is specific for each transport type. 
     
    12831288/** 
    12841289 * Type of callback to receive transport state notifications, such as 
    1285  * transport connected, disconnected or TLS verification error. 
     1290 * transport connected/disconnected. Application may shutdown the transport 
     1291 * in this callback. 
    12861292 * 
    12871293 * @param tp            The transport instance. 
    1288  * @param state         The transport state, this may contain single or  
    1289  *                      combination of transport state types defined in 
    1290  *                      #pjsip_transport_state_type. 
     1294 * @param state         The transport state. 
    12911295 * @param info          The transport state info. 
    1292  * 
    1293  * @return              When TLS verification fails and peer verification in 
    1294  *                      #pjsip_tls_setting is not set, application may return 
    1295  *                      PJ_TRUE to ignore the verification result and continue 
    1296  *                      using the transport. On other cases, this return value 
    1297  *                      is currently not used and will be ignored. 
    1298  */ 
    1299 typedef pj_bool_t (*pjsip_tp_state_callback)( 
     1296 */ 
     1297typedef void (*pjsip_tp_state_callback)( 
    13001298                                    pjsip_transport *tp, 
    1301                                     pj_uint32_t state, 
     1299                                    pjsip_transport_state state, 
    13021300                                    const pjsip_transport_state_info *info); 
    13031301 
     
    13061304 * Setting callback of transport state notification. The caller will be 
    13071305 * notified whenever the state of transport is changed. The type of 
    1308  * events are defined in #pjsip_transport_state_type. 
     1306 * events are defined in #pjsip_transport_state. 
    13091307 *  
    13101308 * @param mgr       Transport manager. 
  • pjproject/trunk/pjsip/include/pjsip/sip_transport_tls.h

    r3106 r3110  
    123123 
    124124    /** 
    125      * Specifies the action when verification of server TLS certificate 
    126      * resulting errors: 
     125     * Specifies TLS transport behavior on the server TLS certificate  
     126     * verification result: 
    127127     * - If \a verify_server is disabled (set to PJ_FALSE), TLS transport  
    128128     *   will just notify the application via #pjsip_tp_state_callback with 
    129      *   state (PJSIP_TP_STATE_CONNECTED | PJSIP_TP_STATE_TLS_VERIF_ERROR) 
    130      *   whenever there is any TLS verification error, the return value of  
    131      *   the callback will be used to decide whether transport should be  
    132      *   shutdown. 
     129     *   state PJSIP_TP_STATE_CONNECTED regardless TLS verification result. 
    133130     * - If \a verify_server is enabled (set to PJ_TRUE), TLS transport  
    134131     *   will be shutdown and application will be notified with state 
    135      *   (PJSIP_TP_STATE_DISCONNECTED | PJSIP_TP_STATE_TLS_VERIF_ERROR) 
    136      *   whenever there is any TLS verification error. 
    137      * 
    138      * When the verification resulting success, application will be notified 
    139      * via #pjsip_tp_state_callback with state PJSIP_TP_STATE_CONNECTED. 
     132     *   PJSIP_TP_STATE_DISCONNECTED whenever there is any TLS verification 
     133     *   error, otherwise PJSIP_TP_STATE_CONNECTED will be notified. 
     134     * 
     135     * In any cases, application can inspect #pjsip_tls_state_info in the 
     136     * callback to see the verification detail. 
    140137     * 
    141138     * Default value is PJ_FALSE. 
     
    144141 
    145142    /** 
    146      * Specifies the action when verification of server TLS certificate 
    147      * resulting errors: 
     143     * Specifies TLS transport behavior on the client TLS certificate  
     144     * verification result: 
    148145     * - If \a verify_client is disabled (set to PJ_FALSE), TLS transport  
    149146     *   will just notify the application via #pjsip_tp_state_callback with 
    150      *   state (PJSIP_TP_STATE_ACCEPTED | PJSIP_TP_STATE_TLS_VERIF_ERROR) 
    151      *   whenever there is any TLS verification error, the return value of  
    152      *   the callback will be used to decide whether transport should be  
    153      *   shutdown. 
     147     *   state PJSIP_TP_STATE_CONNECTED regardless TLS verification result. 
    154148     * - If \a verify_client is enabled (set to PJ_TRUE), TLS transport  
    155149     *   will be shutdown and application will be notified with state 
    156      *   (PJSIP_TP_STATE_REJECTED | PJSIP_TP_STATE_TLS_VERIF_ERROR) 
    157      *   whenever there is any TLS verification error. 
    158      * 
    159      * When the verification resulting success, application will be notified 
    160      * via #pjsip_tp_state_callback with state PJSIP_TP_STATE_ACCEPTED. 
     150     *   PJSIP_TP_STATE_DISCONNECTED whenever there is any TLS verification 
     151     *   error, otherwise PJSIP_TP_STATE_CONNECTED will be notified. 
     152     * 
     153     * In any cases, application can inspect #pjsip_tls_state_info in the 
     154     * callback to see the verification detail. 
    161155     * 
    162156     * Default value is PJ_FALSE. 
     
    166160    /** 
    167161     * When acting as server (incoming TLS connections), reject inocming 
    168      * connection if client doesn't have a valid certificate. 
     162     * connection if client doesn't supply a TLS certificate. 
    169163     * 
    170164     * This setting corresponds to SSL_VERIFY_FAIL_IF_NO_PEER_CERT flag. 
     
    210204 
    211205/** 
    212  * This structure defines transport state extended info specifically for 
    213  * TLS transport. 
     206 * This structure defines TLS transport extended info in <tt>ext_info</tt> 
     207 * field of #pjsip_transport_state_info for the transport state notification 
     208 * callback #pjsip_tp_state_callback. 
    214209 */ 
    215210typedef struct pjsip_tls_state_info 
  • pjproject/trunk/pjsip/include/pjsua-lib/pjsua.h

    r3109 r3110  
    847847     * This callback is called when transport state is changed. See also 
    848848     * #pjsip_tp_state_callback. 
    849      * 
    850      * @param tp        The transport instance. 
    851      * @param state     The transport state, this may contain single or  
    852      *                  combination of transport state types defined in 
    853      *                  #pjsip_transport_state_type. 
    854      * @param info      The transport state info. 
    855      * 
    856      * @return          When TLS verification fails and peer verification in 
    857      *                  #pjsip_tls_setting is not set, application may return 
    858      *                  PJ_TRUE to ignore the verification result and continue 
    859      *                  using the transport. On other cases, this return value 
    860      *                  is currently not used and will be ignored. 
    861      */ 
    862     pj_bool_t (*on_transport_state)(pjsip_transport *tp, pj_uint32_t state, 
    863                                     const pjsip_transport_state_info *info); 
     849     */ 
     850    pjsip_tp_state_callback on_transport_state; 
    864851 
    865852} pjsua_callback; 
  • pjproject/trunk/pjsip/src/pjsip/sip_errno.c

    r2394 r3110  
    132132    PJ_BUILD_ERR( PJSIP_TLS_EREAD,      "Unknown error when reading SSL data"), 
    133133    PJ_BUILD_ERR( PJSIP_TLS_ETIMEDOUT,  "SSL negotiation has timed out"), 
     134    PJ_BUILD_ERR( PJSIP_TLS_ECERTVERIF, "SSL certificate verification error"), 
    134135}; 
    135136 
  • pjproject/trunk/pjsip/src/pjsip/sip_transport.c

    r3106 r3110  
    867867     * Register to hash table (see Trac ticket #42). 
    868868     */ 
    869     key_len = sizeof(tp->key.type) + sizeof(tp->key.hname) + tp->addr_len; 
     869    key_len = sizeof(tp->key.type) + tp->addr_len; 
    870870    pj_lock_acquire(mgr->lock); 
    871871 
     
    917917     * Unregister from hash table (see Trac ticket #42). 
    918918     */ 
    919     key_len = sizeof(tp->key.type) + sizeof(tp->key.hname) + tp->addr_len; 
     919    key_len = sizeof(tp->key.type) + tp->addr_len; 
    920920    hval = 0; 
    921921    entry = pj_hash_get(mgr->table, &tp->key, key_len, &hval); 
     
    15921592        pjsip_transport *transport; 
    15931593 
    1594         /* 
    1595          * Find factory that can create such transport. 
    1596          */ 
    1597         factory = mgr->factory_list.next; 
    1598         while (factory != &mgr->factory_list) { 
    1599             if (factory->type == type) 
    1600                 break; 
    1601             factory = factory->next; 
    1602         } 
    1603         if (factory == &mgr->factory_list) 
    1604             factory = NULL; 
    1605  
    16061594        pj_bzero(&key, sizeof(key)); 
    1607         key_len = sizeof(key.type) + sizeof(key.hname) + addr_len; 
     1595        key_len = sizeof(key.type) + addr_len; 
    16081596 
    16091597        /* First try to get exact destination. */ 
    16101598        key.type = type; 
    16111599        pj_memcpy(&key.rem_addr, remote, addr_len); 
    1612         if (factory && factory->create_transport2 &&  
    1613             tdata && tdata->dest_info.name.slen) 
    1614         { 
    1615             /* Only include hostname hash in the key when the factory support 
    1616              * create_transport2() and tdata is supplied. 
    1617              */ 
    1618             key.hname = pj_hash_calc_tolower(0,  
    1619                                     (char*)tdata->dest_info.name.ptr, 
    1620                                     &tdata->dest_info.name); 
    1621         } 
    16221600 
    16231601        transport = (pjsip_transport*) 
     
    16361614 
    16371615                pj_bzero(addr, addr_len); 
    1638                 key_len = sizeof(key.type) + sizeof(key.hname) + addr_len; 
     1616                key_len = sizeof(key.type) + addr_len; 
    16391617                transport = (pjsip_transport*)  
    16401618                            pj_hash_get(mgr->table, &key, key_len, NULL); 
     
    16491627                addr->addr.sa_family = remote_addr->addr.sa_family; 
    16501628 
    1651                 key_len = sizeof(key.type) + sizeof(key.hname) + addr_len; 
     1629                key_len = sizeof(key.type) + addr_len; 
    16521630                transport = (pjsip_transport*) 
    16531631                            pj_hash_get(mgr->table, &key, key_len, NULL); 
     
    16691647        /* 
    16701648         * Transport not found! 
     1649         * Find factory that can create such transport. 
    16711650         */ 
    1672         if (NULL == factory) { 
     1651        factory = mgr->factory_list.next; 
     1652        while (factory != &mgr->factory_list) { 
     1653            if (factory->type == type) 
     1654                break; 
     1655            factory = factory->next; 
     1656        } 
     1657 
     1658        if (factory == &mgr->factory_list) { 
    16731659            /* No factory can create the transport! */ 
    16741660            pj_lock_release(mgr->lock); 
     
    16781664    } 
    16791665 
    1680      
    16811666    TRACE_((THIS_FILE, "Creating new transport from factory")); 
    16821667 
  • pjproject/trunk/pjsip/src/pjsip/sip_transport_loop.c

    r2394 r3110  
    382382                                                  loop->base.key.type); 
    383383    loop->base.addr_len = sizeof(pj_sockaddr_in); 
     384    loop->base.dir = PJSIP_TP_DIR_NONE; 
    384385    loop->base.endpt = endpt; 
    385386    loop->base.tpmgr = pjsip_endpt_get_tpmgr(endpt); 
  • pjproject/trunk/pjsip/src/pjsip/sip_transport_tcp.c

    r3106 r3110  
    585585    sockaddr_to_host_port(pool, &tcp->base.local_name, local); 
    586586    sockaddr_to_host_port(pool, &tcp->base.remote_name, remote); 
     587    tcp->base.dir = is_server? PJSIP_TP_DIR_INCOMING : PJSIP_TP_DIR_OUTGOING; 
    587588 
    588589    tcp->base.endpt = listener->endpt; 
     
    10051006             
    10061007                pj_bzero(&state_info, sizeof(state_info)); 
    1007                 (*state_cb)(&tcp->base, PJSIP_TP_STATE_ACCEPTED, &state_info); 
     1008                (*state_cb)(&tcp->base, PJSIP_TP_STATE_CONNECTED, &state_info); 
    10081009            } 
    10091010        } 
  • pjproject/trunk/pjsip/src/pjsip/sip_transport_tls.c

    r3106 r3110  
    558558    tls->base.key.type = PJSIP_TRANSPORT_TLS; 
    559559    pj_memcpy(&tls->base.key.rem_addr, remote, sizeof(pj_sockaddr_in)); 
    560     tls->base.key.hname = pj_hash_calc_tolower(0, (char*)tls->remote_name.ptr, 
    561                                                &tls->remote_name); 
    562560    tls->base.type_name = "tls"; 
    563561    tls->base.flag = pjsip_transport_get_flag_from_type(PJSIP_TRANSPORT_TLS); 
     
    569567 
    570568    tls->base.addr_len = sizeof(pj_sockaddr_in); 
     569    tls->base.dir = is_server? PJSIP_TP_DIR_INCOMING : PJSIP_TP_DIR_OUTGOING; 
    571570     
    572571    /* Set initial local address */ 
     
    979978    pj_ssl_sock_info ssl_info; 
    980979    char addr[PJ_INET6_ADDRSTRLEN+10]; 
     980    pjsip_tp_state_callback *state_cb; 
     981    pj_bool_t is_shutdown; 
    981982    pj_status_t status; 
    982  
    983     pjsip_tp_state_callback *state_cb; 
    984     pj_bool_t tls_verif_ignored; 
    985983 
    986984    PJ_UNUSED_ARG(src_addr_len); 
     
    10221020    pj_ssl_sock_set_user_data(new_ssock, tls); 
    10231021 
    1024     tls_verif_ignored = !listener->tls_setting.verify_client; 
     1022    /* Prevent immediate transport destroy as application may access it  
     1023     * (getting info, etc) in transport state notification callback. 
     1024     */ 
     1025    pjsip_transport_add_ref(&tls->base); 
     1026 
     1027    /* If there is verification error and verification is mandatory, shutdown 
     1028     * and destroy the transport. 
     1029     */ 
     1030    if (ssl_info.verify_status && listener->tls_setting.verify_client) { 
     1031        if (tls->close_reason == PJ_SUCCESS)  
     1032            tls->close_reason = PJSIP_TLS_ECERTVERIF; 
     1033        pjsip_transport_shutdown(&tls->base); 
     1034    } 
    10251035 
    10261036    /* Notify transport state to application */ 
     
    10291039        pjsip_transport_state_info state_info; 
    10301040        pjsip_tls_state_info tls_info; 
    1031         pj_uint32_t tp_state = 0; 
    1032  
    1033         /* Init transport state notification callback */ 
     1041        pjsip_transport_state tp_state; 
     1042 
     1043        /* Init transport state info */ 
    10341044        pj_bzero(&tls_info, sizeof(tls_info)); 
    10351045        pj_bzero(&state_info, sizeof(state_info)); 
    1036  
    1037         /* Set transport state based on verification status */ 
    1038         if (ssl_info.verify_status) { 
    1039             state_info.status = PJSIP_TLS_EACCEPT; 
    1040             tp_state |= PJSIP_TP_STATE_TLS_VERIF_ERROR; 
    1041             if (listener->tls_setting.verify_client) 
    1042                 tp_state |= PJSIP_TP_STATE_REJECTED; 
    1043             else 
    1044                 tp_state |= PJSIP_TP_STATE_ACCEPTED; 
    1045         } else { 
    1046             tp_state |= PJSIP_TP_STATE_ACCEPTED; 
    1047         } 
    1048  
    10491046        tls_info.ssl_sock_info = &ssl_info; 
    10501047        state_info.ext_info = &tls_info; 
    10511048 
    1052         tls_verif_ignored = (*state_cb)(&tls->base, tp_state, &state_info); 
    1053     } 
    1054  
    1055     /* Transport should be destroyed when there is TLS verification error 
    1056      * and application doesn't want to ignore it. 
    1057      */ 
    1058     if (ssl_info.verify_status &&  
    1059         (listener->tls_setting.verify_client || !tls_verif_ignored)) 
    1060     { 
    1061         tls_destroy(&tls->base, PJSIP_TLS_EACCEPT); 
     1049        /* Set transport state based on verification status */ 
     1050        if (ssl_info.verify_status && listener->tls_setting.verify_client) 
     1051        { 
     1052            tp_state = PJSIP_TP_STATE_DISCONNECTED; 
     1053            state_info.status = PJSIP_TLS_ECERTVERIF; 
     1054        } else { 
     1055            tp_state = PJSIP_TP_STATE_CONNECTED; 
     1056            state_info.status = PJ_SUCCESS; 
     1057        } 
     1058 
     1059        (*state_cb)(&tls->base, tp_state, &state_info); 
     1060    } 
     1061 
     1062    /* Release transport reference. If transport is shutting down, it may 
     1063     * get destroyed here. 
     1064     */ 
     1065    is_shutdown = tls->base.is_shutdown; 
     1066    pjsip_transport_dec_ref(&tls->base); 
     1067    if (is_shutdown) 
    10621068        return PJ_TRUE; 
    1063     } 
     1069 
    10641070 
    10651071    status = tls_start_read(tls); 
     
    13321338    pj_ssl_sock_info ssl_info; 
    13331339    pj_sockaddr_in addr, *tp_addr; 
    1334  
    13351340    pjsip_tp_state_callback *state_cb; 
    1336     pj_bool_t tls_verif_ignored; 
     1341    pj_bool_t is_shutdown; 
    13371342 
    13381343    tls = (struct tls_transport*) pj_ssl_sock_get_user_data(ssock); 
     
    14331438    } 
    14341439 
    1435     tls_verif_ignored = !tls->verify_server; 
     1440    /* Prevent immediate transport destroy as application may access it  
     1441     * (getting info, etc) in transport state notification callback. 
     1442     */ 
     1443    pjsip_transport_add_ref(&tls->base); 
     1444 
     1445    /* If there is verification error and verification is mandatory, shutdown 
     1446     * and destroy the transport. 
     1447     */ 
     1448    if (ssl_info.verify_status && tls->verify_server) { 
     1449        if (tls->close_reason == PJ_SUCCESS)  
     1450            tls->close_reason = PJSIP_TLS_ECERTVERIF; 
     1451        pjsip_transport_shutdown(&tls->base); 
     1452    } 
    14361453 
    14371454    /* Notify transport state to application */ 
     
    14421459        pj_uint32_t tp_state = 0; 
    14431460 
    1444         /* Init transport state notification callback */ 
     1461        /* Init transport state info */ 
    14451462        pj_bzero(&state_info, sizeof(state_info)); 
    14461463        pj_bzero(&tls_info, sizeof(tls_info)); 
    1447  
    1448         /* Set transport state info */ 
    14491464        state_info.ext_info = &tls_info; 
    14501465        tls_info.ssl_sock_info = &ssl_info; 
    14511466 
    14521467        /* Set transport state based on verification status */ 
    1453         if (ssl_info.verify_status) { 
    1454             state_info.status = PJSIP_TLS_ECONNECT; 
    1455             tp_state |= PJSIP_TP_STATE_TLS_VERIF_ERROR; 
    1456             if (tls->verify_server) 
    1457                 tp_state |= PJSIP_TP_STATE_DISCONNECTED; 
    1458             else 
    1459                 tp_state |= PJSIP_TP_STATE_CONNECTED; 
     1468        if (ssl_info.verify_status && tls->verify_server) 
     1469        { 
     1470            tp_state = PJSIP_TP_STATE_DISCONNECTED; 
     1471            state_info.status = PJSIP_TLS_ECERTVERIF; 
    14601472        } else { 
    1461             tp_state |= PJSIP_TP_STATE_CONNECTED; 
     1473            tp_state = PJSIP_TP_STATE_CONNECTED; 
     1474            state_info.status = PJ_SUCCESS; 
    14621475        } 
    14631476 
    1464         tls_verif_ignored = (*state_cb)(&tls->base, tp_state, &state_info); 
    1465     } 
    1466  
    1467     /* Transport should be shutdown when there is TLS verification error 
    1468      * and application doesn't want to ignore it. 
    1469      */ 
    1470     if (ssl_info.verify_status &&  
    1471         (tls->verify_server || !tls_verif_ignored)) 
    1472     { 
    1473         if (tls->close_reason == PJ_SUCCESS)  
    1474             tls->close_reason = PJSIP_TLS_ECONNECT; 
    1475         pjsip_transport_shutdown(&tls->base); 
     1477        (*state_cb)(&tls->base, tp_state, &state_info); 
     1478    } 
     1479 
     1480    /* Release transport reference. If transport is shutting down, it may 
     1481     * get destroyed here. 
     1482     */ 
     1483    is_shutdown = tls->base.is_shutdown; 
     1484    pjsip_transport_dec_ref(&tls->base); 
     1485    if (is_shutdown) 
    14761486        return PJ_FALSE; 
    1477     } 
     1487 
    14781488 
    14791489    /* Mark that pending connect() operation has completed. */ 
  • pjproject/trunk/pjsip/src/pjsip/sip_transport_udp.c

    r3060 r3110  
    737737    tp->base.remote_name.port = 0; 
    738738 
     739    /* Init direction */ 
     740    tp->base.dir = PJSIP_TP_DIR_NONE; 
     741 
    739742    /* Set endpoint. */ 
    740743    tp->base.endpt = endpt; 
Note: See TracChangeset for help on using the changeset viewer.