Bug 23 - TransactionState::process() should not copy RAck from request to response
Summary: TransactionState::process() should not copy RAck from request to response
Status: NEW
Alias: None
Product: resiprocate
Classification: Unclassified
Component: stack (libresip) (show other bugs)
Version: unspecified
Hardware: All Linux
: P1 major
Assignee: Owner of all unassigned bugs
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2012-01-18 12:41 CST by John Gregg
Modified: 2012-01-18 12:41 CST (History)
0 users

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description John Gregg 2012-01-18 12:41:45 CST
RAck only should appear in PRACK (request), and not in the 200 OK response to the PRACK. The code in TransactionState.cxx TransactionState::process() wrongly copies RAck from the request to the response (grep for h_RAck, this is the only place in the whole file it appears). What's more, because the copy appears to leave off the method from the original request's RAck, the response subsequently fails basic parsing upon receipt by another UA. I am using resiprocate 1.7. This substantially affects all reliable provisional response transactions.

Basically, this code should simply be removed:

          if(state->mMsgToRetransmit->exists(h_RAck))
          {
             if(!(sip->header(h_RAck)==state->mMsgToRetransmit->header(h_RAck)))
             {
                InfoLog(<<"Other end changed our RAck... replacing.");
                sip->header(h_RAck)=state->mMsgToRetransmit->header(h_RAck);
             }
          }