Changeset 43 for pjproject/main/pjsip/src/pjsip/sip_misc.c
- Timestamp:
- Nov 11, 2005 7:01:31 PM (19 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
pjproject/main/pjsip/src/pjsip/sip_misc.c
- Property svn:keywords set to Id
r3 r43 1 1 /* $Id$ 2 *3 2 */ 4 3 #include <pjsip/sip_misc.h> … … 14 13 #include <pj/pool.h> 15 14 #include <pj/except.h> 16 17 #define LOG_THIS "endpoint..." 15 #include <pj/rand.h> 16 #include <pj/assert.h> 17 #include <pj/errno.h> 18 19 #define THIS_FILE "endpoint" 18 20 19 21 static const char *event_str[] = … … 45 47 struct pjsip_module *mod, pj_uint32_t id ) 46 48 { 47 PJ_UNUSED_ARG(endpt) 48 PJ_UNUSED_ARG(mod) 49 PJ_UNUSED_ARG(endpt); 50 PJ_UNUSED_ARG(mod); 49 51 50 52 aux_mod_id = id; … … 54 56 static void aux_tsx_handler( struct pjsip_module *mod, pjsip_event *event ) 55 57 { 56 pjsip_transaction *tsx = event->obj.tsx;58 pjsip_transaction *tsx; 57 59 struct aux_tsx_data *tsx_data; 58 60 59 PJ_UNUSED_ARG(mod) 60 61 if (event->type != PJSIP_EVENT_TSX_STATE _CHANGED)61 PJ_UNUSED_ARG(mod); 62 63 if (event->type != PJSIP_EVENT_TSX_STATE) 62 64 return; 65 66 pj_assert(event->body.tsx_state.tsx != NULL); 67 tsx = event->body.tsx_state.tsx; 63 68 if (tsx == NULL) 64 69 return; … … 101 106 pjsip_transaction *tsx; 102 107 struct aux_tsx_data *tsx_data; 103 104 tsx = pjsip_endpt_create_tsx(endpt); 108 pj_status_t status; 109 110 status = pjsip_endpt_create_tsx(endpt, &tsx); 105 111 if (!tsx) { 106 112 pjsip_tx_data_dec_ref(tdata); … … 135 141 * this function. 136 142 */ 137 static void init_request_throw( pjsip_tx_data *tdata, 143 static void init_request_throw( pjsip_endpoint *endpt, 144 pjsip_tx_data *tdata, 138 145 pjsip_method *method, 139 146 pjsip_uri *param_target, … … 147 154 pjsip_msg *msg; 148 155 pjsip_msg_body *body; 156 const pjsip_hdr *endpt_hdr; 149 157 150 158 /* Create the message. */ … … 154 162 pj_memcpy(&msg->line.req.method, method, sizeof(*method)); 155 163 msg->line.req.uri = param_target; 164 165 /* Add additional request headers from endpoint. */ 166 endpt_hdr = pjsip_endpt_get_request_headers(endpt)->next; 167 while (endpt_hdr != pjsip_endpt_get_request_headers(endpt)) { 168 pjsip_hdr *hdr = pjsip_hdr_shallow_clone(tdata->pool, endpt_hdr); 169 pjsip_msg_add_hdr( tdata->msg, hdr ); 170 endpt_hdr = endpt_hdr->next; 171 } 156 172 157 173 /* Add From header. */ … … 190 206 * Create arbitrary request. 191 207 */ 192 PJ_DEF(pjsip_tx_data*) pjsip_endpt_create_request( pjsip_endpoint *endpt, 193 const pjsip_method *method, 194 const pj_str_t *param_target, 195 const pj_str_t *param_from, 196 const pj_str_t *param_to, 197 const pj_str_t *param_contact, 198 const pj_str_t *param_call_id, 199 int param_cseq, 200 const pj_str_t *param_text) 208 PJ_DEF(pj_status_t) pjsip_endpt_create_request( pjsip_endpoint *endpt, 209 const pjsip_method *method, 210 const pj_str_t *param_target, 211 const pj_str_t *param_from, 212 const pj_str_t *param_to, 213 const pj_str_t *param_contact, 214 const pj_str_t *param_call_id, 215 int param_cseq, 216 const pj_str_t *param_text, 217 pjsip_tx_data **p_tdata) 201 218 { 202 219 pjsip_uri *target; … … 208 225 pjsip_cid_hdr *call_id; 209 226 pj_str_t tmp; 227 pj_status_t status; 210 228 PJ_USE_EXCEPTION; 211 229 212 PJ_LOG(5,( LOG_THIS, "Entering pjsip_endpt_create_request()"));213 214 tdata = pjsip_endpt_create_tdata(endpt);215 if ( !tdata)216 return NULL;230 PJ_LOG(5,(THIS_FILE, "Entering pjsip_endpt_create_request()")); 231 232 status = pjsip_endpt_create_tdata(endpt, &tdata); 233 if (status != PJ_SUCCESS) 234 return status; 217 235 218 236 /* Init reference counter to 1. */ … … 224 242 target = pjsip_parse_uri( tdata->pool, tmp.ptr, tmp.slen, 0); 225 243 if (target == NULL) { 226 PJ_LOG(4,( LOG_THIS, "Error creating request: invalid target %s",244 PJ_LOG(4,(THIS_FILE, "Error creating request: invalid target %s", 227 245 tmp.ptr)); 228 246 goto on_error; … … 235 253 PJSIP_PARSE_URI_AS_NAMEADDR); 236 254 if (from->uri == NULL) { 237 PJ_LOG(4,( LOG_THIS, "Error creating request: invalid 'From' URI '%s'",255 PJ_LOG(4,(THIS_FILE, "Error creating request: invalid 'From' URI '%s'", 238 256 tmp.ptr)); 239 257 goto on_error; … … 247 265 PJSIP_PARSE_URI_AS_NAMEADDR); 248 266 if (to->uri == NULL) { 249 PJ_LOG(4,( LOG_THIS, "Error creating request: invalid 'To' URI '%s'",267 PJ_LOG(4,(THIS_FILE, "Error creating request: invalid 'To' URI '%s'", 250 268 tmp.ptr)); 251 269 goto on_error; … … 259 277 PJSIP_PARSE_URI_AS_NAMEADDR); 260 278 if (contact->uri == NULL) { 261 PJ_LOG(4,( LOG_THIS,279 PJ_LOG(4,(THIS_FILE, 262 280 "Error creating request: invalid 'Contact' URI '%s'", 263 281 tmp.ptr)); … … 286 304 287 305 /* Create the request. */ 288 init_request_throw( tdata, &cseq->method, target, from, to, contact,289 306 init_request_throw( endpt, tdata, &cseq->method, target, from, to, 307 contact, call_id, cseq, param_text); 290 308 } 291 309 PJ_DEFAULT { 292 PJ_LOG(4,(LOG_THIS, "Caught exception %d when creating request", 293 PJ_GET_EXCEPTION())); 310 status = PJ_ENOMEM; 294 311 goto on_error; 295 312 } 296 313 PJ_END 297 314 298 PJ_LOG(4,( LOG_THIS, "Request %s (%d %.*s) created.",315 PJ_LOG(4,(THIS_FILE, "Request %s (%d %.*s) created.", 299 316 tdata->obj_name, 300 317 cseq->cseq, … … 302 319 cseq->method.name.ptr)); 303 320 304 return tdata; 321 *p_tdata = tdata; 322 return PJ_SUCCESS; 305 323 306 324 on_error: 307 325 pjsip_tx_data_dec_ref(tdata); 308 return NULL;309 } 310 311 PJ_DEF(pj sip_tx_data*)326 return status; 327 } 328 329 PJ_DEF(pj_status_t) 312 330 pjsip_endpt_create_request_from_hdr( pjsip_endpoint *endpt, 313 331 const pjsip_method *method, … … 318 336 const pjsip_cid_hdr *param_call_id, 319 337 int param_cseq, 320 const pj_str_t *param_text ) 338 const pj_str_t *param_text, 339 pjsip_tx_data **p_tdata) 321 340 { 322 341 pjsip_uri *target; … … 327 346 pjsip_cid_hdr *call_id; 328 347 pjsip_cseq_hdr *cseq = NULL; /* The NULL because warning in VC6 */ 348 pj_status_t status; 329 349 PJ_USE_EXCEPTION; 330 350 331 PJ_LOG(5,( LOG_THIS, "Entering pjsip_endpt_create_request_from_hdr()"));332 333 tdata = pjsip_endpt_create_tdata(endpt);334 if ( !tdata)335 return NULL;351 PJ_LOG(5,(THIS_FILE, "Entering pjsip_endpt_create_request_from_hdr()")); 352 353 status = pjsip_endpt_create_tdata(endpt, &tdata); 354 if (status != PJ_SUCCESS) 355 return status; 336 356 337 357 pjsip_tx_data_add_ref(tdata); … … 355 375 pjsip_method_copy(tdata->pool, &cseq->method, method); 356 376 357 init_request_throw( tdata, &cseq->method, target, from, to, contact,358 377 init_request_throw(endpt, tdata, &cseq->method, target, from, to, 378 contact, call_id, cseq, param_text); 359 379 } 360 380 PJ_DEFAULT { 361 PJ_LOG(4,(LOG_THIS, "Caught exception %d when creating request", 362 PJ_GET_EXCEPTION())); 381 status = PJ_ENOMEM; 363 382 goto on_error; 364 383 } 365 384 PJ_END; 366 385 367 PJ_LOG(4,( LOG_THIS, "Request %s (%d %.*s) created.",386 PJ_LOG(4,(THIS_FILE, "Request %s (%d %.*s) created.", 368 387 tdata->obj_name, 369 388 cseq->cseq, 370 389 cseq->method.name.slen, 371 390 cseq->method.name.ptr)); 372 return tdata; 391 392 *p_tdata = tdata; 393 return PJ_SUCCESS; 373 394 374 395 on_error: 375 396 pjsip_tx_data_dec_ref(tdata); 376 return NULL;397 return status; 377 398 } 378 399 … … 380 401 * Construct a minimal response message for the received request. 381 402 */ 382 PJ_DEF(pjsip_tx_data*) pjsip_endpt_create_response( pjsip_endpoint *endpt, 383 const pjsip_rx_data *rdata, 384 int code) 403 PJ_DEF(pj_status_t) pjsip_endpt_create_response( pjsip_endpoint *endpt, 404 const pjsip_rx_data *rdata, 405 int code, 406 pjsip_tx_data **p_tdata) 385 407 { 386 408 pjsip_tx_data *tdata; … … 389 411 pjsip_via_hdr *via; 390 412 pjsip_rr_hdr *rr; 413 pj_status_t status; 391 414 392 415 /* rdata must be a request message. */ … … 395 418 396 419 /* Log this action. */ 397 PJ_LOG(5,( LOG_THIS, "pjsip_endpt_create_response(rdata=%p, code=%d)",420 PJ_LOG(5,(THIS_FILE, "pjsip_endpt_create_response(rdata=%p, code=%d)", 398 421 rdata, code)); 399 422 400 423 /* Create a new transmit buffer. */ 401 tdata = pjsip_endpt_create_tdata( endpt);402 if ( !tdata)403 return NULL;424 status = pjsip_endpt_create_tdata( endpt, &tdata); 425 if (status != PJ_SUCCESS) 426 return status; 404 427 405 428 /* Create new response message. */ … … 452 475 453 476 /* All done. */ 454 return tdata; 477 *p_tdata = tdata; 478 return PJ_SUCCESS; 455 479 } 456 480 … … 479 503 480 504 /* Log this action. */ 481 PJ_LOG(5,( LOG_THIS, "pjsip_endpt_create_ack(rdata=%p)", rdata));505 PJ_LOG(5,(THIS_FILE, "pjsip_endpt_create_ack(rdata=%p)", rdata)); 482 506 483 507 /* Create new request message. */ … … 503 527 to = (pjsip_to_hdr*)pjsip_msg_find_remove_hdr( invite_msg, 504 528 PJSIP_H_TO, NULL); 505 pj_strdup(tdata->pool, &to->tag, &rdata->to _tag);529 pj_strdup(tdata->pool, &to->tag, &rdata->to->tag); 506 530 pjsip_msg_add_hdr( ack_msg, (pjsip_hdr*)to ); 507 531 … … 543 567 * chapter 9.1 of RFC3261. 544 568 */ 545 PJ_DEF(pjsip_tx_data*) pjsip_endpt_create_cancel( pjsip_endpoint *endpt, 546 pjsip_tx_data *req_tdata ) 569 PJ_DEF(pj_status_t) pjsip_endpt_create_cancel( pjsip_endpoint *endpt, 570 pjsip_tx_data *req_tdata, 571 pjsip_tx_data **p_tdata) 547 572 { 548 573 pjsip_msg *req_msg; /* the original request. */ … … 552 577 pjsip_cseq_hdr *req_cseq, *cseq; 553 578 pjsip_uri *req_uri; 579 pj_status_t status; 554 580 555 581 /* Log this action. */ 556 PJ_LOG(5,( LOG_THIS, "pjsip_endpt_create_cancel(tdata=%p)", req_tdata));582 PJ_LOG(5,(THIS_FILE, "pjsip_endpt_create_cancel(tdata=%p)", req_tdata)); 557 583 558 584 /* Get the original request. */ … … 560 586 561 587 /* The transmit buffer must INVITE request. */ 562 pj_assert(req_msg->type == PJSIP_REQUEST_MSG && 563 req_msg->line.req.method.id == PJSIP_INVITE_METHOD ); 588 PJ_ASSERT_RETURN(req_msg->type == PJSIP_REQUEST_MSG && 589 req_msg->line.req.method.id == PJSIP_INVITE_METHOD, 590 PJ_EINVAL); 564 591 565 592 /* Create new transmit buffer. */ 566 cancel_tdata = pjsip_endpt_create_tdata( endpt);567 if ( !cancel_tdata) {568 return NULL;593 status = pjsip_endpt_create_tdata( endpt, &cancel_tdata); 594 if (status != PJ_SUCCESS) { 595 return status; 569 596 } 570 597 … … 624 651 * Return the transmit buffer containing the CANCEL request. 625 652 */ 626 return cancel_tdata; 653 *p_tdata = cancel_tdata; 654 return PJ_SUCCESS; 627 655 } 628 656 … … 651 679 remote_addr = pjsip_transport_get_remote_addr(req_transport); 652 680 pj_strdup2(pool, &send_addr->host, 653 pj_ sockaddr_get_str_addr(remote_addr));654 send_addr->port = pj_sockaddr_ get_port(remote_addr);681 pj_inet_ntoa(remote_addr->sin_addr)); 682 send_addr->port = pj_sockaddr_in_get_port(remote_addr); 655 683 656 684 } else {
Note: See TracChangeset
for help on using the changeset viewer.