- Timestamp:
- Mar 8, 2007 6:58:04 PM (17 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjlib-util/src/pjstun-srv-test/bind_usage.c
r1040 r1049 26 26 const pj_sockaddr_t *src_addr, 27 27 unsigned src_addr_len); 28 static void usage_on_destroy(pj_stun_usage *usage); 28 29 static pj_status_t sess_on_send_msg(pj_stun_session *sess, 29 30 const void *pkt, … … 38 39 unsigned src_addr_len); 39 40 41 struct bind_usage 42 { 43 pj_pool_t *pool; 44 pj_stun_usage *usage; 45 pj_stun_session *session; 46 }; 47 48 40 49 PJ_DEF(pj_status_t) pj_stun_bind_usage_create(pj_stun_server *srv, 41 50 const pj_str_t *ip_addr, … … 43 52 pj_stun_usage **p_bu) 44 53 { 54 pj_pool_t *pool; 55 struct bind_usage *bu; 45 56 pj_stun_server_info *si; 46 pj_stun_session *session;47 pj_stun_usage *usage;48 57 pj_stun_usage_cb usage_cb; 49 58 pj_stun_session_cb sess_cb; … … 53 62 si = pj_stun_server_get_info(srv); 54 63 64 pool = pj_pool_create(si->pf, "bind%p", 128, 128, NULL); 65 bu = PJ_POOL_ZALLOC_T(pool, struct bind_usage); 66 bu->pool = pool; 67 55 68 status = pj_sockaddr_in_init(&local_addr, ip_addr, (pj_uint16_t)port); 56 69 if (status != PJ_SUCCESS) … … 59 72 pj_bzero(&usage_cb, sizeof(usage_cb)); 60 73 usage_cb.on_rx_data = &usage_on_rx_data; 74 usage_cb.on_destroy = &usage_on_destroy; 61 75 62 76 status = pj_stun_usage_create(srv, "bind%p", &usage_cb, 63 77 PJ_AF_INET, PJ_SOCK_DGRAM, 0, 64 78 &local_addr, sizeof(local_addr), 65 &usage); 66 if (status != PJ_SUCCESS) 67 return status; 79 &bu->usage); 80 if (status != PJ_SUCCESS) { 81 pj_pool_release(pool); 82 return status; 83 } 68 84 69 85 pj_bzero(&sess_cb, sizeof(sess_cb)); … … 71 87 sess_cb.on_rx_request = &sess_on_rx_request; 72 88 status = pj_stun_session_create(si->endpt, "bind%p", &sess_cb, PJ_FALSE, 73 &session); 74 if (status != PJ_SUCCESS) { 75 pj_stun_usage_destroy(usage); 76 return status; 77 } 78 79 pj_stun_usage_set_user_data(usage, session); 80 pj_stun_session_set_user_data(session, usage); 81 82 *p_bu = usage; 89 &bu->session); 90 if (status != PJ_SUCCESS) { 91 pj_stun_usage_destroy(bu->usage); 92 return status; 93 } 94 95 pj_stun_usage_set_user_data(bu->usage, bu); 96 pj_stun_session_set_user_data(bu->session, bu); 97 98 if (p_bu) 99 *p_bu = bu->usage; 83 100 84 101 return PJ_SUCCESS; … … 92 109 unsigned src_addr_len) 93 110 { 111 struct bind_usage *bu; 94 112 pj_stun_session *session; 95 113 pj_status_t status; 96 114 97 session = (pj_stun_session*) pj_stun_usage_get_user_data(usage); 115 bu = (struct bind_usage*) pj_stun_usage_get_user_data(usage); 116 session = bu->session; 98 117 99 118 /* Handle packet to session */ … … 114 133 unsigned addr_len) 115 134 { 135 struct bind_usage *bu; 116 136 pj_stun_usage *usage; 117 137 118 usage = pj_stun_session_get_user_data(sess); 138 bu = (struct bind_usage*) pj_stun_session_get_user_data(sess); 139 usage = bu->usage; 119 140 120 141 return pj_stun_usage_sendto(usage, pkt, pkt_size, 0, … … 156 177 status = 157 178 pj_stun_msg_add_ip_addr_attr(tdata->pool, tdata->msg, 158 PJ_STUN_ATTR_XOR_MAPPED_ADDR ESS,179 PJ_STUN_ATTR_XOR_MAPPED_ADDR, 159 180 PJ_TRUE, 160 181 src_addr, src_addr_len); … … 173 194 } 174 195 196 static void usage_on_destroy(pj_stun_usage *usage) 197 { 198 struct bind_usage *bu; 199 200 bu = (struct bind_usage*) pj_stun_usage_get_user_data(usage); 201 if (bu==NULL) 202 return; 203 204 pj_stun_session_destroy(bu->session); 205 pj_pool_release(bu->pool); 206 }
Note: See TracChangeset
for help on using the changeset viewer.