Hi Nauman, did you find a solution for the problem when forking is combined with PRACK? Currently we are running into same problems with sofia-sip connecting to a server that uses forking.
Seems that disabling PRACK and soa engine works. But what if PRACK is required? Thanks, Timo > Hi, > > Got a bit further with this, reason that the 200OK ( to INVITE) is being > discarded is because of this code : > > static int nua_invite_client_preliminary(nua_client_request_t *cr, > int status, char const *phrase, > sip_t const *sip) > { > nua_handle_t *nh = cr->cr_owner; > nua_dialog_usage_t *du = cr->cr_usage; > nua_session_usage_t *ss = nua_dialog_usage_private(du); > > assert(sip); > > if (ss && sip && sip->sip_rseq) { > /* Handle 100rel responses */ > sip_rseq_t *rseq = sip->sip_rseq; > > /* Establish early dialog - we should fork here */ > if (!nua_dialog_is_established(nh->nh_ds)) { > nta_outgoing_t *tagged; > > nua_dialog_uac_route(nh, nh->nh_ds, sip, 1, 1); > nua_dialog_store_peer_info(nh, nh->nh_ds, sip); > > /* Tag the INVITE request */ > tagged = nta_outgoing_tagged(cr->cr_orq, > nua_client_orq_response, cr, > sip->sip_to->a_tag, sip->sip_rseq); > if (tagged) { > nta_outgoing_destroy(cr->cr_orq), cr->cr_orq = tagged; > } > else { > cr->cr_graceful = 1; > ss->ss_reason = "SIP;cause=500;text=\"Cannot Create Early Dialog\""; > } > } > > > When we get a 183 reliable response Sofia creates an early dialog and creates > a new tagged INVITE request > > if (tagged) { > nta_outgoing_destroy(cr->cr_orq) > > It looks like it marks the original request for destruction, the problem is > when a 200OK comes in with a different tag, it looks as if its matched > against the original transaction which is marked for > destruction and so is > discarded by the code I posted initially in outgoing_recv in nta.c > > > We are handling all media (SDP) ourselves and have set PRACK to be one of the > methods our app handles. We are using the nua API. > > Can Pekka or someone say whether PRACK and forking is supported with the way > we are using the Stack. We've seen some posts saying there are various bugs. > > When PRACK is not used the first 200OK received is passed to the application > with cancel sent to the others. This is the behaviour we would like even when > PRACK is used. However it seems > that when the first 183 reliable is > received this results in subsequent 200OK from other forks to be discarded. > We just want the first 200OK final response to be passed to our application > > irrespective of which fork its from and are happy for CANCEL to be sent to > others. > > Any comments most appreciated. > Thanks > ___________________________________________________________ Ihr WEB.DE Postfach immer dabei: die kostenlose WEB.DE Mail App für iPhone und Android. https://produkte.web.de/freemail_mobile_startseite/ ------------------------------------------------------------------------------ Virtualization & Cloud Management Using Capacity Planning Cloud computing makes use of virtualization - but cloud computing also focuses on allowing computing to be delivered as a service. http://www.accelacomm.com/jaw/sfnl/114/51521223/ _______________________________________________ Sofia-sip-devel mailing list Sofia-sip-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/sofia-sip-devel