aboutsip / pkts

Pure java based pcap library capable of reading and writing to/from pcaps.
Other
196 stars 91 forks source link

Allow: ACK, CANCEL, BYE ... parsed as VIA header #84

Closed Laranto closed 6 years ago

Laranto commented 6 years ago

Found in Release Version 3.0.2

Replicate with:

        StringBuilder sb = new StringBuilder();
        sb.append("INVITE sip:bob@192.168.1.100 SIP/2.0\n");
        sb.append("Via: SIP/2.0/UDP 192.168.1.201:2048;branch=z9hG4bK-16gcnwrd28r3;rport\n");
        sb.append("From: \"Alice\" <sip:alice@192.168.1.100>;tag=te94a023hw\n");
        sb.append("To: <sip:bob@192.168.1.100>\n");
        sb.append("Call-ID: 313438313130343734353532333433-xehwxtcark7e\n");
        sb.append("CSeq: 1 INVITE\n");
        sb.append("Max-Forwards: 70\n");
        sb.append("User-Agent: snom300/8.7.5.17\n");
        sb.append("Contact: <sip:alice@192.168.1.201:2048;line=8lif2g5m>;reg-id=1\n");
        sb.append("X-Serialnumber: 00041325476C\n");
        sb.append("P-Key-Flags: keys=\"3\"\n");
        sb.append("Accept: application/sdp\n");
        sb.append("Allow: INVITE, ACK, CANCEL, BYE, REFER, OPTIONS, NOTIFY, SUBSCRIBE, PRACK, MESSAGE, INFO, UPDATE\n");
        sb.append("Allow-Events: talk, hold, refer, call-info\n");
        sb.append("Supported: timer, 100rel, replaces, from-change\n");
        sb.append("Session-Expires: 3600\n");
        sb.append("Min-SE: 90\n");
        sb.append("Content-Type: application/sdp\n");
        sb.append("Content-Length: 403");
        sb.append("v=0\n");
        sb.append("o=root 722847273 722847273 IN IP4 192.168.1.201\n");
        sb.append("s=call\n");
        sb.append("c=IN IP4 192.168.1.201\n");
        sb.append("t=0 0\n");
        sb.append("m=audio 61856 RTP/AVP 9 0 8 3 99 112 18 101\n");
        sb.append("a=rtpmap:9 G722/8000\n");
        sb.append("a=rtpmap:0 PCMU/8000\n");
        sb.append("a=rtpmap:8 PCMA/8000\n");
        sb.append("a=rtpmap:3 GSM/8000\n");
        sb.append("a=rtpmap:99 G726-32/8000\n");
        sb.append("a=rtpmap:112 AAL2-G726-32/8000\n");
        sb.append("a=rtpmap:18 G729/8000\n");
        sb.append("a=fmtp:18 annexb=no\n");
        sb.append("a=rtpmap:101 telephone-event/8000\n");
        sb.append("a=fmtp:101 0-15\n");
        sb.append("a=ptime:20\n");
        sb.append("a=sendrecv\n");

        SipMessage msg = SipMessage.frame(sb.toString());

        System.out.println(msg.getViaHeaders());
jonbo372 commented 6 years ago

Hi and thanks for reporting!

The example you supplied is not correctly formatted. I added a unit test with your example and "fixed" the formatting and it is being parsed correctly (although I found a separate bug in handling Allow-Events). See full explanation in unit test or in this pull request: https://github.com/aboutsip/pkts/pull/87

I'm closing this bug.