diff --git a/example/echo/echo_test.go b/example/echo/echo_test.go index 0a6195a..60d08b5 100755 --- a/example/echo/echo_test.go +++ b/example/echo/echo_test.go @@ -179,7 +179,7 @@ func TestCallToEchoApp(t *testing.T) { Via: &sip.Via{ Host: laddr.IP.String(), Port: uint16(laddr.Port), - Param: &sip.Param{"branch", util.GenerateBranch(), nil}, + Param: &sip.Param{Name: "branch", Value: util.GenerateBranch()}, }, From: &sip.Addr{ Display: "Echo Test", @@ -188,7 +188,7 @@ func TestCallToEchoApp(t *testing.T) { Host: laddr.IP.String(), Port: uint16(laddr.Port), }, - Param: &sip.Param{"tag", util.GenerateTag(), nil}, + Param: &sip.Param{Name: "tag", Value: util.GenerateTag()}, }, To: &sip.Addr{ Uri: &sip.URI{ @@ -224,7 +224,7 @@ func TestCallToEchoApp(t *testing.T) { t.Fatal("read 100 trying:", err) } log.Printf("<<< %s\n%s\n", raddr, string(memory[0:amt])) - msg, err := sip.ParseMsg(string(memory[0:amt])) + msg, err := sip.ParseMsg(memory[0:amt]) if err != nil { t.Fatal("parse 100 trying", err) } @@ -239,7 +239,7 @@ func TestCallToEchoApp(t *testing.T) { t.Fatal("read 200 ok:", err) } log.Printf("<<< %s\n%s\n", raddr, string(memory[0:amt])) - msg, err = sip.ParseMsg(string(memory[0:amt])) + msg, err = sip.ParseMsg(memory[0:amt]) if err != nil { t.Fatal("parse 200 ok:", err) } @@ -341,7 +341,7 @@ func TestCallToEchoApp(t *testing.T) { if err != nil { t.Fatal(err) } - msg, err = sip.ParseMsg(string(memory[0:amt])) + msg, err = sip.ParseMsg(memory[0:amt]) if err != nil { t.Fatal(err) } diff --git a/example/options/options_test.go b/example/options/options_test.go index 511d024..ece2927 100755 --- a/example/options/options_test.go +++ b/example/options/options_test.go @@ -39,7 +39,7 @@ func TestOptions(t *testing.T) { Protocol: "UDP", Host: laddr.IP.String(), Port: uint16(laddr.Port), - Param: &sip.Param{"branch", util.GenerateBranch(), nil}, + Param: &sip.Param{Name: "branch", Value: util.GenerateBranch()}, }, Contact: &sip.Addr{ Uri: &sip.URI{ @@ -53,7 +53,7 @@ func TestOptions(t *testing.T) { Host: "justinetunney.com", Port: 5060, }, - Param: &sip.Param{"tag", util.GenerateTag(), nil}, + Param: &sip.Param{Name: "tag", Value: util.GenerateTag()}, }, To: &sip.Addr{ Uri: &sip.URI{ @@ -76,7 +76,7 @@ func TestOptions(t *testing.T) { t.Fatal(err) } - msg, err := sip.ParseMsg(string(memory[0:amt])) + msg, err := sip.ParseMsg(memory[0:amt]) if err != nil { t.Fatal(err) } diff --git a/sip/addr.go b/sip/addr.go index 818168f..9d62548 100755 --- a/sip/addr.go +++ b/sip/addr.go @@ -31,22 +31,6 @@ type Addr struct { Next *Addr // for comma separated lists of addresses } -func ParseAddr(s string) (addr *Addr, err error) { - return ParseAddrBytes([]byte(s)) -} - -func ParseAddrBytes(s []byte) (addr *Addr, err error) { - var b bytes.Buffer - b.WriteString("SIP/2.0 900 ParseAddr()\r\nContact:") - b.Write(s) - b.WriteString("\r\n\r\n") - msg, err := ParseMsgBytes(b.Bytes()) - if err != nil { - return nil, err - } - return msg.Contact, nil -} - func (addr *Addr) String() string { var b bytes.Buffer addr.Append(&b) diff --git a/sip/addr_test.go b/sip/addr_test.go index 59b0065..8c08f07 100755 --- a/sip/addr_test.go +++ b/sip/addr_test.go @@ -1,6 +1,7 @@ package sip_test import ( + "bytes" "github.com/jart/gosip/sip" "reflect" "testing" @@ -35,7 +36,7 @@ var addrTests = []addrTest{ Scheme: "sip", Host: "pokemon.net", }, - Param: &sip.Param{"tag", "deadbeef", nil}, + Param: &sip.Param{Name: "tag", Value: "deadbeef"}, }, }, @@ -48,7 +49,7 @@ var addrTests = []addrTest{ Scheme: "sip", Host: "pokemon.net", }, - Param: &sip.Param{"tag", "deadbeef", nil}, + Param: &sip.Param{Name: "tag", Value: "deadbeef"}, }, }, @@ -61,7 +62,7 @@ var addrTests = []addrTest{ Scheme: "sip", Host: "pokemon.net", }, - Param: &sip.Param{"tag", "deadbeef", nil}, + Param: &sip.Param{Name: "tag", Value: "deadbeef"}, }, }, @@ -74,7 +75,7 @@ var addrTests = []addrTest{ Scheme: "sip", Host: "pokemon.net", }, - Param: &sip.Param{"tag", "deadbeef", nil}, + Param: &sip.Param{Name: "tag", Value: "deadbeef"}, }, }, @@ -86,7 +87,7 @@ var addrTests = []addrTest{ Scheme: "sip", Host: "pokemon.net", }, - Param: &sip.Param{"tag", "\"deadbeef\"", nil}, + Param: &sip.Param{Name: "tag", Value: "\"deadbeef\""}, }, }, @@ -98,7 +99,7 @@ var addrTests = []addrTest{ Scheme: "sip", User: "brave", Host: "toaster.net", - Param: &sip.URIParam{"isup-oli", "29", nil}, + Param: &sip.URIParam{Name: "isup-oli", Value: "29"}, }, }, }, @@ -111,9 +112,9 @@ var addrTests = []addrTest{ Scheme: "sip", User: "brave", Host: "toaster.net", - Param: &sip.URIParam{"isup-oli", "29", nil}, + Param: &sip.URIParam{Name: "isup-oli", Value: "29"}, }, - Param: &sip.Param{"tag", "deadbeef", nil}, + Param: &sip.Param{Name: "tag", Value: "deadbeef"}, }, }, @@ -166,16 +167,28 @@ var addrTests = []addrTest{ Scheme: "sip", User: "jart", Host: "google.com", - Param: &sip.URIParam{"isup-oli", "29", nil}, + Param: &sip.URIParam{Name: "isup-oli", Value: "29"}, }, - Param: &sip.Param{"tag", "deadbeef", nil}, + Param: &sip.Param{Name: "tag", Value: "deadbeef"}, }, }, } -func TestParseAddr(t *testing.T) { +func ParseAddrBytes(s []byte) (addr *sip.Addr, err error) { + var b bytes.Buffer + b.WriteString("SIP/2.0 900 ParseAddrBytes()\r\nContact:") + b.Write(s) + b.WriteString("\r\n\r\n") + msg, err := sip.ParseMsg(b.Bytes()) + if err != nil { + return nil, err + } + return msg.Contact, nil +} + +func TestParseAddrBytes(t *testing.T) { for _, test := range addrTests { - addr, err := sip.ParseAddr(test.s) + addr, err := ParseAddrBytes([]byte(test.s)) if err != nil { if test.err == nil { t.Error(err) diff --git a/sip/compact.go b/sip/compact.go deleted file mode 100644 index dca4e2e..0000000 --- a/sip/compact.go +++ /dev/null @@ -1,29 +0,0 @@ -// SIP Compact Header Definitions - -package sip - -func uncompactHeader(k string) string { - if header, ok := compactHeaders[k]; ok { - return header - } - return k -} - -// http://www.cs.columbia.edu/sip/compact.html -var compactHeaders = map[string]string{ - "a": "Accept-Contact", - "b": "Referred-By", - "c": "Content-Type", - "e": "Content-Encoding", - "f": "From", - "i": "Call-ID", - "k": "Supported", - "l": "Content-Length", - "m": "Contact", - "o": "Event", - "r": "Refer-To", - "s": "Subject", - "t": "To", - "u": "Allow-Events", - "v": "Via", -} diff --git a/sip/dialog.go b/sip/dialog.go index b6007a3..00b37fc 100755 --- a/sip/dialog.go +++ b/sip/dialog.go @@ -373,7 +373,7 @@ func (dls *dialogState) send(msg *Msg) bool { dls.b.Reset() msg.Append(&dls.b) if *tracing { - trace("send", dls.b.String(), dls.sock.RemoteAddr()) + trace("send", dls.b.Bytes(), dls.sock.RemoteAddr()) } _, err := dls.sock.Write(dls.b.Bytes()) if err != nil { diff --git a/sip/errors.go b/sip/errors.go index dddda74..ab943ac 100644 --- a/sip/errors.go +++ b/sip/errors.go @@ -10,5 +10,5 @@ type ResponseError struct { } func (err *ResponseError) Error() string { - return fmt.Sprintf("%s: %d", err.Msg.Status, err.Msg.Phrase) + return fmt.Sprintf("%d: %s", err.Msg.Status, err.Msg.Phrase) } diff --git a/sip/msg_parse.go b/sip/msg_parse.go index 78900e7..ea245ae 100644 --- a/sip/msg_parse.go +++ b/sip/msg_parse.go @@ -35,16 +35,8 @@ const msg_en_main int = 1 //line msg_parse.rl:14 -// ParseMsg turns a SIP message into a data structure. -func ParseMsg(s string) (msg *Msg, err error) { - if s == "" { - return nil, errors.New("Empty SIP message") - } - return ParseMsgBytes([]byte(s)) -} - // ParseMsg turns a SIP message byte slice into a data structure. -func ParseMsgBytes(data []byte) (msg *Msg, err error) { +func ParseMsg(data []byte) (msg *Msg, err error) { if data == nil { return nil, nil } @@ -67,16 +59,16 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { var addr *Addr -//line msg_parse.rl:47 +//line msg_parse.rl:39 -//line msg_parse.go:73 +//line msg_parse.go:65 { cs = msg_start } -//line msg_parse.rl:48 +//line msg_parse.rl:40 -//line msg_parse.go:80 +//line msg_parse.go:72 { var _widec int16 if p == pe { @@ -1695,7 +1687,7 @@ tr416: {goto st273 } goto st0 -//line msg_parse.go:1699 +//line msg_parse.go:1691 st_case_0: st0: cs = 0 @@ -1711,7 +1703,7 @@ tr0: goto _test_eof2 } st_case_2: -//line msg_parse.go:1715 +//line msg_parse.go:1707 switch data[p] { case 32: goto tr3 @@ -1758,7 +1750,7 @@ tr3: goto _test_eof3 } st_case_3: -//line msg_parse.go:1762 +//line msg_parse.go:1754 if data[p] == 32 { goto st0 } @@ -1774,7 +1766,7 @@ tr5: goto _test_eof4 } st_case_4: -//line msg_parse.go:1778 +//line msg_parse.go:1770 if data[p] == 32 { goto tr7 } @@ -1782,7 +1774,7 @@ tr5: tr7: //line sip.rl:111 - msg.Request, err = ParseURIBytes(data[mark:p]) + msg.Request, err = ParseURI(data[mark:p]) if err != nil { return nil, err } goto st5 @@ -1791,7 +1783,7 @@ tr7: goto _test_eof5 } st_case_5: -//line msg_parse.go:1795 +//line msg_parse.go:1787 if data[p] == 83 { goto st6 } @@ -1843,7 +1835,7 @@ tr12: goto _test_eof10 } st_case_10: -//line msg_parse.go:1847 +//line msg_parse.go:1839 if data[p] == 46 { goto st11 } @@ -1871,7 +1863,7 @@ tr14: goto _test_eof12 } st_case_12: -//line msg_parse.go:1875 +//line msg_parse.go:1867 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -1897,7 +1889,7 @@ tr42: goto _test_eof13 } st_case_13: -//line msg_parse.go:1901 +//line msg_parse.go:1893 if data[p] == 10 { goto tr16 } @@ -1911,7 +1903,7 @@ tr16: goto _test_eof765 } st_case_765: -//line msg_parse.go:1915 +//line msg_parse.go:1907 goto st0 tr2: //line sip.rl:67 @@ -1924,7 +1916,7 @@ tr2: goto _test_eof14 } st_case_14: -//line msg_parse.go:1928 +//line msg_parse.go:1920 switch data[p] { case 32: goto tr3 @@ -2061,7 +2053,7 @@ tr20: goto _test_eof18 } st_case_18: -//line msg_parse.go:2065 +//line msg_parse.go:2057 if data[p] == 46 { goto st19 } @@ -2089,7 +2081,7 @@ tr22: goto _test_eof20 } st_case_20: -//line msg_parse.go:2093 +//line msg_parse.go:2085 if data[p] == 32 { goto st21 } @@ -2117,7 +2109,7 @@ tr24: goto _test_eof22 } st_case_22: -//line msg_parse.go:2121 +//line msg_parse.go:2113 if 48 <= data[p] && data[p] <= 57 { goto tr25 } @@ -2133,7 +2125,7 @@ tr25: goto _test_eof23 } st_case_23: -//line msg_parse.go:2137 +//line msg_parse.go:2129 if 48 <= data[p] && data[p] <= 57 { goto tr26 } @@ -2149,7 +2141,7 @@ tr26: goto _test_eof24 } st_case_24: -//line msg_parse.go:2153 +//line msg_parse.go:2145 if data[p] == 32 { goto st25 } @@ -2243,7 +2235,7 @@ tr44: goto _test_eof26 } st_case_26: -//line msg_parse.go:2247 +//line msg_parse.go:2239 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -2317,7 +2309,7 @@ tr29: goto _test_eof27 } st_case_27: -//line msg_parse.go:2321 +//line msg_parse.go:2313 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -2342,7 +2334,7 @@ tr43: goto _test_eof28 } st_case_28: -//line msg_parse.go:2346 +//line msg_parse.go:2338 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -2379,7 +2371,7 @@ tr37: goto _test_eof29 } st_case_29: -//line msg_parse.go:2383 +//line msg_parse.go:2375 if 128 <= data[p] && data[p] <= 191 { goto tr35 } @@ -2407,7 +2399,7 @@ tr38: goto _test_eof30 } st_case_30: -//line msg_parse.go:2411 +//line msg_parse.go:2403 if 128 <= data[p] && data[p] <= 191 { goto tr37 } @@ -2435,7 +2427,7 @@ tr39: goto _test_eof31 } st_case_31: -//line msg_parse.go:2439 +//line msg_parse.go:2431 if 128 <= data[p] && data[p] <= 191 { goto tr38 } @@ -2463,7 +2455,7 @@ tr40: goto _test_eof32 } st_case_32: -//line msg_parse.go:2467 +//line msg_parse.go:2459 if 128 <= data[p] && data[p] <= 191 { goto tr39 } @@ -2491,7 +2483,7 @@ tr41: goto _test_eof33 } st_case_33: -//line msg_parse.go:2495 +//line msg_parse.go:2487 if 128 <= data[p] && data[p] <= 191 { goto tr40 } @@ -2545,7 +2537,7 @@ tr45: goto _test_eof35 } st_case_35: -//line msg_parse.go:2549 +//line msg_parse.go:2541 switch data[p] { case 33: goto st35 @@ -2680,7 +2672,7 @@ tr49: goto _test_eof38 } st_case_38: -//line msg_parse.go:2684 +//line msg_parse.go:2676 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -2710,7 +2702,7 @@ tr50: goto _test_eof39 } st_case_39: -//line msg_parse.go:2714 +//line msg_parse.go:2706 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -2952,7 +2944,7 @@ tr51: goto _test_eof44 } st_case_44: -//line msg_parse.go:2956 +//line msg_parse.go:2948 if data[p] == 10 { goto tr65 } @@ -2966,7 +2958,7 @@ tr65: goto _test_eof766 } st_case_766: -//line msg_parse.go:2970 +//line msg_parse.go:2962 goto st0 tr52: //line sip.rl:215 @@ -2979,7 +2971,7 @@ tr52: goto _test_eof45 } st_case_45: -//line msg_parse.go:2983 +//line msg_parse.go:2975 if data[p] == 10 { goto st46 } @@ -3082,7 +3074,7 @@ tr77: goto _test_eof49 } st_case_49: -//line msg_parse.go:3086 +//line msg_parse.go:3078 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -3138,7 +3130,7 @@ tr69: goto _test_eof50 } st_case_50: -//line msg_parse.go:3142 +//line msg_parse.go:3134 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -3170,7 +3162,7 @@ tr70: goto _test_eof51 } st_case_51: -//line msg_parse.go:3174 +//line msg_parse.go:3166 switch { case data[p] < 11: if data[p] <= 9 { @@ -3207,7 +3199,7 @@ tr80: goto _test_eof52 } st_case_52: -//line msg_parse.go:3211 +//line msg_parse.go:3203 if 128 <= data[p] && data[p] <= 191 { goto tr77 } @@ -3235,7 +3227,7 @@ tr81: goto _test_eof53 } st_case_53: -//line msg_parse.go:3239 +//line msg_parse.go:3231 if 128 <= data[p] && data[p] <= 191 { goto tr80 } @@ -3263,7 +3255,7 @@ tr82: goto _test_eof54 } st_case_54: -//line msg_parse.go:3267 +//line msg_parse.go:3259 if 128 <= data[p] && data[p] <= 191 { goto tr81 } @@ -3291,7 +3283,7 @@ tr83: goto _test_eof55 } st_case_55: -//line msg_parse.go:3295 +//line msg_parse.go:3287 if 128 <= data[p] && data[p] <= 191 { goto tr82 } @@ -3319,7 +3311,7 @@ tr84: goto _test_eof56 } st_case_56: -//line msg_parse.go:3323 +//line msg_parse.go:3315 if 128 <= data[p] && data[p] <= 191 { goto tr83 } @@ -3347,7 +3339,7 @@ tr85: goto _test_eof57 } st_case_57: -//line msg_parse.go:3351 +//line msg_parse.go:3343 if data[p] == 10 { goto tr86 } @@ -3364,7 +3356,7 @@ tr86: goto _test_eof58 } st_case_58: -//line msg_parse.go:3368 +//line msg_parse.go:3360 switch data[p] { case 9: goto tr77 @@ -3588,7 +3580,7 @@ tr93: goto _test_eof69 } st_case_69: -//line msg_parse.go:3592 +//line msg_parse.go:3584 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -3649,7 +3641,7 @@ tr94: goto _test_eof70 } st_case_70: -//line msg_parse.go:3653 +//line msg_parse.go:3645 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -3683,7 +3675,7 @@ tr96: goto _test_eof71 } st_case_71: -//line msg_parse.go:3687 +//line msg_parse.go:3679 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -3769,7 +3761,7 @@ tr122: goto _test_eof767 } st_case_767: -//line msg_parse.go:3773 +//line msg_parse.go:3765 goto st0 st72: if p++; p == pe { @@ -3815,7 +3807,7 @@ tr97: goto _test_eof75 } st_case_75: -//line msg_parse.go:3819 +//line msg_parse.go:3811 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -3886,7 +3878,7 @@ tr98: goto _test_eof79 } st_case_79: -//line msg_parse.go:3890 +//line msg_parse.go:3882 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -3949,7 +3941,7 @@ tr114: goto _test_eof80 } st_case_80: -//line msg_parse.go:3953 +//line msg_parse.go:3945 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4072,7 +4064,7 @@ tr99: goto _test_eof85 } st_case_85: -//line msg_parse.go:4076 +//line msg_parse.go:4068 if data[p] == 10 { goto tr122 } @@ -4149,7 +4141,7 @@ tr132: goto _test_eof87 } st_case_87: -//line msg_parse.go:4153 +//line msg_parse.go:4145 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4205,7 +4197,7 @@ tr124: goto _test_eof88 } st_case_88: -//line msg_parse.go:4209 +//line msg_parse.go:4201 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4239,7 +4231,7 @@ tr125: goto _test_eof89 } st_case_89: -//line msg_parse.go:4243 +//line msg_parse.go:4235 switch { case data[p] < 11: if data[p] <= 9 { @@ -4276,7 +4268,7 @@ tr135: goto _test_eof90 } st_case_90: -//line msg_parse.go:4280 +//line msg_parse.go:4272 if 128 <= data[p] && data[p] <= 191 { goto tr132 } @@ -4304,7 +4296,7 @@ tr136: goto _test_eof91 } st_case_91: -//line msg_parse.go:4308 +//line msg_parse.go:4300 if 128 <= data[p] && data[p] <= 191 { goto tr135 } @@ -4332,7 +4324,7 @@ tr137: goto _test_eof92 } st_case_92: -//line msg_parse.go:4336 +//line msg_parse.go:4328 if 128 <= data[p] && data[p] <= 191 { goto tr136 } @@ -4360,7 +4352,7 @@ tr138: goto _test_eof93 } st_case_93: -//line msg_parse.go:4364 +//line msg_parse.go:4356 if 128 <= data[p] && data[p] <= 191 { goto tr137 } @@ -4388,7 +4380,7 @@ tr139: goto _test_eof94 } st_case_94: -//line msg_parse.go:4392 +//line msg_parse.go:4384 if 128 <= data[p] && data[p] <= 191 { goto tr138 } @@ -4416,7 +4408,7 @@ tr140: goto _test_eof95 } st_case_95: -//line msg_parse.go:4420 +//line msg_parse.go:4412 if data[p] == 10 { goto tr141 } @@ -4433,7 +4425,7 @@ tr141: goto _test_eof96 } st_case_96: -//line msg_parse.go:4437 +//line msg_parse.go:4429 switch data[p] { case 9: goto tr132 @@ -4519,7 +4511,7 @@ tr100: goto _test_eof100 } st_case_100: -//line msg_parse.go:4523 +//line msg_parse.go:4515 if data[p] == 10 { goto st101 } @@ -4603,7 +4595,7 @@ tr146: goto _test_eof104 } st_case_104: -//line msg_parse.go:4607 +//line msg_parse.go:4599 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4658,7 +4650,7 @@ tr147: goto _test_eof105 } st_case_105: -//line msg_parse.go:4662 +//line msg_parse.go:4654 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4688,7 +4680,7 @@ tr149: goto _test_eof106 } st_case_106: -//line msg_parse.go:4692 +//line msg_parse.go:4684 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4746,7 +4738,7 @@ tr154: goto _test_eof107 } st_case_107: -//line msg_parse.go:4750 +//line msg_parse.go:4742 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4801,7 +4793,7 @@ tr156: goto _test_eof108 } st_case_108: -//line msg_parse.go:4805 +//line msg_parse.go:4797 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4831,7 +4823,7 @@ tr158: goto _test_eof109 } st_case_109: -//line msg_parse.go:4835 +//line msg_parse.go:4827 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4889,7 +4881,7 @@ tr163: goto _test_eof110 } st_case_110: -//line msg_parse.go:4893 +//line msg_parse.go:4885 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4947,7 +4939,7 @@ tr165: goto _test_eof111 } st_case_111: -//line msg_parse.go:4951 +//line msg_parse.go:4943 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4994,7 +4986,7 @@ tr169: goto _test_eof112 } st_case_112: -//line msg_parse.go:4998 +//line msg_parse.go:4990 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -5047,7 +5039,7 @@ tr172: goto _test_eof113 } st_case_113: -//line msg_parse.go:5051 +//line msg_parse.go:5043 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -5081,7 +5073,7 @@ tr173: goto _test_eof114 } st_case_114: -//line msg_parse.go:5085 +//line msg_parse.go:5077 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -5155,7 +5147,7 @@ tr199: goto _test_eof768 } st_case_768: -//line msg_parse.go:5159 +//line msg_parse.go:5151 goto st0 st115: if p++; p == pe { @@ -5201,7 +5193,7 @@ tr175: goto _test_eof118 } st_case_118: -//line msg_parse.go:5205 +//line msg_parse.go:5197 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -5232,7 +5224,7 @@ tr188: goto _test_eof119 } st_case_119: -//line msg_parse.go:5236 +//line msg_parse.go:5228 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -5294,7 +5286,7 @@ tr176: goto _test_eof121 } st_case_121: -//line msg_parse.go:5298 +//line msg_parse.go:5290 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -5402,7 +5394,7 @@ tr177: goto _test_eof128 } st_case_128: -//line msg_parse.go:5406 +//line msg_parse.go:5398 if data[p] == 10 { goto tr199 } @@ -5454,7 +5446,7 @@ tr178: goto _test_eof132 } st_case_132: -//line msg_parse.go:5458 +//line msg_parse.go:5450 if data[p] == 10 { goto st133 } @@ -5521,7 +5513,7 @@ tr204: goto _test_eof136 } st_case_136: -//line msg_parse.go:5525 +//line msg_parse.go:5517 switch data[p] { case 46: goto st136 @@ -5552,7 +5544,7 @@ tr206: goto _test_eof137 } st_case_137: -//line msg_parse.go:5556 +//line msg_parse.go:5548 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -5588,7 +5580,7 @@ tr167: goto _test_eof138 } st_case_138: -//line msg_parse.go:5592 +//line msg_parse.go:5584 if data[p] == 10 { goto st139 } @@ -5710,7 +5702,7 @@ tr159: goto _test_eof144 } st_case_144: -//line msg_parse.go:5714 +//line msg_parse.go:5706 if data[p] == 10 { goto st145 } @@ -5815,7 +5807,7 @@ tr150: goto _test_eof150 } st_case_150: -//line msg_parse.go:5819 +//line msg_parse.go:5811 if data[p] == 10 { goto st151 } @@ -5899,7 +5891,7 @@ tr217: goto _test_eof154 } st_case_154: -//line msg_parse.go:5903 +//line msg_parse.go:5895 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -5960,7 +5952,7 @@ tr218: goto _test_eof155 } st_case_155: -//line msg_parse.go:5964 +//line msg_parse.go:5956 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -5994,7 +5986,7 @@ tr220: goto _test_eof156 } st_case_156: -//line msg_parse.go:5998 +//line msg_parse.go:5990 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -6072,7 +6064,7 @@ tr246: goto _test_eof769 } st_case_769: -//line msg_parse.go:6076 +//line msg_parse.go:6068 goto st0 st157: if p++; p == pe { @@ -6118,7 +6110,7 @@ tr221: goto _test_eof160 } st_case_160: -//line msg_parse.go:6122 +//line msg_parse.go:6114 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -6189,7 +6181,7 @@ tr222: goto _test_eof164 } st_case_164: -//line msg_parse.go:6193 +//line msg_parse.go:6185 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -6252,7 +6244,7 @@ tr238: goto _test_eof165 } st_case_165: -//line msg_parse.go:6256 +//line msg_parse.go:6248 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -6375,7 +6367,7 @@ tr223: goto _test_eof170 } st_case_170: -//line msg_parse.go:6379 +//line msg_parse.go:6371 if data[p] == 10 { goto tr246 } @@ -6452,7 +6444,7 @@ tr256: goto _test_eof172 } st_case_172: -//line msg_parse.go:6456 +//line msg_parse.go:6448 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -6508,7 +6500,7 @@ tr248: goto _test_eof173 } st_case_173: -//line msg_parse.go:6512 +//line msg_parse.go:6504 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -6542,7 +6534,7 @@ tr249: goto _test_eof174 } st_case_174: -//line msg_parse.go:6546 +//line msg_parse.go:6538 switch { case data[p] < 11: if data[p] <= 9 { @@ -6579,7 +6571,7 @@ tr259: goto _test_eof175 } st_case_175: -//line msg_parse.go:6583 +//line msg_parse.go:6575 if 128 <= data[p] && data[p] <= 191 { goto tr256 } @@ -6607,7 +6599,7 @@ tr260: goto _test_eof176 } st_case_176: -//line msg_parse.go:6611 +//line msg_parse.go:6603 if 128 <= data[p] && data[p] <= 191 { goto tr259 } @@ -6635,7 +6627,7 @@ tr261: goto _test_eof177 } st_case_177: -//line msg_parse.go:6639 +//line msg_parse.go:6631 if 128 <= data[p] && data[p] <= 191 { goto tr260 } @@ -6663,7 +6655,7 @@ tr262: goto _test_eof178 } st_case_178: -//line msg_parse.go:6667 +//line msg_parse.go:6659 if 128 <= data[p] && data[p] <= 191 { goto tr261 } @@ -6691,7 +6683,7 @@ tr263: goto _test_eof179 } st_case_179: -//line msg_parse.go:6695 +//line msg_parse.go:6687 if 128 <= data[p] && data[p] <= 191 { goto tr262 } @@ -6719,7 +6711,7 @@ tr264: goto _test_eof180 } st_case_180: -//line msg_parse.go:6723 +//line msg_parse.go:6715 if data[p] == 10 { goto tr265 } @@ -6736,7 +6728,7 @@ tr265: goto _test_eof181 } st_case_181: -//line msg_parse.go:6740 +//line msg_parse.go:6732 switch data[p] { case 9: goto tr256 @@ -6822,7 +6814,7 @@ tr224: goto _test_eof185 } st_case_185: -//line msg_parse.go:6826 +//line msg_parse.go:6818 if data[p] == 10 { goto st186 } @@ -6923,7 +6915,7 @@ tr329: goto _test_eof189 } st_case_189: -//line msg_parse.go:6927 +//line msg_parse.go:6919 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -6963,7 +6955,7 @@ tr330: goto _test_eof190 } st_case_190: -//line msg_parse.go:6967 +//line msg_parse.go:6959 switch { case data[p] > 90: if 97 <= data[p] && data[p] <= 122 { @@ -6984,7 +6976,7 @@ tr275: goto _test_eof191 } st_case_191: -//line msg_parse.go:6988 +//line msg_parse.go:6980 switch data[p] { case 43: goto st191 @@ -7072,7 +7064,7 @@ tr275: tr279: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } goto st194 @@ -7081,7 +7073,7 @@ tr279: goto _test_eof194 } st_case_194: -//line msg_parse.go:7085 +//line msg_parse.go:7077 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -7174,7 +7166,7 @@ tr293: goto _test_eof770 } st_case_770: -//line msg_parse.go:7178 +//line msg_parse.go:7170 goto st0 st196: if p++; p == pe { @@ -7388,7 +7380,7 @@ tr331: goto _test_eof210 } st_case_210: -//line msg_parse.go:7392 +//line msg_parse.go:7384 if data[p] == 10 { goto st211 } @@ -7430,7 +7422,7 @@ tr271: goto _test_eof213 } st_case_213: -//line msg_parse.go:7434 +//line msg_parse.go:7426 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -7492,7 +7484,7 @@ tr304: goto _test_eof214 } st_case_214: -//line msg_parse.go:7496 +//line msg_parse.go:7488 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -7556,7 +7548,7 @@ tr306: goto _test_eof215 } st_case_215: -//line msg_parse.go:7560 +//line msg_parse.go:7552 if data[p] == 10 { goto st216 } @@ -7588,7 +7580,7 @@ tr309: goto _test_eof217 } st_case_217: -//line msg_parse.go:7592 +//line msg_parse.go:7584 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -7648,7 +7640,7 @@ tr272: goto _test_eof218 } st_case_218: -//line msg_parse.go:7652 +//line msg_parse.go:7644 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -7716,7 +7708,7 @@ tr320: goto _test_eof219 } st_case_219: -//line msg_parse.go:7720 +//line msg_parse.go:7712 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -7772,7 +7764,7 @@ tr312: goto _test_eof220 } st_case_220: -//line msg_parse.go:7776 +//line msg_parse.go:7768 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -7802,7 +7794,7 @@ tr313: goto _test_eof221 } st_case_221: -//line msg_parse.go:7806 +//line msg_parse.go:7798 switch { case data[p] < 11: if data[p] <= 9 { @@ -7839,7 +7831,7 @@ tr323: goto _test_eof222 } st_case_222: -//line msg_parse.go:7843 +//line msg_parse.go:7835 if 128 <= data[p] && data[p] <= 191 { goto tr320 } @@ -7867,7 +7859,7 @@ tr324: goto _test_eof223 } st_case_223: -//line msg_parse.go:7871 +//line msg_parse.go:7863 if 128 <= data[p] && data[p] <= 191 { goto tr323 } @@ -7895,7 +7887,7 @@ tr325: goto _test_eof224 } st_case_224: -//line msg_parse.go:7899 +//line msg_parse.go:7891 if 128 <= data[p] && data[p] <= 191 { goto tr324 } @@ -7923,7 +7915,7 @@ tr326: goto _test_eof225 } st_case_225: -//line msg_parse.go:7927 +//line msg_parse.go:7919 if 128 <= data[p] && data[p] <= 191 { goto tr325 } @@ -7951,7 +7943,7 @@ tr327: goto _test_eof226 } st_case_226: -//line msg_parse.go:7955 +//line msg_parse.go:7947 if 128 <= data[p] && data[p] <= 191 { goto tr326 } @@ -7979,7 +7971,7 @@ tr328: goto _test_eof227 } st_case_227: -//line msg_parse.go:7983 +//line msg_parse.go:7975 if data[p] == 10 { goto tr332 } @@ -7996,7 +7988,7 @@ tr332: goto _test_eof228 } st_case_228: -//line msg_parse.go:8000 +//line msg_parse.go:7992 switch data[p] { case 9: goto tr320 @@ -8129,7 +8121,7 @@ tr332: tr336: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } goto st233 @@ -8138,7 +8130,7 @@ tr336: goto _test_eof233 } st_case_233: -//line msg_parse.go:8142 +//line msg_parse.go:8134 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -8219,7 +8211,7 @@ tr349: goto _test_eof771 } st_case_771: -//line msg_parse.go:8223 +//line msg_parse.go:8215 goto st0 st235: if p++; p == pe { @@ -8321,7 +8313,7 @@ tr349: tr340: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } goto st242 @@ -8330,7 +8322,7 @@ tr340: goto _test_eof242 } st_case_242: -//line msg_parse.go:8334 +//line msg_parse.go:8326 if data[p] == 10 { goto st243 } @@ -8366,7 +8358,7 @@ tr340: tr337: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } goto st245 @@ -8375,7 +8367,7 @@ tr337: goto _test_eof245 } st_case_245: -//line msg_parse.go:8379 +//line msg_parse.go:8371 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -8432,7 +8424,7 @@ tr337: tr355: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } goto st246 @@ -8441,7 +8433,7 @@ tr355: goto _test_eof246 } st_case_246: -//line msg_parse.go:8445 +//line msg_parse.go:8437 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -8492,7 +8484,7 @@ tr361: goto _test_eof772 } st_case_772: -//line msg_parse.go:8496 +//line msg_parse.go:8488 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -8522,7 +8514,7 @@ tr361: tr359: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } goto st247 @@ -8531,7 +8523,7 @@ tr359: goto _test_eof247 } st_case_247: -//line msg_parse.go:8535 +//line msg_parse.go:8527 if data[p] == 10 { goto st248 } @@ -8593,7 +8585,7 @@ tr366: goto _test_eof773 } st_case_773: -//line msg_parse.go:8597 +//line msg_parse.go:8589 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -8641,7 +8633,7 @@ tr366: tr338: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } goto st250 @@ -8650,7 +8642,7 @@ tr338: goto _test_eof250 } st_case_250: -//line msg_parse.go:8654 +//line msg_parse.go:8646 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -8707,7 +8699,7 @@ tr338: tr365: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } goto st251 @@ -8716,7 +8708,7 @@ tr365: goto _test_eof251 } st_case_251: -//line msg_parse.go:8720 +//line msg_parse.go:8712 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -8761,7 +8753,7 @@ tr371: goto _test_eof774 } st_case_774: -//line msg_parse.go:8765 +//line msg_parse.go:8757 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -8791,7 +8783,7 @@ tr371: tr369: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } goto st252 @@ -8800,7 +8792,7 @@ tr369: goto _test_eof252 } st_case_252: -//line msg_parse.go:8804 +//line msg_parse.go:8796 if data[p] == 10 { goto st253 } @@ -8836,7 +8828,7 @@ tr369: tr367: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } //line sip.rl:59 @@ -8852,7 +8844,7 @@ tr367: goto _test_eof775 } st_case_775: -//line msg_parse.go:8856 +//line msg_parse.go:8848 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -8909,7 +8901,7 @@ tr367: tr357: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } //line sip.rl:201 @@ -8931,7 +8923,7 @@ tr357: goto _test_eof776 } st_case_776: -//line msg_parse.go:8935 +//line msg_parse.go:8927 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -8988,7 +8980,7 @@ tr357: tr358: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } //line sip.rl:201 @@ -9008,7 +9000,7 @@ tr358: tr368: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } //line sip.rl:59 @@ -9024,7 +9016,7 @@ tr368: goto _test_eof777 } st_case_777: -//line msg_parse.go:9028 +//line msg_parse.go:9020 if data[p] == 10 { goto tr375 } @@ -9038,12 +9030,12 @@ tr375: goto _test_eof778 } st_case_778: -//line msg_parse.go:9042 +//line msg_parse.go:9034 goto st0 tr339: //line sip.rl:192 - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } goto st255 @@ -9052,7 +9044,7 @@ tr339: goto _test_eof255 } st_case_255: -//line msg_parse.go:9056 +//line msg_parse.go:9048 if data[p] == 10 { goto tr375 } @@ -9114,7 +9106,7 @@ tr376: goto _test_eof257 } st_case_257: -//line msg_parse.go:9118 +//line msg_parse.go:9110 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -9258,7 +9250,7 @@ tr386: goto _test_eof779 } st_case_779: -//line msg_parse.go:9262 +//line msg_parse.go:9254 goto st0 st259: if p++; p == pe { @@ -9336,7 +9328,7 @@ tr378: goto _test_eof262 } st_case_262: -//line msg_parse.go:9340 +//line msg_parse.go:9332 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -9447,7 +9439,7 @@ tr387: goto _test_eof264 } st_case_264: -//line msg_parse.go:9451 +//line msg_parse.go:9443 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -9501,7 +9493,7 @@ tr388: goto _test_eof265 } st_case_265: -//line msg_parse.go:9505 +//line msg_parse.go:9497 if 128 <= data[p] && data[p] <= 191 { goto st264 } @@ -9517,7 +9509,7 @@ tr389: goto _test_eof266 } st_case_266: -//line msg_parse.go:9521 +//line msg_parse.go:9513 if 128 <= data[p] && data[p] <= 191 { goto st265 } @@ -9533,7 +9525,7 @@ tr390: goto _test_eof267 } st_case_267: -//line msg_parse.go:9537 +//line msg_parse.go:9529 if 128 <= data[p] && data[p] <= 191 { goto st266 } @@ -9549,7 +9541,7 @@ tr391: goto _test_eof268 } st_case_268: -//line msg_parse.go:9553 +//line msg_parse.go:9545 if 128 <= data[p] && data[p] <= 191 { goto st267 } @@ -9565,7 +9557,7 @@ tr392: goto _test_eof269 } st_case_269: -//line msg_parse.go:9569 +//line msg_parse.go:9561 if 128 <= data[p] && data[p] <= 191 { goto st268 } @@ -9581,7 +9573,7 @@ tr393: goto _test_eof270 } st_case_270: -//line msg_parse.go:9585 +//line msg_parse.go:9577 if data[p] == 10 { goto tr403 } @@ -9604,7 +9596,7 @@ tr403: goto _test_eof780 } st_case_780: -//line msg_parse.go:9608 +//line msg_parse.go:9600 goto st0 tr394: //line sip.rl:67 @@ -9617,7 +9609,7 @@ tr394: goto _test_eof271 } st_case_271: -//line msg_parse.go:9621 +//line msg_parse.go:9613 if data[p] == 10 { goto st272 } @@ -9727,7 +9719,7 @@ tr406: goto _test_eof275 } st_case_275: -//line msg_parse.go:9731 +//line msg_parse.go:9723 switch data[p] { case 9: goto st275 @@ -9748,7 +9740,7 @@ tr407: goto _test_eof276 } st_case_276: -//line msg_parse.go:9752 +//line msg_parse.go:9744 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -9791,7 +9783,7 @@ value=nil goto _test_eof781 } st_case_781: -//line msg_parse.go:9795 +//line msg_parse.go:9787 goto st0 st277: if p++; p == pe { @@ -9889,7 +9881,7 @@ tr414: goto _test_eof281 } st_case_281: -//line msg_parse.go:9893 +//line msg_parse.go:9885 switch data[p] { case 65: goto st282 @@ -10146,7 +10138,7 @@ value=&msg.WWWAuthenticate goto _test_eof283 } st_case_283: -//line msg_parse.go:10150 +//line msg_parse.go:10142 switch data[p] { case 9: goto st283 @@ -10311,7 +10303,7 @@ value=&msg.WWWAuthenticate goto _test_eof284 } st_case_284: -//line msg_parse.go:10315 +//line msg_parse.go:10307 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -10395,7 +10387,7 @@ tr1001: goto _test_eof782 } st_case_782: -//line msg_parse.go:10399 +//line msg_parse.go:10391 goto st0 st285: if p++; p == pe { @@ -11635,7 +11627,7 @@ tr553: goto _test_eof378 } st_case_378: -//line msg_parse.go:11639 +//line msg_parse.go:11631 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -11790,7 +11782,7 @@ tr643: goto _test_eof381 } st_case_381: -//line msg_parse.go:11794 +//line msg_parse.go:11786 if data[p] == 10 { goto tr559 } @@ -12011,7 +12003,7 @@ addrp=lastAddr(&msg.To) goto _test_eof394 } st_case_394: -//line msg_parse.go:12015 +//line msg_parse.go:12007 switch data[p] { case 9: goto st394 @@ -12054,7 +12046,7 @@ addrp=lastAddr(&msg.To) goto _test_eof395 } st_case_395: -//line msg_parse.go:12058 +//line msg_parse.go:12050 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -12624,7 +12616,7 @@ tr626: goto _test_eof437 } st_case_437: -//line msg_parse.go:12628 +//line msg_parse.go:12620 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -12812,7 +12804,7 @@ tr637: goto _test_eof450 } st_case_450: -//line msg_parse.go:12816 +//line msg_parse.go:12808 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -12894,7 +12886,7 @@ tr641: goto _test_eof452 } st_case_452: -//line msg_parse.go:12898 +//line msg_parse.go:12890 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -13400,7 +13392,7 @@ tr680: goto _test_eof485 } st_case_485: -//line msg_parse.go:13404 +//line msg_parse.go:13396 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -13756,7 +13748,7 @@ tr706: goto _test_eof508 } st_case_508: -//line msg_parse.go:13760 +//line msg_parse.go:13752 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -14017,7 +14009,7 @@ tr725: goto _test_eof526 } st_case_526: -//line msg_parse.go:14021 +//line msg_parse.go:14013 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -14367,7 +14359,7 @@ tr753: goto _test_eof552 } st_case_552: -//line msg_parse.go:14371 +//line msg_parse.go:14363 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -17851,14 +17843,14 @@ tr753: addrp = &addr.Next addr = nil -//line msg_parse.go:17855 +//line msg_parse.go:17847 } } _out: {} } -//line msg_parse.rl:49 +//line msg_parse.rl:41 if cs < msg_first_final { if p == pe { diff --git a/sip/msg_parse.rl b/sip/msg_parse.rl index 623a441..0326c92 100644 --- a/sip/msg_parse.rl +++ b/sip/msg_parse.rl @@ -12,16 +12,8 @@ import ( %% include sip "sip.rl"; %% write data; -// ParseMsg turns a SIP message into a data structure. -func ParseMsg(s string) (msg *Msg, err error) { - if s == "" { - return nil, errors.New("Empty SIP message") - } - return ParseMsgBytes([]byte(s)) -} - // ParseMsg turns a SIP message byte slice into a data structure. -func ParseMsgBytes(data []byte) (msg *Msg, err error) { +func ParseMsg(data []byte) (msg *Msg, err error) { if data == nil { return nil, nil } diff --git a/sip/msg_test.go b/sip/msg_test.go index aae98dc..c099091 100755 --- a/sip/msg_test.go +++ b/sip/msg_test.go @@ -44,11 +44,16 @@ type msgTest struct { name string s string msg sip.Msg - err error + e error } var msgTests = []msgTest{ + msgTest{ + s: "", + e: sip.MsgIncompleteError{Msg: []uint8{}}, + }, + msgTest{ name: "UTF8 Phrase", s: "SIP/2.0 200 ◕◡◕\r\n" + @@ -82,7 +87,7 @@ var msgTests = []msgTest{ VersionMajor: 2, Status: 200, Phrase: "OK", - XHeader: &sip.XHeader{"X-LOL", []byte("omfg"), nil}, + XHeader: &sip.XHeader{Name: "X-LOL", Value: []byte("omfg")}, }, }, @@ -154,7 +159,7 @@ var msgTests = []msgTest{ " Come buy, come buy:\r\n" + " Apples and quinces,\r\n" + " Lemons and oranges", - XHeader: &sip.XHeader{"X-LOL", []byte("omfg"), nil}, + XHeader: &sip.XHeader{Name: "X-LOL", Value: []byte("omfg")}, }, }, @@ -364,7 +369,7 @@ var msgTests = []msgTest{ Scheme: "sip", Host: "lol.com", }, - Param: &sip.Param{"tag", "omfg", nil}, + Param: &sip.Param{Name: "tag", Value: "omfg"}, }, }, }, @@ -384,7 +389,7 @@ var msgTests = []msgTest{ Scheme: "sip", Host: "lol.com", }, - Param: &sip.Param{"tag", "◕◡◕", nil}, + Param: &sip.Param{Name: "tag", Value: "◕◡◕"}, }, }, }, @@ -403,7 +408,7 @@ var msgTests = []msgTest{ Scheme: "sip", Host: "lol.com", }, - Param: &sip.Param{"tag", "", nil}, + Param: &sip.Param{Name: "tag", Value: ""}, }, }, }, @@ -422,7 +427,7 @@ var msgTests = []msgTest{ Scheme: "sip", Host: "lol.com", }, - Param: &sip.Param{"tag", "omfg", nil}, + Param: &sip.Param{Name: "tag", Value: "omfg"}, }, }, }, @@ -603,7 +608,7 @@ var msgTests = []msgTest{ Version: "2.0", Transport: "TCP", Host: "spindle.example.com", - Param: &sip.Param{"branch", "z9hG4bK9ikj8", nil}, + Param: &sip.Param{Name: "branch", Value: "z9hG4bK9ikj8"}, }, }, }, @@ -623,7 +628,7 @@ var msgTests = []msgTest{ Version: "2.0", Transport: "TCP", Host: "spindle.example.com", - Param: &sip.Param{"branch", "z9hG4bK9ikj8", nil}, + Param: &sip.Param{Name: "branch", Value: "z9hG4bK9ikj8"}, }, }, }, @@ -648,19 +653,19 @@ var msgTests = []msgTest{ Version: "2.0", Transport: "UDP", Host: "192.0.2.2", - Param: &sip.Param{"branch", "390skdjuw", nil}, + Param: &sip.Param{Name: "branch", Value: "390skdjuw"}, Next: &sip.Via{ Protocol: "SIP", Version: "2.0", Transport: "TCP", Host: "spindle.example.com", - Param: &sip.Param{"branch", "z9hG4bK9ikj8", nil}, + Param: &sip.Param{Name: "branch", Value: "z9hG4bK9ikj8"}, Next: &sip.Via{ Protocol: "SIP", Version: "2.0", Transport: "UDP", Host: "192.168.255.111", - Param: &sip.Param{"branch", "z9hG4bK30239", nil}, + Param: &sip.Param{Name: "branch", Value: "z9hG4bK30239"}, }, }, }, @@ -699,7 +704,11 @@ var msgTests = []msgTest{ Transport: "UDP", Host: "10.11.34.37", Port: 42367, - Param: &sip.Param{"branch", "9dc39c3c3e84", &sip.Param{"rport", "", nil}}, + Param: &sip.Param{ + Name: "branch", + Value: "9dc39c3c3e84", + Next: &sip.Param{Name: "rport"}, + }, }, To: &sip.Addr{ Uri: &sip.URI{ @@ -713,9 +722,9 @@ var msgTests = []msgTest{ Scheme: "sip", Host: "10.11.34.37", Port: 42367, - Param: &sip.URIParam{"laffo", "", nil}, + Param: &sip.URIParam{Name: "laffo"}, }, - Param: &sip.Param{"tag", "11917cbc0513", nil}, + Param: &sip.Param{Name: "tag", Value: "11917cbc0513"}, }, Contact: &sip.Addr{ Uri: &sip.URI{ @@ -789,9 +798,9 @@ var msgTests = []msgTest{ Scheme: "sip", Host: "127.0.0.1", Port: 52711, - Param: &sip.URIParam{"transport", "udp", nil}, + Param: &sip.URIParam{Name: "transport", Value: "udp"}, }, - Param: &sip.Param{"tag", "4568e274dbd8", nil}, + Param: &sip.Param{Name: "tag", Value: "4568e274dbd8"}, }, To: &sip.Addr{ Uri: &sip.URI{ @@ -800,7 +809,7 @@ var msgTests = []msgTest{ Host: "127.0.0.1", Port: 5060, }, - Param: &sip.Param{"tag", "as71a0fa72", nil}, + Param: &sip.Param{Name: "tag", Value: "as71a0fa72"}, }, Contact: &sip.Addr{ Uri: &sip.URI{ @@ -844,7 +853,7 @@ var msgTests = []msgTest{ Transport: "UDP", Host: "1.2.3.4", Port: 55345, - Param: &sip.Param{"branch", "z9hG4bK-d1d81e94a099", nil}, + Param: &sip.Param{Name: "branch", Value: "z9hG4bK-d1d81e94a099"}, }, From: &sip.Addr{ Uri: &sip.URI{ @@ -852,7 +861,7 @@ var msgTests = []msgTest{ User: "+12126660420", Host: "fl.gg", }, - Param: &sip.Param{"tag", "68e274dbd83b", nil}, + Param: &sip.Param{Name: "tag", Value: "68e274dbd83b"}, }, To: &sip.Addr{ Uri: &sip.URI{ @@ -860,7 +869,7 @@ var msgTests = []msgTest{ User: "+12125650666", Host: "fl.gg", }, - Param: &sip.Param{"tag", "gK0cacc73a", nil}, + Param: &sip.Param{Name: "tag", Value: "gK0cacc73a"}, }, Contact: &sip.Addr{ Uri: &sip.URI{ @@ -875,14 +884,14 @@ var msgTests = []msgTest{ Scheme: "sip", Host: "216.115.69.133", Port: 5060, - Param: &sip.URIParam{"lr", "", nil}, + Param: &sip.URIParam{Name: "lr"}, }, Next: &sip.Addr{ Uri: &sip.URI{ Scheme: "sip", Host: "216.115.69.144", Port: 5060, - Param: &sip.URIParam{"lr", "", nil}, + Param: &sip.URIParam{Name: "lr"}, }, }, }, @@ -948,7 +957,11 @@ var msgTests = []msgTest{ Transport: "UDP", Host: "10.11.34.37", Port: 59516, - Param: &sip.Param{"branch", "z9hG4bKS308QB9UUpNyD", &sip.Param{"rport", "", nil}}, + Param: &sip.Param{ + Name: "branch", + Value: "z9hG4bKS308QB9UUpNyD", + Next: &sip.Param{Name: "rport"}, + }, }, To: &sip.Addr{ Uri: &sip.URI{ @@ -962,7 +975,7 @@ var msgTests = []msgTest{ Host: "10.11.34.37", Port: 59516, }, - Param: &sip.Param{"tag", "S1jX7UtK5Zerg", nil}, + Param: &sip.Param{Name: "tag", Value: "S1jX7UtK5Zerg"}, }, Contact: &sip.Addr{ Uri: &sip.URI{ @@ -1045,7 +1058,7 @@ var msgTests = []msgTest{ Scheme: "sip", User: "vivekg", Host: "chair-dnrc.example.com", - Param: &sip.URIParam{"unknownparam", "", nil}, + Param: &sip.URIParam{Name: "unknownparam"}, }, To: &sip.Addr{ Uri: &sip.URI{ @@ -1053,7 +1066,7 @@ var msgTests = []msgTest{ User: "vivekg", Host: "chair-dnrc.example.com", }, - Param: &sip.Param{"tag", "1918181833n", nil}, + Param: &sip.Param{Name: "tag", Value: "1918181833n"}, }, From: &sip.Addr{ Display: "J Rosenberg \\\"", @@ -1062,7 +1075,7 @@ var msgTests = []msgTest{ User: "jdrosen", Host: "example.com", }, - Param: &sip.Param{"tag", "98asjd8", nil}, + Param: &sip.Param{Name: "tag", Value: "98asjd8"}, }, MaxForwards: 68, CallID: "wsinv.ndaksdj@192.0.2.1", @@ -1073,19 +1086,19 @@ var msgTests = []msgTest{ Version: "2.0", Transport: "UDP", Host: "192.0.2.2", - Param: &sip.Param{"branch", "390skdjuw", nil}, + Param: &sip.Param{Name: "branch", Value: "390skdjuw"}, Next: &sip.Via{ Protocol: "SIP", Version: "2.0", Transport: "TCP", Host: "spindle.example.com", - Param: &sip.Param{"branch", "z9hG4bK9ikj8", nil}, + Param: &sip.Param{Name: "branch", Value: "z9hG4bK9ikj8"}, Next: &sip.Via{ Protocol: "SIP", Version: "2.0", Transport: "UDP", Host: "192.168.255.111", - Param: &sip.Param{"branch", "z9hG4bK30239", nil}, + Param: &sip.Param{Name: "branch", Value: "z9hG4bK30239"}, }, }, }, @@ -1103,15 +1116,11 @@ var msgTests = []msgTest{ Scheme: "sip", Host: "services.example.com", Param: &sip.URIParam{ - Name: "unknown-no-value", - Value: "", + Name: "unknown-no-value", Next: &sip.URIParam{ Name: "unknownwith", Value: "value", - Next: &sip.URIParam{ - Name: "lr", - Value: "", - }, + Next: &sip.URIParam{Name: "lr"}, }, }, }, @@ -1127,8 +1136,7 @@ var msgTests = []msgTest{ Name: "q", Value: "0.33", Next: &sip.Param{ - Name: "secondparam", - Value: "", + Name: "secondparam", Next: &sip.Param{ Name: "newparam", Value: "newvalue", @@ -1171,7 +1179,7 @@ var msgTests = []msgTest{ Version: "2.0", Transport: "TCP", Host: "host1.example.com", - Param: &sip.Param{"branch", "z9hG4bK-.!%66*_+`'~", nil}, + Param: &sip.Param{Name: "branch", Value: "z9hG4bK-.!%66*_+`'~"}, }, To: &sip.Addr{ Display: "BEL:\x07 NUL:\x00 DEL:\x7F", @@ -1207,13 +1215,16 @@ var msgTests = []msgTest{ func TestParseMsg(t *testing.T) { for _, test := range msgTests { - msg, err := sip.ParseMsg(test.s) + msg, err := sip.ParseMsg([]byte(test.s)) if err != nil { - if test.err == nil { + if test.e == nil { t.Errorf("%v", err) continue } else { // test was supposed to fail - panic("TODO(jart): Implement failing support.") + if !reflect.DeepEqual(test.e, err) { + t.Errorf("%s\nWant: %#v\nGot: %#v", test.s, test.e, err) + } + continue } } if !reflect.DeepEqual(&test.msg, msg) { @@ -1226,9 +1237,6 @@ func TestParseMsg(t *testing.T) { } if !reflect.DeepEqual(test.msg.Via, msg.Via) { t.Errorf("Via:\n%#v !=\n%#v", test.msg.Via, msg.Via) - // t.Errorf("Via #2:\n%#v !=\n%#v", test.msg.Via.Next, msg.Via.Next) - // t.Errorf("Via #3:\n%#v !=\n%#v", test.msg.Via.Next.Next, msg.Via.Next.Next) - // t.Errorf("Via #4:\n%#v !=\n%#v", test.msg.Via.Next.Next.Next, msg.Via.Next.Next.Next) } if !reflect.DeepEqual(test.msg.Request, msg.Request) { t.Errorf("Request:\n%#v !=\n%#v", test.msg.Request, msg.Request) @@ -1252,13 +1260,13 @@ func TestParseMsg(t *testing.T) { func BenchmarkParseMsgFlowroute(b *testing.B) { // 26653 ns/op msg := []byte(flowroute) for i := 0; i < b.N; i++ { - sip.ParseMsgBytes(msg) + sip.ParseMsg(msg) } } func BenchmarkParseMsgTorture2(b *testing.B) { // 31397 ns/op msg := []byte(torture2) for i := 0; i < b.N; i++ { - sip.ParseMsgBytes(msg) + sip.ParseMsg(msg) } } diff --git a/sip/receiver.go b/sip/receiver.go index 5e09c50..db86dc8 100644 --- a/sip/receiver.go +++ b/sip/receiver.go @@ -19,7 +19,7 @@ func ReceiveMessages(sock *net.UDPConn, c chan<- *Msg, e chan<- error) { break } ts := time.Now() - packet := string(buf[0:amt]) + packet := buf[0:amt] if *tracing { trace("recv", packet, addr) } diff --git a/sip/route.go b/sip/route.go index 84df40e..0edf83a 100644 --- a/sip/route.go +++ b/sip/route.go @@ -108,7 +108,7 @@ func RouteAddress(host string, port uint16, wantSRV bool) (routes *AddressRoute, log.Printf("%s routes to: %s", host, s) return routes, nil } - log.Println("net.LookupSRV(sip, udp, %s) failed: %s", err) + log.Printf("net.LookupSRV(sip, udp, %s) failed: %s", host, err) } port = 5060 } diff --git a/sip/sip.rl b/sip/sip.rl index eab72c2..5e54714 100644 --- a/sip/sip.rl +++ b/sip/sip.rl @@ -109,7 +109,7 @@ action VersionMinor { } action RequestURI { - msg.Request, err = ParseURIBytes(data[mark:p]) + msg.Request, err = ParseURI(data[mark:p]) if err != nil { return nil, err } } @@ -190,7 +190,7 @@ action AddrUnquotedDisplay {{ }} action AddrUri { - addr.Uri, err = ParseURIBytes(data[mark:p]) + addr.Uri, err = ParseURI(data[mark:p]) if err != nil { return nil, err } } diff --git a/sip/trace.go b/sip/trace.go index 125c65f..894ea09 100644 --- a/sip/trace.go +++ b/sip/trace.go @@ -12,11 +12,11 @@ var ( timestampTagging = flag.Bool("timestampTagging", false, "Add microsecond timestamps to Via tags") ) -func trace(dir, pkt string, addr net.Addr) { +func trace(dir string, pkt []byte, addr net.Addr) { size := len(pkt) bar := strings.Repeat("-", 72) suffix := "\n" - if pkt != "" && pkt[len(pkt)-1] == '\n' { + if pkt != nil && len(pkt) > 0 && pkt[len(pkt)-1] == '\n' { suffix = "" } log.Printf( diff --git a/sip/transport.go b/sip/transport.go index cf13f81..132fab8 100755 --- a/sip/transport.go +++ b/sip/transport.go @@ -73,7 +73,7 @@ func (tp *Transport) Send(msg *Msg) error { var b bytes.Buffer msg.Append(&b) if *tracing { - trace("send", b.String(), addr) + trace("send", b.Bytes(), addr) } _, err = tp.Sock.WriteTo(b.Bytes(), addr) if err != nil { diff --git a/sip/uri_parse.go b/sip/uri_parse.go index 3c6ed7e..73653db 100644 --- a/sip/uri_parse.go +++ b/sip/uri_parse.go @@ -24,16 +24,8 @@ const uri_en_uriWithUser int = 1 //line uri_parse.rl:13 -// ParseURI turns a a SIP URI into a data structure. -func ParseURI(s string) (uri *URI, err error) { - if s == "" { - return nil, errors.New("Empty URI") - } - return ParseURIBytes([]byte(s)) -} - // ParseURI turns a a SIP URI byte slice into a data structure. -func ParseURIBytes(data []byte) (uri *URI, err error) { +func ParseURI(data []byte) (uri *URI, err error) { if data == nil { return nil, nil } @@ -44,28 +36,27 @@ func ParseURIBytes(data []byte) (uri *URI, err error) { eof := len(data) buf := make([]byte, len(data)) amt := 0 - // mark := 0 var b1, b2 string var hex byte -//line uri_parse.rl:165 +//line uri_parse.rl:148 -//line uri_parse.go:57 +//line uri_parse.go:48 { cs = uri_start } -//line uri_parse.rl:168 +//line uri_parse.rl:151 if bytes.IndexByte(data, '@') == -1 { cs = uri_en_uriSansUser; } else { cs = uri_en_uriWithUser; } -//line uri_parse.go:69 +//line uri_parse.go:60 { if p == pe { goto _test_eof @@ -206,11 +197,11 @@ st_case_0: cs = 0 goto _out tr0: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:104 +//line uri_parse.rl:87 if 'A' <= data[p] && data[p] <= 'Z' { buf[amt] = data[p] + 0x20 @@ -221,7 +212,7 @@ tr0: goto st2 tr2: -//line uri_parse.rl:104 +//line uri_parse.rl:87 if 'A' <= data[p] && data[p] <= 'Z' { buf[amt] = data[p] + 0x20 @@ -236,7 +227,7 @@ tr2: goto _test_eof2 } st_case_2: -//line uri_parse.go:240 +//line uri_parse.go:231 switch data[p] { case 43: goto tr2 @@ -262,7 +253,7 @@ tr2: } goto st0 tr3: -//line uri_parse.rl:74 +//line uri_parse.rl:57 uri.Scheme = string(buf[0:amt]) @@ -272,7 +263,7 @@ tr3: goto _test_eof3 } st_case_3: -//line uri_parse.go:276 +//line uri_parse.go:267 switch data[p] { case 33: goto tr4 @@ -303,25 +294,25 @@ tr3: } goto st0 tr4: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st4 tr6: -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st4 tr11: -//line uri_parse.rl:60 +//line uri_parse.rl:43 hex += unhex(data[p]) buf[amt] = hex @@ -333,7 +324,7 @@ tr11: goto _test_eof4 } st_case_4: -//line uri_parse.go:337 +//line uri_parse.go:328 switch data[p] { case 33: goto tr6 @@ -364,7 +355,7 @@ tr11: } goto st0 tr5: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 @@ -374,7 +365,7 @@ tr5: goto _test_eof5 } st_case_5: -//line uri_parse.go:378 +//line uri_parse.go:369 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -389,7 +380,7 @@ tr5: } goto st0 tr10: -//line uri_parse.rl:56 +//line uri_parse.rl:39 hex = unhex(data[p]) * 16 @@ -399,7 +390,7 @@ tr10: goto _test_eof6 } st_case_6: -//line uri_parse.go:403 +//line uri_parse.go:394 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -414,7 +405,7 @@ tr10: } goto st0 tr8: -//line uri_parse.rl:78 +//line uri_parse.rl:61 uri.User = string(buf[0:amt]) @@ -424,7 +415,7 @@ tr8: goto _test_eof7 } st_case_7: -//line uri_parse.go:428 +//line uri_parse.go:419 switch data[p] { case 33: goto tr12 @@ -456,25 +447,25 @@ tr8: } goto st0 tr12: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st8 tr14: -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st8 tr18: -//line uri_parse.rl:60 +//line uri_parse.rl:43 hex += unhex(data[p]) buf[amt] = hex @@ -486,7 +477,7 @@ tr18: goto _test_eof8 } st_case_8: -//line uri_parse.go:490 +//line uri_parse.go:481 switch data[p] { case 33: goto tr14 @@ -520,7 +511,7 @@ tr18: } goto st0 tr13: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 @@ -530,7 +521,7 @@ tr13: goto _test_eof9 } st_case_9: -//line uri_parse.go:534 +//line uri_parse.go:525 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -545,7 +536,7 @@ tr13: } goto st0 tr17: -//line uri_parse.rl:56 +//line uri_parse.rl:39 hex = unhex(data[p]) * 16 @@ -555,7 +546,7 @@ tr17: goto _test_eof10 } st_case_10: -//line uri_parse.go:559 +//line uri_parse.go:550 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -570,13 +561,13 @@ tr17: } goto st0 tr9: -//line uri_parse.rl:78 +//line uri_parse.rl:61 uri.User = string(buf[0:amt]) goto st11 tr16: -//line uri_parse.rl:82 +//line uri_parse.rl:65 uri.Pass = string(buf[0:amt]) @@ -586,7 +577,7 @@ tr16: goto _test_eof11 } st_case_11: -//line uri_parse.go:590 +//line uri_parse.go:581 switch data[p] { case 43: goto tr19 @@ -612,11 +603,11 @@ tr16: } goto st0 tr19: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:104 +//line uri_parse.rl:87 if 'A' <= data[p] && data[p] <= 'Z' { buf[amt] = data[p] + 0x20 @@ -627,7 +618,7 @@ tr19: goto st45 tr66: -//line uri_parse.rl:104 +//line uri_parse.rl:87 if 'A' <= data[p] && data[p] <= 'Z' { buf[amt] = data[p] + 0x20 @@ -642,7 +633,7 @@ tr66: goto _test_eof45 } st_case_45: -//line uri_parse.go:646 +//line uri_parse.go:637 switch data[p] { case 43: goto tr66 @@ -672,7 +663,7 @@ tr66: } goto st0 tr67: -//line uri_parse.rl:86 +//line uri_parse.rl:69 uri.Host = string(buf[0:amt]) @@ -682,13 +673,13 @@ tr67: goto _test_eof12 } st_case_12: -//line uri_parse.go:686 +//line uri_parse.go:677 if 48 <= data[p] && data[p] <= 57 { goto tr21 } goto st0 tr21: -//line uri_parse.rl:90 +//line uri_parse.rl:73 uri.Port = uri.Port * 10 + uint16(data[p] - 0x30) @@ -698,7 +689,7 @@ tr21: goto _test_eof46 } st_case_46: -//line uri_parse.go:702 +//line uri_parse.go:693 switch data[p] { case 59: goto st13 @@ -710,29 +701,29 @@ tr21: } goto st0 tr68: -//line uri_parse.rl:86 +//line uri_parse.rl:69 uri.Host = string(buf[0:amt]) goto st13 tr74: -//line uri_parse.rl:94 +//line uri_parse.rl:77 b1 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:113 +//line uri_parse.rl:96 uri.Param = &URIParam{b1, b2, uri.Param} goto st13 tr79: -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:113 +//line uri_parse.rl:96 uri.Param = &URIParam{b1, b2, uri.Param} @@ -742,7 +733,7 @@ tr79: goto _test_eof13 } st_case_13: -//line uri_parse.go:746 +//line uri_parse.go:737 switch data[p] { case 33: goto tr22 @@ -774,14 +765,14 @@ tr79: } goto st0 tr72: -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st47 tr25: -//line uri_parse.rl:60 +//line uri_parse.rl:43 hex += unhex(data[p]) buf[amt] = hex @@ -789,16 +780,16 @@ tr25: goto st47 tr22: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ @@ -809,7 +800,7 @@ tr22: goto _test_eof47 } st_case_47: -//line uri_parse.go:813 +//line uri_parse.go:804 switch data[p] { case 33: goto tr72 @@ -847,11 +838,11 @@ tr22: } goto st0 tr23: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 @@ -862,7 +853,7 @@ tr23: goto _test_eof14 } st_case_14: -//line uri_parse.go:866 +//line uri_parse.go:857 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -877,7 +868,7 @@ tr23: } goto st0 tr24: -//line uri_parse.rl:56 +//line uri_parse.rl:39 hex = unhex(data[p]) * 16 @@ -887,7 +878,7 @@ tr24: goto _test_eof15 } st_case_15: -//line uri_parse.go:891 +//line uri_parse.go:882 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -902,7 +893,7 @@ tr24: } goto st0 tr75: -//line uri_parse.rl:94 +//line uri_parse.rl:77 b1 = string(buf[0:amt]) amt = 0 @@ -913,7 +904,7 @@ tr75: goto _test_eof16 } st_case_16: -//line uri_parse.go:917 +//line uri_parse.go:908 switch data[p] { case 33: goto tr26 @@ -945,25 +936,25 @@ tr75: } goto st0 tr26: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st48 tr77: -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st48 tr29: -//line uri_parse.rl:60 +//line uri_parse.rl:43 hex += unhex(data[p]) buf[amt] = hex @@ -975,7 +966,7 @@ tr29: goto _test_eof48 } st_case_48: -//line uri_parse.go:979 +//line uri_parse.go:970 switch data[p] { case 33: goto tr77 @@ -1011,7 +1002,7 @@ tr29: } goto st0 tr27: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 @@ -1021,7 +1012,7 @@ tr27: goto _test_eof17 } st_case_17: -//line uri_parse.go:1025 +//line uri_parse.go:1016 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -1036,7 +1027,7 @@ tr27: } goto st0 tr28: -//line uri_parse.rl:56 +//line uri_parse.rl:39 hex = unhex(data[p]) * 16 @@ -1046,7 +1037,7 @@ tr28: goto _test_eof18 } st_case_18: -//line uri_parse.go:1050 +//line uri_parse.go:1041 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -1061,51 +1052,51 @@ tr28: } goto st0 tr69: -//line uri_parse.rl:86 +//line uri_parse.rl:69 uri.Host = string(buf[0:amt]) goto st19 tr76: -//line uri_parse.rl:94 +//line uri_parse.rl:77 b1 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:113 +//line uri_parse.rl:96 uri.Param = &URIParam{b1, b2, uri.Param} goto st19 tr80: -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:113 +//line uri_parse.rl:96 uri.Param = &URIParam{b1, b2, uri.Param} goto st19 tr83: -//line uri_parse.rl:94 +//line uri_parse.rl:77 b1 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:117 +//line uri_parse.rl:100 uri.Header = &URIHeader{b1, b2, uri.Header} goto st19 tr87: -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:117 +//line uri_parse.rl:100 uri.Header = &URIHeader{b1, b2, uri.Header} @@ -1115,7 +1106,7 @@ tr87: goto _test_eof19 } st_case_19: -//line uri_parse.go:1119 +//line uri_parse.go:1110 switch data[p] { case 33: goto tr30 @@ -1151,14 +1142,14 @@ tr87: } goto st0 tr81: -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st49 tr33: -//line uri_parse.rl:60 +//line uri_parse.rl:43 hex += unhex(data[p]) buf[amt] = hex @@ -1166,16 +1157,16 @@ tr33: goto st49 tr30: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ @@ -1186,7 +1177,7 @@ tr30: goto _test_eof49 } st_case_49: -//line uri_parse.go:1190 +//line uri_parse.go:1181 switch data[p] { case 33: goto tr81 @@ -1224,11 +1215,11 @@ tr30: } goto st0 tr31: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 @@ -1239,7 +1230,7 @@ tr31: goto _test_eof20 } st_case_20: -//line uri_parse.go:1243 +//line uri_parse.go:1234 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -1254,7 +1245,7 @@ tr31: } goto st0 tr32: -//line uri_parse.rl:56 +//line uri_parse.rl:39 hex = unhex(data[p]) * 16 @@ -1264,7 +1255,7 @@ tr32: goto _test_eof21 } st_case_21: -//line uri_parse.go:1268 +//line uri_parse.go:1259 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -1279,7 +1270,7 @@ tr32: } goto st0 tr84: -//line uri_parse.rl:94 +//line uri_parse.rl:77 b1 = string(buf[0:amt]) amt = 0 @@ -1290,7 +1281,7 @@ tr84: goto _test_eof22 } st_case_22: -//line uri_parse.go:1294 +//line uri_parse.go:1285 switch data[p] { case 33: goto tr34 @@ -1326,25 +1317,25 @@ tr84: } goto st0 tr34: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st50 tr85: -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st50 tr37: -//line uri_parse.rl:60 +//line uri_parse.rl:43 hex += unhex(data[p]) buf[amt] = hex @@ -1356,7 +1347,7 @@ tr37: goto _test_eof50 } st_case_50: -//line uri_parse.go:1360 +//line uri_parse.go:1351 switch data[p] { case 33: goto tr85 @@ -1392,7 +1383,7 @@ tr37: } goto st0 tr35: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 @@ -1402,7 +1393,7 @@ tr35: goto _test_eof23 } st_case_23: -//line uri_parse.go:1406 +//line uri_parse.go:1397 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -1417,7 +1408,7 @@ tr35: } goto st0 tr36: -//line uri_parse.rl:56 +//line uri_parse.rl:39 hex = unhex(data[p]) * 16 @@ -1427,7 +1418,7 @@ tr36: goto _test_eof24 } st_case_24: -//line uri_parse.go:1431 +//line uri_parse.go:1422 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -1463,11 +1454,11 @@ tr36: } goto st0 tr38: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:104 +//line uri_parse.rl:87 if 'A' <= data[p] && data[p] <= 'Z' { buf[amt] = data[p] + 0x20 @@ -1478,7 +1469,7 @@ tr38: goto st26 tr39: -//line uri_parse.rl:104 +//line uri_parse.rl:87 if 'A' <= data[p] && data[p] <= 'Z' { buf[amt] = data[p] + 0x20 @@ -1493,7 +1484,7 @@ tr39: goto _test_eof26 } st_case_26: -//line uri_parse.go:1497 +//line uri_parse.go:1488 switch data[p] { case 46: goto tr39 @@ -1514,7 +1505,7 @@ tr39: } goto st0 tr40: -//line uri_parse.rl:86 +//line uri_parse.rl:69 uri.Host = string(buf[0:amt]) @@ -1524,7 +1515,7 @@ tr40: goto _test_eof51 } st_case_51: -//line uri_parse.go:1528 +//line uri_parse.go:1519 switch data[p] { case 58: goto st12 @@ -1545,11 +1536,11 @@ tr40: } goto st0 tr41: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:104 +//line uri_parse.rl:87 if 'A' <= data[p] && data[p] <= 'Z' { buf[amt] = data[p] + 0x20 @@ -1560,7 +1551,7 @@ tr41: goto st28 tr42: -//line uri_parse.rl:104 +//line uri_parse.rl:87 if 'A' <= data[p] && data[p] <= 'Z' { buf[amt] = data[p] + 0x20 @@ -1575,7 +1566,7 @@ tr42: goto _test_eof28 } st_case_28: -//line uri_parse.go:1579 +//line uri_parse.go:1570 switch data[p] { case 43: goto tr42 @@ -1601,7 +1592,7 @@ tr42: } goto st0 tr43: -//line uri_parse.rl:74 +//line uri_parse.rl:57 uri.Scheme = string(buf[0:amt]) @@ -1611,7 +1602,7 @@ tr43: goto _test_eof29 } st_case_29: -//line uri_parse.go:1615 +//line uri_parse.go:1606 switch data[p] { case 43: goto tr44 @@ -1637,11 +1628,11 @@ tr43: } goto st0 tr44: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:104 +//line uri_parse.rl:87 if 'A' <= data[p] && data[p] <= 'Z' { buf[amt] = data[p] + 0x20 @@ -1652,7 +1643,7 @@ tr44: goto st52 tr89: -//line uri_parse.rl:104 +//line uri_parse.rl:87 if 'A' <= data[p] && data[p] <= 'Z' { buf[amt] = data[p] + 0x20 @@ -1667,7 +1658,7 @@ tr89: goto _test_eof52 } st_case_52: -//line uri_parse.go:1671 +//line uri_parse.go:1662 switch data[p] { case 43: goto tr89 @@ -1697,7 +1688,7 @@ tr89: } goto st0 tr90: -//line uri_parse.rl:86 +//line uri_parse.rl:69 uri.Host = string(buf[0:amt]) @@ -1707,13 +1698,13 @@ tr90: goto _test_eof30 } st_case_30: -//line uri_parse.go:1711 +//line uri_parse.go:1702 if 48 <= data[p] && data[p] <= 57 { goto tr46 } goto st0 tr46: -//line uri_parse.rl:90 +//line uri_parse.rl:73 uri.Port = uri.Port * 10 + uint16(data[p] - 0x30) @@ -1723,7 +1714,7 @@ tr46: goto _test_eof53 } st_case_53: -//line uri_parse.go:1727 +//line uri_parse.go:1718 switch data[p] { case 59: goto st31 @@ -1735,29 +1726,29 @@ tr46: } goto st0 tr91: -//line uri_parse.rl:86 +//line uri_parse.rl:69 uri.Host = string(buf[0:amt]) goto st31 tr97: -//line uri_parse.rl:94 +//line uri_parse.rl:77 b1 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:113 +//line uri_parse.rl:96 uri.Param = &URIParam{b1, b2, uri.Param} goto st31 tr102: -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:113 +//line uri_parse.rl:96 uri.Param = &URIParam{b1, b2, uri.Param} @@ -1767,7 +1758,7 @@ tr102: goto _test_eof31 } st_case_31: -//line uri_parse.go:1771 +//line uri_parse.go:1762 switch data[p] { case 33: goto tr47 @@ -1799,14 +1790,14 @@ tr102: } goto st0 tr95: -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st54 tr50: -//line uri_parse.rl:60 +//line uri_parse.rl:43 hex += unhex(data[p]) buf[amt] = hex @@ -1814,16 +1805,16 @@ tr50: goto st54 tr47: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ @@ -1834,7 +1825,7 @@ tr47: goto _test_eof54 } st_case_54: -//line uri_parse.go:1838 +//line uri_parse.go:1829 switch data[p] { case 33: goto tr95 @@ -1872,11 +1863,11 @@ tr47: } goto st0 tr48: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 @@ -1887,7 +1878,7 @@ tr48: goto _test_eof32 } st_case_32: -//line uri_parse.go:1891 +//line uri_parse.go:1882 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -1902,7 +1893,7 @@ tr48: } goto st0 tr49: -//line uri_parse.rl:56 +//line uri_parse.rl:39 hex = unhex(data[p]) * 16 @@ -1912,7 +1903,7 @@ tr49: goto _test_eof33 } st_case_33: -//line uri_parse.go:1916 +//line uri_parse.go:1907 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -1927,7 +1918,7 @@ tr49: } goto st0 tr98: -//line uri_parse.rl:94 +//line uri_parse.rl:77 b1 = string(buf[0:amt]) amt = 0 @@ -1938,7 +1929,7 @@ tr98: goto _test_eof34 } st_case_34: -//line uri_parse.go:1942 +//line uri_parse.go:1933 switch data[p] { case 33: goto tr51 @@ -1970,25 +1961,25 @@ tr98: } goto st0 tr51: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st55 tr100: -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st55 tr54: -//line uri_parse.rl:60 +//line uri_parse.rl:43 hex += unhex(data[p]) buf[amt] = hex @@ -2000,7 +1991,7 @@ tr54: goto _test_eof55 } st_case_55: -//line uri_parse.go:2004 +//line uri_parse.go:1995 switch data[p] { case 33: goto tr100 @@ -2036,7 +2027,7 @@ tr54: } goto st0 tr52: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 @@ -2046,7 +2037,7 @@ tr52: goto _test_eof35 } st_case_35: -//line uri_parse.go:2050 +//line uri_parse.go:2041 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -2061,7 +2052,7 @@ tr52: } goto st0 tr53: -//line uri_parse.rl:56 +//line uri_parse.rl:39 hex = unhex(data[p]) * 16 @@ -2071,7 +2062,7 @@ tr53: goto _test_eof36 } st_case_36: -//line uri_parse.go:2075 +//line uri_parse.go:2066 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -2086,51 +2077,51 @@ tr53: } goto st0 tr92: -//line uri_parse.rl:86 +//line uri_parse.rl:69 uri.Host = string(buf[0:amt]) goto st37 tr99: -//line uri_parse.rl:94 +//line uri_parse.rl:77 b1 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:113 +//line uri_parse.rl:96 uri.Param = &URIParam{b1, b2, uri.Param} goto st37 tr103: -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:113 +//line uri_parse.rl:96 uri.Param = &URIParam{b1, b2, uri.Param} goto st37 tr106: -//line uri_parse.rl:94 +//line uri_parse.rl:77 b1 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:117 +//line uri_parse.rl:100 uri.Header = &URIHeader{b1, b2, uri.Header} goto st37 tr110: -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:117 +//line uri_parse.rl:100 uri.Header = &URIHeader{b1, b2, uri.Header} @@ -2140,7 +2131,7 @@ tr110: goto _test_eof37 } st_case_37: -//line uri_parse.go:2144 +//line uri_parse.go:2135 switch data[p] { case 33: goto tr55 @@ -2176,14 +2167,14 @@ tr110: } goto st0 tr104: -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st56 tr58: -//line uri_parse.rl:60 +//line uri_parse.rl:43 hex += unhex(data[p]) buf[amt] = hex @@ -2191,16 +2182,16 @@ tr58: goto st56 tr55: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ @@ -2211,7 +2202,7 @@ tr55: goto _test_eof56 } st_case_56: -//line uri_parse.go:2215 +//line uri_parse.go:2206 switch data[p] { case 33: goto tr104 @@ -2249,11 +2240,11 @@ tr55: } goto st0 tr56: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 @@ -2264,7 +2255,7 @@ tr56: goto _test_eof38 } st_case_38: -//line uri_parse.go:2268 +//line uri_parse.go:2259 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -2279,7 +2270,7 @@ tr56: } goto st0 tr57: -//line uri_parse.rl:56 +//line uri_parse.rl:39 hex = unhex(data[p]) * 16 @@ -2289,7 +2280,7 @@ tr57: goto _test_eof39 } st_case_39: -//line uri_parse.go:2293 +//line uri_parse.go:2284 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -2304,7 +2295,7 @@ tr57: } goto st0 tr107: -//line uri_parse.rl:94 +//line uri_parse.rl:77 b1 = string(buf[0:amt]) amt = 0 @@ -2315,7 +2306,7 @@ tr107: goto _test_eof40 } st_case_40: -//line uri_parse.go:2319 +//line uri_parse.go:2310 switch data[p] { case 33: goto tr59 @@ -2351,25 +2342,25 @@ tr107: } goto st0 tr59: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st57 tr108: -//line uri_parse.rl:51 +//line uri_parse.rl:34 buf[amt] = data[p] amt++ goto st57 tr62: -//line uri_parse.rl:60 +//line uri_parse.rl:43 hex += unhex(data[p]) buf[amt] = hex @@ -2381,7 +2372,7 @@ tr62: goto _test_eof57 } st_case_57: -//line uri_parse.go:2385 +//line uri_parse.go:2376 switch data[p] { case 33: goto tr108 @@ -2417,7 +2408,7 @@ tr62: } goto st0 tr60: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 @@ -2427,7 +2418,7 @@ tr60: goto _test_eof41 } st_case_41: -//line uri_parse.go:2431 +//line uri_parse.go:2422 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -2442,7 +2433,7 @@ tr60: } goto st0 tr61: -//line uri_parse.rl:56 +//line uri_parse.rl:39 hex = unhex(data[p]) * 16 @@ -2452,7 +2443,7 @@ tr61: goto _test_eof42 } st_case_42: -//line uri_parse.go:2456 +//line uri_parse.go:2447 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -2488,11 +2479,11 @@ tr61: } goto st0 tr63: -//line uri_parse.rl:47 +//line uri_parse.rl:30 amt = 0 -//line uri_parse.rl:104 +//line uri_parse.rl:87 if 'A' <= data[p] && data[p] <= 'Z' { buf[amt] = data[p] + 0x20 @@ -2503,7 +2494,7 @@ tr63: goto st44 tr64: -//line uri_parse.rl:104 +//line uri_parse.rl:87 if 'A' <= data[p] && data[p] <= 'Z' { buf[amt] = data[p] + 0x20 @@ -2518,7 +2509,7 @@ tr64: goto _test_eof44 } st_case_44: -//line uri_parse.go:2522 +//line uri_parse.go:2513 switch data[p] { case 46: goto tr64 @@ -2539,7 +2530,7 @@ tr64: } goto st0 tr65: -//line uri_parse.rl:86 +//line uri_parse.rl:69 uri.Host = string(buf[0:amt]) @@ -2549,7 +2540,7 @@ tr65: goto _test_eof58 } st_case_58: -//line uri_parse.go:2553 +//line uri_parse.go:2544 switch data[p] { case 58: goto st30 @@ -2621,58 +2612,58 @@ tr65: if p == eof { switch cs { case 45, 52: -//line uri_parse.rl:86 +//line uri_parse.rl:69 uri.Host = string(buf[0:amt]) case 47, 54: -//line uri_parse.rl:94 +//line uri_parse.rl:77 b1 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:113 +//line uri_parse.rl:96 uri.Param = &URIParam{b1, b2, uri.Param} case 49, 56: -//line uri_parse.rl:94 +//line uri_parse.rl:77 b1 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:117 +//line uri_parse.rl:100 uri.Header = &URIHeader{b1, b2, uri.Header} case 48, 55: -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:113 +//line uri_parse.rl:96 uri.Param = &URIParam{b1, b2, uri.Param} case 50, 57: -//line uri_parse.rl:99 +//line uri_parse.rl:82 b2 = string(buf[0:amt]) amt = 0 -//line uri_parse.rl:117 +//line uri_parse.rl:100 uri.Header = &URIHeader{b1, b2, uri.Header} -//line uri_parse.go:2669 +//line uri_parse.go:2660 } } _out: {} } -//line uri_parse.rl:174 +//line uri_parse.rl:157 if cs < uri_first_final { if p == pe { diff --git a/sip/uri_parse.rl b/sip/uri_parse.rl index 7e554fe..9376fc9 100644 --- a/sip/uri_parse.rl +++ b/sip/uri_parse.rl @@ -11,16 +11,8 @@ import ( %% machine uri; %% write data; -// ParseURI turns a a SIP URI into a data structure. -func ParseURI(s string) (uri *URI, err error) { - if s == "" { - return nil, errors.New("Empty URI") - } - return ParseURIBytes([]byte(s)) -} - // ParseURI turns a a SIP URI byte slice into a data structure. -func ParseURIBytes(data []byte) (uri *URI, err error) { +func ParseURI(data []byte) (uri *URI, err error) { if data == nil { return nil, nil } @@ -31,19 +23,10 @@ func ParseURIBytes(data []byte) (uri *URI, err error) { eof := len(data) buf := make([]byte, len(data)) amt := 0 - // mark := 0 var b1, b2 string var hex byte %%{ - action mark { - mark = p - } - - action backtrack { - fexec mark; - } - action start { amt = 0 } diff --git a/sip/uri_test.go b/sip/uri_test.go index 306484f..81a50ff 100755 --- a/sip/uri_test.go +++ b/sip/uri_test.go @@ -18,7 +18,7 @@ var uriTests = []uriTest{ uriTest{ s: "", - e: errors.New("Empty URI"), + e: errors.New("Incomplete URI: "), }, uriTest{ @@ -127,7 +127,7 @@ var uriTests = []uriTest{ Pass: "priceisright", Host: "dead:beef::666", Port: 5060, - Param: &sip.URIParam{"isup-oli", "00", nil}, + Param: &sip.URIParam{Name: "isup-oli", Value: "00"}, }, }, @@ -151,7 +151,14 @@ var uriTests = []uriTest{ Scheme: "sips", User: "alice", Host: "atlanta.com", - Header: &sip.URIHeader{"subject", "project x", &sip.URIHeader{"priority", "urgent", nil}}, + Header: &sip.URIHeader{ + Name: "subject", + Value: "project x", + Next: &sip.URIHeader{ + Name: "priority", + Value: "urgent", + }, + }, }, }, @@ -162,7 +169,7 @@ var uriTests = []uriTest{ User: "+1-212-555-1212", Pass: "1234", Host: "gateway.com", - Param: &sip.URIParam{"user", "phone", nil}, + Param: &sip.URIParam{Name: "user", Value: "phone"}, }, }, @@ -171,8 +178,8 @@ var uriTests = []uriTest{ uri: &sip.URI{ Scheme: "sip", Host: "atlanta.com", - Param: &sip.URIParam{"method", "register", nil}, - Header: &sip.URIHeader{"to", "alice@atlanta.com", nil}, + Param: &sip.URIParam{Name: "method", Value: "register"}, + Header: &sip.URIHeader{Name: "to", Value: "alice@atlanta.com"}, }, }, @@ -189,7 +196,7 @@ var uriTests = []uriTest{ func TestParseURI(t *testing.T) { for _, test := range uriTests { - uri, err := sip.ParseURI(test.s) + uri, err := sip.ParseURI([]byte(test.s)) if err != nil { if !reflect.DeepEqual(test.e, err) { t.Errorf("%s\nWant: %#v\nGot: %#v", test.s, test.e, err) diff --git a/util/util.go b/util/util.go index e6ce0ac..daae620 100755 --- a/util/util.go +++ b/util/util.go @@ -9,77 +9,51 @@ import ( "syscall" ) -// Returns true if error is an i/o timeout. -func IsTimeout(err error) bool { - operr, ok := err.(*net.OpError) - return ok && operr.Timeout() -} - -// Returns true if error is ICMP connection refused. +// Return true if error is ICMP connection refused. func IsRefused(err error) bool { operr, ok := err.(*net.OpError) return ok && operr.Err == syscall.ECONNREFUSED } -// Returns true if error was caused by reading from a closed socket. +// Return true if error was caused by reading from a closed socket. func IsUseOfClosed(err error) bool { return strings.Contains(err.Error(), "use of closed network connection") } -// Returns true if IP contains a colon. +// Return true if IP contains a colon. func IsIPv6(ip string) bool { - n := strings.Index(ip, ":") - return n >= 0 -} - -// Returns true if IPv4 and is a LAN address as defined by RFC 1918. -func IsIPPrivate(ip net.IP) bool { - if ip != nil { - ip = ip.To4() - if ip != nil { - switch ip[0] { - case 10: - return true - case 172: - if ip[1] >= 16 && ip[1] <= 31 { - return true - } - case 192: - if ip[1] == 168 { - return true - } - } - } - } - return false + return strings.Index(ip, ":") >= 0 } -// Generates a secure random number between 0 and 50,000. +// Generate a secure random number between 0 and 50,000. func GenerateCSeq() int { return rand.Int() % 50000 } -// Generates a 48-bit secure random string like: 27c97271d363. +// Generate a 48-bit secure random string like: 27c97271d363. func GenerateTag() string { return hex.EncodeToString(randomBytes(6)) } -// This is used in the Via tag. Probably not suitable for use by stateless -// proxies. +// Generate a SIP 2.0 Via branch ID. This is probably not suitable for use by +// stateless proxies. func GenerateBranch() string { return "z9hG4bK-" + GenerateTag() } -// Generates a secure UUID4, e.g.f47ac10b-58cc-4372-a567-0e02b2c3d479 +// Generate a secure UUID4, e.g.f47ac10b-58cc-4372-a567-0e02b2c3d479 func GenerateCallID() string { lol := randomBytes(15) digs := hex.EncodeToString(lol) - uuid4 := digs[0:8] + "-" + digs[8:12] + "-4" + digs[12:15] + - "-a" + digs[15:18] + "-" + digs[18:] + uuid4 := digs[0:8] + + "-" + digs[8:12] + + "-4" + digs[12:15] + + "-a" + digs[15:18] + + "-" + digs[18:] return uuid4 } -// Generates a random ID for an SDP. +// Generate a random ID for an SDP. func GenerateOriginID() string { return strconv.FormatUint(uint64(rand.Uint32()), 10) }