Changeset 1310


Ignore:
Timestamp:
May 28, 2007 12:58:57 PM (12 years ago)
Author:
bennylp
Message:

Fixed ticket #306: Error in SIP transport lookup because of memory alignment problem (thanks Samuel Vinson)

Location:
pjproject/trunk/pjsip
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/include/pjsip/sip_transport.h

    r1269 r1310  
    606606 * 
    607607 *****************************************************************************/ 
     608/** 
     609 * Type of callback to receive transport operation status. 
     610 */ 
    608611typedef void (*pjsip_transport_callback)(pjsip_transport *tp, void *token, 
    609612                                         pj_ssize_t sent_bytes); 
     613 
     614/** 
     615 * This structure describes transport key to be registered to hash table. 
     616 */ 
     617typedef struct pjsip_transport_key 
     618{ 
     619    /** 
     620     * Transport type. 
     621     */ 
     622    long                    type; 
     623 
     624    /** 
     625     * Destination address. 
     626     */ 
     627    pj_sockaddr             rem_addr; 
     628 
     629} pjsip_transport_key; 
     630 
    610631/** 
    611632 * This structure represent the "public" interface of a SIP transport. 
     
    624645 
    625646    /** Key for indexing this transport in hash table. */ 
    626     struct { 
    627         pjsip_transport_type_e  type;       /**< Transport type.            */ 
    628         pj_sockaddr             rem_addr;   /**< Remote addr (zero for UDP) */ 
    629     } key; 
     647    pjsip_transport_key     key; 
    630648 
    631649    char                   *type_name;      /**< Type name.                 */ 
  • pjproject/trunk/pjsip/src/pjsip/sip_transport.c

    r1269 r1310  
    8282}; 
    8383 
    84 /* Key for looking up hash table */ 
    85 struct transport_key 
    86 { 
    87     pjsip_transport_type_e  type; 
    88     pj_sockaddr             addr; 
    89 }; 
    9084 
    9185/***************************************************************************** 
     
    13521346         * In this case, lookup the transport from the hash table. 
    13531347         */ 
    1354         struct transport_key key; 
     1348        pjsip_transport_key key; 
    13551349        int key_len; 
    13561350        pjsip_transport *transport; 
    13571351 
     1352        pj_bzero(&key, sizeof(key)); 
    13581353        key_len = sizeof(key.type) + addr_len; 
    13591354 
    13601355        /* First try to get exact destination. */ 
    13611356        key.type = type; 
    1362         pj_memcpy(&key.addr, remote, addr_len); 
     1357        pj_memcpy(&key.rem_addr, remote, addr_len); 
    13631358 
    13641359        transport = (pjsip_transport*) 
     
    13721367                     type == PJSIP_TRANSPORT_LOOP_DGRAM) 
    13731368            { 
    1374                 pj_sockaddr_in *addr = (pj_sockaddr_in*)&key.addr; 
     1369                pj_sockaddr_in *addr = (pj_sockaddr_in*)&key.rem_addr; 
    13751370 
    13761371                pj_bzero(addr, sizeof(pj_sockaddr_in)); 
     
    13841379                     (remote_addr->addr.sa_family == PJ_AF_INET))  
    13851380            { 
    1386                 pj_sockaddr_in *addr = (pj_sockaddr_in*)&key.addr; 
     1381                pj_sockaddr_in *addr = (pj_sockaddr_in*)&key.rem_addr; 
    13871382 
    13881383                pj_bzero(addr, sizeof(pj_sockaddr_in)); 
Note: See TracChangeset for help on using the changeset viewer.