Changeset 6002 for pjproject/trunk/pjsip/src/test/transport_udp_test.c
- Timestamp:
- May 23, 2019 5:21:59 PM (4 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip/src/test/transport_udp_test.c
r3553 r6002 25 25 #define THIS_FILE "transport_udp_test.c" 26 26 27 static pj_status_t multi_transport_test(pjsip_transport *tp[], unsigned num_tp) 28 { 29 pj_status_t status; 30 pj_uint16_t i = 0; 31 pj_str_t s; 32 pjsip_transport *udp_tp; 33 pj_sockaddr_in rem_addr; 34 pjsip_tpselector tp_sel; 35 36 for (;i<num_tp;++i) 37 { 38 pj_sockaddr_in addr; 39 40 pj_sockaddr_in_init(&addr, NULL, TEST_UDP_PORT+i); 41 42 /* Start UDP transport. */ 43 status = pjsip_udp_transport_start( endpt, &addr, NULL, 1, &udp_tp); 44 if (status != PJ_SUCCESS) { 45 app_perror(" Error: unable to start UDP transport", status); 46 return -110; 47 } 48 49 /* UDP transport must have initial reference counter set to 1. */ 50 if (pj_atomic_get(udp_tp->ref_cnt) != 1) 51 return -120; 52 53 /* Test basic transport attributes */ 54 status = generic_transport_test(udp_tp); 55 if (status != PJ_SUCCESS) 56 return status; 57 58 tp[i] = udp_tp; 59 } 60 61 for (i = 0; i < num_tp; ++i) { 62 udp_tp = tp[i]; 63 if (pj_atomic_get(udp_tp->ref_cnt) != 1) 64 return -130; 65 } 66 67 /* Acquire transport test without selector. */ 68 pj_sockaddr_in_init(&rem_addr, pj_cstr(&s, "1.1.1.1"), 80); 69 status = pjsip_endpt_acquire_transport(endpt, PJSIP_TRANSPORT_UDP, 70 &rem_addr, sizeof(rem_addr), 71 NULL, &udp_tp); 72 if (status != PJ_SUCCESS) 73 return -140; 74 75 for (i = 0; i < num_tp; ++i) { 76 if (udp_tp == tp[i]) { 77 break; 78 } 79 } 80 if (i == num_tp) 81 return -150; 82 83 pjsip_transport_dec_ref(udp_tp); 84 85 if (pj_atomic_get(udp_tp->ref_cnt) != 1) 86 return -160; 87 88 /* Acquire transport test with selector. */ 89 pj_bzero(&tp_sel, sizeof(tp_sel)); 90 tp_sel.type = PJSIP_TPSELECTOR_TRANSPORT; 91 tp_sel.u.transport = tp[num_tp-1]; 92 pj_sockaddr_in_init(&rem_addr, pj_cstr(&s, "1.1.1.1"), 80); 93 status = pjsip_endpt_acquire_transport(endpt, PJSIP_TRANSPORT_UDP, 94 &rem_addr, sizeof(rem_addr), 95 &tp_sel, &udp_tp); 96 if (status != PJ_SUCCESS) 97 return -170; 98 99 if (udp_tp != tp[num_tp-1]) 100 return -180; 101 102 pjsip_transport_dec_ref(udp_tp); 103 104 if (pj_atomic_get(udp_tp->ref_cnt) != 1) 105 return -190; 106 107 return PJ_SUCCESS; 108 } 27 109 28 110 /* … … 32 114 { 33 115 enum { SEND_RECV_LOOP = 8 }; 34 pjsip_transport *udp_tp, *tp; 35 pj_sockaddr_in addr, rem_addr; 116 enum { NUM_TP = 4 }; 117 pjsip_transport *tp[NUM_TP], *udp_tp; 118 pj_sockaddr_in rem_addr; 36 119 pj_str_t s; 37 120 pj_status_t status; … … 39 122 int i, pkt_lost; 40 123 41 pj_sockaddr_in_init(&addr, NULL, TEST_UDP_PORT); 42 43 /* Start UDP transport. */ 44 status = pjsip_udp_transport_start( endpt, &addr, NULL, 1, &udp_tp); 45 if (status != PJ_SUCCESS) { 46 app_perror(" Error: unable to start UDP transport", status); 47 return -10; 48 } 49 50 /* UDP transport must have initial reference counter set to 1. */ 51 if (pj_atomic_get(udp_tp->ref_cnt) != 1) 52 return -20; 53 54 /* Test basic transport attributes */ 55 status = generic_transport_test(udp_tp); 124 status = multi_transport_test(&tp[0], NUM_TP); 56 125 if (status != PJ_SUCCESS) 57 126 return status; 58 59 /* Test that transport manager is returning the correct60 * transport.61 */62 pj_sockaddr_in_init(&rem_addr, pj_cstr(&s, "1.1.1.1"), 80);63 status = pjsip_endpt_acquire_transport(endpt, PJSIP_TRANSPORT_UDP,64 &rem_addr, sizeof(rem_addr),65 NULL, &tp);66 if (status != PJ_SUCCESS)67 return -50;68 if (tp != udp_tp)69 return -60;70 71 /* pjsip_endpt_acquire_transport() adds reference, so we need72 * to decrement it.73 */74 pjsip_transport_dec_ref(tp);75 76 /* Check again that reference counter is 1. */77 if (pj_atomic_get(udp_tp->ref_cnt) != 1)78 return -70;79 127 80 128 /* Basic transport's send/receive loopback test. */ 81 129 pj_sockaddr_in_init(&rem_addr, pj_cstr(&s, "127.0.0.1"), TEST_UDP_PORT); 82 130 for (i=0; i<SEND_RECV_LOOP; ++i) { 83 status = transport_send_recv_test(PJSIP_TRANSPORT_UDP, tp ,131 status = transport_send_recv_test(PJSIP_TRANSPORT_UDP, tp[0], 84 132 "sip:alice@127.0.0.1:"TEST_UDP_PORT_STR, 85 133 &rtt[i]); … … 99 147 100 148 /* Multi-threaded round-trip test. */ 101 status = transport_rt_test(PJSIP_TRANSPORT_UDP, tp ,149 status = transport_rt_test(PJSIP_TRANSPORT_UDP, tp[0], 102 150 "sip:alice@127.0.0.1:"TEST_UDP_PORT_STR, 103 151 &pkt_lost); … … 108 156 PJ_LOG(3,(THIS_FILE, " note: %d packet(s) was lost", pkt_lost)); 109 157 110 /* Check again that reference counter is 1. */ 111 if (pj_atomic_get(udp_tp->ref_cnt) != 1) 112 return -80; 158 for (i = 0; i < NUM_TP; ++i) { 159 udp_tp = tp[i]; 113 160 114 /* Destroy this transport. */ 115 pjsip_transport_dec_ref(udp_tp); 161 /* Check again that reference counter is 1. */ 162 if (pj_atomic_get(udp_tp->ref_cnt) != 1) 163 return -80; 116 164 117 /* Force destroy this transport. */ 118 status = pjsip_transport_destroy(udp_tp); 119 if (status != PJ_SUCCESS) 120 return -90; 165 /* Destroy this transport. */ 166 pjsip_transport_dec_ref(udp_tp); 167 status = pjsip_transport_destroy(udp_tp); 168 if (status != PJ_SUCCESS) 169 return -90; 170 } 121 171 122 172 /* Flush events. */
Note: See TracChangeset
for help on using the changeset viewer.