|
@@ -49,7 +49,8 @@
|
|
|
* 2004-03-31 fixed rport set instead of i bug (andrei)
|
|
|
* 2005-03-02 if via has multiple bodies, and one of them is bad set
|
|
|
* also the first one as bad (andrei)
|
|
|
- * 2006-02-24 added support for comp parameter parsing (see rfc3486) (andrei)
|
|
|
+ * 2006-02-24 added support for comp parameter parsing, see rfc3486 (andrei)
|
|
|
+ * 2008-08-08 SCTP support (andrei)
|
|
|
*/
|
|
|
|
|
|
|
|
@@ -90,6 +91,7 @@ enum {
|
|
|
UDP1, UDP2, FIN_UDP,
|
|
|
TCP_TLS1, TCP2, FIN_TCP,
|
|
|
TLS2, FIN_TLS,
|
|
|
+ SCTP1, SCTP2, SCTP3, FIN_SCTP,
|
|
|
L_PROTO, F_PROTO
|
|
|
};
|
|
|
|
|
@@ -1359,6 +1361,12 @@ parse_again:
|
|
|
vb->proto=PROTO_TLS;
|
|
|
state=F_HOST; /* start looking for host*/
|
|
|
goto main_via;
|
|
|
+ case FIN_SCTP:
|
|
|
+ /* finished proto parsing */
|
|
|
+ vb->transport.len=tmp-vb->transport.s;
|
|
|
+ vb->proto=PROTO_SCTP;
|
|
|
+ state=F_HOST; /* start looking for host*/
|
|
|
+ goto main_via;
|
|
|
case FIN_SIP:
|
|
|
vb->name.len=tmp-vb->name.s;
|
|
|
state=L_VER;
|
|
@@ -1512,6 +1520,10 @@ parse_again:
|
|
|
case TLS2:
|
|
|
state=FIN_TLS;
|
|
|
break;
|
|
|
+ case F_PROTO:
|
|
|
+ state=SCTP1;
|
|
|
+ vb->transport.s=tmp;
|
|
|
+ break;
|
|
|
default:
|
|
|
LOG(L_ERR, "ERROR: parse_via: bad char <%c> on"
|
|
|
" state %d\n", *tmp, state);
|
|
@@ -1543,6 +1555,9 @@ parse_again:
|
|
|
case TCP2:
|
|
|
state=FIN_TCP;
|
|
|
break;
|
|
|
+ case SCTP3:
|
|
|
+ state=FIN_SCTP;
|
|
|
+ break;
|
|
|
default:
|
|
|
LOG(L_ERR, "ERROR: parse_via: bad char <%c> on"
|
|
|
" state %d\n", *tmp, state);
|
|
@@ -1581,6 +1596,9 @@ parse_again:
|
|
|
state=TCP_TLS1;
|
|
|
vb->transport.s=tmp;
|
|
|
break;
|
|
|
+ case SCTP2:
|
|
|
+ state=SCTP3;
|
|
|
+ break;
|
|
|
default:
|
|
|
LOG(L_ERR, "ERROR: parse_via: bad char <%c> on"
|
|
|
" state %d\n", *tmp, state);
|
|
@@ -1593,6 +1611,9 @@ parse_again:
|
|
|
case TCP_TLS1:
|
|
|
state=TCP2;
|
|
|
break;
|
|
|
+ case SCTP1:
|
|
|
+ state=SCTP2;
|
|
|
+ break;
|
|
|
default:
|
|
|
LOG(L_ERR, "ERROR: parse_via: bad char <%c> on"
|
|
|
" state %d\n", *tmp, state);
|