Changeset 612 for pjproject/trunk/pjsip/src/pjsua-lib/pjsua_core.c
- Timestamp:
- Jul 18, 2006 2:39:40 PM (18 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/trunk/pjsip/src/pjsua-lib/pjsua_core.c
r611 r612 130 130 131 131 /***************************************************************************** 132 * Another simple module to handle incoming OPTIONS request 133 */ 134 135 /* Notification on incoming request */ 136 static pj_bool_t options_on_rx_request(pjsip_rx_data *rdata) 137 { 138 pjsip_tx_data *tdata; 139 pjsip_response_addr res_addr; 140 pjmedia_sdp_session *sdp; 141 const pjsip_hdr *cap_hdr; 142 pj_status_t status; 143 144 /* Only want to handle OPTIONS requests */ 145 if (pjsip_method_cmp(&rdata->msg_info.msg->line.req.method, 146 &pjsip_options_method) != 0) 147 { 148 return PJ_FALSE; 149 } 150 151 /* Create basic response. */ 152 status = pjsip_endpt_create_response(pjsua_var.endpt, rdata, 200, NULL, 153 &tdata); 154 if (status != PJ_SUCCESS) { 155 pjsua_perror(THIS_FILE, "Unable to create OPTIONS response", status); 156 return PJ_TRUE; 157 } 158 159 /* Add Allow header */ 160 cap_hdr = pjsip_endpt_get_capability(pjsua_var.endpt, PJSIP_H_ALLOW, NULL); 161 if (cap_hdr) { 162 pjsip_msg_add_hdr(tdata->msg, pjsip_hdr_clone(tdata->pool, cap_hdr)); 163 } 164 165 /* Add Accept header */ 166 cap_hdr = pjsip_endpt_get_capability(pjsua_var.endpt, PJSIP_H_ACCEPT, NULL); 167 if (cap_hdr) { 168 pjsip_msg_add_hdr(tdata->msg, pjsip_hdr_clone(tdata->pool, cap_hdr)); 169 } 170 171 /* Add Supported header */ 172 cap_hdr = pjsip_endpt_get_capability(pjsua_var.endpt, PJSIP_H_SUPPORTED, NULL); 173 if (cap_hdr) { 174 pjsip_msg_add_hdr(tdata->msg, pjsip_hdr_clone(tdata->pool, cap_hdr)); 175 } 176 177 /* Add Allow-Events header from the evsub module */ 178 cap_hdr = pjsip_evsub_get_allow_events_hdr(NULL); 179 if (cap_hdr) { 180 pjsip_msg_add_hdr(tdata->msg, pjsip_hdr_clone(tdata->pool, cap_hdr)); 181 } 182 183 /* Add User-Agent header */ 184 if (pjsua_var.ua_cfg.user_agent.slen) { 185 const pj_str_t USER_AGENT = { "User-Agent", 10}; 186 pjsip_hdr *h; 187 188 h = (pjsip_hdr*) pjsip_generic_string_hdr_create(tdata->pool, 189 &USER_AGENT, 190 &pjsua_var.ua_cfg.user_agent); 191 pjsip_msg_add_hdr(tdata->msg, h); 192 } 193 194 /* Add SDP body, using call0's RTP address */ 195 status = pjmedia_endpt_create_sdp(pjsua_var.med_endpt, tdata->pool, 1, 196 &pjsua_var.calls[0].skinfo, &sdp); 197 if (status == PJ_SUCCESS) { 198 pjsip_create_sdp_body(tdata->pool, sdp, &tdata->msg->body); 199 } 200 201 /* Send response statelessly */ 202 pjsip_get_response_addr(tdata->pool, rdata, &res_addr); 203 status = pjsip_endpt_send_response(pjsua_var.endpt, &res_addr, tdata, NULL, NULL); 204 if (status != PJ_SUCCESS) 205 pjsip_tx_data_dec_ref(tdata); 206 207 return PJ_TRUE; 208 } 209 210 211 /* The module instance. */ 212 static pjsip_module pjsua_options_handler = 213 { 214 NULL, NULL, /* prev, next. */ 215 { "mod-pjsua-options", 17 }, /* Name. */ 216 -1, /* Id */ 217 PJSIP_MOD_PRIORITY_APPLICATION, /* Priority */ 218 NULL, /* load() */ 219 NULL, /* start() */ 220 NULL, /* stop() */ 221 NULL, /* unload() */ 222 &options_on_rx_request, /* on_rx_request() */ 223 NULL, /* on_rx_response() */ 224 NULL, /* on_tx_request. */ 225 NULL, /* on_tx_response() */ 226 NULL, /* on_tsx_state() */ 227 228 }; 229 230 231 /***************************************************************************** 132 232 * These two functions are the main callbacks registered to PJSIP stack 133 233 * to receive SIP request and response messages that are outside any … … 235 335 } 236 336 337 /* Unregister OPTIONS handler if it's previously registered */ 338 if (pjsua_options_handler.id >= 0) { 339 pjsip_endpt_unregister_module(pjsua_var.endpt, &pjsua_options_handler); 340 pjsua_options_handler.id = -1; 341 } 342 237 343 /* Unregister msg logging if it's previously registered */ 238 344 if (pjsua_msg_logger.id >= 0) { … … 245 351 pjsip_endpt_register_module(pjsua_var.endpt, &pjsua_msg_logger); 246 352 353 /* Register OPTIONS handler */ 354 pjsip_endpt_register_module(pjsua_var.endpt, &pjsua_options_handler); 247 355 248 356 return PJ_SUCCESS; … … 1025 1133 const pjsip_hdr *hdr; 1026 1134 1135 /* Always add User-Agent */ 1136 if (pjsua_var.ua_cfg.user_agent.slen && 1137 tdata->msg->type == PJSIP_REQUEST_MSG) 1138 { 1139 const pj_str_t STR_USER_AGENT = { "User-Agent", 10 }; 1140 pjsip_hdr *h; 1141 h = (pjsip_hdr*)pjsip_generic_string_hdr_create(tdata->pool, 1142 &STR_USER_AGENT, 1143 &pjsua_var.ua_cfg.user_agent); 1144 pjsip_msg_add_hdr(tdata->msg, h); 1145 } 1146 1027 1147 if (!msg_data) 1028 1148 return;
Note: See TracChangeset
for help on using the changeset viewer.