Ignore:
Timestamp:
Sep 25, 2006 1:40:12 PM (18 years ago)
Author:
bennylp
Message:

Tests with other user agents revealed some bugs which
have been fixed below:

  • some UAs sends "telephone-event/8000/1" instead of "telephone-event/8000", which caused SDP negotiation to fail. Fixed in sdp_neg.c.
  • codec name was (incorrectly) compared case-sensitively, causing negotiation to fail. Fixed in sdp_neg.c.
  • Also improved error reporting in SDP negotiation by introducing few more error codes.
  • Added Warning header in Not Acceptable response sent by pjsip_inv_session when SDP negotiation fails.
  • PJSUA-LIB will try to negotiate both SDPs before sending 100 response.
  • Fixed bug in iLBC codec when setting the mode to 30.

Also:

  • Echo cancellation by default is disabled now since it doesn't seem to work. Further investigation needed.
File:
1 edited

Legend:

Unmodified
Added
Removed
  • pjproject/trunk/pjsip/src/pjsip-ua/sip_inv.c

    r671 r738  
    615615                /* Incompatible media */ 
    616616                code = PJSIP_SC_NOT_ACCEPTABLE_HERE; 
    617                 status = PJSIP_ERRNO_FROM_SIP_STATUS(code); 
    618617 
    619618                if (p_tdata) { 
     
    24152414            /* Process SDP in the answer */ 
    24162415            status = process_answer(inv, 200, tdata, NULL); 
    2417             if (status != PJ_SUCCESS) 
     2416 
     2417            if (status != PJ_SUCCESS) { 
     2418                /* 
     2419                 * SDP negotiation has failed. 
     2420                 */ 
     2421                pj_status_t rc; 
     2422                pj_str_t reason; 
     2423 
     2424                /* Delete the 2xx answer */ 
     2425                pjsip_tx_data_dec_ref(tdata); 
     2426                 
     2427                /* Create 500 response */ 
     2428                reason = pj_str("SDP negotiation failed"); 
     2429                rc = pjsip_dlg_create_response(dlg, rdata, 500, &reason,  
     2430                                               &tdata); 
     2431                if (rc == PJ_SUCCESS) { 
     2432                    pjsip_warning_hdr *w; 
     2433                    const pj_str_t *endpt_name; 
     2434 
     2435                    endpt_name = pjsip_endpt_name(dlg->endpt); 
     2436                    w = pjsip_warning_hdr_create_from_status(tdata->pool,  
     2437                                                             endpt_name, 
     2438                                                             status); 
     2439                    if (w) 
     2440                        pjsip_msg_add_hdr(tdata->msg, (pjsip_hdr*)w); 
     2441 
     2442                    pjsip_inv_send_msg(inv, tdata); 
     2443                } 
    24182444                return; 
    2419  
     2445            } 
     2446 
     2447            /* Send 2xx regardless of the status of negotiation */ 
    24202448            status = pjsip_inv_send_msg(inv, tdata); 
    24212449 
Note: See TracChangeset for help on using the changeset viewer.