Browse Source

- support for sctp

Andrei Pelinescu-Onciul 17 năm trước cách đây
mục cha
commit
dec9733aa5
2 tập tin đã thay đổi với 25 bổ sung2 xóa
  1. 22 1
      parser/parse_via.c
  2. 3 1
      resolve.c

+ 22 - 1
parser/parse_via.c

@@ -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);

+ 3 - 1
resolve.c

@@ -862,8 +862,10 @@ int naptr_proto_supported(char proto)
 			return !tls_disable;
 #endif /* USE_TLS */
 #endif /* USE_TCP */
+#ifdef USE_SCTP
 		case PROTO_SCTP:
-			return 0; /* not supported */
+			return !sctp_disable;
+#endif
 	}
 	return 0;
 }