bugThe eXtended osip library - Bugs: bug #54628, when send a re-INVITE, no ACK send...

 
 

bug #54628: when send a re-INVITE, no ACK send for retransmission 2xx respone

Submitter:  tanhuacheng <tanhuacheng>
Submitted:  Fri 07 Sep 2018 12:34:36 PM UTC
   
 
Category:  None Severity:  3 - Normal
Item Group:  None Status:  Fixed
Privacy:  Public Assigned to:  aymeric
Open/Closed:  Closed
* Mandatory Fields

Add a New Comment Rich Markup
   

Fri 07 Sep 2018 03:02:16 PM UTC, comment #1: 

Hi!

Let me focus on the ACK issue. (if you wish to discuss the r_reg_period issue, use the mailing list?)

I have read your patch proposal and decided to go a little further.

http://git.savannah.nongnu.org/cgit/exosip.git/commit/?id=80df7a0f8bafab38b52b0b49c73f579069f4e6ea

  • ACK was only retransmitted for initial outgoing INVITE.
  • fix: retransmit ACK for both initial INVITE and re-INVITE
  • fix: retransmit ACK for 2xx from forking (with a BYE) even if call does not exist.
  • ACK for "old transaction" within the established dialog won't be retransmitted

   because the parameter only hold the latest ACK.

The initial code was written, mostly, for a clean forking use-case and initial INVITE's ACK restransmission.

The newer change will handle, additionnaly, the re-INVITE, as well as outside calls 2xx.

Tks a lot for the report! It's been sometime I should have worked on this.
Regards
Aymeric

Aymeric MOIZARD <aymeric>
Group administrator
Fri 07 Sep 2018 12:34:36 PM UTC, original submission:  

hi, i had met an issue before, i think i should report the issue here.

when send a re-INVITE, no ACK send for retransmission 2xx respone, like this:

   Agent A                  Agent B
      |                        |
      |  INVITE(in-dialog)     |
      |----------------------->|
      |           200 OK       |
      |<-----------------------|
      |  ACK(missing)          |
      |--------------->        | assume this ACK packet is loss
      |           200 OK       |
      |<-----------------------|
      | no ACK send            |
      |           200 OK       |
      |<-----------------------|
      | no ACK send            |
      |                        |
      |         ......         |

    and i fix this issue with the following patch, i'm not sure if it's ok:

--- a/libexosip2/libexosip2-5.0.0/src/udp.c
+++ b/libexosip2/libexosip2-5.0.0/src/udp.c
@@ -1158,7 +1158,7 @@ _eXosip_process_response_out_of_transaction (struct eXosip_t *excontext, osip_ev
   /* search for existing dialog: match branch & to tag */
   for (jc = excontext->j_calls; jc != NULL; jc = jc->next) {
     /* search for calls with only ONE outgoing transaction */
-    if (jc->c_id >= 1 && jc->c_dialogs != NULL && jc->c_out_tr != NULL) {
+    if (jc->c_id >= 1 && jc->c_dialogs != NULL) {
       for (jd = jc->c_dialogs; jd != NULL; jd = jd->next) {
         if (jd->d_id >= 1 && jd->d_dialog != NULL) {
           /* match answer with dialog */
@@ -1176,7 +1176,8 @@ _eXosip_process_response_out_of_transaction (struct eXosip_t *excontext, osip_ev
         break;                  /* found a matching dialog! */

       /* check if the transaction match this from tag */
-      if (jc->c_out_tr->orig_request != NULL && jc->c_out_tr->orig_request->from != NULL) {
+      if (jc->c_out_tr != NULL &&
+          jc->c_out_tr->orig_request != NULL && jc->c_out_tr->orig_request->from != NULL) {
         osip_generic_param_t *tag_invite;
         osip_generic_param_t *tag;



    by the way, i find that many "eXosip_xxx_build_xxx" functions has side-effect when call failure.
for example eXosip_register_build_register. when i call this function when jr->r_last_tr->state is
NICT_COMPLETED or NICT_TERMINATED, it returns OSIP_WRONG_STATE, which is ok. but before it return,
jr->r_reg_period, jr->r_reg_expire, etc. was updatedA

tanhuacheng <tanhuacheng>

 

(Note: upload size limit is set to 16384 kB, after insertion of the required escape characters.)

Attach Files:
   
   
Comment:
   

No files currently attached

 

Depends on the following items: None found

Items that depend on this one: None found

 

Carbon-Copy List
  • -email is unavailable- added by aymeric (Posted a comment)
  • -email is unavailable- added by tanhuacheng (Submitted the item)
  • -email is unavailable- added by tanhuacheng
  •  

    There are 0 votes so far. Votes easily highlight which items people would like to see resolved in priority, independently of the priority of the item set by tracker managers.

    Only logged-in users can vote.

     

    Follow 5 latest changes.

    Date Changed by Updated Field Previous Value => Replaced by
    2019-03-18 aymeric StatusReady For Test Fixed
        Open/ClosedOpen Closed
    2018-09-07 aymeric StatusNone Ready For Test
        Assigned toNone aymeric
    2018-09-07 tanhuacheng Carbon-Copy- Added -email is unavailable-

    Back to the top

    Powered by Savane 3.13-758e.
    Corresponding source code