From e9c9bcbfc11473fed57f673185dadd49372ffd6e Mon Sep 17 00:00:00 2001 From: Justine Alexandra Roberts Tunney Date: Sun, 29 Mar 2015 19:00:06 -0400 Subject: [PATCH] Getting so close! --- sip/msg_parse.go | 9409 +++++++++++++++++++++++++++++----------------- sip/msg_parse.rl | 203 +- sip/msg_test.go | 451 ++- 3 files changed, 6615 insertions(+), 3448 deletions(-) diff --git a/sip/msg_parse.go b/sip/msg_parse.go index 5b452ea..9e98ddf 100644 --- a/sip/msg_parse.go +++ b/sip/msg_parse.go @@ -1,6 +1,29 @@ //line msg_parse.rl:1 // -*-go-*- +// +// Ragel SIP Message Parser +// +// This file is compiled into Go code by the Ragel State Machine Compiler for +// the purpose of converting SIP messages into a Msg data structure. This +// machine works in tandem with the Ragel machine defined in uri_parse.rl. +// +// Perhaps it would have been better if the authors of this protocol had chosen +// to use a binary serialization format like protocol buffers. But instead they +// chose to create a plaintext protocol that looks similar to HTTP requests, +// but are phenomenally more complicated. +// +// SIP messages are quite insane. Whitespace can be used liberally in a variety +// of different ways. Header values can have line continuations or even +// comments. Header names are case-insensitive and sometimes have shorthand +// notation. Custom headers may be specified. Via and address headers can be +// repeated, or contain repeating values. URIs can be specified with or without +// address angle brackets. URI parameters can belong to either the URI or the +// address. Values can be escaped. String literals can be quoted. Oh the +// humanity. See the torture messages in msg_test.go for examples. +// +// See: http://www.colm.net/files/ragel/ragel-guide-6.9.pdf +// See: http://zedshaw.com/archive/ragel-state-charts/ package sip @@ -11,11 +34,11 @@ import ( ) -//line msg_parse.rl:12 +//line msg_parse.rl:35 -//line msg_parse.go:17 +//line msg_parse.go:40 const msg_start int = 1 -const msg_first_final int = 542 +const msg_first_final int = 622 const msg_error int = 0 const msg_en_value int = 34 @@ -24,7 +47,7 @@ const msg_en_header int = 51 const msg_en_main int = 1 -//line msg_parse.rl:13 +//line msg_parse.rl:36 // ParseMsg turns a SIP message into a data structure. func ParseMsg(s string) (msg *Msg, err error) { @@ -56,14 +79,15 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { var hex byte var value *string var addr **Addr + var via *Via -//line msg_parse.go:62 +//line msg_parse.go:86 { cs = msg_start } -//line msg_parse.go:67 +//line msg_parse.go:91 { var _widec int16 if p == pe { @@ -98,8 +122,8 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { goto st_case_12 case 13: goto st_case_13 - case 542: - goto st_case_542 + case 622: + goto st_case_622 case 14: goto st_case_14 case 15: @@ -156,8 +180,8 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { goto st_case_40 case 41: goto st_case_41 - case 543: - goto st_case_543 + case 623: + goto st_case_623 case 42: goto st_case_42 case 43: @@ -170,8 +194,8 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { goto st_case_46 case 47: goto st_case_47 - case 544: - goto st_case_544 + case 624: + goto st_case_624 case 48: goto st_case_48 case 49: @@ -182,8 +206,8 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { goto st_case_51 case 52: goto st_case_52 - case 545: - goto st_case_545 + case 625: + goto st_case_625 case 53: goto st_case_53 case 54: @@ -1162,6 +1186,166 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { goto st_case_540 case 541: goto st_case_541 + case 542: + goto st_case_542 + case 543: + goto st_case_543 + case 544: + goto st_case_544 + case 545: + goto st_case_545 + case 546: + goto st_case_546 + case 547: + goto st_case_547 + case 548: + goto st_case_548 + case 549: + goto st_case_549 + case 550: + goto st_case_550 + case 551: + goto st_case_551 + case 552: + goto st_case_552 + case 553: + goto st_case_553 + case 554: + goto st_case_554 + case 555: + goto st_case_555 + case 556: + goto st_case_556 + case 557: + goto st_case_557 + case 558: + goto st_case_558 + case 559: + goto st_case_559 + case 560: + goto st_case_560 + case 561: + goto st_case_561 + case 562: + goto st_case_562 + case 563: + goto st_case_563 + case 564: + goto st_case_564 + case 565: + goto st_case_565 + case 566: + goto st_case_566 + case 567: + goto st_case_567 + case 568: + goto st_case_568 + case 569: + goto st_case_569 + case 570: + goto st_case_570 + case 571: + goto st_case_571 + case 572: + goto st_case_572 + case 573: + goto st_case_573 + case 574: + goto st_case_574 + case 575: + goto st_case_575 + case 576: + goto st_case_576 + case 577: + goto st_case_577 + case 578: + goto st_case_578 + case 579: + goto st_case_579 + case 580: + goto st_case_580 + case 581: + goto st_case_581 + case 582: + goto st_case_582 + case 583: + goto st_case_583 + case 584: + goto st_case_584 + case 585: + goto st_case_585 + case 586: + goto st_case_586 + case 587: + goto st_case_587 + case 588: + goto st_case_588 + case 589: + goto st_case_589 + case 590: + goto st_case_590 + case 591: + goto st_case_591 + case 592: + goto st_case_592 + case 593: + goto st_case_593 + case 594: + goto st_case_594 + case 595: + goto st_case_595 + case 596: + goto st_case_596 + case 597: + goto st_case_597 + case 598: + goto st_case_598 + case 599: + goto st_case_599 + case 600: + goto st_case_600 + case 601: + goto st_case_601 + case 602: + goto st_case_602 + case 603: + goto st_case_603 + case 604: + goto st_case_604 + case 605: + goto st_case_605 + case 606: + goto st_case_606 + case 607: + goto st_case_607 + case 608: + goto st_case_608 + case 609: + goto st_case_609 + case 610: + goto st_case_610 + case 611: + goto st_case_611 + case 612: + goto st_case_612 + case 613: + goto st_case_613 + case 614: + goto st_case_614 + case 615: + goto st_case_615 + case 616: + goto st_case_616 + case 617: + goto st_case_617 + case 618: + goto st_case_618 + case 619: + goto st_case_619 + case 620: + goto st_case_620 + case 621: + goto st_case_621 } goto st_out st_case_1: @@ -1200,43 +1384,21 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { goto tr0 } goto st0 -tr73: -//line msg_parse.rl:131 - - p-- - - {goto st44 } - -//line msg_parse.rl:125 - - p-- - - {goto st44 } - - goto st0 -tr105: -//line msg_parse.rl:125 - - p-- - - {goto st44 } - - goto st0 -tr293: -//line msg_parse.rl:131 +tr75: +//line msg_parse.rl:189 p-- {goto st44 } goto st0 -//line msg_parse.go:1234 +//line msg_parse.go:1396 st_case_0: st0: cs = 0 goto _out tr0: -//line msg_parse.rl:55 +//line msg_parse.rl:83 mark = p @@ -1246,7 +1408,7 @@ tr0: goto _test_eof2 } st_case_2: -//line msg_parse.go:1250 +//line msg_parse.go:1412 switch data[p] { case 32: goto tr3 @@ -1283,7 +1445,7 @@ tr0: } goto st0 tr3: -//line msg_parse.rl:91 +//line msg_parse.rl:119 msg.Method = string(data[mark:p]) @@ -1293,13 +1455,13 @@ tr3: goto _test_eof3 } st_case_3: -//line msg_parse.go:1297 +//line msg_parse.go:1459 if data[p] == 32 { goto st0 } goto tr5 tr5: -//line msg_parse.rl:55 +//line msg_parse.rl:83 mark = p @@ -1309,13 +1471,13 @@ tr5: goto _test_eof4 } st_case_4: -//line msg_parse.go:1313 +//line msg_parse.go:1475 if data[p] == 32 { goto tr7 } goto st4 tr7: -//line msg_parse.rl:103 +//line msg_parse.rl:131 msg.Request, err = ParseURIBytes(data[mark:p]) if err != nil { return nil, err } @@ -1326,7 +1488,7 @@ tr7: goto _test_eof5 } st_case_5: -//line msg_parse.go:1330 +//line msg_parse.go:1492 if data[p] == 83 { goto st6 } @@ -1368,7 +1530,7 @@ tr7: } goto st0 tr12: -//line msg_parse.rl:95 +//line msg_parse.rl:123 msg.VersionMajor = msg.VersionMajor * 10 + (data[p] - 0x30) @@ -1378,7 +1540,7 @@ tr12: goto _test_eof10 } st_case_10: -//line msg_parse.go:1382 +//line msg_parse.go:1544 if data[p] == 46 { goto st11 } @@ -1396,7 +1558,7 @@ tr12: } goto st0 tr14: -//line msg_parse.rl:99 +//line msg_parse.rl:127 msg.VersionMinor = msg.VersionMinor * 10 + (data[p] - 0x30) @@ -1406,7 +1568,7 @@ tr14: goto _test_eof12 } st_case_12: -//line msg_parse.go:1410 +//line msg_parse.go:1572 if data[p] == 13 { goto st13 } @@ -1415,7 +1577,7 @@ tr14: } goto st0 tr36: -//line msg_parse.rl:112 +//line msg_parse.rl:140 msg.Phrase = string(buf[0:amt]) @@ -1425,31 +1587,31 @@ tr36: goto _test_eof13 } st_case_13: -//line msg_parse.go:1429 +//line msg_parse.go:1591 if data[p] == 10 { goto tr16 } goto st0 tr16: -//line msg_parse.rl:50 +//line msg_parse.rl:78 line++ linep = p + 1 -//line msg_parse.rl:116 +//line msg_parse.rl:181 {goto st51 } - goto st542 - st542: + goto st622 + st622: if p++; p == pe { - goto _test_eof542 + goto _test_eof622 } - st_case_542: -//line msg_parse.go:1450 + st_case_622: +//line msg_parse.go:1612 goto st0 tr2: -//line msg_parse.rl:55 +//line msg_parse.rl:83 mark = p @@ -1459,7 +1621,7 @@ tr2: goto _test_eof14 } st_case_14: -//line msg_parse.go:1463 +//line msg_parse.go:1625 switch data[p] { case 32: goto tr3 @@ -1586,7 +1748,7 @@ tr2: } goto st0 tr20: -//line msg_parse.rl:95 +//line msg_parse.rl:123 msg.VersionMajor = msg.VersionMajor * 10 + (data[p] - 0x30) @@ -1596,7 +1758,7 @@ tr20: goto _test_eof18 } st_case_18: -//line msg_parse.go:1600 +//line msg_parse.go:1762 if data[p] == 46 { goto st19 } @@ -1614,7 +1776,7 @@ tr20: } goto st0 tr22: -//line msg_parse.rl:99 +//line msg_parse.rl:127 msg.VersionMinor = msg.VersionMinor * 10 + (data[p] - 0x30) @@ -1624,7 +1786,7 @@ tr22: goto _test_eof20 } st_case_20: -//line msg_parse.go:1628 +//line msg_parse.go:1790 if data[p] == 32 { goto st21 } @@ -1642,7 +1804,7 @@ tr22: } goto st0 tr24: -//line msg_parse.rl:108 +//line msg_parse.rl:136 msg.Status = msg.Status * 10 + (int(data[p]) - 0x30) @@ -1652,13 +1814,13 @@ tr24: goto _test_eof22 } st_case_22: -//line msg_parse.go:1656 +//line msg_parse.go:1818 if 48 <= data[p] && data[p] <= 57 { goto tr25 } goto st0 tr25: -//line msg_parse.rl:108 +//line msg_parse.rl:136 msg.Status = msg.Status * 10 + (int(data[p]) - 0x30) @@ -1668,13 +1830,13 @@ tr25: goto _test_eof23 } st_case_23: -//line msg_parse.go:1672 +//line msg_parse.go:1834 if 48 <= data[p] && data[p] <= 57 { goto tr26 } goto st0 tr26: -//line msg_parse.rl:108 +//line msg_parse.rl:136 msg.Status = msg.Status * 10 + (int(data[p]) - 0x30) @@ -1684,7 +1846,7 @@ tr26: goto _test_eof24 } st_case_24: -//line msg_parse.go:1688 +//line msg_parse.go:1850 if data[p] == 32 { goto st25 } @@ -1748,25 +1910,25 @@ tr26: } goto st0 tr28: -//line msg_parse.rl:59 +//line msg_parse.rl:87 amt = 0 -//line msg_parse.rl:63 +//line msg_parse.rl:91 buf[amt] = data[p] amt++ goto st26 tr35: -//line msg_parse.rl:63 +//line msg_parse.rl:91 buf[amt] = data[p] amt++ goto st26 tr44: -//line msg_parse.rl:81 +//line msg_parse.rl:109 hex += unhex(data[p]) buf[amt] = hex @@ -1778,7 +1940,7 @@ tr44: goto _test_eof26 } st_case_26: -//line msg_parse.go:1782 +//line msg_parse.go:1944 switch data[p] { case 9: goto tr35 @@ -1835,7 +1997,7 @@ tr44: } goto st0 tr29: -//line msg_parse.rl:59 +//line msg_parse.rl:87 amt = 0 @@ -1845,7 +2007,7 @@ tr29: goto _test_eof27 } st_case_27: -//line msg_parse.go:1849 +//line msg_parse.go:2011 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -1860,7 +2022,7 @@ tr29: } goto st0 tr43: -//line msg_parse.rl:77 +//line msg_parse.rl:105 hex = unhex(data[p]) * 16 @@ -1870,7 +2032,7 @@ tr43: goto _test_eof28 } st_case_28: -//line msg_parse.go:1874 +//line msg_parse.go:2036 switch { case data[p] < 65: if 48 <= data[p] && data[p] <= 57 { @@ -1885,18 +2047,18 @@ tr43: } goto st0 tr30: -//line msg_parse.rl:59 +//line msg_parse.rl:87 amt = 0 -//line msg_parse.rl:63 +//line msg_parse.rl:91 buf[amt] = data[p] amt++ goto st29 tr38: -//line msg_parse.rl:63 +//line msg_parse.rl:91 buf[amt] = data[p] amt++ @@ -1907,24 +2069,24 @@ tr38: goto _test_eof29 } st_case_29: -//line msg_parse.go:1911 +//line msg_parse.go:2073 if 128 <= data[p] && data[p] <= 191 { goto tr35 } goto st0 tr31: -//line msg_parse.rl:59 +//line msg_parse.rl:87 amt = 0 -//line msg_parse.rl:63 +//line msg_parse.rl:91 buf[amt] = data[p] amt++ goto st30 tr39: -//line msg_parse.rl:63 +//line msg_parse.rl:91 buf[amt] = data[p] amt++ @@ -1935,24 +2097,24 @@ tr39: goto _test_eof30 } st_case_30: -//line msg_parse.go:1939 +//line msg_parse.go:2101 if 128 <= data[p] && data[p] <= 191 { goto tr38 } goto st0 tr32: -//line msg_parse.rl:59 +//line msg_parse.rl:87 amt = 0 -//line msg_parse.rl:63 +//line msg_parse.rl:91 buf[amt] = data[p] amt++ goto st31 tr40: -//line msg_parse.rl:63 +//line msg_parse.rl:91 buf[amt] = data[p] amt++ @@ -1963,24 +2125,24 @@ tr40: goto _test_eof31 } st_case_31: -//line msg_parse.go:1967 +//line msg_parse.go:2129 if 128 <= data[p] && data[p] <= 191 { goto tr39 } goto st0 tr33: -//line msg_parse.rl:59 +//line msg_parse.rl:87 amt = 0 -//line msg_parse.rl:63 +//line msg_parse.rl:91 buf[amt] = data[p] amt++ goto st32 tr41: -//line msg_parse.rl:63 +//line msg_parse.rl:91 buf[amt] = data[p] amt++ @@ -1991,24 +2153,24 @@ tr41: goto _test_eof32 } st_case_32: -//line msg_parse.go:1995 +//line msg_parse.go:2157 if 128 <= data[p] && data[p] <= 191 { goto tr40 } goto st0 tr34: -//line msg_parse.rl:59 +//line msg_parse.rl:87 amt = 0 -//line msg_parse.rl:63 +//line msg_parse.rl:91 buf[amt] = data[p] amt++ goto st33 tr42: -//line msg_parse.rl:63 +//line msg_parse.rl:91 buf[amt] = data[p] amt++ @@ -2019,7 +2181,7 @@ tr42: goto _test_eof33 } st_case_33: -//line msg_parse.go:2023 +//line msg_parse.go:2185 if 128 <= data[p] && data[p] <= 191 { goto tr41 } @@ -2072,7 +2234,7 @@ tr42: } goto st0 tr45: -//line msg_parse.rl:55 +//line msg_parse.rl:83 mark = p @@ -2082,7 +2244,7 @@ tr45: goto _test_eof35 } st_case_35: -//line msg_parse.go:2086 +//line msg_parse.go:2248 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -2126,7 +2288,7 @@ tr45: } goto st0 tr46: -//line msg_parse.rl:55 +//line msg_parse.rl:83 mark = p @@ -2136,13 +2298,13 @@ tr46: goto _test_eof36 } st_case_36: -//line msg_parse.go:2140 +//line msg_parse.go:2302 if 128 <= data[p] && data[p] <= 191 { goto st35 } goto st0 tr47: -//line msg_parse.rl:55 +//line msg_parse.rl:83 mark = p @@ -2152,13 +2314,13 @@ tr47: goto _test_eof37 } st_case_37: -//line msg_parse.go:2156 +//line msg_parse.go:2318 if 128 <= data[p] && data[p] <= 191 { goto st36 } goto st0 tr48: -//line msg_parse.rl:55 +//line msg_parse.rl:83 mark = p @@ -2168,13 +2330,13 @@ tr48: goto _test_eof38 } st_case_38: -//line msg_parse.go:2172 +//line msg_parse.go:2334 if 128 <= data[p] && data[p] <= 191 { goto st37 } goto st0 tr49: -//line msg_parse.rl:55 +//line msg_parse.rl:83 mark = p @@ -2184,13 +2346,13 @@ tr49: goto _test_eof39 } st_case_39: -//line msg_parse.go:2188 +//line msg_parse.go:2350 if 128 <= data[p] && data[p] <= 191 { goto st38 } goto st0 tr50: -//line msg_parse.rl:55 +//line msg_parse.rl:83 mark = p @@ -2200,13 +2362,13 @@ tr50: goto _test_eof40 } st_case_40: -//line msg_parse.go:2204 +//line msg_parse.go:2366 if 128 <= data[p] && data[p] <= 191 { goto st39 } goto st0 tr51: -//line msg_parse.rl:55 +//line msg_parse.rl:83 mark = p @@ -2216,18 +2378,18 @@ tr51: goto _test_eof41 } st_case_41: -//line msg_parse.go:2220 +//line msg_parse.go:2382 if data[p] == 10 { goto tr61 } goto st0 tr61: -//line msg_parse.rl:50 +//line msg_parse.rl:78 line++ linep = p + 1 -//line msg_parse.rl:140 +//line msg_parse.rl:198 { b := data[mark:p - 1] if value != nil { @@ -2242,20 +2404,20 @@ tr61: msg.Headers[name] = string(b) } } -//line msg_parse.rl:116 +//line msg_parse.rl:181 {goto st51 } - goto st543 - st543: + goto st623 + st623: if p++; p == pe { - goto _test_eof543 + goto _test_eof623 } - st_case_543: -//line msg_parse.go:2256 + st_case_623: +//line msg_parse.go:2418 goto st0 tr52: -//line msg_parse.rl:55 +//line msg_parse.rl:83 mark = p @@ -2265,13 +2427,13 @@ tr52: goto _test_eof42 } st_case_42: -//line msg_parse.go:2269 +//line msg_parse.go:2431 if data[p] == 10 { goto tr62 } goto st0 tr62: -//line msg_parse.rl:50 +//line msg_parse.rl:78 line++ linep = p + 1 @@ -2282,7 +2444,7 @@ tr62: goto _test_eof43 } st_case_43: -//line msg_parse.go:2286 +//line msg_parse.go:2448 switch data[p] { case 9: goto st35 @@ -2297,49 +2459,42 @@ tr62: st_case_44: switch data[p] { case 33: - goto tr63 + goto st45 case 37: - goto tr63 + goto st45 case 39: - goto tr63 + goto st45 case 126: - goto tr63 + goto st45 } switch { case data[p] < 48: switch { case data[p] > 43: if 45 <= data[p] && data[p] <= 46 { - goto tr63 + goto st45 } case data[p] >= 42: - goto tr63 + goto st45 } case data[p] > 57: switch { case data[p] > 90: if 95 <= data[p] && data[p] <= 122 { - goto tr63 + goto st45 } case data[p] >= 65: - goto tr63 + goto st45 } default: - goto tr63 + goto st45 } goto st0 -tr63: -//line msg_parse.rl:55 - - mark = p - - goto st45 st45: if p++; p == pe { goto _test_eof45 } st_case_45: -//line msg_parse.go:2343 switch data[p] { case 9: goto tr64 @@ -2352,7 +2507,7 @@ tr63: case 39: goto st45 case 58: - goto tr66 + goto tr65 case 126: goto st45 } @@ -2380,7 +2535,7 @@ tr63: } goto st0 tr64: -//line msg_parse.rl:136 +//line msg_parse.rl:194 name = string(data[mark:p]) @@ -2390,7 +2545,7 @@ tr64: goto _test_eof46 } st_case_46: -//line msg_parse.go:2394 +//line msg_parse.go:2549 switch data[p] { case 9: goto st46 @@ -2400,8 +2555,8 @@ tr64: goto st47 } goto st0 -tr66: -//line msg_parse.rl:136 +tr65: +//line msg_parse.rl:194 name = string(data[mark:p]) @@ -2411,7 +2566,7 @@ tr66: goto _test_eof47 } st_case_47: -//line msg_parse.go:2415 +//line msg_parse.go:2570 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -2425,35 +2580,38 @@ tr66: case 32: goto st47 case 269: - goto tr69 + goto tr68 case 525: goto st48 } switch { case _widec > 12: if 14 <= _widec { - goto tr69 + goto tr68 } default: - goto tr69 + goto tr68 } goto st0 -tr69: -//line msg_parse.rl:351 +tr68: +//line msg_parse.rl:477 value=nil;addr=nil -//line msg_parse.rl:120 +//line msg_parse.rl:70 p-- + +//line msg_parse.rl:185 + {goto st34 } - goto st544 - st544: + goto st624 + st624: if p++; p == pe { - goto _test_eof544 + goto _test_eof624 } - st_case_544: -//line msg_parse.go:2457 + st_case_624: +//line msg_parse.go:2615 goto st0 st48: if p++; p == pe { @@ -2461,11 +2619,11 @@ value=nil;addr=nil } st_case_48: if data[p] == 10 { - goto tr71 + goto tr70 } goto st0 -tr71: -//line msg_parse.rl:50 +tr70: +//line msg_parse.rl:78 line++ linep = p + 1 @@ -2476,7 +2634,7 @@ tr71: goto _test_eof49 } st_case_49: -//line msg_parse.go:2480 +//line msg_parse.go:2638 switch data[p] { case 9: goto st50 @@ -2495,7 +2653,7 @@ tr71: case 32: goto st50 } - goto tr69 + goto tr68 st51: if p++; p == pe { goto _test_eof51 @@ -2504,150 +2662,199 @@ tr71: switch data[p] { case 13: goto st52 - case 65: - goto tr75 - case 66: - goto tr76 - case 67: - goto tr77 - case 68: - goto tr78 - case 69: - goto tr79 - case 70: - goto tr80 - case 73: - goto tr81 - case 75: - goto tr82 - case 76: - goto st279 - case 77: - goto tr84 - case 79: - goto tr85 - case 80: - goto tr86 - case 82: - goto tr87 - case 83: - goto tr88 - case 84: - goto tr89 - case 85: - goto tr90 - case 86: - goto st505 - case 87: - goto tr92 - case 97: - goto tr75 - case 98: - goto tr76 - case 99: - goto tr77 - case 100: - goto tr78 - case 101: - goto tr79 - case 102: - goto tr80 - case 105: - goto tr81 - case 107: - goto tr82 - case 108: - goto st279 - case 109: - goto tr84 - case 111: - goto tr85 - case 112: - goto tr86 - case 114: - goto tr87 - case 115: - goto tr88 - case 116: - goto tr89 - case 117: - goto tr90 - case 118: - goto st505 - case 119: - goto tr92 + case 33: + goto tr73 + case 37: + goto tr73 + case 39: + goto tr73 + case 126: + goto tr73 + } + switch { + case data[p] < 48: + switch { + case data[p] > 43: + if 45 <= data[p] && data[p] <= 46 { + goto tr73 + } + case data[p] >= 42: + goto tr73 + } + case data[p] > 57: + switch { + case data[p] > 90: + if 95 <= data[p] && data[p] <= 122 { + goto tr73 + } + case data[p] >= 65: + goto tr73 + } + default: + goto tr73 } - goto tr73 + goto st0 st52: if p++; p == pe { goto _test_eof52 } st_case_52: if data[p] == 10 { - goto tr93 + goto tr74 } goto st0 -tr217: -//line msg_parse.rl:50 +tr216: +//line msg_parse.rl:78 line++ linep = p + 1 -//line msg_parse.rl:116 +//line msg_parse.rl:181 {goto st51 } - goto st545 -tr93: -//line msg_parse.rl:50 + goto st625 +tr74: +//line msg_parse.rl:78 line++ linep = p + 1 -//line msg_parse.rl:46 +//line msg_parse.rl:74 - {p++; cs = 545; goto _out } + {p++; cs = 625; goto _out } - goto st545 + goto st625 tr101: -//line msg_parse.rl:355 +//line msg_parse.rl:480 addr=nil -//line msg_parse.rl:120 +//line msg_parse.rl:70 p-- + +//line msg_parse.rl:185 + {goto st34 } - goto st545 + goto st625 tr251: -//line msg_parse.rl:354 +//line msg_parse.rl:479 value=nil -//line msg_parse.rl:120 +//line msg_parse.rl:70 p-- + +//line msg_parse.rl:185 + {goto st34 } - goto st545 - st545: + goto st625 + st625: if p++; p == pe { - goto _test_eof545 + goto _test_eof625 } - st_case_545: -//line msg_parse.go:2638 + st_case_625: +//line msg_parse.go:2760 goto st0 -tr75: -//line msg_parse.rl:55 +tr73: +//line msg_parse.rl:83 mark = p +//line msg_parse.rl:70 + + p-- + + goto st53 st53: if p++; p == pe { goto _test_eof53 } st_case_53: -//line msg_parse.go:2651 +//line msg_parse.go:2778 + switch data[p] { + case 65: + goto st54 + case 66: + goto st135 + case 67: + goto st136 + case 68: + goto st239 + case 69: + goto st243 + case 70: + goto st269 + case 73: + goto st273 + case 75: + goto st284 + case 76: + goto st285 + case 77: + goto st292 + case 79: + goto st336 + case 80: + goto st348 + case 82: + goto st406 + case 83: + goto st466 + case 84: + goto st484 + case 85: + goto st494 + case 86: + goto st514 + case 87: + goto st600 + case 97: + goto st54 + case 98: + goto st135 + case 99: + goto st136 + case 100: + goto st239 + case 101: + goto st243 + case 102: + goto st269 + case 105: + goto st273 + case 107: + goto st284 + case 108: + goto st285 + case 109: + goto st292 + case 111: + goto st336 + case 112: + goto st348 + case 114: + goto st406 + case 115: + goto st466 + case 116: + goto st484 + case 117: + goto st494 + case 118: + goto st514 + case 119: + goto st600 + } + goto tr75 + st54: + if p++; p == pe { + goto _test_eof54 + } + st_case_54: switch data[p] { case 9: goto tr94 @@ -2656,340 +2863,340 @@ tr75: case 58: goto tr95 case 67: - goto st59 + goto st60 case 76: - goto st88 + goto st89 case 85: - goto st107 + goto st108 case 99: - goto st59 + goto st60 case 108: - goto st88 + goto st89 case 117: - goto st107 + goto st108 } - goto st0 + goto tr75 tr94: -//line msg_parse.rl:302 +//line msg_parse.rl:394 value=&msg.AcceptContact - goto st54 -tr110: -//line msg_parse.rl:301 + goto st55 +tr109: +//line msg_parse.rl:393 value=&msg.Accept - goto st54 -tr129: -//line msg_parse.rl:303 + goto st55 +tr128: +//line msg_parse.rl:395 value=&msg.AcceptEncoding - goto st54 -tr138: -//line msg_parse.rl:304 + goto st55 +tr137: +//line msg_parse.rl:396 value=&msg.AcceptLanguage - goto st54 -tr149: -//line msg_parse.rl:307 + goto st55 +tr148: +//line msg_parse.rl:399 value=&msg.AlertInfo - goto st54 -tr153: -//line msg_parse.rl:305 + goto st55 +tr152: +//line msg_parse.rl:397 value=&msg.Allow - goto st54 -tr162: -//line msg_parse.rl:306 + goto st55 +tr161: +//line msg_parse.rl:398 value=&msg.AllowEvents - goto st54 -tr182: -//line msg_parse.rl:308 + goto st55 +tr181: +//line msg_parse.rl:400 value=&msg.AuthenticationInfo - goto st54 -tr192: -//line msg_parse.rl:309 + goto st55 +tr191: +//line msg_parse.rl:401 value=&msg.Authorization - goto st54 -tr194: -//line msg_parse.rl:326 + goto st55 +tr193: +//line msg_parse.rl:418 value=&msg.ReferredBy - goto st54 + goto st55 tr239: -//line msg_parse.rl:313 +//line msg_parse.rl:405 value=&msg.CallInfo - goto st54 + goto st55 tr272: -//line msg_parse.rl:310 +//line msg_parse.rl:402 value=&msg.ContentDisposition - goto st54 + goto st55 tr281: -//line msg_parse.rl:312 +//line msg_parse.rl:404 value=&msg.ContentEncoding - goto st54 + goto st55 tr291: -//line msg_parse.rl:311 +//line msg_parse.rl:403 value=&msg.ContentLanguage - goto st54 -tr324: -//line msg_parse.rl:314 + goto st55 +tr326: +//line msg_parse.rl:406 value=&msg.Date - goto st54 -tr337: -//line msg_parse.rl:315 + goto st55 +tr339: +//line msg_parse.rl:407 value=&msg.ErrorInfo - goto st54 -tr342: -//line msg_parse.rl:316 + goto st55 +tr344: +//line msg_parse.rl:408 value=&msg.Event - goto st54 -tr370: -//line msg_parse.rl:317 + goto st55 +tr373: +//line msg_parse.rl:409 value=&msg.InReplyTo - goto st54 -tr372: -//line msg_parse.rl:331 + goto st55 +tr375: +//line msg_parse.rl:423 value=&msg.Supported - goto st54 -tr409: -//line msg_parse.rl:319 + goto st55 +tr414: +//line msg_parse.rl:411 value=&msg.MIMEVersion - goto st54 -tr436: -//line msg_parse.rl:320 + goto st55 +tr442: +//line msg_parse.rl:412 value=&msg.Organization - goto st54 -tr466: -//line msg_parse.rl:321 + goto st55 +tr472: +//line msg_parse.rl:413 value=&msg.Priority - goto st54 -tr485: -//line msg_parse.rl:322 + goto st55 +tr491: +//line msg_parse.rl:414 value=&msg.ProxyAuthenticate - goto st54 -tr495: -//line msg_parse.rl:323 + goto st55 +tr501: +//line msg_parse.rl:415 value=&msg.ProxyAuthorization - goto st54 -tr503: -//line msg_parse.rl:324 + goto st55 +tr509: +//line msg_parse.rl:416 value=&msg.ProxyRequire - goto st54 -tr505: -//line msg_parse.rl:325 + goto st55 +tr511: +//line msg_parse.rl:417 value=&msg.ReferTo - goto st54 -tr556: -//line msg_parse.rl:318 + goto st55 +tr561: +//line msg_parse.rl:410 value=&msg.ReplyTo - goto st54 -tr562: -//line msg_parse.rl:327 + goto st55 +tr567: +//line msg_parse.rl:419 value=&msg.Require - goto st54 -tr572: -//line msg_parse.rl:328 + goto st55 +tr577: +//line msg_parse.rl:420 value=&msg.RetryAfter - goto st54 -tr579: -//line msg_parse.rl:330 + goto st55 +tr584: +//line msg_parse.rl:422 value=&msg.Subject - goto st54 -tr587: -//line msg_parse.rl:329 + goto st55 +tr592: +//line msg_parse.rl:421 value=&msg.Server - goto st54 -tr612: -//line msg_parse.rl:332 + goto st55 +tr616: +//line msg_parse.rl:424 value=&msg.Timestamp - goto st54 -tr614: -//line msg_parse.rl:305 + goto st55 +tr618: +//line msg_parse.rl:397 value=&msg.Allow -//line msg_parse.rl:306 +//line msg_parse.rl:398 value=&msg.AllowEvents - goto st54 -tr627: -//line msg_parse.rl:333 + goto st55 +tr631: +//line msg_parse.rl:425 value=&msg.Unsupported - goto st54 -tr637: -//line msg_parse.rl:334 + goto st55 +tr641: +//line msg_parse.rl:426 value=&msg.UserAgent - goto st54 -tr669: -//line msg_parse.rl:335 + goto st55 +tr776: +//line msg_parse.rl:427 value=&msg.Warning - goto st54 -tr685: -//line msg_parse.rl:336 + goto st55 +tr792: +//line msg_parse.rl:428 value=&msg.WWWAuthenticate - goto st54 - st54: + goto st55 + st55: if p++; p == pe { - goto _test_eof54 + goto _test_eof55 } - st_case_54: -//line msg_parse.go:2828 + st_case_55: +//line msg_parse.go:3035 switch data[p] { case 9: - goto st54 + goto st55 case 32: - goto st54 - case 58: goto st55 + case 58: + goto st56 } goto st0 tr95: -//line msg_parse.rl:302 +//line msg_parse.rl:394 value=&msg.AcceptContact - goto st55 -tr112: -//line msg_parse.rl:301 + goto st56 +tr111: +//line msg_parse.rl:393 value=&msg.Accept - goto st55 -tr130: -//line msg_parse.rl:303 + goto st56 +tr129: +//line msg_parse.rl:395 value=&msg.AcceptEncoding - goto st55 -tr139: -//line msg_parse.rl:304 + goto st56 +tr138: +//line msg_parse.rl:396 value=&msg.AcceptLanguage - goto st55 -tr150: -//line msg_parse.rl:307 + goto st56 +tr149: +//line msg_parse.rl:399 value=&msg.AlertInfo - goto st55 -tr155: -//line msg_parse.rl:305 + goto st56 +tr154: +//line msg_parse.rl:397 value=&msg.Allow - goto st55 -tr163: -//line msg_parse.rl:306 + goto st56 +tr162: +//line msg_parse.rl:398 value=&msg.AllowEvents - goto st55 -tr183: -//line msg_parse.rl:308 + goto st56 +tr182: +//line msg_parse.rl:400 value=&msg.AuthenticationInfo - goto st55 -tr193: -//line msg_parse.rl:309 + goto st56 +tr192: +//line msg_parse.rl:401 value=&msg.Authorization - goto st55 -tr195: -//line msg_parse.rl:326 + goto st56 +tr194: +//line msg_parse.rl:418 value=&msg.ReferredBy - goto st55 + goto st56 tr240: -//line msg_parse.rl:313 +//line msg_parse.rl:405 value=&msg.CallInfo - goto st55 + goto st56 tr273: -//line msg_parse.rl:310 +//line msg_parse.rl:402 value=&msg.ContentDisposition - goto st55 + goto st56 tr282: -//line msg_parse.rl:312 +//line msg_parse.rl:404 value=&msg.ContentEncoding - goto st55 + goto st56 tr292: -//line msg_parse.rl:311 +//line msg_parse.rl:403 value=&msg.ContentLanguage - goto st55 -tr325: -//line msg_parse.rl:314 + goto st56 +tr327: +//line msg_parse.rl:406 value=&msg.Date - goto st55 -tr338: -//line msg_parse.rl:315 + goto st56 +tr340: +//line msg_parse.rl:407 value=&msg.ErrorInfo - goto st55 -tr343: -//line msg_parse.rl:316 + goto st56 +tr345: +//line msg_parse.rl:408 value=&msg.Event - goto st55 -tr371: -//line msg_parse.rl:317 + goto st56 +tr374: +//line msg_parse.rl:409 value=&msg.InReplyTo - goto st55 -tr373: -//line msg_parse.rl:331 + goto st56 +tr376: +//line msg_parse.rl:423 value=&msg.Supported - goto st55 -tr410: -//line msg_parse.rl:319 + goto st56 +tr415: +//line msg_parse.rl:411 value=&msg.MIMEVersion - goto st55 -tr437: -//line msg_parse.rl:320 + goto st56 +tr443: +//line msg_parse.rl:412 value=&msg.Organization - goto st55 -tr467: -//line msg_parse.rl:321 + goto st56 +tr473: +//line msg_parse.rl:413 value=&msg.Priority - goto st55 -tr486: -//line msg_parse.rl:322 + goto st56 +tr492: +//line msg_parse.rl:414 value=&msg.ProxyAuthenticate - goto st55 -tr496: -//line msg_parse.rl:323 + goto st56 +tr502: +//line msg_parse.rl:415 value=&msg.ProxyAuthorization - goto st55 -tr504: -//line msg_parse.rl:324 + goto st56 +tr510: +//line msg_parse.rl:416 value=&msg.ProxyRequire - goto st55 -tr506: -//line msg_parse.rl:325 + goto st56 +tr512: +//line msg_parse.rl:417 value=&msg.ReferTo - goto st55 -tr557: -//line msg_parse.rl:318 + goto st56 +tr562: +//line msg_parse.rl:410 value=&msg.ReplyTo - goto st55 -tr563: -//line msg_parse.rl:327 + goto st56 +tr568: +//line msg_parse.rl:419 value=&msg.Require - goto st55 -tr573: -//line msg_parse.rl:328 + goto st56 +tr578: +//line msg_parse.rl:420 value=&msg.RetryAfter - goto st55 -tr580: -//line msg_parse.rl:330 + goto st56 +tr585: +//line msg_parse.rl:422 value=&msg.Subject - goto st55 -tr588: -//line msg_parse.rl:329 + goto st56 +tr593: +//line msg_parse.rl:421 value=&msg.Server - goto st55 -tr613: -//line msg_parse.rl:332 + goto st56 +tr617: +//line msg_parse.rl:424 value=&msg.Timestamp - goto st55 -tr615: -//line msg_parse.rl:305 + goto st56 +tr619: +//line msg_parse.rl:397 value=&msg.Allow -//line msg_parse.rl:306 +//line msg_parse.rl:398 value=&msg.AllowEvents - goto st55 -tr628: -//line msg_parse.rl:333 + goto st56 +tr632: +//line msg_parse.rl:425 value=&msg.Unsupported - goto st55 -tr638: -//line msg_parse.rl:334 + goto st56 +tr642: +//line msg_parse.rl:426 value=&msg.UserAgent - goto st55 -tr670: -//line msg_parse.rl:335 + goto st56 +tr777: +//line msg_parse.rl:427 value=&msg.Warning - goto st55 -tr686: -//line msg_parse.rl:336 + goto st56 +tr793: +//line msg_parse.rl:428 value=&msg.WWWAuthenticate - goto st55 - st55: + goto st56 + st56: if p++; p == pe { - goto _test_eof55 + goto _test_eof56 } - st_case_55: -//line msg_parse.go:2993 + st_case_56: +//line msg_parse.go:3200 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -2999,13 +3206,13 @@ value=&msg.WWWAuthenticate } switch _widec { case 9: - goto st55 + goto st56 case 32: - goto st55 + goto st56 case 269: goto tr101 case 525: - goto st56 + goto st57 } switch { case _widec > 12: @@ -3016,1052 +3223,1038 @@ value=&msg.WWWAuthenticate goto tr101 } goto st0 - st56: + st57: if p++; p == pe { - goto _test_eof56 + goto _test_eof57 } - st_case_56: + st_case_57: if data[p] == 10 { goto tr103 } goto st0 tr103: -//line msg_parse.rl:50 +//line msg_parse.rl:78 line++ linep = p + 1 - goto st57 - st57: - if p++; p == pe { - goto _test_eof57 - } - st_case_57: -//line msg_parse.go:3041 - switch data[p] { - case 9: - goto st58 - case 32: - goto st58 - } - goto st0 + goto st58 st58: if p++; p == pe { goto _test_eof58 } st_case_58: +//line msg_parse.go:3248 switch data[p] { case 9: - goto st58 + goto st59 case 32: - goto st58 + goto st59 } - goto tr101 + goto st0 st59: if p++; p == pe { goto _test_eof59 } st_case_59: switch data[p] { - case 67: - goto st60 - case 99: - goto st60 + case 9: + goto st59 + case 32: + goto st59 } - goto tr105 + goto tr101 st60: if p++; p == pe { goto _test_eof60 } st_case_60: switch data[p] { - case 69: + case 67: goto st61 - case 101: + case 99: goto st61 } - goto tr105 + goto tr75 st61: if p++; p == pe { goto _test_eof61 } st_case_61: switch data[p] { - case 80: + case 69: goto st62 - case 112: + case 101: goto st62 } - goto tr105 + goto tr75 st62: if p++; p == pe { goto _test_eof62 } st_case_62: switch data[p] { - case 84: + case 80: goto st63 - case 116: + case 112: goto st63 } - goto tr105 + goto tr75 st63: if p++; p == pe { goto _test_eof63 } st_case_63: switch data[p] { - case 9: - goto tr110 - case 32: - goto tr110 - case 45: + case 84: + goto st64 + case 116: goto st64 - case 58: - goto tr112 } - goto st0 + goto tr75 st64: if p++; p == pe { goto _test_eof64 } st_case_64: switch data[p] { - case 67: - goto st65 - case 69: - goto st72 - case 76: - goto st80 - case 99: + case 9: + goto tr109 + case 32: + goto tr109 + case 45: goto st65 - case 101: - goto st72 - case 108: - goto st80 + case 58: + goto tr111 } - goto tr105 + goto tr75 st65: if p++; p == pe { goto _test_eof65 } st_case_65: switch data[p] { - case 79: + case 67: goto st66 - case 111: + case 69: + goto st73 + case 76: + goto st81 + case 99: goto st66 + case 101: + goto st73 + case 108: + goto st81 } - goto tr105 + goto tr75 st66: if p++; p == pe { goto _test_eof66 } st_case_66: switch data[p] { - case 78: + case 79: goto st67 - case 110: + case 111: goto st67 } - goto tr105 + goto tr75 st67: if p++; p == pe { goto _test_eof67 } st_case_67: switch data[p] { - case 84: + case 78: goto st68 - case 116: + case 110: goto st68 } - goto tr105 + goto tr75 st68: if p++; p == pe { goto _test_eof68 } st_case_68: switch data[p] { - case 65: + case 84: goto st69 - case 97: + case 116: goto st69 } - goto tr105 + goto tr75 st69: if p++; p == pe { goto _test_eof69 } st_case_69: switch data[p] { - case 67: + case 65: goto st70 - case 99: + case 97: goto st70 } - goto tr105 + goto tr75 st70: if p++; p == pe { goto _test_eof70 } st_case_70: switch data[p] { - case 84: + case 67: goto st71 - case 116: + case 99: goto st71 } - goto tr105 + goto tr75 st71: if p++; p == pe { goto _test_eof71 } st_case_71: switch data[p] { - case 9: - goto tr94 - case 32: - goto tr94 - case 58: - goto tr95 + case 84: + goto st72 + case 116: + goto st72 } - goto st0 + goto tr75 st72: if p++; p == pe { goto _test_eof72 } st_case_72: switch data[p] { - case 78: - goto st73 - case 110: - goto st73 + case 9: + goto tr94 + case 32: + goto tr94 + case 58: + goto tr95 } - goto tr105 + goto tr75 st73: if p++; p == pe { goto _test_eof73 } st_case_73: switch data[p] { - case 67: + case 78: goto st74 - case 99: + case 110: goto st74 } - goto tr105 + goto tr75 st74: if p++; p == pe { goto _test_eof74 } st_case_74: switch data[p] { - case 79: + case 67: goto st75 - case 111: + case 99: goto st75 } - goto tr105 + goto tr75 st75: if p++; p == pe { goto _test_eof75 } st_case_75: switch data[p] { - case 68: + case 79: goto st76 - case 100: + case 111: goto st76 } - goto tr105 + goto tr75 st76: if p++; p == pe { goto _test_eof76 } st_case_76: switch data[p] { - case 73: + case 68: goto st77 - case 105: + case 100: goto st77 } - goto tr105 + goto tr75 st77: if p++; p == pe { goto _test_eof77 } st_case_77: switch data[p] { - case 78: + case 73: goto st78 - case 110: + case 105: goto st78 } - goto tr105 + goto tr75 st78: if p++; p == pe { goto _test_eof78 } st_case_78: switch data[p] { - case 71: + case 78: goto st79 - case 103: + case 110: goto st79 } - goto tr105 + goto tr75 st79: if p++; p == pe { goto _test_eof79 } st_case_79: switch data[p] { - case 9: - goto tr129 - case 32: - goto tr129 - case 58: - goto tr130 + case 71: + goto st80 + case 103: + goto st80 } - goto st0 + goto tr75 st80: if p++; p == pe { goto _test_eof80 } st_case_80: switch data[p] { - case 65: - goto st81 - case 97: - goto st81 + case 9: + goto tr128 + case 32: + goto tr128 + case 58: + goto tr129 } - goto tr105 + goto tr75 st81: if p++; p == pe { goto _test_eof81 } st_case_81: switch data[p] { - case 78: + case 65: goto st82 - case 110: + case 97: goto st82 } - goto tr105 + goto tr75 st82: if p++; p == pe { goto _test_eof82 } st_case_82: switch data[p] { - case 71: + case 78: goto st83 - case 103: + case 110: goto st83 } - goto tr105 + goto tr75 st83: if p++; p == pe { goto _test_eof83 } st_case_83: switch data[p] { - case 85: + case 71: goto st84 - case 117: + case 103: goto st84 } - goto tr105 + goto tr75 st84: if p++; p == pe { goto _test_eof84 } st_case_84: switch data[p] { - case 65: + case 85: goto st85 - case 97: + case 117: goto st85 } - goto tr105 + goto tr75 st85: if p++; p == pe { goto _test_eof85 } st_case_85: switch data[p] { - case 71: + case 65: goto st86 - case 103: + case 97: goto st86 } - goto tr105 + goto tr75 st86: if p++; p == pe { goto _test_eof86 } st_case_86: switch data[p] { - case 69: + case 71: goto st87 - case 101: + case 103: goto st87 } - goto tr105 + goto tr75 st87: if p++; p == pe { goto _test_eof87 } st_case_87: switch data[p] { - case 9: - goto tr138 - case 32: - goto tr138 - case 58: - goto tr139 + case 69: + goto st88 + case 101: + goto st88 } - goto st0 + goto tr75 st88: if p++; p == pe { goto _test_eof88 } st_case_88: switch data[p] { - case 69: - goto st89 - case 76: - goto st97 - case 101: - goto st89 - case 108: - goto st97 + case 9: + goto tr137 + case 32: + goto tr137 + case 58: + goto tr138 } - goto tr105 + goto tr75 st89: if p++; p == pe { goto _test_eof89 } st_case_89: switch data[p] { - case 82: + case 69: goto st90 - case 114: + case 76: + goto st98 + case 101: goto st90 + case 108: + goto st98 } - goto tr105 + goto tr75 st90: if p++; p == pe { goto _test_eof90 } st_case_90: switch data[p] { - case 84: + case 82: goto st91 - case 116: + case 114: goto st91 } - goto tr105 + goto tr75 st91: if p++; p == pe { goto _test_eof91 } st_case_91: - if data[p] == 45 { + switch data[p] { + case 84: + goto st92 + case 116: goto st92 } - goto tr105 + goto tr75 st92: if p++; p == pe { goto _test_eof92 } st_case_92: - switch data[p] { - case 73: - goto st93 - case 105: + if data[p] == 45 { goto st93 } - goto tr105 + goto tr75 st93: if p++; p == pe { goto _test_eof93 } st_case_93: switch data[p] { - case 78: + case 73: goto st94 - case 110: + case 105: goto st94 } - goto tr105 + goto tr75 st94: if p++; p == pe { goto _test_eof94 } st_case_94: switch data[p] { - case 70: + case 78: goto st95 - case 102: + case 110: goto st95 } - goto tr105 + goto tr75 st95: if p++; p == pe { goto _test_eof95 } st_case_95: switch data[p] { - case 79: + case 70: goto st96 - case 111: + case 102: goto st96 } - goto tr105 + goto tr75 st96: if p++; p == pe { goto _test_eof96 } st_case_96: switch data[p] { - case 9: - goto tr149 - case 32: - goto tr149 - case 58: - goto tr150 + case 79: + goto st97 + case 111: + goto st97 } - goto st0 + goto tr75 st97: if p++; p == pe { goto _test_eof97 } st_case_97: switch data[p] { - case 79: - goto st98 - case 111: - goto st98 + case 9: + goto tr148 + case 32: + goto tr148 + case 58: + goto tr149 } - goto tr105 + goto tr75 st98: if p++; p == pe { goto _test_eof98 } st_case_98: switch data[p] { - case 87: + case 79: goto st99 - case 119: + case 111: goto st99 } - goto tr105 + goto tr75 st99: if p++; p == pe { goto _test_eof99 } st_case_99: switch data[p] { - case 9: - goto tr153 - case 32: - goto tr153 - case 45: + case 87: + goto st100 + case 119: goto st100 - case 58: - goto tr155 } - goto st0 + goto tr75 st100: if p++; p == pe { goto _test_eof100 } st_case_100: switch data[p] { - case 69: - goto st101 - case 101: + case 9: + goto tr152 + case 32: + goto tr152 + case 45: goto st101 + case 58: + goto tr154 } - goto tr105 + goto tr75 st101: if p++; p == pe { goto _test_eof101 } st_case_101: switch data[p] { - case 86: + case 69: goto st102 - case 118: + case 101: goto st102 } - goto tr105 + goto tr75 st102: if p++; p == pe { goto _test_eof102 } st_case_102: switch data[p] { - case 69: + case 86: goto st103 - case 101: + case 118: goto st103 } - goto tr105 + goto tr75 st103: if p++; p == pe { goto _test_eof103 } st_case_103: switch data[p] { - case 78: + case 69: goto st104 - case 110: + case 101: goto st104 } - goto tr105 + goto tr75 st104: if p++; p == pe { goto _test_eof104 } st_case_104: switch data[p] { - case 84: + case 78: goto st105 - case 116: + case 110: goto st105 } - goto tr105 + goto tr75 st105: if p++; p == pe { goto _test_eof105 } st_case_105: switch data[p] { - case 83: + case 84: goto st106 - case 115: + case 116: goto st106 } - goto tr105 + goto tr75 st106: if p++; p == pe { goto _test_eof106 } st_case_106: switch data[p] { - case 9: - goto tr162 - case 32: - goto tr162 - case 58: - goto tr163 + case 83: + goto st107 + case 115: + goto st107 } - goto st0 + goto tr75 st107: if p++; p == pe { goto _test_eof107 } st_case_107: switch data[p] { - case 84: - goto st108 - case 116: - goto st108 + case 9: + goto tr161 + case 32: + goto tr161 + case 58: + goto tr162 } - goto tr105 + goto tr75 st108: if p++; p == pe { goto _test_eof108 } st_case_108: switch data[p] { - case 72: + case 84: goto st109 - case 104: + case 116: goto st109 } - goto tr105 + goto tr75 st109: if p++; p == pe { goto _test_eof109 } st_case_109: switch data[p] { - case 69: + case 72: goto st110 - case 79: - goto st125 - case 101: + case 104: goto st110 - case 111: - goto st125 } - goto tr105 + goto tr75 st110: if p++; p == pe { goto _test_eof110 } st_case_110: switch data[p] { - case 78: + case 69: goto st111 - case 110: + case 79: + goto st126 + case 101: goto st111 + case 111: + goto st126 } - goto tr105 + goto tr75 st111: if p++; p == pe { goto _test_eof111 } st_case_111: switch data[p] { - case 84: + case 78: goto st112 - case 116: + case 110: goto st112 } - goto tr105 + goto tr75 st112: if p++; p == pe { goto _test_eof112 } st_case_112: switch data[p] { - case 73: + case 84: goto st113 - case 105: + case 116: goto st113 } - goto tr105 + goto tr75 st113: if p++; p == pe { goto _test_eof113 } st_case_113: switch data[p] { - case 67: + case 73: goto st114 - case 99: + case 105: goto st114 } - goto tr105 + goto tr75 st114: if p++; p == pe { goto _test_eof114 } st_case_114: switch data[p] { - case 65: + case 67: goto st115 - case 97: + case 99: goto st115 } - goto tr105 + goto tr75 st115: if p++; p == pe { goto _test_eof115 } st_case_115: switch data[p] { - case 84: + case 65: goto st116 - case 116: + case 97: goto st116 } - goto tr105 + goto tr75 st116: if p++; p == pe { goto _test_eof116 } st_case_116: switch data[p] { - case 73: + case 84: goto st117 - case 105: + case 116: goto st117 } - goto tr105 + goto tr75 st117: if p++; p == pe { goto _test_eof117 } st_case_117: switch data[p] { - case 79: + case 73: goto st118 - case 111: + case 105: goto st118 } - goto tr105 + goto tr75 st118: if p++; p == pe { goto _test_eof118 } st_case_118: switch data[p] { - case 78: + case 79: goto st119 - case 110: + case 111: goto st119 } - goto tr105 + goto tr75 st119: if p++; p == pe { goto _test_eof119 } st_case_119: - if data[p] == 45 { + switch data[p] { + case 78: + goto st120 + case 110: goto st120 } - goto tr105 + goto tr75 st120: if p++; p == pe { goto _test_eof120 } st_case_120: - switch data[p] { - case 73: - goto st121 - case 105: + if data[p] == 45 { goto st121 } - goto tr105 + goto tr75 st121: if p++; p == pe { goto _test_eof121 } st_case_121: switch data[p] { - case 78: + case 73: goto st122 - case 110: + case 105: goto st122 } - goto tr105 + goto tr75 st122: if p++; p == pe { goto _test_eof122 } st_case_122: switch data[p] { - case 70: + case 78: goto st123 - case 102: + case 110: goto st123 } - goto tr105 + goto tr75 st123: if p++; p == pe { goto _test_eof123 } st_case_123: switch data[p] { - case 79: + case 70: goto st124 - case 111: + case 102: goto st124 } - goto tr105 + goto tr75 st124: if p++; p == pe { goto _test_eof124 } st_case_124: switch data[p] { - case 9: - goto tr182 - case 32: - goto tr182 - case 58: - goto tr183 - } - goto st0 + case 79: + goto st125 + case 111: + goto st125 + } + goto tr75 st125: if p++; p == pe { goto _test_eof125 } st_case_125: switch data[p] { - case 82: - goto st126 - case 114: - goto st126 + case 9: + goto tr181 + case 32: + goto tr181 + case 58: + goto tr182 } - goto tr105 + goto tr75 st126: if p++; p == pe { goto _test_eof126 } st_case_126: switch data[p] { - case 73: + case 82: goto st127 - case 105: + case 114: goto st127 } - goto tr105 + goto tr75 st127: if p++; p == pe { goto _test_eof127 } st_case_127: switch data[p] { - case 90: + case 73: goto st128 - case 122: + case 105: goto st128 } - goto tr105 + goto tr75 st128: if p++; p == pe { goto _test_eof128 } st_case_128: switch data[p] { - case 65: + case 90: goto st129 - case 97: + case 122: goto st129 } - goto tr105 + goto tr75 st129: if p++; p == pe { goto _test_eof129 } st_case_129: switch data[p] { - case 84: + case 65: goto st130 - case 116: + case 97: goto st130 } - goto tr105 + goto tr75 st130: if p++; p == pe { goto _test_eof130 } st_case_130: switch data[p] { - case 73: + case 84: goto st131 - case 105: + case 116: goto st131 } - goto tr105 + goto tr75 st131: if p++; p == pe { goto _test_eof131 } st_case_131: switch data[p] { - case 79: + case 73: goto st132 - case 111: + case 105: goto st132 } - goto tr105 + goto tr75 st132: if p++; p == pe { goto _test_eof132 } st_case_132: switch data[p] { - case 78: + case 79: goto st133 - case 110: + case 111: goto st133 } - goto tr105 + goto tr75 st133: if p++; p == pe { goto _test_eof133 } st_case_133: switch data[p] { - case 9: - goto tr192 - case 32: - goto tr192 - case 58: - goto tr193 + case 78: + goto st134 + case 110: + goto st134 } - goto st0 -tr76: -//line msg_parse.rl:55 - - mark = p - - goto st134 + goto tr75 st134: if p++; p == pe { goto _test_eof134 } st_case_134: -//line msg_parse.go:4004 switch data[p] { case 9: - goto tr194 + goto tr191 case 32: - goto tr194 + goto tr191 case 58: - goto tr195 + goto tr192 } - goto st0 -tr77: -//line msg_parse.rl:55 - - mark = p - - goto st135 + goto tr75 st135: if p++; p == pe { goto _test_eof135 } st_case_135: -//line msg_parse.go:4025 switch data[p] { case 9: - goto st136 + goto tr193 case 32: - goto st136 + goto tr193 case 58: + goto tr194 + } + goto tr75 + st136: + if p++; p == pe { + goto _test_eof136 + } + st_case_136: + switch data[p] { + case 9: + goto st137 + case 32: goto st137 + case 58: + goto st138 case 65: - goto st150 + goto st151 case 79: - goto st166 + goto st168 case 83: - goto st221 + goto st225 case 97: - goto st150 + goto st151 case 111: - goto st166 + goto st168 case 115: - goto st221 + goto st225 } - goto tr73 - st136: + goto tr75 + st137: if p++; p == pe { - goto _test_eof136 + goto _test_eof137 } - st_case_136: + st_case_137: switch data[p] { case 9: - goto st136 + goto st137 case 32: - goto st136 - case 58: goto st137 + case 58: + goto st138 } goto st0 - st137: + st138: if p++; p == pe { - goto _test_eof137 + goto _test_eof138 } - st_case_137: + st_case_138: _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4071,53 +4264,53 @@ tr77: } switch _widec { case 9: - goto st137 + goto st138 case 32: - goto st137 + goto st138 case 269: - goto tr207 + goto tr206 case 525: - goto st147 + goto st148 } switch { case _widec < 224: switch { case _widec > 127: if 192 <= _widec && _widec <= 223 { - goto tr202 + goto tr201 } case _widec >= 33: - goto tr201 + goto tr200 } case _widec > 239: switch { case _widec < 248: if 240 <= _widec && _widec <= 247 { - goto tr204 + goto tr203 } case _widec > 251: if 252 <= _widec && _widec <= 253 { - goto tr206 + goto tr205 } default: - goto tr205 + goto tr204 } default: - goto tr203 + goto tr202 } goto st0 -tr201: -//line msg_parse.rl:55 +tr200: +//line msg_parse.rl:83 mark = p - goto st138 - st138: + goto st139 + st139: if p++; p == pe { - goto _test_eof138 + goto _test_eof139 } - st_case_138: -//line msg_parse.go:4121 + st_case_139: +//line msg_parse.go:4314 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4127,57 +4320,41 @@ tr201: } switch _widec { case 9: - goto st138 + goto st139 case 269: - goto tr215 + goto tr214 case 525: - goto st145 + goto st146 } switch { case _widec < 224: switch { case _widec > 127: if 192 <= _widec && _widec <= 223 { - goto st139 + goto st140 } case _widec >= 32: - goto st138 + goto st139 } case _widec > 239: switch { case _widec < 248: if 240 <= _widec && _widec <= 247 { - goto st141 + goto st142 } case _widec > 251: if 252 <= _widec && _widec <= 253 { - goto st143 + goto st144 } default: - goto st142 + goto st143 } default: - goto st140 - } - goto st0 -tr202: -//line msg_parse.rl:55 - - mark = p - - goto st139 - st139: - if p++; p == pe { - goto _test_eof139 - } - st_case_139: -//line msg_parse.go:4175 - if 128 <= data[p] && data[p] <= 191 { - goto st138 + goto st141 } goto st0 -tr203: -//line msg_parse.rl:55 +tr201: +//line msg_parse.rl:83 mark = p @@ -4187,13 +4364,13 @@ tr203: goto _test_eof140 } st_case_140: -//line msg_parse.go:4191 +//line msg_parse.go:4368 if 128 <= data[p] && data[p] <= 191 { goto st139 } goto st0 -tr204: -//line msg_parse.rl:55 +tr202: +//line msg_parse.rl:83 mark = p @@ -4203,13 +4380,13 @@ tr204: goto _test_eof141 } st_case_141: -//line msg_parse.go:4207 +//line msg_parse.go:4384 if 128 <= data[p] && data[p] <= 191 { goto st140 } goto st0 -tr205: -//line msg_parse.rl:55 +tr203: +//line msg_parse.rl:83 mark = p @@ -4219,13 +4396,13 @@ tr205: goto _test_eof142 } st_case_142: -//line msg_parse.go:4223 +//line msg_parse.go:4400 if 128 <= data[p] && data[p] <= 191 { goto st141 } goto st0 -tr206: -//line msg_parse.rl:55 +tr204: +//line msg_parse.rl:83 mark = p @@ -4235,139 +4412,135 @@ tr206: goto _test_eof143 } st_case_143: -//line msg_parse.go:4239 +//line msg_parse.go:4416 if 128 <= data[p] && data[p] <= 191 { goto st142 } goto st0 -tr207: -//line msg_parse.rl:55 +tr205: +//line msg_parse.rl:83 + + mark = p + + goto st144 + st144: + if p++; p == pe { + goto _test_eof144 + } + st_case_144: +//line msg_parse.go:4432 + if 128 <= data[p] && data[p] <= 191 { + goto st143 + } + goto st0 +tr206: +//line msg_parse.rl:83 mark = p -//line msg_parse.rl:183 +//line msg_parse.rl:241 ctype = string(data[mark:p]) - goto st144 -tr215: -//line msg_parse.rl:183 + goto st145 +tr214: +//line msg_parse.rl:241 ctype = string(data[mark:p]) - goto st144 + goto st145 tr231: -//line msg_parse.rl:175 +//line msg_parse.rl:233 msg.CallID = string(data[mark:p]) - goto st144 -tr315: -//line msg_parse.rl:191 + goto st145 +tr317: +//line msg_parse.rl:249 msg.CSeqMethod = string(data[mark:p]) - goto st144 -tr648: -//line msg_parse.rl:55 - - mark = p - -//line msg_parse.rl:207 - - *viap, err = ParseVia(string(data[mark:p])) - if err != nil { return nil, err } - for *viap != nil { viap = &(*viap).Next } - - goto st144 -tr656: -//line msg_parse.rl:207 - - *viap, err = ParseVia(string(data[mark:p])) - if err != nil { return nil, err } - for *viap != nil { viap = &(*viap).Next } - - goto st144 - st144: + goto st145 + st145: if p++; p == pe { - goto _test_eof144 + goto _test_eof145 } - st_case_144: -//line msg_parse.go:4297 + st_case_145: +//line msg_parse.go:4470 if data[p] == 10 { - goto tr217 + goto tr216 } goto st0 -tr221: -//line msg_parse.rl:55 +tr220: +//line msg_parse.rl:83 mark = p - goto st145 - st145: + goto st146 + st146: if p++; p == pe { - goto _test_eof145 + goto _test_eof146 } - st_case_145: -//line msg_parse.go:4313 + st_case_146: +//line msg_parse.go:4486 if data[p] == 10 { - goto tr218 + goto tr217 } goto st0 -tr218: -//line msg_parse.rl:50 +tr217: +//line msg_parse.rl:78 line++ linep = p + 1 - goto st146 - st146: + goto st147 + st147: if p++; p == pe { - goto _test_eof146 + goto _test_eof147 } - st_case_146: -//line msg_parse.go:4330 + st_case_147: +//line msg_parse.go:4503 switch data[p] { case 9: - goto st138 + goto st139 case 32: - goto st138 + goto st139 } goto st0 - st147: + st148: if p++; p == pe { - goto _test_eof147 + goto _test_eof148 } - st_case_147: + st_case_148: if data[p] == 10 { - goto tr219 + goto tr218 } goto st0 -tr219: -//line msg_parse.rl:50 +tr218: +//line msg_parse.rl:78 line++ linep = p + 1 - goto st148 - st148: + goto st149 + st149: if p++; p == pe { - goto _test_eof148 + goto _test_eof149 } - st_case_148: -//line msg_parse.go:4359 + st_case_149: +//line msg_parse.go:4532 switch data[p] { case 9: - goto st149 + goto st150 case 32: - goto st149 + goto st150 } goto st0 - st149: + st150: if p++; p == pe { - goto _test_eof149 + goto _test_eof150 } - st_case_149: + st_case_150: _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4377,53 +4550,41 @@ tr219: } switch _widec { case 9: - goto st149 + goto st150 case 32: - goto st149 + goto st150 case 269: - goto tr207 + goto tr206 case 525: - goto tr221 + goto tr220 } switch { case _widec < 224: switch { case _widec > 127: if 192 <= _widec && _widec <= 223 { - goto tr202 + goto tr201 } case _widec >= 33: - goto tr201 + goto tr200 } case _widec > 239: switch { case _widec < 248: if 240 <= _widec && _widec <= 247 { - goto tr204 + goto tr203 } case _widec > 251: if 252 <= _widec && _widec <= 253 { - goto tr206 + goto tr205 } default: - goto tr205 + goto tr204 } default: - goto tr203 + goto tr202 } goto st0 - st150: - if p++; p == pe { - goto _test_eof150 - } - st_case_150: - switch data[p] { - case 76: - goto st151 - case 108: - goto st151 - } - goto tr73 st151: if p++; p == pe { goto _test_eof151 @@ -4435,63 +4596,89 @@ tr219: case 108: goto st152 } - goto tr73 + goto tr75 st152: if p++; p == pe { goto _test_eof152 } st_case_152: - if data[p] == 45 { + switch data[p] { + case 76: + goto st153 + case 108: goto st153 } - goto tr73 + goto tr75 st153: if p++; p == pe { goto _test_eof153 } st_case_153: - switch data[p] { - case 73: - goto st154 - case 105: + if data[p] == 45 { goto st154 } - goto tr73 + goto tr75 st154: if p++; p == pe { goto _test_eof154 } st_case_154: switch data[p] { - case 68: + case 73: goto st155 - case 78: - goto st163 - case 100: + case 105: goto st155 - case 110: - goto st163 } - goto tr73 + goto tr75 st155: if p++; p == pe { goto _test_eof155 } st_case_155: switch data[p] { - case 9: - goto st155 - case 32: - goto st155 - case 58: + case 68: + goto st156 + case 78: + goto st165 + case 100: goto st156 + case 110: + goto st165 } - goto st0 + goto tr75 st156: if p++; p == pe { goto _test_eof156 } st_case_156: + switch data[p] { + case 9: + goto st157 + case 32: + goto st157 + case 58: + goto st158 + } + goto tr75 + st157: + if p++; p == pe { + goto _test_eof157 + } + st_case_157: + switch data[p] { + case 9: + goto st157 + case 32: + goto st157 + case 58: + goto st158 + } + goto st0 + st158: + if p++; p == pe { + goto _test_eof158 + } + st_case_158: _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4501,15 +4688,15 @@ tr219: } switch _widec { case 9: - goto st156 + goto st158 case 32: - goto st156 + goto st158 case 37: goto tr229 case 60: goto tr229 case 525: - goto st160 + goto st162 } switch { case _widec < 62: @@ -4543,179 +4730,179 @@ tr219: } goto st0 tr229: -//line msg_parse.rl:55 +//line msg_parse.rl:83 mark = p - goto st157 - st157: + goto st159 + st159: if p++; p == pe { - goto _test_eof157 + goto _test_eof159 } - st_case_157: -//line msg_parse.go:4557 + st_case_159: +//line msg_parse.go:4744 switch data[p] { case 13: goto tr231 case 37: - goto st157 + goto st159 case 60: - goto st157 + goto st159 case 64: - goto st158 + goto st160 } switch { case data[p] < 45: switch { case data[p] > 34: if 39 <= data[p] && data[p] <= 43 { - goto st157 + goto st159 } case data[p] >= 33: - goto st157 + goto st159 } case data[p] > 58: switch { case data[p] < 95: if 62 <= data[p] && data[p] <= 93 { - goto st157 + goto st159 } case data[p] > 123: if 125 <= data[p] && data[p] <= 126 { - goto st157 + goto st159 } default: - goto st157 + goto st159 } default: - goto st157 + goto st159 } goto st0 - st158: + st160: if p++; p == pe { - goto _test_eof158 + goto _test_eof160 } - st_case_158: + st_case_160: switch data[p] { case 37: - goto st159 + goto st161 case 60: - goto st159 + goto st161 } switch { case data[p] < 62: switch { case data[p] < 39: if 33 <= data[p] && data[p] <= 34 { - goto st159 + goto st161 } case data[p] > 43: if 45 <= data[p] && data[p] <= 58 { - goto st159 + goto st161 } default: - goto st159 + goto st161 } case data[p] > 63: switch { case data[p] < 95: if 65 <= data[p] && data[p] <= 93 { - goto st159 + goto st161 } case data[p] > 123: if 125 <= data[p] && data[p] <= 126 { - goto st159 + goto st161 } default: - goto st159 + goto st161 } default: - goto st159 + goto st161 } goto st0 - st159: + st161: if p++; p == pe { - goto _test_eof159 + goto _test_eof161 } - st_case_159: + st_case_161: switch data[p] { case 13: goto tr231 case 37: - goto st159 + goto st161 case 60: - goto st159 + goto st161 } switch { case data[p] < 62: switch { case data[p] < 39: if 33 <= data[p] && data[p] <= 34 { - goto st159 + goto st161 } case data[p] > 43: if 45 <= data[p] && data[p] <= 58 { - goto st159 + goto st161 } default: - goto st159 + goto st161 } case data[p] > 63: switch { case data[p] < 95: if 65 <= data[p] && data[p] <= 93 { - goto st159 + goto st161 } case data[p] > 123: if 125 <= data[p] && data[p] <= 126 { - goto st159 + goto st161 } default: - goto st159 + goto st161 } default: - goto st159 + goto st161 } goto st0 - st160: + st162: if p++; p == pe { - goto _test_eof160 + goto _test_eof162 } - st_case_160: + st_case_162: if data[p] == 10 { goto tr235 } goto st0 tr235: -//line msg_parse.rl:50 +//line msg_parse.rl:78 line++ linep = p + 1 - goto st161 - st161: + goto st163 + st163: if p++; p == pe { - goto _test_eof161 + goto _test_eof163 } - st_case_161: -//line msg_parse.go:4702 + st_case_163: +//line msg_parse.go:4889 switch data[p] { case 9: - goto st162 + goto st164 case 32: - goto st162 + goto st164 } goto st0 - st162: + st164: if p++; p == pe { - goto _test_eof162 + goto _test_eof164 } - st_case_162: + st_case_164: switch data[p] { case 9: - goto st162 + goto st164 case 32: - goto st162 + goto st164 case 37: goto tr229 case 60: @@ -4752,35 +4939,35 @@ tr235: goto tr229 } goto st0 - st163: + st165: if p++; p == pe { - goto _test_eof163 + goto _test_eof165 } - st_case_163: + st_case_165: switch data[p] { case 70: - goto st164 + goto st166 case 102: - goto st164 + goto st166 } - goto tr105 - st164: + goto tr75 + st166: if p++; p == pe { - goto _test_eof164 + goto _test_eof166 } - st_case_164: + st_case_166: switch data[p] { case 79: - goto st165 + goto st167 case 111: - goto st165 + goto st167 } - goto tr105 - st165: + goto tr75 + st167: if p++; p == pe { - goto _test_eof165 + goto _test_eof167 } - st_case_165: + st_case_167: switch data[p] { case 9: goto tr239 @@ -4789,76 +4976,76 @@ tr235: case 58: goto tr240 } - goto st0 - st166: + goto tr75 + st168: if p++; p == pe { - goto _test_eof166 + goto _test_eof168 } - st_case_166: + st_case_168: switch data[p] { case 78: - goto st167 + goto st169 case 110: - goto st167 + goto st169 } - goto tr73 - st167: + goto tr75 + st169: if p++; p == pe { - goto _test_eof167 + goto _test_eof169 } - st_case_167: + st_case_169: switch data[p] { case 84: - goto st168 + goto st170 case 116: - goto st168 + goto st170 } - goto tr73 - st168: + goto tr75 + st170: if p++; p == pe { - goto _test_eof168 + goto _test_eof170 } - st_case_168: + st_case_170: switch data[p] { case 65: - goto st169 + goto st171 case 69: - goto st177 + goto st179 case 97: - goto st169 + goto st171 case 101: - goto st177 + goto st179 } - goto tr73 - st169: + goto tr75 + st171: if p++; p == pe { - goto _test_eof169 + goto _test_eof171 } - st_case_169: + st_case_171: switch data[p] { case 67: - goto st170 + goto st172 case 99: - goto st170 + goto st172 } - goto tr105 - st170: + goto tr75 + st172: if p++; p == pe { - goto _test_eof170 + goto _test_eof172 } - st_case_170: + st_case_172: switch data[p] { case 84: - goto st171 + goto st173 case 116: - goto st171 + goto st173 } - goto tr105 - st171: + goto tr75 + st173: if p++; p == pe { - goto _test_eof171 + goto _test_eof173 } - st_case_171: + st_case_173: switch data[p] { case 9: goto tr247 @@ -4867,84 +5054,84 @@ tr235: case 58: goto tr248 } - goto st0 + goto tr75 tr247: -//line msg_parse.rl:291 +//line msg_parse.rl:380 addr=&msg.Contact - goto st172 -tr355: -//line msg_parse.rl:292 + goto st174 +tr358: +//line msg_parse.rl:381 addr=&msg.From - goto st172 -tr457: -//line msg_parse.rl:293 + goto st174 +tr463: +//line msg_parse.rl:382 addr=&msg.PAssertedIdentity - goto st172 -tr524: -//line msg_parse.rl:294 + goto st174 +tr530: +//line msg_parse.rl:383 addr=&msg.RecordRoute - goto st172 -tr549: -//line msg_parse.rl:295 + goto st174 +tr554: +//line msg_parse.rl:384 addr=&msg.RemotePartyID - goto st172 -tr577: -//line msg_parse.rl:296 + goto st174 +tr582: +//line msg_parse.rl:385 addr=&msg.Route - goto st172 -tr601: -//line msg_parse.rl:297 + goto st174 +tr605: +//line msg_parse.rl:386 addr=&msg.To - goto st172 - st172: + goto st174 + st174: if p++; p == pe { - goto _test_eof172 + goto _test_eof174 } - st_case_172: -//line msg_parse.go:4905 + st_case_174: +//line msg_parse.go:5092 switch data[p] { case 9: - goto st172 + goto st174 case 32: - goto st172 + goto st174 case 58: - goto st173 + goto st175 } goto st0 tr248: -//line msg_parse.rl:291 +//line msg_parse.rl:380 addr=&msg.Contact - goto st173 -tr356: -//line msg_parse.rl:292 + goto st175 +tr359: +//line msg_parse.rl:381 addr=&msg.From - goto st173 -tr458: -//line msg_parse.rl:293 + goto st175 +tr464: +//line msg_parse.rl:382 addr=&msg.PAssertedIdentity - goto st173 -tr525: -//line msg_parse.rl:294 + goto st175 +tr531: +//line msg_parse.rl:383 addr=&msg.RecordRoute - goto st173 -tr550: -//line msg_parse.rl:295 + goto st175 +tr555: +//line msg_parse.rl:384 addr=&msg.RemotePartyID - goto st173 -tr578: -//line msg_parse.rl:296 + goto st175 +tr583: +//line msg_parse.rl:385 addr=&msg.Route - goto st173 -tr602: -//line msg_parse.rl:297 + goto st175 +tr606: +//line msg_parse.rl:386 addr=&msg.To - goto st173 - st173: + goto st175 + st175: if p++; p == pe { - goto _test_eof173 + goto _test_eof175 } - st_case_173: -//line msg_parse.go:4948 + st_case_175: +//line msg_parse.go:5135 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -4954,13 +5141,13 @@ addr=&msg.To } switch _widec { case 9: - goto st173 + goto st175 case 32: - goto st173 + goto st175 case 269: goto tr251 case 525: - goto st174 + goto st176 } switch { case _widec > 12: @@ -4971,188 +5158,164 @@ addr=&msg.To goto tr251 } goto st0 - st174: + st176: if p++; p == pe { - goto _test_eof174 + goto _test_eof176 } - st_case_174: + st_case_176: if data[p] == 10 { goto tr253 } goto st0 tr253: -//line msg_parse.rl:50 +//line msg_parse.rl:78 line++ linep = p + 1 - goto st175 - st175: + goto st177 + st177: if p++; p == pe { - goto _test_eof175 - } - st_case_175: -//line msg_parse.go:4996 - switch data[p] { - case 9: - goto st176 - case 32: - goto st176 - } - goto st0 - st176: - if p++; p == pe { - goto _test_eof176 - } - st_case_176: - switch data[p] { - case 9: - goto st176 - case 32: - goto st176 - } - goto tr251 - st177: - if p++; p == pe { - goto _test_eof177 + goto _test_eof177 } st_case_177: +//line msg_parse.go:5183 switch data[p] { - case 78: + case 9: goto st178 - case 110: + case 32: goto st178 } - goto tr73 + goto st0 st178: if p++; p == pe { goto _test_eof178 } st_case_178: switch data[p] { - case 84: - goto st179 - case 116: - goto st179 + case 9: + goto st178 + case 32: + goto st178 } - goto tr73 + goto tr251 st179: if p++; p == pe { goto _test_eof179 } st_case_179: - if data[p] == 45 { + switch data[p] { + case 78: + goto st180 + case 110: goto st180 } - goto tr73 + goto tr75 st180: if p++; p == pe { goto _test_eof180 } st_case_180: switch data[p] { - case 68: - goto st181 - case 69: - goto st192 - case 76: - goto st200 case 84: - goto st218 - case 100: goto st181 - case 101: - goto st192 - case 108: - goto st200 case 116: - goto st218 + goto st181 } - goto tr73 + goto tr75 st181: if p++; p == pe { goto _test_eof181 } st_case_181: - switch data[p] { - case 73: - goto st182 - case 105: + if data[p] == 45 { goto st182 } - goto tr105 + goto tr75 st182: if p++; p == pe { goto _test_eof182 } st_case_182: switch data[p] { - case 83: + case 68: goto st183 - case 115: + case 69: + goto st194 + case 76: + goto st202 + case 84: + goto st221 + case 100: goto st183 + case 101: + goto st194 + case 108: + goto st202 + case 116: + goto st221 } - goto tr105 + goto tr75 st183: if p++; p == pe { goto _test_eof183 } st_case_183: switch data[p] { - case 80: + case 73: goto st184 - case 112: + case 105: goto st184 } - goto tr105 + goto tr75 st184: if p++; p == pe { goto _test_eof184 } st_case_184: switch data[p] { - case 79: + case 83: goto st185 - case 111: + case 115: goto st185 } - goto tr105 + goto tr75 st185: if p++; p == pe { goto _test_eof185 } st_case_185: switch data[p] { - case 83: + case 80: goto st186 - case 115: + case 112: goto st186 } - goto tr105 + goto tr75 st186: if p++; p == pe { goto _test_eof186 } st_case_186: switch data[p] { - case 73: + case 79: goto st187 - case 105: + case 111: goto st187 } - goto tr105 + goto tr75 st187: if p++; p == pe { goto _test_eof187 } st_case_187: switch data[p] { - case 84: + case 83: goto st188 - case 116: + case 115: goto st188 } - goto tr105 + goto tr75 st188: if p++; p == pe { goto _test_eof188 @@ -5164,45 +5327,43 @@ tr253: case 105: goto st189 } - goto tr105 + goto tr75 st189: if p++; p == pe { goto _test_eof189 } st_case_189: switch data[p] { - case 79: + case 84: goto st190 - case 111: + case 116: goto st190 } - goto tr105 + goto tr75 st190: if p++; p == pe { goto _test_eof190 } st_case_190: switch data[p] { - case 78: + case 73: goto st191 - case 110: + case 105: goto st191 } - goto tr105 + goto tr75 st191: if p++; p == pe { goto _test_eof191 } st_case_191: switch data[p] { - case 9: - goto tr272 - case 32: - goto tr272 - case 58: - goto tr273 + case 79: + goto st192 + case 111: + goto st192 } - goto st0 + goto tr75 st192: if p++; p == pe { goto _test_eof192 @@ -5214,431 +5375,499 @@ tr253: case 110: goto st193 } - goto tr105 + goto tr75 st193: if p++; p == pe { goto _test_eof193 } st_case_193: switch data[p] { - case 67: - goto st194 - case 99: - goto st194 + case 9: + goto tr272 + case 32: + goto tr272 + case 58: + goto tr273 } - goto tr105 + goto tr75 st194: if p++; p == pe { goto _test_eof194 } st_case_194: switch data[p] { - case 79: + case 78: goto st195 - case 111: + case 110: goto st195 } - goto tr105 + goto tr75 st195: if p++; p == pe { goto _test_eof195 } st_case_195: switch data[p] { - case 68: + case 67: goto st196 - case 100: + case 99: goto st196 } - goto tr105 + goto tr75 st196: if p++; p == pe { goto _test_eof196 } st_case_196: switch data[p] { - case 73: + case 79: goto st197 - case 105: + case 111: goto st197 } - goto tr105 + goto tr75 st197: if p++; p == pe { goto _test_eof197 } st_case_197: switch data[p] { - case 78: + case 68: goto st198 - case 110: + case 100: goto st198 } - goto tr105 + goto tr75 st198: if p++; p == pe { goto _test_eof198 } st_case_198: switch data[p] { - case 71: + case 73: goto st199 - case 103: + case 105: goto st199 } - goto tr105 + goto tr75 st199: if p++; p == pe { goto _test_eof199 } st_case_199: switch data[p] { - case 9: - goto tr281 - case 32: - goto tr281 - case 58: - goto tr282 + case 78: + goto st200 + case 110: + goto st200 } - goto st0 + goto tr75 st200: if p++; p == pe { goto _test_eof200 } st_case_200: switch data[p] { - case 65: + case 71: goto st201 - case 69: - goto st208 - case 97: + case 103: goto st201 - case 101: - goto st208 } - goto tr73 + goto tr75 st201: if p++; p == pe { goto _test_eof201 } st_case_201: switch data[p] { - case 78: - goto st202 - case 110: - goto st202 + case 9: + goto tr281 + case 32: + goto tr281 + case 58: + goto tr282 } - goto tr105 + goto tr75 st202: if p++; p == pe { goto _test_eof202 } st_case_202: switch data[p] { - case 71: + case 65: goto st203 - case 103: + case 69: + goto st210 + case 97: goto st203 + case 101: + goto st210 } - goto tr105 + goto tr75 st203: if p++; p == pe { goto _test_eof203 } st_case_203: switch data[p] { - case 85: + case 78: goto st204 - case 117: + case 110: goto st204 } - goto tr105 + goto tr75 st204: if p++; p == pe { goto _test_eof204 } st_case_204: switch data[p] { - case 65: + case 71: goto st205 - case 97: + case 103: goto st205 } - goto tr105 + goto tr75 st205: if p++; p == pe { goto _test_eof205 } st_case_205: switch data[p] { - case 71: + case 85: goto st206 - case 103: + case 117: goto st206 } - goto tr105 + goto tr75 st206: if p++; p == pe { goto _test_eof206 } st_case_206: switch data[p] { - case 69: + case 65: goto st207 - case 101: + case 97: goto st207 } - goto tr105 + goto tr75 st207: if p++; p == pe { goto _test_eof207 } st_case_207: switch data[p] { - case 9: - goto tr291 - case 32: - goto tr291 - case 58: - goto tr292 + case 71: + goto st208 + case 103: + goto st208 } - goto st0 + goto tr75 st208: if p++; p == pe { goto _test_eof208 } st_case_208: switch data[p] { - case 78: + case 69: goto st209 - case 110: + case 101: goto st209 } - goto tr293 + goto tr75 st209: if p++; p == pe { goto _test_eof209 } st_case_209: switch data[p] { - case 71: - goto st210 - case 103: - goto st210 + case 9: + goto tr291 + case 32: + goto tr291 + case 58: + goto tr292 } - goto tr293 + goto tr75 st210: if p++; p == pe { goto _test_eof210 } st_case_210: switch data[p] { - case 84: + case 78: goto st211 - case 116: + case 110: goto st211 } - goto tr293 + goto tr75 st211: if p++; p == pe { goto _test_eof211 } st_case_211: switch data[p] { - case 72: + case 71: goto st212 - case 104: + case 103: goto st212 } - goto tr293 + goto tr75 st212: if p++; p == pe { goto _test_eof212 } st_case_212: switch data[p] { - case 9: - goto st212 - case 32: - goto st212 - case 58: + case 84: + goto st213 + case 116: goto st213 } - goto st0 + goto tr75 st213: if p++; p == pe { goto _test_eof213 } st_case_213: - _widec = int16(data[p]) - if 13 <= data[p] && data[p] <= 13 { - _widec = 256 + (int16(data[p]) - 0) - if lookAheadWSP(data, p, pe) { - _widec += 256 - } + switch data[p] { + case 72: + goto st214 + case 104: + goto st214 } - switch _widec { - case 9: - goto st213 - case 32: - goto st213 - case 525: + goto tr75 + st214: + if p++; p == pe { + goto _test_eof214 + } + st_case_214: + switch data[p] { + case 9: + goto st215 + case 32: + goto st215 + case 58: + goto st216 + } + goto tr75 + st215: + if p++; p == pe { + goto _test_eof215 + } + st_case_215: + switch data[p] { + case 9: goto st215 + case 32: + goto st215 + case 58: + goto st216 + } + goto st0 + st216: + if p++; p == pe { + goto _test_eof216 + } + st_case_216: + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st216 + case 32: + goto st216 + case 525: + goto st218 } if 48 <= _widec && _widec <= 57 { goto tr299 } goto st0 tr299: -//line msg_parse.rl:341 +//line msg_parse.rl:436 clen=0 -//line msg_parse.rl:179 +//line msg_parse.rl:237 clen = clen * 10 + (int(data[p]) - 0x30) - goto st214 + goto st217 tr302: -//line msg_parse.rl:179 +//line msg_parse.rl:237 clen = clen * 10 + (int(data[p]) - 0x30) - goto st214 - st214: + goto st217 + st217: if p++; p == pe { - goto _test_eof214 + goto _test_eof217 } - st_case_214: -//line msg_parse.go:5512 + st_case_217: +//line msg_parse.go:5713 if data[p] == 13 { - goto st144 + goto st145 } if 48 <= data[p] && data[p] <= 57 { goto tr302 } goto st0 - st215: + st218: if p++; p == pe { - goto _test_eof215 + goto _test_eof218 } - st_case_215: + st_case_218: if data[p] == 10 { goto tr303 } goto st0 tr303: -//line msg_parse.rl:50 +//line msg_parse.rl:78 line++ linep = p + 1 - goto st216 - st216: + goto st219 + st219: if p++; p == pe { - goto _test_eof216 + goto _test_eof219 } - st_case_216: -//line msg_parse.go:5541 + st_case_219: +//line msg_parse.go:5742 switch data[p] { case 9: - goto st217 + goto st220 case 32: - goto st217 + goto st220 } goto st0 - st217: + st220: if p++; p == pe { - goto _test_eof217 + goto _test_eof220 } - st_case_217: + st_case_220: switch data[p] { case 9: - goto st217 + goto st220 case 32: - goto st217 + goto st220 } if 48 <= data[p] && data[p] <= 57 { goto tr299 } goto st0 - st218: + st221: if p++; p == pe { - goto _test_eof218 + goto _test_eof221 } - st_case_218: + st_case_221: switch data[p] { case 89: - goto st219 + goto st222 case 121: - goto st219 + goto st222 } - goto tr293 - st219: + goto tr75 + st222: if p++; p == pe { - goto _test_eof219 + goto _test_eof222 } - st_case_219: + st_case_222: switch data[p] { case 80: - goto st220 + goto st223 case 112: - goto st220 + goto st223 } - goto tr293 - st220: + goto tr75 + st223: if p++; p == pe { - goto _test_eof220 + goto _test_eof223 } - st_case_220: + st_case_223: switch data[p] { case 69: - goto st136 + goto st224 case 101: - goto st136 + goto st224 } - goto tr293 - st221: + goto tr75 + st224: if p++; p == pe { - goto _test_eof221 + goto _test_eof224 } - st_case_221: + st_case_224: + switch data[p] { + case 9: + goto st137 + case 32: + goto st137 + case 58: + goto st138 + } + goto tr75 + st225: + if p++; p == pe { + goto _test_eof225 + } + st_case_225: switch data[p] { case 69: - goto st222 + goto st226 case 101: - goto st222 + goto st226 } - goto tr293 - st222: + goto tr75 + st226: if p++; p == pe { - goto _test_eof222 + goto _test_eof226 } - st_case_222: + st_case_226: switch data[p] { case 81: - goto st223 + goto st227 case 113: - goto st223 + goto st227 } - goto tr293 - st223: + goto tr75 + st227: if p++; p == pe { - goto _test_eof223 + goto _test_eof227 } - st_case_223: + st_case_227: switch data[p] { case 9: - goto st223 + goto st228 case 32: - goto st223 + goto st228 case 58: - goto st224 + goto st229 + } + goto tr75 + st228: + if p++; p == pe { + goto _test_eof228 + } + st_case_228: + switch data[p] { + case 9: + goto st228 + case 32: + goto st228 + case 58: + goto st229 } goto st0 - st224: + st229: if p++; p == pe { - goto _test_eof224 + goto _test_eof229 } - st_case_224: + st_case_229: _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -5648,28 +5877,28 @@ tr303: } switch _widec { case 9: - goto st224 + goto st229 case 32: - goto st224 + goto st229 case 525: - goto st231 + goto st236 } if 48 <= _widec && _widec <= 57 { - goto tr310 + goto tr312 } goto st0 -tr310: -//line msg_parse.rl:187 +tr312: +//line msg_parse.rl:245 msg.CSeq = msg.CSeq * 10 + (int(data[p]) - 0x30) - goto st225 - st225: + goto st230 + st230: if p++; p == pe { - goto _test_eof225 + goto _test_eof230 } - st_case_225: -//line msg_parse.go:5673 + st_case_230: +//line msg_parse.go:5902 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -5679,21 +5908,21 @@ tr310: } switch _widec { case 9: - goto st226 + goto st231 case 32: - goto st226 + goto st231 case 525: - goto st228 + goto st233 } if 48 <= _widec && _widec <= 57 { - goto tr310 + goto tr312 } goto st0 - st226: + st231: if p++; p == pe { - goto _test_eof226 + goto _test_eof231 } - st_case_226: + st_case_231: _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -5703,414 +5932,338 @@ tr310: } switch _widec { case 9: - goto st226 + goto st231 case 32: - goto st226 + goto st231 case 33: - goto tr314 + goto tr316 case 37: - goto tr314 + goto tr316 case 39: - goto tr314 + goto tr316 case 126: - goto tr314 + goto tr316 case 525: - goto st228 + goto st233 } switch { case _widec < 48: switch { case _widec > 43: if 45 <= _widec && _widec <= 46 { - goto tr314 + goto tr316 } case _widec >= 42: - goto tr314 + goto tr316 } case _widec > 57: switch { case _widec > 90: if 95 <= _widec && _widec <= 122 { - goto tr314 + goto tr316 } case _widec >= 65: - goto tr314 + goto tr316 } default: - goto tr314 + goto tr316 } goto st0 -tr314: -//line msg_parse.rl:55 +tr316: +//line msg_parse.rl:83 mark = p - goto st227 - st227: + goto st232 + st232: if p++; p == pe { - goto _test_eof227 + goto _test_eof232 } - st_case_227: -//line msg_parse.go:5755 + st_case_232: +//line msg_parse.go:5984 switch data[p] { case 13: - goto tr315 + goto tr317 case 33: - goto st227 + goto st232 case 37: - goto st227 + goto st232 case 39: - goto st227 + goto st232 case 126: - goto st227 + goto st232 } switch { case data[p] < 48: switch { case data[p] > 43: if 45 <= data[p] && data[p] <= 46 { - goto st227 + goto st232 } case data[p] >= 42: - goto st227 + goto st232 } case data[p] > 57: switch { case data[p] > 90: if 95 <= data[p] && data[p] <= 122 { - goto st227 + goto st232 } case data[p] >= 65: - goto st227 + goto st232 } default: - goto st227 + goto st232 } goto st0 - st228: + st233: if p++; p == pe { - goto _test_eof228 + goto _test_eof233 } - st_case_228: + st_case_233: if data[p] == 10 { - goto tr317 + goto tr319 } goto st0 -tr317: -//line msg_parse.rl:50 +tr319: +//line msg_parse.rl:78 line++ linep = p + 1 - goto st229 - st229: + goto st234 + st234: if p++; p == pe { - goto _test_eof229 + goto _test_eof234 } - st_case_229: -//line msg_parse.go:5812 + st_case_234: +//line msg_parse.go:6041 switch data[p] { case 9: - goto st230 + goto st235 case 32: - goto st230 + goto st235 } goto st0 - st230: + st235: if p++; p == pe { - goto _test_eof230 + goto _test_eof235 } - st_case_230: + st_case_235: switch data[p] { case 9: - goto st230 + goto st235 case 32: - goto st230 + goto st235 case 33: - goto tr314 + goto tr316 case 37: - goto tr314 + goto tr316 case 39: - goto tr314 + goto tr316 case 126: - goto tr314 + goto tr316 } switch { case data[p] < 48: switch { case data[p] > 43: if 45 <= data[p] && data[p] <= 46 { - goto tr314 + goto tr316 } case data[p] >= 42: - goto tr314 + goto tr316 } case data[p] > 57: switch { case data[p] > 90: if 95 <= data[p] && data[p] <= 122 { - goto tr314 + goto tr316 } case data[p] >= 65: - goto tr314 + goto tr316 } default: - goto tr314 + goto tr316 } goto st0 - st231: + st236: if p++; p == pe { - goto _test_eof231 + goto _test_eof236 } - st_case_231: + st_case_236: if data[p] == 10 { - goto tr319 + goto tr321 } goto st0 -tr319: -//line msg_parse.rl:50 +tr321: +//line msg_parse.rl:78 line++ linep = p + 1 - goto st232 - st232: + goto st237 + st237: if p++; p == pe { - goto _test_eof232 + goto _test_eof237 } - st_case_232: -//line msg_parse.go:5883 + st_case_237: +//line msg_parse.go:6112 switch data[p] { case 9: - goto st233 + goto st238 case 32: - goto st233 + goto st238 } goto st0 - st233: + st238: if p++; p == pe { - goto _test_eof233 + goto _test_eof238 } - st_case_233: + st_case_238: switch data[p] { case 9: - goto st233 + goto st238 case 32: - goto st233 + goto st238 } if 48 <= data[p] && data[p] <= 57 { - goto tr310 + goto tr312 } goto st0 -tr78: -//line msg_parse.rl:55 - - mark = p - - goto st234 - st234: - if p++; p == pe { - goto _test_eof234 - } - st_case_234: -//line msg_parse.go:5917 - switch data[p] { - case 65: - goto st235 - case 97: - goto st235 - } - goto tr105 - st235: - if p++; p == pe { - goto _test_eof235 - } - st_case_235: - switch data[p] { - case 84: - goto st236 - case 116: - goto st236 - } - goto tr105 - st236: - if p++; p == pe { - goto _test_eof236 - } - st_case_236: - switch data[p] { - case 69: - goto st237 - case 101: - goto st237 - } - goto tr105 - st237: - if p++; p == pe { - goto _test_eof237 - } - st_case_237: - switch data[p] { - case 9: - goto tr324 - case 32: - goto tr324 - case 58: - goto tr325 - } - goto st0 -tr79: -//line msg_parse.rl:55 - - mark = p - - goto st238 - st238: - if p++; p == pe { - goto _test_eof238 - } - st_case_238: -//line msg_parse.go:5974 - switch data[p] { - case 9: - goto tr281 - case 32: - goto tr281 - case 58: - goto tr282 - case 82: - goto st239 - case 86: - goto st248 - case 88: - goto st252 - case 114: - goto st239 - case 118: - goto st248 - case 120: - goto st252 - } - goto tr293 st239: if p++; p == pe { goto _test_eof239 } st_case_239: switch data[p] { - case 82: + case 65: goto st240 - case 114: + case 97: goto st240 } - goto tr105 + goto tr75 st240: if p++; p == pe { goto _test_eof240 } st_case_240: switch data[p] { - case 79: + case 84: goto st241 - case 111: + case 116: goto st241 } - goto tr105 + goto tr75 st241: if p++; p == pe { goto _test_eof241 } st_case_241: switch data[p] { - case 82: + case 69: goto st242 - case 114: + case 101: goto st242 } - goto tr105 + goto tr75 st242: if p++; p == pe { goto _test_eof242 } st_case_242: - if data[p] == 45 { - goto st243 + switch data[p] { + case 9: + goto tr326 + case 32: + goto tr326 + case 58: + goto tr327 } - goto tr105 + goto tr75 st243: if p++; p == pe { goto _test_eof243 } st_case_243: switch data[p] { - case 73: + case 9: + goto tr281 + case 32: + goto tr281 + case 58: + goto tr282 + case 82: goto st244 - case 105: + case 86: + goto st253 + case 88: + goto st257 + case 114: goto st244 + case 118: + goto st253 + case 120: + goto st257 } - goto tr105 + goto tr75 st244: if p++; p == pe { goto _test_eof244 } st_case_244: switch data[p] { - case 78: + case 82: goto st245 - case 110: + case 114: goto st245 } - goto tr105 + goto tr75 st245: if p++; p == pe { goto _test_eof245 } st_case_245: switch data[p] { - case 70: + case 79: goto st246 - case 102: + case 111: goto st246 } - goto tr105 + goto tr75 st246: if p++; p == pe { goto _test_eof246 } st_case_246: switch data[p] { - case 79: + case 82: goto st247 - case 111: + case 114: goto st247 } - goto tr105 + goto tr75 st247: if p++; p == pe { goto _test_eof247 } st_case_247: - switch data[p] { - case 9: - goto tr337 - case 32: - goto tr337 - case 58: - goto tr338 + if data[p] == 45 { + goto st248 } - goto st0 + goto tr75 st248: if p++; p == pe { goto _test_eof248 } st_case_248: switch data[p] { - case 69: + case 73: goto st249 - case 101: + case 105: goto st249 } - goto tr105 + goto tr75 st249: if p++; p == pe { goto _test_eof249 @@ -6122,187 +6275,155 @@ tr79: case 110: goto st250 } - goto tr105 + goto tr75 st250: if p++; p == pe { goto _test_eof250 } st_case_250: switch data[p] { - case 84: + case 70: goto st251 - case 116: + case 102: goto st251 } - goto tr105 + goto tr75 st251: if p++; p == pe { goto _test_eof251 } st_case_251: switch data[p] { - case 9: - goto tr342 - case 32: - goto tr342 - case 58: - goto tr343 + case 79: + goto st252 + case 111: + goto st252 } - goto st0 + goto tr75 st252: if p++; p == pe { goto _test_eof252 } st_case_252: switch data[p] { - case 80: - goto st253 - case 112: - goto st253 + case 9: + goto tr339 + case 32: + goto tr339 + case 58: + goto tr340 } - goto tr293 + goto tr75 st253: if p++; p == pe { goto _test_eof253 } st_case_253: switch data[p] { - case 73: + case 69: goto st254 - case 105: + case 101: goto st254 } - goto tr293 + goto tr75 st254: if p++; p == pe { goto _test_eof254 } st_case_254: switch data[p] { - case 82: + case 78: goto st255 - case 114: + case 110: goto st255 } - goto tr293 + goto tr75 st255: if p++; p == pe { goto _test_eof255 } st_case_255: switch data[p] { - case 69: + case 84: goto st256 - case 101: + case 116: goto st256 } - goto tr293 + goto tr75 st256: if p++; p == pe { goto _test_eof256 } st_case_256: switch data[p] { - case 83: - goto st257 - case 115: - goto st257 + case 9: + goto tr344 + case 32: + goto tr344 + case 58: + goto tr345 } - goto tr293 + goto tr75 st257: if p++; p == pe { goto _test_eof257 } st_case_257: switch data[p] { - case 9: - goto st257 - case 32: - goto st257 - case 58: + case 80: + goto st258 + case 112: goto st258 } - goto st0 + goto tr75 st258: if p++; p == pe { goto _test_eof258 } st_case_258: - _widec = int16(data[p]) - if 13 <= data[p] && data[p] <= 13 { - _widec = 256 + (int16(data[p]) - 0) - if lookAheadWSP(data, p, pe) { - _widec += 256 - } - } - switch _widec { - case 9: - goto st258 - case 32: - goto st258 - case 525: - goto st260 - } - if 48 <= _widec && _widec <= 57 { - goto tr350 + switch data[p] { + case 73: + goto st259 + case 105: + goto st259 } - goto st0 -tr350: -//line msg_parse.rl:344 -msg.Expires=0 -//line msg_parse.rl:195 - - msg.Expires = msg.Expires * 10 + (int(data[p]) - 0x30) - - goto st259 -tr352: -//line msg_parse.rl:195 - - msg.Expires = msg.Expires * 10 + (int(data[p]) - 0x30) - - goto st259 + goto tr75 st259: if p++; p == pe { goto _test_eof259 } st_case_259: -//line msg_parse.go:6270 - if data[p] == 13 { - goto st144 - } - if 48 <= data[p] && data[p] <= 57 { - goto tr352 + switch data[p] { + case 82: + goto st260 + case 114: + goto st260 } - goto st0 + goto tr75 st260: if p++; p == pe { goto _test_eof260 } st_case_260: - if data[p] == 10 { - goto tr353 + switch data[p] { + case 69: + goto st261 + case 101: + goto st261 } - goto st0 -tr353: -//line msg_parse.rl:50 - - line++ - linep = p + 1 - - goto st261 + goto tr75 st261: if p++; p == pe { goto _test_eof261 } st_case_261: -//line msg_parse.go:6299 switch data[p] { - case 9: + case 83: goto st262 - case 32: + case 115: goto st262 } - goto st0 + goto tr75 st262: if p++; p == pe { goto _test_eof262 @@ -6310,36 +6431,24 @@ tr353: st_case_262: switch data[p] { case 9: - goto st262 + goto st263 case 32: - goto st262 - } - if 48 <= data[p] && data[p] <= 57 { - goto tr350 + goto st263 + case 58: + goto st264 } - goto st0 -tr80: -//line msg_parse.rl:55 - - mark = p - - goto st263 + goto tr75 st263: if p++; p == pe { goto _test_eof263 } st_case_263: -//line msg_parse.go:6333 switch data[p] { case 9: - goto tr355 + goto st263 case 32: - goto tr355 + goto st263 case 58: - goto tr356 - case 82: - goto st264 - case 114: goto st264 } goto st0 @@ -6348,43 +6457,66 @@ tr80: goto _test_eof264 } st_case_264: - switch data[p] { - case 79: - goto st265 - case 111: - goto st265 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } } - goto tr105 - st265: + switch _widec { + case 9: + goto st264 + case 32: + goto st264 + case 525: + goto st266 + } + if 48 <= _widec && _widec <= 57 { + goto tr353 + } + goto st0 +tr353: +//line msg_parse.rl:439 +msg.Expires=0 +//line msg_parse.rl:253 + + msg.Expires = msg.Expires * 10 + (int(data[p]) - 0x30) + + goto st265 +tr355: +//line msg_parse.rl:253 + + msg.Expires = msg.Expires * 10 + (int(data[p]) - 0x30) + + goto st265 + st265: if p++; p == pe { goto _test_eof265 } st_case_265: - switch data[p] { - case 77: - goto st266 - case 109: - goto st266 +//line msg_parse.go:6499 + if data[p] == 13 { + goto st145 + } + if 48 <= data[p] && data[p] <= 57 { + goto tr355 } - goto tr105 + goto st0 st266: if p++; p == pe { goto _test_eof266 } st_case_266: - switch data[p] { - case 9: - goto tr355 - case 32: - goto tr355 - case 58: + if data[p] == 10 { goto tr356 } goto st0 -tr81: -//line msg_parse.rl:55 +tr356: +//line msg_parse.rl:78 - mark = p + line++ + linep = p + 1 goto st267 st267: @@ -6392,89 +6524,103 @@ tr81: goto _test_eof267 } st_case_267: -//line msg_parse.go:6396 +//line msg_parse.go:6528 switch data[p] { case 9: - goto st155 - case 32: - goto st155 - case 58: - goto st156 - case 78: goto st268 - case 110: + case 32: goto st268 } - goto tr105 + goto st0 st268: if p++; p == pe { goto _test_eof268 } st_case_268: - if data[p] == 45 { - goto st269 + switch data[p] { + case 9: + goto st268 + case 32: + goto st268 } - goto tr105 + if 48 <= data[p] && data[p] <= 57 { + goto tr353 + } + goto st0 st269: if p++; p == pe { goto _test_eof269 } st_case_269: switch data[p] { + case 9: + goto tr358 + case 32: + goto tr358 + case 58: + goto tr359 case 82: goto st270 case 114: goto st270 } - goto tr105 + goto tr75 st270: if p++; p == pe { goto _test_eof270 } st_case_270: switch data[p] { - case 69: + case 79: goto st271 - case 101: + case 111: goto st271 } - goto tr105 + goto tr75 st271: if p++; p == pe { goto _test_eof271 } st_case_271: switch data[p] { - case 80: + case 77: goto st272 - case 112: + case 109: goto st272 } - goto tr105 + goto tr75 st272: if p++; p == pe { goto _test_eof272 } st_case_272: switch data[p] { - case 76: - goto st273 - case 108: - goto st273 + case 9: + goto tr358 + case 32: + goto tr358 + case 58: + goto tr359 } - goto tr105 + goto tr75 st273: if p++; p == pe { goto _test_eof273 } st_case_273: switch data[p] { - case 89: + case 9: + goto st157 + case 32: + goto st157 + case 58: + goto st158 + case 78: goto st274 - case 121: + case 110: goto st274 } - goto tr105 + goto tr75 st274: if p++; p == pe { goto _test_eof274 @@ -6483,85 +6629,161 @@ tr81: if data[p] == 45 { goto st275 } - goto tr105 + goto tr75 st275: if p++; p == pe { goto _test_eof275 } st_case_275: switch data[p] { - case 84: + case 82: goto st276 - case 116: + case 114: goto st276 } - goto tr105 + goto tr75 st276: if p++; p == pe { goto _test_eof276 } st_case_276: switch data[p] { - case 79: + case 69: goto st277 - case 111: + case 101: goto st277 } - goto tr105 + goto tr75 st277: if p++; p == pe { goto _test_eof277 } st_case_277: switch data[p] { - case 9: - goto tr370 - case 32: - goto tr370 - case 58: - goto tr371 + case 80: + goto st278 + case 112: + goto st278 } - goto st0 -tr82: -//line msg_parse.rl:55 - - mark = p - - goto st278 + goto tr75 st278: if p++; p == pe { goto _test_eof278 } st_case_278: -//line msg_parse.go:6537 switch data[p] { - case 9: - goto tr372 - case 32: - goto tr372 - case 58: - goto tr373 + case 76: + goto st279 + case 108: + goto st279 } - goto st0 + goto tr75 st279: if p++; p == pe { goto _test_eof279 } st_case_279: switch data[p] { - case 9: - goto st279 - case 32: - goto st279 - case 58: + case 89: + goto st280 + case 121: goto st280 } - goto st0 + goto tr75 st280: if p++; p == pe { goto _test_eof280 } st_case_280: + if data[p] == 45 { + goto st281 + } + goto tr75 + st281: + if p++; p == pe { + goto _test_eof281 + } + st_case_281: + switch data[p] { + case 84: + goto st282 + case 116: + goto st282 + } + goto tr75 + st282: + if p++; p == pe { + goto _test_eof282 + } + st_case_282: + switch data[p] { + case 79: + goto st283 + case 111: + goto st283 + } + goto tr75 + st283: + if p++; p == pe { + goto _test_eof283 + } + st_case_283: + switch data[p] { + case 9: + goto tr373 + case 32: + goto tr373 + case 58: + goto tr374 + } + goto tr75 + st284: + if p++; p == pe { + goto _test_eof284 + } + st_case_284: + switch data[p] { + case 9: + goto tr375 + case 32: + goto tr375 + case 58: + goto tr376 + } + goto tr75 + st285: + if p++; p == pe { + goto _test_eof285 + } + st_case_285: + switch data[p] { + case 9: + goto st286 + case 32: + goto st286 + case 58: + goto st287 + } + goto tr75 + st286: + if p++; p == pe { + goto _test_eof286 + } + st_case_286: + switch data[p] { + case 9: + goto st286 + case 32: + goto st286 + case 58: + goto st287 + } + goto st0 + st287: + if p++; p == pe { + goto _test_eof287 + } + st_case_287: _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -6571,129 +6793,122 @@ tr82: } switch _widec { case 9: - goto st280 + goto st287 case 32: - goto st280 + goto st287 case 525: - goto st282 + goto st289 } if 48 <= _widec && _widec <= 57 { - goto tr375 + goto tr379 } goto st0 -tr375: -//line msg_parse.rl:341 +tr379: +//line msg_parse.rl:436 clen=0 -//line msg_parse.rl:179 +//line msg_parse.rl:237 clen = clen * 10 + (int(data[p]) - 0x30) -//line msg_parse.rl:344 +//line msg_parse.rl:439 msg.Expires=0 -//line msg_parse.rl:195 +//line msg_parse.rl:253 msg.Expires = msg.Expires * 10 + (int(data[p]) - 0x30) -//line msg_parse.rl:345 +//line msg_parse.rl:440 msg.MaxForwards=0 -//line msg_parse.rl:199 +//line msg_parse.rl:257 msg.MaxForwards = msg.MaxForwards * 10 + (int(data[p]) - 0x30) -//line msg_parse.rl:346 +//line msg_parse.rl:441 msg.MinExpires=0 -//line msg_parse.rl:203 +//line msg_parse.rl:261 msg.MinExpires = msg.MinExpires * 10 + (int(data[p]) - 0x30) - goto st281 -tr377: -//line msg_parse.rl:179 + goto st288 +tr381: +//line msg_parse.rl:237 clen = clen * 10 + (int(data[p]) - 0x30) -//line msg_parse.rl:195 +//line msg_parse.rl:253 msg.Expires = msg.Expires * 10 + (int(data[p]) - 0x30) -//line msg_parse.rl:199 +//line msg_parse.rl:257 msg.MaxForwards = msg.MaxForwards * 10 + (int(data[p]) - 0x30) -//line msg_parse.rl:203 +//line msg_parse.rl:261 msg.MinExpires = msg.MinExpires * 10 + (int(data[p]) - 0x30) - goto st281 - st281: + goto st288 + st288: if p++; p == pe { - goto _test_eof281 + goto _test_eof288 } - st_case_281: -//line msg_parse.go:6634 + st_case_288: +//line msg_parse.go:6856 if data[p] == 13 { - goto st144 + goto st145 } if 48 <= data[p] && data[p] <= 57 { - goto tr377 + goto tr381 } goto st0 - st282: + st289: if p++; p == pe { - goto _test_eof282 + goto _test_eof289 } - st_case_282: + st_case_289: if data[p] == 10 { - goto tr378 + goto tr382 } goto st0 -tr378: -//line msg_parse.rl:50 +tr382: +//line msg_parse.rl:78 line++ linep = p + 1 - goto st283 - st283: + goto st290 + st290: if p++; p == pe { - goto _test_eof283 + goto _test_eof290 } - st_case_283: -//line msg_parse.go:6663 + st_case_290: +//line msg_parse.go:6885 switch data[p] { case 9: - goto st284 + goto st291 case 32: - goto st284 + goto st291 } goto st0 - st284: + st291: if p++; p == pe { - goto _test_eof284 + goto _test_eof291 } - st_case_284: + st_case_291: switch data[p] { case 9: - goto st284 + goto st291 case 32: - goto st284 + goto st291 } if 48 <= data[p] && data[p] <= 57 { - goto tr375 + goto tr379 } goto st0 -tr84: -//line msg_parse.rl:55 - - mark = p - - goto st285 - st285: + st292: if p++; p == pe { - goto _test_eof285 + goto _test_eof292 } - st_case_285: -//line msg_parse.go:6697 + st_case_292: switch data[p] { case 9: goto tr247 @@ -6702,151 +6917,165 @@ tr84: case 58: goto tr248 case 65: - goto st286 + goto st293 case 73: - goto st302 + goto st310 case 97: - goto st286 + goto st293 case 105: - goto st302 + goto st310 } - goto tr73 - st286: + goto tr75 + st293: if p++; p == pe { - goto _test_eof286 + goto _test_eof293 } - st_case_286: + st_case_293: switch data[p] { case 88: - goto st287 + goto st294 case 120: - goto st287 + goto st294 } - goto tr293 - st287: + goto tr75 + st294: if p++; p == pe { - goto _test_eof287 + goto _test_eof294 } - st_case_287: + st_case_294: if data[p] == 45 { - goto st288 + goto st295 } - goto tr293 - st288: + goto tr75 + st295: if p++; p == pe { - goto _test_eof288 + goto _test_eof295 } - st_case_288: + st_case_295: switch data[p] { case 70: - goto st289 + goto st296 case 102: - goto st289 + goto st296 } - goto tr293 - st289: + goto tr75 + st296: if p++; p == pe { - goto _test_eof289 + goto _test_eof296 } - st_case_289: + st_case_296: switch data[p] { case 79: - goto st290 + goto st297 case 111: - goto st290 + goto st297 } - goto tr293 - st290: + goto tr75 + st297: if p++; p == pe { - goto _test_eof290 + goto _test_eof297 } - st_case_290: + st_case_297: switch data[p] { case 82: - goto st291 + goto st298 case 114: - goto st291 + goto st298 } - goto tr293 - st291: + goto tr75 + st298: if p++; p == pe { - goto _test_eof291 + goto _test_eof298 } - st_case_291: + st_case_298: switch data[p] { case 87: - goto st292 + goto st299 case 119: - goto st292 + goto st299 } - goto tr293 - st292: + goto tr75 + st299: if p++; p == pe { - goto _test_eof292 + goto _test_eof299 } - st_case_292: + st_case_299: switch data[p] { case 65: - goto st293 + goto st300 case 97: - goto st293 + goto st300 } - goto tr293 - st293: + goto tr75 + st300: if p++; p == pe { - goto _test_eof293 + goto _test_eof300 } - st_case_293: + st_case_300: switch data[p] { case 82: - goto st294 + goto st301 case 114: - goto st294 + goto st301 } - goto tr293 - st294: + goto tr75 + st301: if p++; p == pe { - goto _test_eof294 + goto _test_eof301 } - st_case_294: + st_case_301: switch data[p] { case 68: - goto st295 + goto st302 case 100: - goto st295 + goto st302 } - goto tr293 - st295: + goto tr75 + st302: if p++; p == pe { - goto _test_eof295 + goto _test_eof302 } - st_case_295: + st_case_302: switch data[p] { case 83: - goto st296 + goto st303 case 115: - goto st296 + goto st303 } - goto tr293 - st296: + goto tr75 + st303: if p++; p == pe { - goto _test_eof296 + goto _test_eof303 } - st_case_296: + st_case_303: switch data[p] { case 9: - goto st296 + goto st304 case 32: - goto st296 + goto st304 case 58: - goto st297 + goto st305 + } + goto tr75 + st304: + if p++; p == pe { + goto _test_eof304 + } + st_case_304: + switch data[p] { + case 9: + goto st304 + case 32: + goto st304 + case 58: + goto st305 } goto st0 - st297: + st305: if p++; p == pe { - goto _test_eof297 + goto _test_eof305 } - st_case_297: + st_case_305: _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -6856,334 +7085,348 @@ tr84: } switch _widec { case 9: - goto st297 + goto st305 case 32: - goto st297 + goto st305 case 525: - goto st299 + goto st307 } if 48 <= _widec && _widec <= 57 { - goto tr393 + goto tr398 } goto st0 -tr393: -//line msg_parse.rl:345 +tr398: +//line msg_parse.rl:440 msg.MaxForwards=0 -//line msg_parse.rl:199 +//line msg_parse.rl:257 msg.MaxForwards = msg.MaxForwards * 10 + (int(data[p]) - 0x30) - goto st298 -tr395: -//line msg_parse.rl:199 + goto st306 +tr400: +//line msg_parse.rl:257 msg.MaxForwards = msg.MaxForwards * 10 + (int(data[p]) - 0x30) - goto st298 - st298: + goto st306 + st306: if p++; p == pe { - goto _test_eof298 + goto _test_eof306 } - st_case_298: -//line msg_parse.go:6889 + st_case_306: +//line msg_parse.go:7118 if data[p] == 13 { - goto st144 + goto st145 } if 48 <= data[p] && data[p] <= 57 { - goto tr395 + goto tr400 } goto st0 - st299: + st307: if p++; p == pe { - goto _test_eof299 + goto _test_eof307 } - st_case_299: + st_case_307: if data[p] == 10 { - goto tr396 + goto tr401 } goto st0 -tr396: -//line msg_parse.rl:50 +tr401: +//line msg_parse.rl:78 line++ linep = p + 1 - goto st300 - st300: + goto st308 + st308: if p++; p == pe { - goto _test_eof300 + goto _test_eof308 } - st_case_300: -//line msg_parse.go:6918 + st_case_308: +//line msg_parse.go:7147 switch data[p] { case 9: - goto st301 + goto st309 case 32: - goto st301 + goto st309 } goto st0 - st301: + st309: if p++; p == pe { - goto _test_eof301 + goto _test_eof309 } - st_case_301: + st_case_309: switch data[p] { case 9: - goto st301 + goto st309 case 32: - goto st301 + goto st309 } if 48 <= data[p] && data[p] <= 57 { - goto tr393 + goto tr398 } goto st0 - st302: + st310: if p++; p == pe { - goto _test_eof302 + goto _test_eof310 } - st_case_302: + st_case_310: switch data[p] { case 77: - goto st303 + goto st311 case 78: - goto st313 + goto st321 case 109: - goto st303 + goto st311 case 110: - goto st313 + goto st321 } - goto tr73 - st303: + goto tr75 + st311: if p++; p == pe { - goto _test_eof303 + goto _test_eof311 } - st_case_303: + st_case_311: switch data[p] { case 69: - goto st304 + goto st312 case 101: - goto st304 + goto st312 } - goto tr105 - st304: + goto tr75 + st312: if p++; p == pe { - goto _test_eof304 + goto _test_eof312 } - st_case_304: + st_case_312: if data[p] == 45 { - goto st305 + goto st313 } - goto tr105 - st305: + goto tr75 + st313: if p++; p == pe { - goto _test_eof305 + goto _test_eof313 } - st_case_305: + st_case_313: switch data[p] { case 86: - goto st306 + goto st314 case 118: - goto st306 + goto st314 } - goto tr105 - st306: + goto tr75 + st314: if p++; p == pe { - goto _test_eof306 + goto _test_eof314 } - st_case_306: + st_case_314: switch data[p] { case 69: - goto st307 + goto st315 case 101: - goto st307 + goto st315 } - goto tr105 - st307: + goto tr75 + st315: if p++; p == pe { - goto _test_eof307 + goto _test_eof315 } - st_case_307: + st_case_315: switch data[p] { case 82: - goto st308 + goto st316 case 114: - goto st308 + goto st316 } - goto tr105 - st308: + goto tr75 + st316: if p++; p == pe { - goto _test_eof308 + goto _test_eof316 } - st_case_308: + st_case_316: switch data[p] { case 83: - goto st309 + goto st317 case 115: - goto st309 + goto st317 } - goto tr105 - st309: + goto tr75 + st317: if p++; p == pe { - goto _test_eof309 + goto _test_eof317 } - st_case_309: + st_case_317: switch data[p] { case 73: - goto st310 + goto st318 case 105: - goto st310 + goto st318 } - goto tr105 - st310: + goto tr75 + st318: if p++; p == pe { - goto _test_eof310 + goto _test_eof318 } - st_case_310: + st_case_318: switch data[p] { case 79: - goto st311 + goto st319 case 111: - goto st311 + goto st319 } - goto tr105 - st311: + goto tr75 + st319: if p++; p == pe { - goto _test_eof311 + goto _test_eof319 } - st_case_311: + st_case_319: switch data[p] { case 78: - goto st312 + goto st320 case 110: - goto st312 + goto st320 } - goto tr105 - st312: + goto tr75 + st320: if p++; p == pe { - goto _test_eof312 + goto _test_eof320 } - st_case_312: + st_case_320: switch data[p] { case 9: - goto tr409 + goto tr414 case 32: - goto tr409 + goto tr414 case 58: - goto tr410 + goto tr415 } - goto st0 - st313: + goto tr75 + st321: if p++; p == pe { - goto _test_eof313 + goto _test_eof321 } - st_case_313: + st_case_321: if data[p] == 45 { - goto st314 + goto st322 } - goto tr293 - st314: + goto tr75 + st322: if p++; p == pe { - goto _test_eof314 + goto _test_eof322 } - st_case_314: + st_case_322: switch data[p] { case 69: - goto st315 + goto st323 case 101: - goto st315 + goto st323 } - goto tr293 - st315: + goto tr75 + st323: if p++; p == pe { - goto _test_eof315 + goto _test_eof323 } - st_case_315: + st_case_323: switch data[p] { case 88: - goto st316 + goto st324 case 120: - goto st316 + goto st324 } - goto tr293 - st316: + goto tr75 + st324: if p++; p == pe { - goto _test_eof316 + goto _test_eof324 } - st_case_316: + st_case_324: switch data[p] { case 80: - goto st317 + goto st325 case 112: - goto st317 + goto st325 } - goto tr293 - st317: + goto tr75 + st325: if p++; p == pe { - goto _test_eof317 + goto _test_eof325 } - st_case_317: + st_case_325: switch data[p] { case 73: - goto st318 + goto st326 case 105: - goto st318 + goto st326 } - goto tr293 - st318: + goto tr75 + st326: if p++; p == pe { - goto _test_eof318 + goto _test_eof326 } - st_case_318: + st_case_326: switch data[p] { case 82: - goto st319 + goto st327 case 114: - goto st319 + goto st327 } - goto tr293 - st319: + goto tr75 + st327: if p++; p == pe { - goto _test_eof319 + goto _test_eof327 } - st_case_319: + st_case_327: switch data[p] { case 69: - goto st320 + goto st328 case 101: - goto st320 + goto st328 } - goto tr293 - st320: + goto tr75 + st328: if p++; p == pe { - goto _test_eof320 + goto _test_eof328 } - st_case_320: + st_case_328: switch data[p] { case 83: - goto st321 + goto st329 case 115: - goto st321 + goto st329 } - goto tr293 - st321: + goto tr75 + st329: if p++; p == pe { - goto _test_eof321 + goto _test_eof329 } - st_case_321: + st_case_329: switch data[p] { case 9: - goto st321 + goto st330 case 32: - goto st321 + goto st330 case 58: - goto st322 + goto st331 + } + goto tr75 + st330: + if p++; p == pe { + goto _test_eof330 + } + st_case_330: + switch data[p] { + case 9: + goto st330 + case 32: + goto st330 + case 58: + goto st331 } goto st0 - st322: + st331: if p++; p == pe { - goto _test_eof322 + goto _test_eof331 } - st_case_322: + st_case_331: _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -7193,482 +7436,358 @@ tr396: } switch _widec { case 9: - goto st322 + goto st331 case 32: - goto st322 + goto st331 case 525: - goto st324 + goto st333 } if 48 <= _widec && _widec <= 57 { - goto tr420 + goto tr426 } goto st0 -tr420: -//line msg_parse.rl:346 +tr426: +//line msg_parse.rl:441 msg.MinExpires=0 -//line msg_parse.rl:203 +//line msg_parse.rl:261 msg.MinExpires = msg.MinExpires * 10 + (int(data[p]) - 0x30) - goto st323 -tr422: -//line msg_parse.rl:203 + goto st332 +tr428: +//line msg_parse.rl:261 msg.MinExpires = msg.MinExpires * 10 + (int(data[p]) - 0x30) - goto st323 - st323: + goto st332 + st332: if p++; p == pe { - goto _test_eof323 + goto _test_eof332 } - st_case_323: -//line msg_parse.go:7226 + st_case_332: +//line msg_parse.go:7469 if data[p] == 13 { - goto st144 + goto st145 } if 48 <= data[p] && data[p] <= 57 { - goto tr422 + goto tr428 } goto st0 - st324: + st333: if p++; p == pe { - goto _test_eof324 + goto _test_eof333 } - st_case_324: + st_case_333: if data[p] == 10 { - goto tr423 + goto tr429 } goto st0 -tr423: -//line msg_parse.rl:50 +tr429: +//line msg_parse.rl:78 line++ linep = p + 1 - goto st325 - st325: + goto st334 + st334: if p++; p == pe { - goto _test_eof325 + goto _test_eof334 } - st_case_325: -//line msg_parse.go:7255 + st_case_334: +//line msg_parse.go:7498 switch data[p] { case 9: - goto st326 + goto st335 case 32: - goto st326 + goto st335 } goto st0 - st326: + st335: if p++; p == pe { - goto _test_eof326 + goto _test_eof335 } - st_case_326: + st_case_335: switch data[p] { case 9: - goto st326 + goto st335 case 32: - goto st326 + goto st335 } if 48 <= data[p] && data[p] <= 57 { - goto tr420 + goto tr426 } goto st0 -tr85: -//line msg_parse.rl:55 - - mark = p - - goto st327 - st327: + st336: if p++; p == pe { - goto _test_eof327 + goto _test_eof336 } - st_case_327: -//line msg_parse.go:7289 + st_case_336: switch data[p] { case 9: - goto tr342 + goto tr344 case 32: - goto tr342 + goto tr344 case 58: - goto tr343 + goto tr345 case 82: - goto st328 + goto st337 case 114: - goto st328 + goto st337 } - goto st0 - st328: + goto tr75 + st337: if p++; p == pe { - goto _test_eof328 + goto _test_eof337 } - st_case_328: + st_case_337: switch data[p] { case 71: - goto st329 + goto st338 case 103: - goto st329 + goto st338 } - goto tr105 - st329: + goto tr75 + st338: if p++; p == pe { - goto _test_eof329 + goto _test_eof338 } - st_case_329: + st_case_338: switch data[p] { case 65: - goto st330 + goto st339 case 97: - goto st330 + goto st339 } - goto tr105 - st330: + goto tr75 + st339: if p++; p == pe { - goto _test_eof330 + goto _test_eof339 } - st_case_330: + st_case_339: switch data[p] { case 78: - goto st331 + goto st340 case 110: - goto st331 + goto st340 } - goto tr105 - st331: + goto tr75 + st340: if p++; p == pe { - goto _test_eof331 + goto _test_eof340 } - st_case_331: + st_case_340: switch data[p] { case 73: - goto st332 + goto st341 case 105: - goto st332 + goto st341 } - goto tr105 - st332: + goto tr75 + st341: if p++; p == pe { - goto _test_eof332 + goto _test_eof341 } - st_case_332: + st_case_341: switch data[p] { case 90: - goto st333 + goto st342 case 122: - goto st333 + goto st342 } - goto tr105 - st333: + goto tr75 + st342: if p++; p == pe { - goto _test_eof333 + goto _test_eof342 } - st_case_333: + st_case_342: switch data[p] { case 65: - goto st334 + goto st343 case 97: - goto st334 + goto st343 } - goto tr105 - st334: + goto tr75 + st343: if p++; p == pe { - goto _test_eof334 + goto _test_eof343 } - st_case_334: + st_case_343: switch data[p] { case 84: - goto st335 + goto st344 case 116: - goto st335 + goto st344 } - goto tr105 - st335: + goto tr75 + st344: if p++; p == pe { - goto _test_eof335 + goto _test_eof344 } - st_case_335: + st_case_344: switch data[p] { case 73: - goto st336 + goto st345 case 105: - goto st336 + goto st345 } - goto tr105 - st336: + goto tr75 + st345: if p++; p == pe { - goto _test_eof336 + goto _test_eof345 } - st_case_336: + st_case_345: switch data[p] { case 79: - goto st337 - case 111: - goto st337 - } - goto tr105 - st337: - if p++; p == pe { - goto _test_eof337 - } - st_case_337: - switch data[p] { - case 78: - goto st338 - case 110: - goto st338 - } - goto tr105 - st338: - if p++; p == pe { - goto _test_eof338 - } - st_case_338: - switch data[p] { - case 9: - goto tr436 - case 32: - goto tr436 - case 58: - goto tr437 - } - goto st0 -tr86: -//line msg_parse.rl:55 - - mark = p - - goto st339 - st339: - if p++; p == pe { - goto _test_eof339 - } - st_case_339: -//line msg_parse.go:7448 - switch data[p] { - case 45: - goto st340 - case 82: - goto st358 - case 114: - goto st358 - } - goto tr105 - st340: - if p++; p == pe { - goto _test_eof340 - } - st_case_340: - switch data[p] { - case 65: - goto st341 - case 97: - goto st341 - } - goto tr105 - st341: - if p++; p == pe { - goto _test_eof341 - } - st_case_341: - switch data[p] { - case 83: - goto st342 - case 115: - goto st342 - } - goto tr105 - st342: - if p++; p == pe { - goto _test_eof342 - } - st_case_342: - switch data[p] { - case 83: - goto st343 - case 115: - goto st343 - } - goto tr105 - st343: - if p++; p == pe { - goto _test_eof343 - } - st_case_343: - switch data[p] { - case 69: - goto st344 - case 101: - goto st344 - } - goto tr105 - st344: - if p++; p == pe { - goto _test_eof344 - } - st_case_344: - switch data[p] { - case 82: - goto st345 - case 114: - goto st345 - } - goto tr105 - st345: - if p++; p == pe { - goto _test_eof345 - } - st_case_345: - switch data[p] { - case 84: goto st346 - case 116: + case 111: goto st346 } - goto tr105 + goto tr75 st346: if p++; p == pe { goto _test_eof346 } st_case_346: switch data[p] { - case 69: + case 78: goto st347 - case 101: + case 110: goto st347 } - goto tr105 + goto tr75 st347: if p++; p == pe { goto _test_eof347 } st_case_347: switch data[p] { - case 68: - goto st348 - case 100: - goto st348 + case 9: + goto tr442 + case 32: + goto tr442 + case 58: + goto tr443 } - goto tr105 + goto tr75 st348: if p++; p == pe { goto _test_eof348 } st_case_348: - if data[p] == 45 { + switch data[p] { + case 45: goto st349 + case 82: + goto st367 + case 114: + goto st367 } - goto tr105 + goto tr75 st349: if p++; p == pe { goto _test_eof349 } st_case_349: switch data[p] { - case 73: + case 65: goto st350 - case 105: + case 97: goto st350 } - goto tr105 + goto tr75 st350: if p++; p == pe { goto _test_eof350 } st_case_350: switch data[p] { - case 68: + case 83: goto st351 - case 100: + case 115: goto st351 } - goto tr105 + goto tr75 st351: if p++; p == pe { goto _test_eof351 } st_case_351: switch data[p] { - case 69: + case 83: goto st352 - case 101: + case 115: goto st352 } - goto tr105 + goto tr75 st352: if p++; p == pe { goto _test_eof352 } st_case_352: switch data[p] { - case 78: + case 69: goto st353 - case 110: + case 101: goto st353 } - goto tr105 + goto tr75 st353: if p++; p == pe { goto _test_eof353 } st_case_353: switch data[p] { - case 84: + case 82: goto st354 - case 116: + case 114: goto st354 } - goto tr105 + goto tr75 st354: if p++; p == pe { goto _test_eof354 } st_case_354: switch data[p] { - case 73: + case 84: goto st355 - case 105: + case 116: goto st355 } - goto tr105 + goto tr75 st355: if p++; p == pe { goto _test_eof355 } st_case_355: switch data[p] { - case 84: + case 69: goto st356 - case 116: + case 101: goto st356 } - goto tr105 + goto tr75 st356: if p++; p == pe { goto _test_eof356 } st_case_356: switch data[p] { - case 89: + case 68: goto st357 - case 121: + case 100: goto st357 } - goto tr105 + goto tr75 st357: if p++; p == pe { goto _test_eof357 } st_case_357: - switch data[p] { - case 9: - goto tr457 - case 32: - goto tr457 - case 58: - goto tr458 + if data[p] == 45 { + goto st358 } - goto st0 + goto tr75 st358: if p++; p == pe { goto _test_eof358 @@ -7677,50 +7796,46 @@ tr86: switch data[p] { case 73: goto st359 - case 79: - goto st365 case 105: goto st359 - case 111: - goto st365 } - goto tr105 + goto tr75 st359: if p++; p == pe { goto _test_eof359 } st_case_359: switch data[p] { - case 79: + case 68: goto st360 - case 111: + case 100: goto st360 } - goto tr105 + goto tr75 st360: if p++; p == pe { goto _test_eof360 } st_case_360: switch data[p] { - case 82: + case 69: goto st361 - case 114: + case 101: goto st361 } - goto tr105 + goto tr75 st361: if p++; p == pe { goto _test_eof361 } st_case_361: switch data[p] { - case 73: + case 78: goto st362 - case 105: + case 110: goto st362 } - goto tr105 + goto tr75 st362: if p++; p == pe { goto _test_eof362 @@ -7732,182 +7847,180 @@ tr86: case 116: goto st363 } - goto tr105 + goto tr75 st363: if p++; p == pe { goto _test_eof363 } st_case_363: switch data[p] { - case 89: + case 73: goto st364 - case 121: + case 105: goto st364 } - goto tr105 + goto tr75 st364: if p++; p == pe { goto _test_eof364 } st_case_364: switch data[p] { - case 9: - goto tr466 - case 32: - goto tr466 - case 58: - goto tr467 + case 84: + goto st365 + case 116: + goto st365 } - goto st0 + goto tr75 st365: if p++; p == pe { goto _test_eof365 } st_case_365: switch data[p] { - case 88: + case 89: goto st366 - case 120: + case 121: goto st366 } - goto tr105 + goto tr75 st366: if p++; p == pe { goto _test_eof366 } st_case_366: switch data[p] { - case 89: - goto st367 - case 121: - goto st367 + case 9: + goto tr463 + case 32: + goto tr463 + case 58: + goto tr464 } - goto tr105 + goto tr75 st367: if p++; p == pe { goto _test_eof367 } st_case_367: - if data[p] == 45 { + switch data[p] { + case 73: + goto st368 + case 79: + goto st374 + case 105: goto st368 + case 111: + goto st374 } - goto tr105 + goto tr75 st368: if p++; p == pe { goto _test_eof368 } st_case_368: switch data[p] { - case 65: + case 79: goto st369 - case 82: - goto st390 - case 97: + case 111: goto st369 - case 114: - goto st390 } - goto tr105 + goto tr75 st369: if p++; p == pe { goto _test_eof369 } st_case_369: switch data[p] { - case 85: + case 82: goto st370 - case 117: + case 114: goto st370 } - goto tr105 + goto tr75 st370: if p++; p == pe { goto _test_eof370 } st_case_370: switch data[p] { - case 84: + case 73: goto st371 - case 116: + case 105: goto st371 } - goto tr105 + goto tr75 st371: if p++; p == pe { goto _test_eof371 } st_case_371: switch data[p] { - case 72: + case 84: goto st372 - case 104: + case 116: goto st372 } - goto tr105 + goto tr75 st372: if p++; p == pe { goto _test_eof372 } st_case_372: switch data[p] { - case 69: + case 89: goto st373 - case 79: - goto st381 - case 101: + case 121: goto st373 - case 111: - goto st381 } - goto tr105 + goto tr75 st373: if p++; p == pe { goto _test_eof373 } st_case_373: switch data[p] { - case 78: - goto st374 - case 110: - goto st374 + case 9: + goto tr472 + case 32: + goto tr472 + case 58: + goto tr473 } - goto tr105 + goto tr75 st374: if p++; p == pe { goto _test_eof374 } st_case_374: switch data[p] { - case 84: + case 88: goto st375 - case 116: + case 120: goto st375 } - goto tr105 + goto tr75 st375: if p++; p == pe { goto _test_eof375 } st_case_375: switch data[p] { - case 73: + case 89: goto st376 - case 105: + case 121: goto st376 } - goto tr105 + goto tr75 st376: if p++; p == pe { goto _test_eof376 } st_case_376: - switch data[p] { - case 67: - goto st377 - case 99: + if data[p] == 45 { goto st377 } - goto tr105 + goto tr75 st377: if p++; p == pe { goto _test_eof377 @@ -7916,144 +8029,150 @@ tr86: switch data[p] { case 65: goto st378 + case 82: + goto st399 case 97: goto st378 + case 114: + goto st399 } - goto tr105 + goto tr75 st378: if p++; p == pe { goto _test_eof378 } st_case_378: switch data[p] { - case 84: + case 85: goto st379 - case 116: + case 117: goto st379 } - goto tr105 + goto tr75 st379: if p++; p == pe { goto _test_eof379 } st_case_379: switch data[p] { - case 69: + case 84: goto st380 - case 101: + case 116: goto st380 } - goto tr105 + goto tr75 st380: if p++; p == pe { goto _test_eof380 } st_case_380: switch data[p] { - case 9: - goto tr485 - case 32: - goto tr485 - case 58: - goto tr486 + case 72: + goto st381 + case 104: + goto st381 } - goto st0 + goto tr75 st381: if p++; p == pe { goto _test_eof381 } st_case_381: switch data[p] { - case 82: + case 69: goto st382 - case 114: + case 79: + goto st390 + case 101: goto st382 + case 111: + goto st390 } - goto tr105 + goto tr75 st382: if p++; p == pe { goto _test_eof382 } st_case_382: switch data[p] { - case 73: + case 78: goto st383 - case 105: + case 110: goto st383 } - goto tr105 + goto tr75 st383: if p++; p == pe { goto _test_eof383 } st_case_383: switch data[p] { - case 90: + case 84: goto st384 - case 122: + case 116: goto st384 } - goto tr105 + goto tr75 st384: if p++; p == pe { goto _test_eof384 } st_case_384: switch data[p] { - case 65: + case 73: goto st385 - case 97: + case 105: goto st385 } - goto tr105 + goto tr75 st385: if p++; p == pe { goto _test_eof385 } st_case_385: switch data[p] { - case 84: + case 67: goto st386 - case 116: + case 99: goto st386 } - goto tr105 + goto tr75 st386: if p++; p == pe { goto _test_eof386 } st_case_386: switch data[p] { - case 73: + case 65: goto st387 - case 105: + case 97: goto st387 } - goto tr105 + goto tr75 st387: if p++; p == pe { goto _test_eof387 } st_case_387: switch data[p] { - case 79: + case 84: goto st388 - case 111: + case 116: goto st388 } - goto tr105 + goto tr75 st388: if p++; p == pe { goto _test_eof388 } st_case_388: switch data[p] { - case 78: + case 69: goto st389 - case 110: + case 101: goto st389 } - goto tr105 + goto tr75 st389: if p++; p == pe { goto _test_eof389 @@ -8061,205 +8180,171 @@ tr86: st_case_389: switch data[p] { case 9: - goto tr495 + goto tr491 case 32: - goto tr495 + goto tr491 case 58: - goto tr496 + goto tr492 } - goto st0 + goto tr75 st390: if p++; p == pe { goto _test_eof390 } st_case_390: switch data[p] { - case 69: + case 82: goto st391 - case 101: + case 114: goto st391 } - goto tr105 + goto tr75 st391: if p++; p == pe { goto _test_eof391 } st_case_391: switch data[p] { - case 81: + case 73: goto st392 - case 113: + case 105: goto st392 } - goto tr105 + goto tr75 st392: if p++; p == pe { goto _test_eof392 } st_case_392: switch data[p] { - case 85: + case 90: goto st393 - case 117: + case 122: goto st393 } - goto tr105 + goto tr75 st393: if p++; p == pe { goto _test_eof393 } st_case_393: switch data[p] { - case 73: + case 65: goto st394 - case 105: + case 97: goto st394 } - goto tr105 + goto tr75 st394: if p++; p == pe { goto _test_eof394 } st_case_394: switch data[p] { - case 82: + case 84: goto st395 - case 114: + case 116: goto st395 } - goto tr105 + goto tr75 st395: if p++; p == pe { goto _test_eof395 } st_case_395: switch data[p] { - case 69: + case 73: goto st396 - case 101: + case 105: goto st396 } - goto tr105 + goto tr75 st396: if p++; p == pe { goto _test_eof396 } st_case_396: switch data[p] { - case 9: - goto tr503 - case 32: - goto tr503 - case 58: - goto tr504 + case 79: + goto st397 + case 111: + goto st397 } - goto st0 -tr87: -//line msg_parse.rl:55 - - mark = p - - goto st397 + goto tr75 st397: if p++; p == pe { goto _test_eof397 } st_case_397: -//line msg_parse.go:8169 switch data[p] { - case 9: - goto tr505 - case 32: - goto tr505 - case 58: - goto tr506 - case 69: + case 78: goto st398 - case 79: - goto st453 - case 101: + case 110: goto st398 - case 111: - goto st453 } - goto tr105 + goto tr75 st398: if p++; p == pe { goto _test_eof398 } st_case_398: switch data[p] { - case 67: - goto st399 - case 70: - goto st409 - case 77: - goto st420 - case 80: - goto st433 - case 81: - goto st439 - case 84: - goto st444 - case 99: - goto st399 - case 102: - goto st409 - case 109: - goto st420 - case 112: - goto st433 - case 113: - goto st439 - case 116: - goto st444 + case 9: + goto tr501 + case 32: + goto tr501 + case 58: + goto tr502 } - goto tr105 + goto tr75 st399: if p++; p == pe { goto _test_eof399 } st_case_399: switch data[p] { - case 79: + case 69: goto st400 - case 111: + case 101: goto st400 } - goto tr105 + goto tr75 st400: if p++; p == pe { goto _test_eof400 } st_case_400: switch data[p] { - case 82: + case 81: goto st401 - case 114: + case 113: goto st401 } - goto tr105 + goto tr75 st401: if p++; p == pe { goto _test_eof401 } st_case_401: switch data[p] { - case 68: + case 85: goto st402 - case 100: + case 117: goto st402 } - goto tr105 + goto tr75 st402: if p++; p == pe { goto _test_eof402 } st_case_402: - if data[p] == 45 { + switch data[p] { + case 73: + goto st403 + case 105: goto st403 } - goto tr105 + goto tr75 st403: if p++; p == pe { goto _test_eof403 @@ -8271,119 +8356,144 @@ tr87: case 114: goto st404 } - goto tr105 + goto tr75 st404: if p++; p == pe { goto _test_eof404 } st_case_404: switch data[p] { - case 79: + case 69: goto st405 - case 111: + case 101: goto st405 } - goto tr105 + goto tr75 st405: if p++; p == pe { goto _test_eof405 } st_case_405: switch data[p] { - case 85: - goto st406 - case 117: - goto st406 + case 9: + goto tr509 + case 32: + goto tr509 + case 58: + goto tr510 } - goto tr105 + goto tr75 st406: if p++; p == pe { goto _test_eof406 } st_case_406: switch data[p] { - case 84: + case 9: + goto tr511 + case 32: + goto tr511 + case 58: + goto tr512 + case 69: goto st407 - case 116: + case 79: + goto st462 + case 101: goto st407 + case 111: + goto st462 } - goto tr105 + goto tr75 st407: if p++; p == pe { goto _test_eof407 } st_case_407: switch data[p] { - case 69: + case 67: goto st408 - case 101: + case 70: + goto st418 + case 77: + goto st429 + case 80: + goto st442 + case 81: + goto st448 + case 84: + goto st453 + case 99: goto st408 + case 102: + goto st418 + case 109: + goto st429 + case 112: + goto st442 + case 113: + goto st448 + case 116: + goto st453 } - goto tr105 + goto tr75 st408: if p++; p == pe { goto _test_eof408 } st_case_408: switch data[p] { - case 9: - goto tr524 - case 32: - goto tr524 - case 58: - goto tr525 + case 79: + goto st409 + case 111: + goto st409 } - goto st0 + goto tr75 st409: if p++; p == pe { goto _test_eof409 } st_case_409: switch data[p] { - case 69: + case 82: goto st410 - case 101: + case 114: goto st410 } - goto tr105 + goto tr75 st410: if p++; p == pe { goto _test_eof410 } st_case_410: switch data[p] { - case 82: + case 68: goto st411 - case 114: + case 100: goto st411 } - goto tr105 + goto tr75 st411: if p++; p == pe { goto _test_eof411 } st_case_411: - switch data[p] { - case 45: + if data[p] == 45 { goto st412 - case 82: - goto st415 - case 114: - goto st415 } - goto tr105 + goto tr75 st412: if p++; p == pe { goto _test_eof412 } st_case_412: switch data[p] { - case 84: + case 82: goto st413 - case 116: + case 114: goto st413 } - goto tr105 + goto tr75 st413: if p++; p == pe { goto _test_eof413 @@ -8395,90 +8505,95 @@ tr87: case 111: goto st414 } - goto tr105 + goto tr75 st414: if p++; p == pe { goto _test_eof414 } st_case_414: switch data[p] { - case 9: - goto tr505 - case 32: - goto tr505 - case 58: - goto tr506 + case 85: + goto st415 + case 117: + goto st415 } - goto st0 + goto tr75 st415: if p++; p == pe { goto _test_eof415 } st_case_415: switch data[p] { - case 69: + case 84: goto st416 - case 101: + case 116: goto st416 } - goto tr105 + goto tr75 st416: if p++; p == pe { goto _test_eof416 } st_case_416: switch data[p] { - case 68: + case 69: goto st417 - case 100: + case 101: goto st417 } - goto tr105 + goto tr75 st417: if p++; p == pe { goto _test_eof417 } st_case_417: - if data[p] == 45 { - goto st418 + switch data[p] { + case 9: + goto tr530 + case 32: + goto tr530 + case 58: + goto tr531 } - goto tr105 + goto tr75 st418: if p++; p == pe { goto _test_eof418 } st_case_418: switch data[p] { - case 66: + case 69: goto st419 - case 98: + case 101: goto st419 } - goto tr105 + goto tr75 st419: if p++; p == pe { goto _test_eof419 } st_case_419: switch data[p] { - case 89: - goto st134 - case 121: - goto st134 + case 82: + goto st420 + case 114: + goto st420 } - goto tr105 + goto tr75 st420: if p++; p == pe { goto _test_eof420 } st_case_420: switch data[p] { - case 79: - goto st421 - case 111: + case 45: goto st421 + case 82: + goto st424 + case 114: + goto st424 } - goto tr105 + goto tr75 st421: if p++; p == pe { goto _test_eof421 @@ -8490,76 +8605,78 @@ tr87: case 116: goto st422 } - goto tr105 + goto tr75 st422: if p++; p == pe { goto _test_eof422 } st_case_422: switch data[p] { - case 69: + case 79: goto st423 - case 101: + case 111: goto st423 } - goto tr105 + goto tr75 st423: if p++; p == pe { goto _test_eof423 } st_case_423: - if data[p] == 45 { - goto st424 + switch data[p] { + case 9: + goto tr511 + case 32: + goto tr511 + case 58: + goto tr512 } - goto tr105 + goto tr75 st424: if p++; p == pe { goto _test_eof424 } st_case_424: switch data[p] { - case 80: + case 69: goto st425 - case 112: + case 101: goto st425 } - goto tr105 + goto tr75 st425: if p++; p == pe { goto _test_eof425 } st_case_425: switch data[p] { - case 65: + case 68: goto st426 - case 97: + case 100: goto st426 } - goto tr105 + goto tr75 st426: if p++; p == pe { goto _test_eof426 } st_case_426: - switch data[p] { - case 82: - goto st427 - case 114: + if data[p] == 45 { goto st427 } - goto tr105 + goto tr75 st427: if p++; p == pe { goto _test_eof427 } st_case_427: switch data[p] { - case 84: + case 66: goto st428 - case 116: + case 98: goto st428 } - goto tr105 + goto tr75 st428: if p++; p == pe { goto _test_eof428 @@ -8567,91 +8684,92 @@ tr87: st_case_428: switch data[p] { case 89: - goto st429 + goto st135 case 121: - goto st429 + goto st135 } - goto tr105 + goto tr75 st429: if p++; p == pe { goto _test_eof429 } st_case_429: - if data[p] == 45 { + switch data[p] { + case 79: + goto st430 + case 111: goto st430 } - goto tr105 + goto tr75 st430: if p++; p == pe { goto _test_eof430 } st_case_430: switch data[p] { - case 73: + case 84: goto st431 - case 105: + case 116: goto st431 } - goto tr105 + goto tr75 st431: if p++; p == pe { goto _test_eof431 } st_case_431: switch data[p] { - case 68: + case 69: goto st432 - case 100: + case 101: goto st432 } - goto tr105 + goto tr75 st432: if p++; p == pe { goto _test_eof432 } st_case_432: - switch data[p] { - case 9: - goto tr549 - case 32: - goto tr549 - case 58: - goto tr550 + if data[p] == 45 { + goto st433 } - goto st0 + goto tr75 st433: if p++; p == pe { goto _test_eof433 } st_case_433: switch data[p] { - case 76: + case 80: goto st434 - case 108: + case 112: goto st434 } - goto tr105 + goto tr75 st434: if p++; p == pe { goto _test_eof434 } st_case_434: switch data[p] { - case 89: + case 65: goto st435 - case 121: + case 97: goto st435 } - goto tr105 + goto tr75 st435: if p++; p == pe { goto _test_eof435 } st_case_435: - if data[p] == 45 { + switch data[p] { + case 82: + goto st436 + case 114: goto st436 } - goto tr105 + goto tr75 st436: if p++; p == pe { goto _test_eof436 @@ -8663,188 +8781,185 @@ tr87: case 116: goto st437 } - goto tr105 + goto tr75 st437: if p++; p == pe { goto _test_eof437 } st_case_437: switch data[p] { - case 79: + case 89: goto st438 - case 111: + case 121: goto st438 } - goto tr105 + goto tr75 st438: if p++; p == pe { goto _test_eof438 } st_case_438: - switch data[p] { - case 9: - goto tr556 - case 32: - goto tr556 - case 58: - goto tr557 + if data[p] == 45 { + goto st439 } - goto st0 + goto tr75 st439: if p++; p == pe { goto _test_eof439 } st_case_439: switch data[p] { - case 85: + case 73: goto st440 - case 117: + case 105: goto st440 } - goto tr105 + goto tr75 st440: if p++; p == pe { goto _test_eof440 } st_case_440: switch data[p] { - case 73: + case 68: goto st441 - case 105: + case 100: goto st441 } - goto tr105 + goto tr75 st441: if p++; p == pe { goto _test_eof441 } st_case_441: switch data[p] { - case 82: - goto st442 - case 114: - goto st442 + case 9: + goto tr554 + case 32: + goto tr554 + case 58: + goto tr555 } - goto tr105 + goto tr75 st442: if p++; p == pe { goto _test_eof442 } st_case_442: switch data[p] { - case 69: + case 76: goto st443 - case 101: + case 108: goto st443 } - goto tr105 + goto tr75 st443: if p++; p == pe { goto _test_eof443 } st_case_443: switch data[p] { - case 9: - goto tr562 - case 32: - goto tr562 - case 58: - goto tr563 + case 89: + goto st444 + case 121: + goto st444 } - goto st0 + goto tr75 st444: if p++; p == pe { goto _test_eof444 } st_case_444: - switch data[p] { - case 82: - goto st445 - case 114: + if data[p] == 45 { goto st445 } - goto tr105 + goto tr75 st445: if p++; p == pe { goto _test_eof445 } st_case_445: switch data[p] { - case 89: + case 84: goto st446 - case 121: + case 116: goto st446 } - goto tr105 + goto tr75 st446: if p++; p == pe { goto _test_eof446 } st_case_446: - if data[p] == 45 { + switch data[p] { + case 79: + goto st447 + case 111: goto st447 } - goto tr105 + goto tr75 st447: if p++; p == pe { goto _test_eof447 } st_case_447: switch data[p] { - case 65: - goto st448 - case 97: - goto st448 + case 9: + goto tr561 + case 32: + goto tr561 + case 58: + goto tr562 } - goto tr105 + goto tr75 st448: if p++; p == pe { goto _test_eof448 } st_case_448: switch data[p] { - case 70: + case 85: goto st449 - case 102: + case 117: goto st449 } - goto tr105 + goto tr75 st449: if p++; p == pe { goto _test_eof449 } st_case_449: switch data[p] { - case 84: + case 73: goto st450 - case 116: + case 105: goto st450 } - goto tr105 + goto tr75 st450: if p++; p == pe { goto _test_eof450 } st_case_450: switch data[p] { - case 69: + case 82: goto st451 - case 101: + case 114: goto st451 } - goto tr105 + goto tr75 st451: if p++; p == pe { goto _test_eof451 } st_case_451: switch data[p] { - case 82: + case 69: goto st452 - case 114: + case 101: goto st452 } - goto tr105 + goto tr75 st452: if p++; p == pe { goto _test_eof452 @@ -8852,431 +8967,404 @@ tr87: st_case_452: switch data[p] { case 9: - goto tr572 + goto tr567 case 32: - goto tr572 + goto tr567 case 58: - goto tr573 + goto tr568 } - goto st0 + goto tr75 st453: if p++; p == pe { goto _test_eof453 } st_case_453: switch data[p] { - case 85: + case 82: goto st454 - case 117: + case 114: goto st454 } - goto tr105 + goto tr75 st454: if p++; p == pe { goto _test_eof454 } st_case_454: switch data[p] { - case 84: + case 89: goto st455 - case 116: + case 121: goto st455 } - goto tr105 + goto tr75 st455: if p++; p == pe { goto _test_eof455 } st_case_455: - switch data[p] { - case 69: - goto st456 - case 101: + if data[p] == 45 { goto st456 } - goto tr105 + goto tr75 st456: if p++; p == pe { goto _test_eof456 } st_case_456: switch data[p] { - case 9: - goto tr577 - case 32: - goto tr577 - case 58: - goto tr578 + case 65: + goto st457 + case 97: + goto st457 } - goto st0 -tr88: -//line msg_parse.rl:55 - - mark = p - - goto st457 + goto tr75 st457: if p++; p == pe { goto _test_eof457 } st_case_457: -//line msg_parse.go:8924 switch data[p] { - case 9: - goto tr579 - case 32: - goto tr579 - case 58: - goto tr580 - case 69: + case 70: goto st458 - case 85: - goto st463 - case 101: + case 102: goto st458 - case 117: - goto st463 } - goto st0 + goto tr75 st458: if p++; p == pe { goto _test_eof458 } st_case_458: switch data[p] { - case 82: + case 84: goto st459 - case 114: + case 116: goto st459 } - goto tr105 + goto tr75 st459: if p++; p == pe { goto _test_eof459 } st_case_459: switch data[p] { - case 86: + case 69: goto st460 - case 118: + case 101: goto st460 } - goto tr105 + goto tr75 st460: if p++; p == pe { goto _test_eof460 } st_case_460: switch data[p] { - case 69: + case 82: goto st461 - case 101: + case 114: goto st461 } - goto tr105 + goto tr75 st461: if p++; p == pe { goto _test_eof461 } st_case_461: switch data[p] { - case 82: - goto st462 - case 114: - goto st462 + case 9: + goto tr577 + case 32: + goto tr577 + case 58: + goto tr578 } - goto tr105 + goto tr75 st462: if p++; p == pe { goto _test_eof462 } st_case_462: switch data[p] { - case 9: - goto tr587 - case 32: - goto tr587 - case 58: - goto tr588 + case 85: + goto st463 + case 117: + goto st463 } - goto st0 + goto tr75 st463: if p++; p == pe { goto _test_eof463 } st_case_463: switch data[p] { - case 66: + case 84: goto st464 - case 80: - goto st469 - case 98: + case 116: goto st464 - case 112: - goto st469 } - goto tr105 + goto tr75 st464: if p++; p == pe { goto _test_eof464 } st_case_464: switch data[p] { - case 74: + case 69: goto st465 - case 106: + case 101: goto st465 } - goto tr105 + goto tr75 st465: if p++; p == pe { goto _test_eof465 } st_case_465: switch data[p] { - case 69: - goto st466 - case 101: - goto st466 + case 9: + goto tr582 + case 32: + goto tr582 + case 58: + goto tr583 } - goto tr105 + goto tr75 st466: if p++; p == pe { goto _test_eof466 } st_case_466: switch data[p] { - case 67: + case 9: + goto tr584 + case 32: + goto tr584 + case 58: + goto tr585 + case 69: goto st467 - case 99: + case 85: + goto st472 + case 101: goto st467 + case 117: + goto st472 } - goto tr105 + goto tr75 st467: if p++; p == pe { goto _test_eof467 } st_case_467: switch data[p] { - case 84: + case 82: goto st468 - case 116: + case 114: goto st468 } - goto tr105 + goto tr75 st468: if p++; p == pe { goto _test_eof468 } st_case_468: switch data[p] { - case 9: - goto tr579 - case 32: - goto tr579 - case 58: - goto tr580 + case 86: + goto st469 + case 118: + goto st469 } - goto st0 + goto tr75 st469: if p++; p == pe { goto _test_eof469 } st_case_469: switch data[p] { - case 80: + case 69: goto st470 - case 112: + case 101: goto st470 } - goto tr105 + goto tr75 st470: if p++; p == pe { goto _test_eof470 } st_case_470: switch data[p] { - case 79: + case 82: goto st471 - case 111: + case 114: goto st471 } - goto tr105 + goto tr75 st471: if p++; p == pe { goto _test_eof471 } st_case_471: switch data[p] { - case 82: - goto st472 - case 114: - goto st472 + case 9: + goto tr592 + case 32: + goto tr592 + case 58: + goto tr593 } - goto tr105 + goto tr75 st472: if p++; p == pe { goto _test_eof472 } st_case_472: switch data[p] { - case 84: + case 66: goto st473 - case 116: + case 80: + goto st478 + case 98: goto st473 + case 112: + goto st478 } - goto tr105 + goto tr75 st473: if p++; p == pe { goto _test_eof473 } st_case_473: switch data[p] { - case 69: + case 74: goto st474 - case 101: + case 106: goto st474 } - goto tr105 + goto tr75 st474: if p++; p == pe { goto _test_eof474 } st_case_474: switch data[p] { - case 68: - goto st278 - case 100: - goto st278 + case 69: + goto st475 + case 101: + goto st475 } - goto tr105 -tr89: -//line msg_parse.rl:55 - - mark = p - - goto st475 + goto tr75 st475: if p++; p == pe { goto _test_eof475 } st_case_475: -//line msg_parse.go:9165 switch data[p] { - case 9: - goto tr601 - case 32: - goto tr601 - case 58: - goto tr602 - case 73: + case 67: goto st476 - case 79: - goto st484 - case 105: + case 99: goto st476 - case 111: - goto st484 } - goto tr105 + goto tr75 st476: if p++; p == pe { goto _test_eof476 } st_case_476: switch data[p] { - case 77: + case 84: goto st477 - case 109: + case 116: goto st477 } - goto tr105 + goto tr75 st477: if p++; p == pe { goto _test_eof477 } st_case_477: switch data[p] { - case 69: - goto st478 - case 101: - goto st478 + case 9: + goto tr584 + case 32: + goto tr584 + case 58: + goto tr585 } - goto tr105 + goto tr75 st478: if p++; p == pe { goto _test_eof478 } st_case_478: switch data[p] { - case 83: + case 80: goto st479 - case 115: + case 112: goto st479 } - goto tr105 + goto tr75 st479: if p++; p == pe { goto _test_eof479 } st_case_479: switch data[p] { - case 84: + case 79: goto st480 - case 116: + case 111: goto st480 } - goto tr105 + goto tr75 st480: if p++; p == pe { goto _test_eof480 } st_case_480: switch data[p] { - case 65: + case 82: goto st481 - case 97: + case 114: goto st481 } - goto tr105 + goto tr75 st481: if p++; p == pe { goto _test_eof481 } st_case_481: switch data[p] { - case 77: + case 84: goto st482 - case 109: + case 116: goto st482 } - goto tr105 + goto tr75 st482: if p++; p == pe { goto _test_eof482 } st_case_482: switch data[p] { - case 80: + case 69: goto st483 - case 112: + case 101: goto st483 } - goto tr105 + goto tr75 st483: if p++; p == pe { goto _test_eof483 } st_case_483: switch data[p] { - case 9: - goto tr612 - case 32: - goto tr612 - case 58: - goto tr613 + case 68: + goto st284 + case 100: + goto st284 } - goto st0 + goto tr75 st484: if p++; p == pe { goto _test_eof484 @@ -9284,257 +9372,263 @@ tr89: st_case_484: switch data[p] { case 9: - goto tr601 + goto tr605 case 32: - goto tr601 + goto tr605 case 58: - goto tr602 + goto tr606 + case 73: + goto st485 + case 79: + goto st493 + case 105: + goto st485 + case 111: + goto st493 } - goto st0 -tr90: -//line msg_parse.rl:55 - - mark = p - - goto st485 + goto tr75 st485: if p++; p == pe { goto _test_eof485 } st_case_485: -//line msg_parse.go:9306 switch data[p] { - case 9: - goto tr614 - case 32: - goto tr614 - case 58: - goto tr615 - case 78: + case 77: goto st486 - case 83: - goto st496 - case 110: + case 109: goto st486 - case 115: - goto st496 } - goto st0 + goto tr75 st486: if p++; p == pe { goto _test_eof486 } st_case_486: switch data[p] { - case 83: + case 69: goto st487 - case 115: + case 101: goto st487 } - goto tr105 + goto tr75 st487: if p++; p == pe { goto _test_eof487 } st_case_487: switch data[p] { - case 85: + case 83: goto st488 - case 117: + case 115: goto st488 } - goto tr105 + goto tr75 st488: if p++; p == pe { goto _test_eof488 } st_case_488: switch data[p] { - case 80: + case 84: goto st489 - case 112: + case 116: goto st489 } - goto tr105 + goto tr75 st489: if p++; p == pe { goto _test_eof489 } st_case_489: switch data[p] { - case 80: + case 65: goto st490 - case 112: + case 97: goto st490 } - goto tr105 + goto tr75 st490: if p++; p == pe { goto _test_eof490 } st_case_490: switch data[p] { - case 79: + case 77: goto st491 - case 111: + case 109: goto st491 } - goto tr105 + goto tr75 st491: if p++; p == pe { goto _test_eof491 } st_case_491: switch data[p] { - case 82: + case 80: goto st492 - case 114: + case 112: goto st492 } - goto tr105 + goto tr75 st492: if p++; p == pe { goto _test_eof492 } st_case_492: switch data[p] { - case 84: - goto st493 - case 116: - goto st493 + case 9: + goto tr616 + case 32: + goto tr616 + case 58: + goto tr617 } - goto tr105 + goto tr75 st493: if p++; p == pe { goto _test_eof493 } st_case_493: switch data[p] { - case 69: - goto st494 - case 101: - goto st494 + case 9: + goto tr605 + case 32: + goto tr605 + case 58: + goto tr606 } - goto tr105 + goto tr75 st494: if p++; p == pe { goto _test_eof494 } st_case_494: switch data[p] { - case 68: + case 9: + goto tr618 + case 32: + goto tr618 + case 58: + goto tr619 + case 78: goto st495 - case 100: + case 83: + goto st505 + case 110: goto st495 + case 115: + goto st505 } - goto tr105 + goto tr75 st495: if p++; p == pe { goto _test_eof495 } st_case_495: switch data[p] { - case 9: - goto tr627 - case 32: - goto tr627 - case 58: - goto tr628 + case 83: + goto st496 + case 115: + goto st496 } - goto st0 + goto tr75 st496: if p++; p == pe { goto _test_eof496 } st_case_496: switch data[p] { - case 69: + case 85: goto st497 - case 101: + case 117: goto st497 } - goto tr105 + goto tr75 st497: if p++; p == pe { goto _test_eof497 } st_case_497: switch data[p] { - case 82: + case 80: goto st498 - case 114: + case 112: goto st498 } - goto tr105 + goto tr75 st498: if p++; p == pe { goto _test_eof498 } st_case_498: - if data[p] == 45 { + switch data[p] { + case 80: + goto st499 + case 112: goto st499 } - goto tr105 + goto tr75 st499: if p++; p == pe { goto _test_eof499 } st_case_499: switch data[p] { - case 65: + case 79: goto st500 - case 97: + case 111: goto st500 } - goto tr105 + goto tr75 st500: if p++; p == pe { goto _test_eof500 } st_case_500: switch data[p] { - case 71: + case 82: goto st501 - case 103: + case 114: goto st501 } - goto tr105 + goto tr75 st501: if p++; p == pe { goto _test_eof501 } st_case_501: switch data[p] { - case 69: + case 84: goto st502 - case 101: + case 116: goto st502 } - goto tr105 + goto tr75 st502: if p++; p == pe { goto _test_eof502 } st_case_502: switch data[p] { - case 78: + case 69: goto st503 - case 110: + case 101: goto st503 } - goto tr105 + goto tr75 st503: if p++; p == pe { goto _test_eof503 } st_case_503: switch data[p] { - case 84: + case 68: goto st504 - case 116: + case 100: goto st504 } - goto tr105 + goto tr75 st504: if p++; p == pe { goto _test_eof504 @@ -9542,106 +9636,2394 @@ tr90: st_case_504: switch data[p] { case 9: - goto tr637 + goto tr631 case 32: - goto tr637 + goto tr631 case 58: - goto tr638 + goto tr632 } - goto st0 + goto tr75 st505: if p++; p == pe { goto _test_eof505 } st_case_505: switch data[p] { - case 9: + case 69: goto st506 - case 32: + case 101: goto st506 - case 58: - goto st507 - case 73: - goto st519 - case 105: - goto st519 } - goto st0 + goto tr75 st506: if p++; p == pe { goto _test_eof506 } st_case_506: switch data[p] { - case 9: - goto st506 - case 32: - goto st506 - case 58: + case 82: + goto st507 + case 114: goto st507 } - goto st0 + goto tr75 st507: if p++; p == pe { goto _test_eof507 } st_case_507: - _widec = int16(data[p]) - if 13 <= data[p] && data[p] <= 13 { - _widec = 256 + (int16(data[p]) - 0) - if lookAheadWSP(data, p, pe) { - _widec += 256 - } + if data[p] == 45 { + goto st508 } - switch _widec { - case 9: - goto st507 - case 32: - goto st507 - case 269: - goto tr648 - case 525: - goto st516 + goto tr75 + st508: + if p++; p == pe { + goto _test_eof508 } - switch { - case _widec < 224: - switch { - case _widec > 127: - if 192 <= _widec && _widec <= 223 { - goto tr643 - } - case _widec >= 33: - goto tr642 - } - case _widec > 239: - switch { - case _widec < 248: - if 240 <= _widec && _widec <= 247 { - goto tr645 - } - case _widec > 251: - if 252 <= _widec && _widec <= 253 { - goto tr647 - } - default: + st_case_508: + switch data[p] { + case 65: + goto st509 + case 97: + goto st509 + } + goto tr75 + st509: + if p++; p == pe { + goto _test_eof509 + } + st_case_509: + switch data[p] { + case 71: + goto st510 + case 103: + goto st510 + } + goto tr75 + st510: + if p++; p == pe { + goto _test_eof510 + } + st_case_510: + switch data[p] { + case 69: + goto st511 + case 101: + goto st511 + } + goto tr75 + st511: + if p++; p == pe { + goto _test_eof511 + } + st_case_511: + switch data[p] { + case 78: + goto st512 + case 110: + goto st512 + } + goto tr75 + st512: + if p++; p == pe { + goto _test_eof512 + } + st_case_512: + switch data[p] { + case 84: + goto st513 + case 116: + goto st513 + } + goto tr75 + st513: + if p++; p == pe { + goto _test_eof513 + } + st_case_513: + switch data[p] { + case 9: + goto tr641 + case 32: + goto tr641 + case 58: + goto tr642 + } + goto tr75 + st514: + if p++; p == pe { + goto _test_eof514 + } + st_case_514: + switch data[p] { + case 9: + goto st515 + case 32: + goto st515 + case 58: + goto st516 + case 73: + goto st598 + case 105: + goto st598 + } + goto tr75 + st515: + if p++; p == pe { + goto _test_eof515 + } + st_case_515: + switch data[p] { + case 9: + goto st515 + case 32: + goto st515 + case 58: + goto st516 + } + goto st0 +tr681: +//line msg_parse.rl:148 + + *viap = via + viap = &via.Next + via = nil + + goto st516 + st516: + if p++; p == pe { + goto _test_eof516 + } + st_case_516: +//line msg_parse.go:9799 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st516 + case 32: + goto st516 + case 33: + goto tr646 + case 37: + goto tr646 + case 39: + goto tr646 + case 126: + goto tr646 + case 525: + goto st595 + } + switch { + case _widec < 48: + switch { + case _widec > 43: + if 45 <= _widec && _widec <= 46 { + goto tr646 + } + case _widec >= 42: + goto tr646 + } + case _widec > 57: + switch { + case _widec > 90: + if 95 <= _widec && _widec <= 122 { + goto tr646 + } + case _widec >= 65: goto tr646 } default: - goto tr644 + goto tr646 + } + goto st0 +tr646: +//line msg_parse.rl:144 + + via = new(Via) + +//line msg_parse.rl:83 + + mark = p + + goto st517 + st517: + if p++; p == pe { + goto _test_eof517 + } + st_case_517: +//line msg_parse.go:9861 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto tr648 + case 32: + goto tr648 + case 33: + goto st517 + case 37: + goto st517 + case 39: + goto st517 + case 47: + goto tr650 + case 126: + goto st517 + case 525: + goto tr651 + } + switch { + case _widec < 45: + if 42 <= _widec && _widec <= 43 { + goto st517 + } + case _widec > 57: + switch { + case _widec > 90: + if 95 <= _widec && _widec <= 122 { + goto st517 + } + case _widec >= 65: + goto st517 + } + default: + goto st517 + } + goto st0 +tr648: +//line msg_parse.rl:154 + + via.Protocol = string(data[mark:p]) + + goto st518 + st518: + if p++; p == pe { + goto _test_eof518 + } + st_case_518: +//line msg_parse.go:9916 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st518 + case 32: + goto st518 + case 47: + goto st519 + case 525: + goto st592 + } + goto st0 +tr650: +//line msg_parse.rl:154 + + via.Protocol = string(data[mark:p]) + + goto st519 + st519: + if p++; p == pe { + goto _test_eof519 + } + st_case_519: +//line msg_parse.go:9946 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st519 + case 32: + goto st519 + case 33: + goto tr655 + case 37: + goto tr655 + case 39: + goto tr655 + case 126: + goto tr655 + case 525: + goto st589 + } + switch { + case _widec < 48: + switch { + case _widec > 43: + if 45 <= _widec && _widec <= 46 { + goto tr655 + } + case _widec >= 42: + goto tr655 + } + case _widec > 57: + switch { + case _widec > 90: + if 95 <= _widec && _widec <= 122 { + goto tr655 + } + case _widec >= 65: + goto tr655 + } + default: + goto tr655 + } + goto st0 +tr655: +//line msg_parse.rl:83 + + mark = p + + goto st520 + st520: + if p++; p == pe { + goto _test_eof520 + } + st_case_520: +//line msg_parse.go:10004 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto tr657 + case 32: + goto tr657 + case 33: + goto st520 + case 37: + goto st520 + case 39: + goto st520 + case 47: + goto tr659 + case 126: + goto st520 + case 525: + goto tr660 + } + switch { + case _widec < 45: + if 42 <= _widec && _widec <= 43 { + goto st520 + } + case _widec > 57: + switch { + case _widec > 90: + if 95 <= _widec && _widec <= 122 { + goto st520 + } + case _widec >= 65: + goto st520 + } + default: + goto st520 + } + goto st0 +tr657: +//line msg_parse.rl:158 + + via.Version = string(data[mark:p]) + + goto st521 + st521: + if p++; p == pe { + goto _test_eof521 + } + st_case_521: +//line msg_parse.go:10059 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st521 + case 32: + goto st521 + case 47: + goto st522 + case 525: + goto st586 + } + goto st0 +tr659: +//line msg_parse.rl:158 + + via.Version = string(data[mark:p]) + + goto st522 + st522: + if p++; p == pe { + goto _test_eof522 + } + st_case_522: +//line msg_parse.go:10089 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st522 + case 32: + goto st522 + case 33: + goto tr664 + case 37: + goto tr664 + case 39: + goto tr664 + case 126: + goto tr664 + case 525: + goto st583 + } + switch { + case _widec < 48: + switch { + case _widec > 43: + if 45 <= _widec && _widec <= 46 { + goto tr664 + } + case _widec >= 42: + goto tr664 + } + case _widec > 57: + switch { + case _widec > 90: + if 95 <= _widec && _widec <= 122 { + goto tr664 + } + case _widec >= 65: + goto tr664 + } + default: + goto tr664 + } + goto st0 +tr664: +//line msg_parse.rl:83 + + mark = p + + goto st523 + st523: + if p++; p == pe { + goto _test_eof523 + } + st_case_523: +//line msg_parse.go:10147 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto tr666 + case 32: + goto tr666 + case 33: + goto st523 + case 37: + goto st523 + case 39: + goto st523 + case 126: + goto st523 + case 525: + goto tr668 + } + switch { + case _widec < 48: + switch { + case _widec > 43: + if 45 <= _widec && _widec <= 46 { + goto st523 + } + case _widec >= 42: + goto st523 + } + case _widec > 57: + switch { + case _widec > 90: + if 95 <= _widec && _widec <= 122 { + goto st523 + } + case _widec >= 65: + goto st523 + } + default: + goto st523 + } + goto st0 +tr666: +//line msg_parse.rl:162 + + via.Transport = string(data[mark:p]) + + goto st524 + st524: + if p++; p == pe { + goto _test_eof524 + } + st_case_524: +//line msg_parse.go:10205 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st524 + case 32: + goto st524 + case 91: + goto st577 + case 525: + goto st580 + } + switch { + case _widec < 48: + if 45 <= _widec && _widec <= 46 { + goto tr670 + } + case _widec > 57: + switch { + case _widec > 90: + if 97 <= _widec && _widec <= 122 { + goto tr670 + } + case _widec >= 65: + goto tr670 + } + default: + goto tr670 + } + goto st0 +tr670: +//line msg_parse.rl:83 + + mark = p + + goto st525 + st525: + if p++; p == pe { + goto _test_eof525 + } + st_case_525: +//line msg_parse.go:10252 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto tr674 + case 32: + goto tr674 + case 47: + goto tr673 + case 58: + goto tr676 + case 59: + goto tr677 + case 269: + goto tr673 + case 525: + goto tr678 + } + switch { + case _widec < 60: + switch { + case _widec < 14: + if _widec <= 12 { + goto tr673 + } + case _widec > 44: + if 45 <= _widec && _widec <= 57 { + goto st525 + } + default: + goto tr673 + } + case _widec > 64: + switch { + case _widec < 91: + if 65 <= _widec && _widec <= 90 { + goto st525 + } + case _widec > 96: + switch { + case _widec > 122: + if 123 <= _widec { + goto tr673 + } + case _widec >= 97: + goto st525 + } + default: + goto tr673 + } + default: + goto tr673 + } + goto st0 +tr673: +//line msg_parse.rl:166 + + via.Host = string(data[mark:p]) + +//line msg_parse.rl:70 + + p-- + + + goto st526 +tr693: +//line msg_parse.rl:70 + + p-- + + + goto st526 +tr699: +//line msg_parse.rl:194 + + name = string(data[mark:p]) + +//line msg_parse.rl:174 + + if via.Params == nil { + via.Params = Params{} + } + via.Params[name] = string(buf[0:amt]) + +//line msg_parse.rl:70 + + p-- + + + goto st526 +tr711: +//line msg_parse.rl:174 + + if via.Params == nil { + via.Params = Params{} + } + via.Params[name] = string(buf[0:amt]) + +//line msg_parse.rl:70 + + p-- + + + goto st526 + st526: + if p++; p == pe { + goto _test_eof526 + } + st_case_526: +//line msg_parse.go:10367 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto tr680 + case 32: + goto tr680 + case 44: + goto tr681 + case 269: + goto tr679 + case 525: + goto tr682 + } + switch { + case _widec > 12: + if 14 <= _widec { + goto tr679 + } + default: + goto tr679 + } + goto st0 +tr679: +//line msg_parse.rl:148 + + *viap = via + viap = &via.Next + via = nil + +//line msg_parse.rl:70 + + p-- + + + goto st527 + st527: + if p++; p == pe { + goto _test_eof527 + } + st_case_527: +//line msg_parse.go:10414 + if data[p] == 13 { + goto st145 + } + goto st0 +tr680: +//line msg_parse.rl:148 + + *viap = via + viap = &via.Next + via = nil + + goto st528 + st528: + if p++; p == pe { + goto _test_eof528 + } + st_case_528: +//line msg_parse.go:10432 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st528 + case 32: + goto st528 + case 44: + goto st516 + case 525: + goto st529 + } + goto st0 +tr682: +//line msg_parse.rl:148 + + *viap = via + viap = &via.Next + via = nil + + goto st529 + st529: + if p++; p == pe { + goto _test_eof529 + } + st_case_529: +//line msg_parse.go:10464 + if data[p] == 10 { + goto tr685 + } + goto st0 +tr685: +//line msg_parse.rl:78 + + line++ + linep = p + 1 + + goto st530 + st530: + if p++; p == pe { + goto _test_eof530 + } + st_case_530: +//line msg_parse.go:10481 + switch data[p] { + case 9: + goto st531 + case 32: + goto st531 + } + goto st0 + st531: + if p++; p == pe { + goto _test_eof531 + } + st_case_531: + switch data[p] { + case 9: + goto st531 + case 32: + goto st531 + case 44: + goto st516 + } + goto st0 +tr674: +//line msg_parse.rl:166 + + via.Host = string(data[mark:p]) + + goto st532 + st532: + if p++; p == pe { + goto _test_eof532 + } + st_case_532: +//line msg_parse.go:10514 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st532 + case 32: + goto st532 + case 58: + goto st533 + case 59: + goto st536 + case 525: + goto st574 + } + goto st0 +tr676: +//line msg_parse.rl:166 + + via.Host = string(data[mark:p]) + + goto st533 + st533: + if p++; p == pe { + goto _test_eof533 + } + st_case_533: +//line msg_parse.go:10546 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st533 + case 32: + goto st533 + case 525: + goto st571 + } + if 48 <= _widec && _widec <= 57 { + goto tr691 + } + goto st0 +tr691: +//line msg_parse.rl:170 + + via.Port = via.Port * 10 + (uint16(data[p]) - 0x30) + + goto st534 + st534: + if p++; p == pe { + goto _test_eof534 + } + st_case_534: +//line msg_parse.go:10577 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st535 + case 32: + goto st535 + case 59: + goto st536 + case 269: + goto tr693 + case 525: + goto st541 + } + switch { + case _widec < 14: + if _widec <= 12 { + goto tr693 + } + case _widec > 47: + switch { + case _widec > 57: + if 58 <= _widec { + goto tr693 + } + case _widec >= 48: + goto tr695 + } + default: + goto tr693 + } + goto st0 +tr712: +//line msg_parse.rl:174 + + if via.Params == nil { + via.Params = Params{} + } + via.Params[name] = string(buf[0:amt]) + + goto st535 + st535: + if p++; p == pe { + goto _test_eof535 + } + st_case_535: +//line msg_parse.go:10629 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st535 + case 32: + goto st535 + case 59: + goto st536 + case 525: + goto st541 + } + goto st0 +tr677: +//line msg_parse.rl:166 + + via.Host = string(data[mark:p]) + + goto st536 +tr702: +//line msg_parse.rl:194 + + name = string(data[mark:p]) + +//line msg_parse.rl:174 + + if via.Params == nil { + via.Params = Params{} + } + via.Params[name] = string(buf[0:amt]) + + goto st536 +tr714: +//line msg_parse.rl:174 + + if via.Params == nil { + via.Params = Params{} + } + via.Params[name] = string(buf[0:amt]) + + goto st536 + st536: + if p++; p == pe { + goto _test_eof536 + } + st_case_536: +//line msg_parse.go:10681 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st536 + case 32: + goto st536 + case 33: + goto tr697 + case 37: + goto tr697 + case 39: + goto tr697 + case 126: + goto tr697 + case 525: + goto st564 + } + switch { + case _widec < 48: + switch { + case _widec > 43: + if 45 <= _widec && _widec <= 46 { + goto tr697 + } + case _widec >= 42: + goto tr697 + } + case _widec > 57: + switch { + case _widec > 90: + if 95 <= _widec && _widec <= 122 { + goto tr697 + } + case _widec >= 65: + goto tr697 + } + default: + goto tr697 + } + goto st0 +tr697: +//line msg_parse.rl:83 + + mark = p + + goto st537 + st537: + if p++; p == pe { + goto _test_eof537 + } + st_case_537: +//line msg_parse.go:10739 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto tr700 + case 32: + goto tr700 + case 33: + goto st537 + case 37: + goto st537 + case 39: + goto st537 + case 44: + goto tr699 + case 47: + goto tr699 + case 59: + goto tr702 + case 61: + goto tr703 + case 126: + goto st537 + case 269: + goto tr699 + case 525: + goto tr704 + } + switch { + case _widec < 58: + switch { + case _widec < 14: + if _widec <= 12 { + goto tr699 + } + case _widec > 41: + if 42 <= _widec && _widec <= 57 { + goto st537 + } + default: + goto tr699 + } + case _widec > 64: + switch { + case _widec < 91: + if 65 <= _widec && _widec <= 90 { + goto st537 + } + case _widec > 94: + switch { + case _widec > 122: + if 123 <= _widec { + goto tr699 + } + case _widec >= 95: + goto st537 + } + default: + goto tr699 + } + default: + goto tr699 + } + goto st0 +tr700: +//line msg_parse.rl:194 + + name = string(data[mark:p]) + +//line msg_parse.rl:174 + + if via.Params == nil { + via.Params = Params{} + } + via.Params[name] = string(buf[0:amt]) + + goto st538 + st538: + if p++; p == pe { + goto _test_eof538 + } + st_case_538: +//line msg_parse.go:10827 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st538 + case 32: + goto st538 + case 59: + goto st536 + case 61: + goto st539 + case 525: + goto st561 + } + goto st0 +tr703: +//line msg_parse.rl:194 + + name = string(data[mark:p]) + + goto st539 + st539: + if p++; p == pe { + goto _test_eof539 + } + st_case_539: +//line msg_parse.go:10859 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st539 + case 32: + goto st539 + case 33: + goto tr708 + case 34: + goto st544 + case 37: + goto tr708 + case 39: + goto tr708 + case 93: + goto tr708 + case 126: + goto tr708 + case 525: + goto st555 + } + switch { + case _widec < 48: + switch { + case _widec > 43: + if 45 <= _widec && _widec <= 46 { + goto tr708 + } + case _widec >= 42: + goto tr708 + } + case _widec > 58: + switch { + case _widec > 91: + if 95 <= _widec && _widec <= 122 { + goto tr708 + } + case _widec >= 65: + goto tr708 + } + default: + goto tr708 + } + goto st0 +tr708: +//line msg_parse.rl:87 + + amt = 0 + +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st540 +tr713: +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st540 + st540: + if p++; p == pe { + goto _test_eof540 + } + st_case_540: +//line msg_parse.go:10933 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto tr712 + case 32: + goto tr712 + case 33: + goto tr713 + case 37: + goto tr713 + case 39: + goto tr713 + case 44: + goto tr711 + case 47: + goto tr711 + case 59: + goto tr714 + case 92: + goto tr711 + case 94: + goto tr711 + case 126: + goto tr713 + case 269: + goto tr711 + case 525: + goto tr715 + } + switch { + case _widec < 42: + switch { + case _widec > 12: + if 14 <= _widec && _widec <= 41 { + goto tr711 + } + default: + goto tr711 + } + case _widec > 58: + switch { + case _widec < 65: + if 60 <= _widec && _widec <= 64 { + goto tr711 + } + case _widec > 122: + if 123 <= _widec { + goto tr711 + } + default: + goto tr713 + } + default: + goto tr713 + } + goto st0 +tr715: +//line msg_parse.rl:174 + + if via.Params == nil { + via.Params = Params{} + } + via.Params[name] = string(buf[0:amt]) + + goto st541 + st541: + if p++; p == pe { + goto _test_eof541 + } + st_case_541: +//line msg_parse.go:11010 + if data[p] == 10 { + goto tr716 + } + goto st0 +tr716: +//line msg_parse.rl:78 + + line++ + linep = p + 1 + + goto st542 + st542: + if p++; p == pe { + goto _test_eof542 + } + st_case_542: +//line msg_parse.go:11027 + switch data[p] { + case 9: + goto st543 + case 32: + goto st543 + } + goto st0 + st543: + if p++; p == pe { + goto _test_eof543 + } + st_case_543: + switch data[p] { + case 9: + goto st543 + case 32: + goto st543 + case 59: + goto st536 + } + goto st0 + st544: + if p++; p == pe { + goto _test_eof544 + } + st_case_544: + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto tr718 + case 34: + goto tr719 + case 92: + goto tr720 + case 525: + goto tr726 + } + switch { + case _widec < 224: + switch { + case _widec > 126: + if 192 <= _widec && _widec <= 223 { + goto tr721 + } + case _widec >= 32: + goto tr718 + } + case _widec > 239: + switch { + case _widec < 248: + if 240 <= _widec && _widec <= 247 { + goto tr723 + } + case _widec > 251: + if 252 <= _widec && _widec <= 253 { + goto tr725 + } + default: + goto tr724 + } + default: + goto tr722 + } + goto st0 +tr718: +//line msg_parse.rl:87 + + amt = 0 + +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st545 +tr727: +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st545 + st545: + if p++; p == pe { + goto _test_eof545 + } + st_case_545: +//line msg_parse.go:11121 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto tr727 + case 34: + goto st546 + case 92: + goto st547 + case 525: + goto tr735 + } + switch { + case _widec < 224: + switch { + case _widec > 126: + if 192 <= _widec && _widec <= 223 { + goto tr730 + } + case _widec >= 32: + goto tr727 + } + case _widec > 239: + switch { + case _widec < 248: + if 240 <= _widec && _widec <= 247 { + goto tr732 + } + case _widec > 251: + if 252 <= _widec && _widec <= 253 { + goto tr734 + } + default: + goto tr733 + } + default: + goto tr731 + } + goto st0 +tr719: +//line msg_parse.rl:87 + + amt = 0 + + goto st546 + st546: + if p++; p == pe { + goto _test_eof546 + } + st_case_546: +//line msg_parse.go:11177 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto tr712 + case 32: + goto tr712 + case 59: + goto tr714 + case 269: + goto tr711 + case 525: + goto tr715 + } + switch { + case _widec > 12: + if 14 <= _widec { + goto tr711 + } + default: + goto tr711 + } + goto st0 +tr720: +//line msg_parse.rl:87 + + amt = 0 + + goto st547 + st547: + if p++; p == pe { + goto _test_eof547 + } + st_case_547: +//line msg_parse.go:11217 + switch { + case data[p] < 11: + if data[p] <= 9 { + goto tr727 + } + case data[p] > 12: + if 14 <= data[p] && data[p] <= 127 { + goto tr727 + } + default: + goto tr727 + } + goto st0 +tr721: +//line msg_parse.rl:87 + + amt = 0 + +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st548 +tr730: +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st548 + st548: + if p++; p == pe { + goto _test_eof548 + } + st_case_548: +//line msg_parse.go:11254 + if 128 <= data[p] && data[p] <= 191 { + goto tr727 + } + goto st0 +tr722: +//line msg_parse.rl:87 + + amt = 0 + +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st549 +tr731: +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st549 + st549: + if p++; p == pe { + goto _test_eof549 + } + st_case_549: +//line msg_parse.go:11282 + if 128 <= data[p] && data[p] <= 191 { + goto tr730 + } + goto st0 +tr723: +//line msg_parse.rl:87 + + amt = 0 + +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st550 +tr732: +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st550 + st550: + if p++; p == pe { + goto _test_eof550 + } + st_case_550: +//line msg_parse.go:11310 + if 128 <= data[p] && data[p] <= 191 { + goto tr731 + } + goto st0 +tr724: +//line msg_parse.rl:87 + + amt = 0 + +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st551 +tr733: +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st551 + st551: + if p++; p == pe { + goto _test_eof551 + } + st_case_551: +//line msg_parse.go:11338 + if 128 <= data[p] && data[p] <= 191 { + goto tr732 + } + goto st0 +tr725: +//line msg_parse.rl:87 + + amt = 0 + +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st552 +tr734: +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st552 + st552: + if p++; p == pe { + goto _test_eof552 + } + st_case_552: +//line msg_parse.go:11366 + if 128 <= data[p] && data[p] <= 191 { + goto tr733 + } + goto st0 +tr726: +//line msg_parse.rl:87 + + amt = 0 + +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st553 +tr735: +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st553 + st553: + if p++; p == pe { + goto _test_eof553 + } + st_case_553: +//line msg_parse.go:11394 + if data[p] == 10 { + goto tr736 + } + goto st0 +tr736: +//line msg_parse.rl:78 + + line++ + linep = p + 1 + +//line msg_parse.rl:91 + + buf[amt] = data[p] + amt++ + + goto st554 + st554: + if p++; p == pe { + goto _test_eof554 + } + st_case_554: +//line msg_parse.go:11416 + switch data[p] { + case 9: + goto tr727 + case 32: + goto tr727 + } + goto st0 + st555: + if p++; p == pe { + goto _test_eof555 + } + st_case_555: + if data[p] == 10 { + goto tr737 + } + goto st0 +tr737: +//line msg_parse.rl:78 + + line++ + linep = p + 1 + + goto st556 + st556: + if p++; p == pe { + goto _test_eof556 + } + st_case_556: +//line msg_parse.go:11445 + switch data[p] { + case 9: + goto st557 + case 32: + goto st557 + } + goto st0 + st557: + if p++; p == pe { + goto _test_eof557 + } + st_case_557: + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st557 + case 32: + goto st557 + case 33: + goto tr708 + case 34: + goto st544 + case 37: + goto tr708 + case 39: + goto tr708 + case 93: + goto tr708 + case 126: + goto tr708 + case 525: + goto st558 + } + switch { + case _widec < 48: + switch { + case _widec > 43: + if 45 <= _widec && _widec <= 46 { + goto tr708 + } + case _widec >= 42: + goto tr708 + } + case _widec > 58: + switch { + case _widec > 91: + if 95 <= _widec && _widec <= 122 { + goto tr708 + } + case _widec >= 65: + goto tr708 + } + default: + goto tr708 + } + goto st0 + st558: + if p++; p == pe { + goto _test_eof558 + } + st_case_558: + if data[p] == 10 { + goto tr740 + } + goto st0 +tr740: +//line msg_parse.rl:78 + + line++ + linep = p + 1 + + goto st559 + st559: + if p++; p == pe { + goto _test_eof559 + } + st_case_559: +//line msg_parse.go:11529 + switch data[p] { + case 9: + goto st560 + case 32: + goto st560 + } + goto st0 + st560: + if p++; p == pe { + goto _test_eof560 + } + st_case_560: + switch data[p] { + case 9: + goto st560 + case 32: + goto st560 + case 34: + goto st544 + } + goto st0 +tr704: +//line msg_parse.rl:194 + + name = string(data[mark:p]) + +//line msg_parse.rl:174 + + if via.Params == nil { + via.Params = Params{} + } + via.Params[name] = string(buf[0:amt]) + + goto st561 + st561: + if p++; p == pe { + goto _test_eof561 + } + st_case_561: +//line msg_parse.go:11569 + if data[p] == 10 { + goto tr742 + } + goto st0 +tr742: +//line msg_parse.rl:78 + + line++ + linep = p + 1 + + goto st562 + st562: + if p++; p == pe { + goto _test_eof562 + } + st_case_562: +//line msg_parse.go:11586 + switch data[p] { + case 9: + goto st563 + case 32: + goto st563 + } + goto st0 + st563: + if p++; p == pe { + goto _test_eof563 + } + st_case_563: + switch data[p] { + case 9: + goto st563 + case 32: + goto st563 + case 59: + goto st536 + case 61: + goto st539 + } + goto st0 + st564: + if p++; p == pe { + goto _test_eof564 + } + st_case_564: + if data[p] == 10 { + goto tr744 + } + goto st0 +tr744: +//line msg_parse.rl:78 + + line++ + linep = p + 1 + + goto st565 + st565: + if p++; p == pe { + goto _test_eof565 + } + st_case_565: +//line msg_parse.go:11631 + switch data[p] { + case 9: + goto st566 + case 32: + goto st566 + } + goto st0 + st566: + if p++; p == pe { + goto _test_eof566 + } + st_case_566: + switch data[p] { + case 9: + goto st566 + case 32: + goto st566 + case 33: + goto tr697 + case 37: + goto tr697 + case 39: + goto tr697 + case 126: + goto tr697 + } + switch { + case data[p] < 48: + switch { + case data[p] > 43: + if 45 <= data[p] && data[p] <= 46 { + goto tr697 + } + case data[p] >= 42: + goto tr697 + } + case data[p] > 57: + switch { + case data[p] > 90: + if 95 <= data[p] && data[p] <= 122 { + goto tr697 + } + case data[p] >= 65: + goto tr697 + } + default: + goto tr697 + } + goto st0 +tr695: +//line msg_parse.rl:170 + + via.Port = via.Port * 10 + (uint16(data[p]) - 0x30) + + goto st567 + st567: + if p++; p == pe { + goto _test_eof567 + } + st_case_567: +//line msg_parse.go:11692 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st535 + case 32: + goto st535 + case 59: + goto st536 + case 269: + goto tr693 + case 525: + goto st541 + } + switch { + case _widec < 14: + if _widec <= 12 { + goto tr693 + } + case _widec > 47: + switch { + case _widec > 57: + if 58 <= _widec { + goto tr693 + } + case _widec >= 48: + goto tr746 + } + default: + goto tr693 + } + goto st0 +tr746: +//line msg_parse.rl:170 + + via.Port = via.Port * 10 + (uint16(data[p]) - 0x30) + + goto st568 + st568: + if p++; p == pe { + goto _test_eof568 + } + st_case_568: +//line msg_parse.go:11741 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st535 + case 32: + goto st535 + case 59: + goto st536 + case 269: + goto tr693 + case 525: + goto st541 + } + switch { + case _widec < 14: + if _widec <= 12 { + goto tr693 + } + case _widec > 47: + switch { + case _widec > 57: + if 58 <= _widec { + goto tr693 + } + case _widec >= 48: + goto tr747 + } + default: + goto tr693 + } + goto st0 +tr747: +//line msg_parse.rl:170 + + via.Port = via.Port * 10 + (uint16(data[p]) - 0x30) + + goto st569 + st569: + if p++; p == pe { + goto _test_eof569 + } + st_case_569: +//line msg_parse.go:11790 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st535 + case 32: + goto st535 + case 59: + goto st536 + case 269: + goto tr693 + case 525: + goto st541 + } + switch { + case _widec < 14: + if _widec <= 12 { + goto tr693 + } + case _widec > 47: + switch { + case _widec > 57: + if 58 <= _widec { + goto tr693 + } + case _widec >= 48: + goto tr748 + } + default: + goto tr693 } goto st0 -tr642: -//line msg_parse.rl:55 +tr748: +//line msg_parse.rl:170 + + via.Port = via.Port * 10 + (uint16(data[p]) - 0x30) + + goto st570 + st570: + if p++; p == pe { + goto _test_eof570 + } + st_case_570: +//line msg_parse.go:11839 + _widec = int16(data[p]) + if 13 <= data[p] && data[p] <= 13 { + _widec = 256 + (int16(data[p]) - 0) + if lookAheadWSP(data, p, pe) { + _widec += 256 + } + } + switch _widec { + case 9: + goto st535 + case 32: + goto st535 + case 59: + goto st536 + case 269: + goto tr693 + case 525: + goto st541 + } + switch { + case _widec > 12: + if 14 <= _widec { + goto tr693 + } + default: + goto tr693 + } + goto st0 + st571: + if p++; p == pe { + goto _test_eof571 + } + st_case_571: + if data[p] == 10 { + goto tr749 + } + goto st0 +tr749: +//line msg_parse.rl:78 + + line++ + linep = p + 1 + + goto st572 + st572: + if p++; p == pe { + goto _test_eof572 + } + st_case_572: +//line msg_parse.go:11889 + switch data[p] { + case 9: + goto st573 + case 32: + goto st573 + } + goto st0 + st573: + if p++; p == pe { + goto _test_eof573 + } + st_case_573: + switch data[p] { + case 9: + goto st573 + case 32: + goto st573 + } + if 48 <= data[p] && data[p] <= 57 { + goto tr691 + } + goto st0 +tr678: +//line msg_parse.rl:166 + + via.Host = string(data[mark:p]) + + goto st574 + st574: + if p++; p == pe { + goto _test_eof574 + } + st_case_574: +//line msg_parse.go:11923 + if data[p] == 10 { + goto tr751 + } + goto st0 +tr751: +//line msg_parse.rl:78 + + line++ + linep = p + 1 + + goto st575 + st575: + if p++; p == pe { + goto _test_eof575 + } + st_case_575: +//line msg_parse.go:11940 + switch data[p] { + case 9: + goto st576 + case 32: + goto st576 + } + goto st0 + st576: + if p++; p == pe { + goto _test_eof576 + } + st_case_576: + switch data[p] { + case 9: + goto st576 + case 32: + goto st576 + case 58: + goto st533 + case 59: + goto st536 + } + goto st0 + st577: + if p++; p == pe { + goto _test_eof577 + } + st_case_577: + if data[p] == 46 { + goto tr753 + } + switch { + case data[p] < 65: + if 48 <= data[p] && data[p] <= 58 { + goto tr753 + } + case data[p] > 70: + if 97 <= data[p] && data[p] <= 102 { + goto tr753 + } + default: + goto tr753 + } + goto st0 +tr753: +//line msg_parse.rl:83 mark = p - goto st508 - st508: + goto st578 + st578: if p++; p == pe { - goto _test_eof508 + goto _test_eof578 } - st_case_508: -//line msg_parse.go:9645 + st_case_578: +//line msg_parse.go:11996 + switch data[p] { + case 46: + goto st578 + case 93: + goto tr755 + } + switch { + case data[p] < 65: + if 48 <= data[p] && data[p] <= 58 { + goto st578 + } + case data[p] > 70: + if 97 <= data[p] && data[p] <= 102 { + goto st578 + } + default: + goto st578 + } + goto st0 +tr755: +//line msg_parse.rl:166 + + via.Host = string(data[mark:p]) + + goto st579 + st579: + if p++; p == pe { + goto _test_eof579 + } + st_case_579: +//line msg_parse.go:12027 _widec = int16(data[p]) if 13 <= data[p] && data[p] <= 13 { _widec = 256 + (int16(data[p]) - 0) @@ -9651,521 +12033,702 @@ tr642: } switch _widec { case 9: - goto st508 + goto st532 + case 32: + goto st532 + case 58: + goto st533 + case 59: + goto st536 case 269: - goto tr656 + goto tr693 case 525: - goto st514 + goto st574 } switch { - case _widec < 224: + case _widec > 12: + if 14 <= _widec { + goto tr693 + } + default: + goto tr693 + } + goto st0 +tr668: +//line msg_parse.rl:162 + + via.Transport = string(data[mark:p]) + + goto st580 + st580: + if p++; p == pe { + goto _test_eof580 + } + st_case_580: +//line msg_parse.go:12069 + if data[p] == 10 { + goto tr756 + } + goto st0 +tr756: +//line msg_parse.rl:78 + + line++ + linep = p + 1 + + goto st581 + st581: + if p++; p == pe { + goto _test_eof581 + } + st_case_581: +//line msg_parse.go:12086 + switch data[p] { + case 9: + goto st582 + case 32: + goto st582 + } + goto st0 + st582: + if p++; p == pe { + goto _test_eof582 + } + st_case_582: + switch data[p] { + case 9: + goto st582 + case 32: + goto st582 + case 91: + goto st577 + } + switch { + case data[p] < 48: + if 45 <= data[p] && data[p] <= 46 { + goto tr670 + } + case data[p] > 57: switch { - case _widec > 127: - if 192 <= _widec && _widec <= 223 { - goto st509 + case data[p] > 90: + if 97 <= data[p] && data[p] <= 122 { + goto tr670 } - case _widec >= 32: - goto st508 + case data[p] >= 65: + goto tr670 } - case _widec > 239: + default: + goto tr670 + } + goto st0 + st583: + if p++; p == pe { + goto _test_eof583 + } + st_case_583: + if data[p] == 10 { + goto tr758 + } + goto st0 +tr758: +//line msg_parse.rl:78 + + line++ + linep = p + 1 + + goto st584 + st584: + if p++; p == pe { + goto _test_eof584 + } + st_case_584: +//line msg_parse.go:12146 + switch data[p] { + case 9: + goto st585 + case 32: + goto st585 + } + goto st0 + st585: + if p++; p == pe { + goto _test_eof585 + } + st_case_585: + switch data[p] { + case 9: + goto st585 + case 32: + goto st585 + case 33: + goto tr664 + case 37: + goto tr664 + case 39: + goto tr664 + case 126: + goto tr664 + } + switch { + case data[p] < 48: switch { - case _widec < 248: - if 240 <= _widec && _widec <= 247 { - goto st511 + case data[p] > 43: + if 45 <= data[p] && data[p] <= 46 { + goto tr664 } - case _widec > 251: - if 252 <= _widec && _widec <= 253 { - goto st513 + case data[p] >= 42: + goto tr664 + } + case data[p] > 57: + switch { + case data[p] > 90: + if 95 <= data[p] && data[p] <= 122 { + goto tr664 } - default: - goto st512 + case data[p] >= 65: + goto tr664 } default: - goto st510 + goto tr664 } goto st0 -tr643: -//line msg_parse.rl:55 +tr660: +//line msg_parse.rl:158 - mark = p + via.Version = string(data[mark:p]) - goto st509 - st509: + goto st586 + st586: if p++; p == pe { - goto _test_eof509 + goto _test_eof586 } - st_case_509: -//line msg_parse.go:9699 - if 128 <= data[p] && data[p] <= 191 { - goto st508 + st_case_586: +//line msg_parse.go:12207 + if data[p] == 10 { + goto tr760 } goto st0 -tr644: -//line msg_parse.rl:55 +tr760: +//line msg_parse.rl:78 - mark = p + line++ + linep = p + 1 - goto st510 - st510: + goto st587 + st587: if p++; p == pe { - goto _test_eof510 + goto _test_eof587 } - st_case_510: -//line msg_parse.go:9715 - if 128 <= data[p] && data[p] <= 191 { - goto st509 + st_case_587: +//line msg_parse.go:12224 + switch data[p] { + case 9: + goto st588 + case 32: + goto st588 } goto st0 -tr645: -//line msg_parse.rl:55 - - mark = p - - goto st511 - st511: + st588: if p++; p == pe { - goto _test_eof511 + goto _test_eof588 } - st_case_511: -//line msg_parse.go:9731 - if 128 <= data[p] && data[p] <= 191 { - goto st510 + st_case_588: + switch data[p] { + case 9: + goto st588 + case 32: + goto st588 + case 47: + goto st522 + } + goto st0 + st589: + if p++; p == pe { + goto _test_eof589 + } + st_case_589: + if data[p] == 10 { + goto tr762 } goto st0 -tr646: -//line msg_parse.rl:55 +tr762: +//line msg_parse.rl:78 - mark = p + line++ + linep = p + 1 - goto st512 - st512: + goto st590 + st590: if p++; p == pe { - goto _test_eof512 + goto _test_eof590 } - st_case_512: -//line msg_parse.go:9747 - if 128 <= data[p] && data[p] <= 191 { - goto st511 + st_case_590: +//line msg_parse.go:12267 + switch data[p] { + case 9: + goto st591 + case 32: + goto st591 } goto st0 -tr647: -//line msg_parse.rl:55 - - mark = p - - goto st513 - st513: + st591: if p++; p == pe { - goto _test_eof513 + goto _test_eof591 } - st_case_513: -//line msg_parse.go:9763 - if 128 <= data[p] && data[p] <= 191 { - goto st512 + st_case_591: + switch data[p] { + case 9: + goto st591 + case 32: + goto st591 + case 33: + goto tr655 + case 37: + goto tr655 + case 39: + goto tr655 + case 126: + goto tr655 + } + switch { + case data[p] < 48: + switch { + case data[p] > 43: + if 45 <= data[p] && data[p] <= 46 { + goto tr655 + } + case data[p] >= 42: + goto tr655 + } + case data[p] > 57: + switch { + case data[p] > 90: + if 95 <= data[p] && data[p] <= 122 { + goto tr655 + } + case data[p] >= 65: + goto tr655 + } + default: + goto tr655 } goto st0 -tr661: -//line msg_parse.rl:55 +tr651: +//line msg_parse.rl:154 - mark = p + via.Protocol = string(data[mark:p]) - goto st514 - st514: + goto st592 + st592: if p++; p == pe { - goto _test_eof514 + goto _test_eof592 } - st_case_514: -//line msg_parse.go:9779 + st_case_592: +//line msg_parse.go:12328 if data[p] == 10 { - goto tr658 + goto tr764 } goto st0 -tr658: -//line msg_parse.rl:50 +tr764: +//line msg_parse.rl:78 line++ linep = p + 1 - goto st515 - st515: + goto st593 + st593: if p++; p == pe { - goto _test_eof515 + goto _test_eof593 } - st_case_515: -//line msg_parse.go:9796 + st_case_593: +//line msg_parse.go:12345 switch data[p] { case 9: - goto st508 + goto st594 case 32: - goto st508 + goto st594 } goto st0 - st516: + st594: if p++; p == pe { - goto _test_eof516 + goto _test_eof594 } - st_case_516: + st_case_594: + switch data[p] { + case 9: + goto st594 + case 32: + goto st594 + case 47: + goto st519 + } + goto st0 + st595: + if p++; p == pe { + goto _test_eof595 + } + st_case_595: if data[p] == 10 { - goto tr659 + goto tr766 } goto st0 -tr659: -//line msg_parse.rl:50 +tr766: +//line msg_parse.rl:78 line++ linep = p + 1 - goto st517 - st517: + goto st596 + st596: if p++; p == pe { - goto _test_eof517 + goto _test_eof596 } - st_case_517: -//line msg_parse.go:9825 + st_case_596: +//line msg_parse.go:12388 switch data[p] { case 9: - goto st518 + goto st597 case 32: - goto st518 + goto st597 } goto st0 - st518: + st597: if p++; p == pe { - goto _test_eof518 - } - st_case_518: - _widec = int16(data[p]) - if 13 <= data[p] && data[p] <= 13 { - _widec = 256 + (int16(data[p]) - 0) - if lookAheadWSP(data, p, pe) { - _widec += 256 - } + goto _test_eof597 } - switch _widec { + st_case_597: + switch data[p] { case 9: - goto st518 + goto st597 case 32: - goto st518 - case 269: - goto tr648 - case 525: - goto tr661 + goto st597 + case 33: + goto tr646 + case 37: + goto tr646 + case 39: + goto tr646 + case 126: + goto tr646 } switch { - case _widec < 224: + case data[p] < 48: switch { - case _widec > 127: - if 192 <= _widec && _widec <= 223 { - goto tr643 + case data[p] > 43: + if 45 <= data[p] && data[p] <= 46 { + goto tr646 } - case _widec >= 33: - goto tr642 + case data[p] >= 42: + goto tr646 } - case _widec > 239: + case data[p] > 57: switch { - case _widec < 248: - if 240 <= _widec && _widec <= 247 { - goto tr645 - } - case _widec > 251: - if 252 <= _widec && _widec <= 253 { - goto tr647 + case data[p] > 90: + if 95 <= data[p] && data[p] <= 122 { + goto tr646 } - default: + case data[p] >= 65: goto tr646 } default: - goto tr644 + goto tr646 } goto st0 - st519: + st598: if p++; p == pe { - goto _test_eof519 + goto _test_eof598 } - st_case_519: + st_case_598: switch data[p] { case 65: - goto st506 + goto st599 case 97: - goto st506 + goto st599 } - goto tr293 -tr92: -//line msg_parse.rl:55 - - mark = p - - goto st520 - st520: + goto tr75 + st599: if p++; p == pe { - goto _test_eof520 + goto _test_eof599 } - st_case_520: -//line msg_parse.go:9905 + st_case_599: + switch data[p] { + case 9: + goto st515 + case 32: + goto st515 + case 58: + goto st516 + } + goto tr75 + st600: + if p++; p == pe { + goto _test_eof600 + } + st_case_600: switch data[p] { case 65: - goto st521 + goto st601 case 87: - goto st527 + goto st607 case 97: - goto st521 + goto st601 case 119: - goto st527 + goto st607 } - goto tr105 - st521: + goto tr75 + st601: if p++; p == pe { - goto _test_eof521 + goto _test_eof601 } - st_case_521: + st_case_601: switch data[p] { case 82: - goto st522 + goto st602 case 114: - goto st522 + goto st602 } - goto tr105 - st522: + goto tr75 + st602: if p++; p == pe { - goto _test_eof522 + goto _test_eof602 } - st_case_522: + st_case_602: switch data[p] { case 78: - goto st523 + goto st603 case 110: - goto st523 + goto st603 } - goto tr105 - st523: + goto tr75 + st603: if p++; p == pe { - goto _test_eof523 + goto _test_eof603 } - st_case_523: + st_case_603: switch data[p] { case 73: - goto st524 + goto st604 case 105: - goto st524 + goto st604 } - goto tr105 - st524: + goto tr75 + st604: if p++; p == pe { - goto _test_eof524 + goto _test_eof604 } - st_case_524: + st_case_604: switch data[p] { case 78: - goto st525 + goto st605 case 110: - goto st525 + goto st605 } - goto tr105 - st525: + goto tr75 + st605: if p++; p == pe { - goto _test_eof525 + goto _test_eof605 } - st_case_525: + st_case_605: switch data[p] { case 71: - goto st526 + goto st606 case 103: - goto st526 + goto st606 } - goto tr105 - st526: + goto tr75 + st606: if p++; p == pe { - goto _test_eof526 + goto _test_eof606 } - st_case_526: + st_case_606: switch data[p] { case 9: - goto tr669 + goto tr776 case 32: - goto tr669 + goto tr776 case 58: - goto tr670 + goto tr777 } - goto st0 - st527: + goto tr75 + st607: if p++; p == pe { - goto _test_eof527 + goto _test_eof607 } - st_case_527: + st_case_607: switch data[p] { case 87: - goto st528 + goto st608 case 119: - goto st528 + goto st608 } - goto tr105 - st528: + goto tr75 + st608: if p++; p == pe { - goto _test_eof528 + goto _test_eof608 } - st_case_528: + st_case_608: if data[p] == 45 { - goto st529 + goto st609 } - goto tr105 - st529: + goto tr75 + st609: if p++; p == pe { - goto _test_eof529 + goto _test_eof609 } - st_case_529: + st_case_609: switch data[p] { case 65: - goto st530 + goto st610 case 97: - goto st530 + goto st610 } - goto tr105 - st530: + goto tr75 + st610: if p++; p == pe { - goto _test_eof530 + goto _test_eof610 } - st_case_530: + st_case_610: switch data[p] { case 85: - goto st531 + goto st611 case 117: - goto st531 + goto st611 } - goto tr105 - st531: + goto tr75 + st611: if p++; p == pe { - goto _test_eof531 + goto _test_eof611 } - st_case_531: + st_case_611: switch data[p] { case 84: - goto st532 + goto st612 case 116: - goto st532 + goto st612 } - goto tr105 - st532: + goto tr75 + st612: if p++; p == pe { - goto _test_eof532 + goto _test_eof612 } - st_case_532: + st_case_612: switch data[p] { case 72: - goto st533 + goto st613 case 104: - goto st533 + goto st613 } - goto tr105 - st533: + goto tr75 + st613: if p++; p == pe { - goto _test_eof533 + goto _test_eof613 } - st_case_533: + st_case_613: switch data[p] { case 69: - goto st534 + goto st614 case 101: - goto st534 + goto st614 } - goto tr105 - st534: + goto tr75 + st614: if p++; p == pe { - goto _test_eof534 + goto _test_eof614 } - st_case_534: + st_case_614: switch data[p] { case 78: - goto st535 + goto st615 case 110: - goto st535 + goto st615 } - goto tr105 - st535: + goto tr75 + st615: if p++; p == pe { - goto _test_eof535 + goto _test_eof615 } - st_case_535: + st_case_615: switch data[p] { case 84: - goto st536 + goto st616 case 116: - goto st536 + goto st616 } - goto tr105 - st536: + goto tr75 + st616: if p++; p == pe { - goto _test_eof536 + goto _test_eof616 } - st_case_536: + st_case_616: switch data[p] { case 73: - goto st537 + goto st617 case 105: - goto st537 + goto st617 } - goto tr105 - st537: + goto tr75 + st617: if p++; p == pe { - goto _test_eof537 + goto _test_eof617 } - st_case_537: + st_case_617: switch data[p] { case 67: - goto st538 + goto st618 case 99: - goto st538 + goto st618 } - goto tr105 - st538: + goto tr75 + st618: if p++; p == pe { - goto _test_eof538 + goto _test_eof618 } - st_case_538: + st_case_618: switch data[p] { case 65: - goto st539 + goto st619 case 97: - goto st539 + goto st619 } - goto tr105 - st539: + goto tr75 + st619: if p++; p == pe { - goto _test_eof539 + goto _test_eof619 } - st_case_539: + st_case_619: switch data[p] { case 84: - goto st540 + goto st620 case 116: - goto st540 + goto st620 } - goto tr105 - st540: + goto tr75 + st620: if p++; p == pe { - goto _test_eof540 + goto _test_eof620 } - st_case_540: + st_case_620: switch data[p] { case 69: - goto st541 + goto st621 case 101: - goto st541 + goto st621 } - goto tr105 - st541: + goto tr75 + st621: if p++; p == pe { - goto _test_eof541 + goto _test_eof621 } - st_case_541: + st_case_621: switch data[p] { case 9: - goto tr685 + goto tr792 case 32: - goto tr685 + goto tr792 case 58: - goto tr686 + goto tr793 } - goto st0 + goto tr75 st_out: _test_eof2: cs = 2; goto _test_eof _test_eof3: cs = 3; goto _test_eof @@ -10179,7 +12742,7 @@ tr92: _test_eof11: cs = 11; goto _test_eof _test_eof12: cs = 12; goto _test_eof _test_eof13: cs = 13; goto _test_eof - _test_eof542: cs = 542; goto _test_eof + _test_eof622: cs = 622; goto _test_eof _test_eof14: cs = 14; goto _test_eof _test_eof15: cs = 15; goto _test_eof _test_eof16: cs = 16; goto _test_eof @@ -10208,20 +12771,20 @@ tr92: _test_eof39: cs = 39; goto _test_eof _test_eof40: cs = 40; goto _test_eof _test_eof41: cs = 41; goto _test_eof - _test_eof543: cs = 543; goto _test_eof + _test_eof623: cs = 623; goto _test_eof _test_eof42: cs = 42; goto _test_eof _test_eof43: cs = 43; goto _test_eof _test_eof44: cs = 44; goto _test_eof _test_eof45: cs = 45; goto _test_eof _test_eof46: cs = 46; goto _test_eof _test_eof47: cs = 47; goto _test_eof - _test_eof544: cs = 544; goto _test_eof + _test_eof624: cs = 624; goto _test_eof _test_eof48: cs = 48; goto _test_eof _test_eof49: cs = 49; goto _test_eof _test_eof50: cs = 50; goto _test_eof _test_eof51: cs = 51; goto _test_eof _test_eof52: cs = 52; goto _test_eof - _test_eof545: cs = 545; goto _test_eof + _test_eof625: cs = 625; goto _test_eof _test_eof53: cs = 53; goto _test_eof _test_eof54: cs = 54; goto _test_eof _test_eof55: cs = 55; goto _test_eof @@ -10711,45 +13274,105 @@ tr92: _test_eof539: cs = 539; goto _test_eof _test_eof540: cs = 540; goto _test_eof _test_eof541: cs = 541; goto _test_eof + _test_eof542: cs = 542; goto _test_eof + _test_eof543: cs = 543; goto _test_eof + _test_eof544: cs = 544; goto _test_eof + _test_eof545: cs = 545; goto _test_eof + _test_eof546: cs = 546; goto _test_eof + _test_eof547: cs = 547; goto _test_eof + _test_eof548: cs = 548; goto _test_eof + _test_eof549: cs = 549; goto _test_eof + _test_eof550: cs = 550; goto _test_eof + _test_eof551: cs = 551; goto _test_eof + _test_eof552: cs = 552; goto _test_eof + _test_eof553: cs = 553; goto _test_eof + _test_eof554: cs = 554; goto _test_eof + _test_eof555: cs = 555; goto _test_eof + _test_eof556: cs = 556; goto _test_eof + _test_eof557: cs = 557; goto _test_eof + _test_eof558: cs = 558; goto _test_eof + _test_eof559: cs = 559; goto _test_eof + _test_eof560: cs = 560; goto _test_eof + _test_eof561: cs = 561; goto _test_eof + _test_eof562: cs = 562; goto _test_eof + _test_eof563: cs = 563; goto _test_eof + _test_eof564: cs = 564; goto _test_eof + _test_eof565: cs = 565; goto _test_eof + _test_eof566: cs = 566; goto _test_eof + _test_eof567: cs = 567; goto _test_eof + _test_eof568: cs = 568; goto _test_eof + _test_eof569: cs = 569; goto _test_eof + _test_eof570: cs = 570; goto _test_eof + _test_eof571: cs = 571; goto _test_eof + _test_eof572: cs = 572; goto _test_eof + _test_eof573: cs = 573; goto _test_eof + _test_eof574: cs = 574; goto _test_eof + _test_eof575: cs = 575; goto _test_eof + _test_eof576: cs = 576; goto _test_eof + _test_eof577: cs = 577; goto _test_eof + _test_eof578: cs = 578; goto _test_eof + _test_eof579: cs = 579; goto _test_eof + _test_eof580: cs = 580; goto _test_eof + _test_eof581: cs = 581; goto _test_eof + _test_eof582: cs = 582; goto _test_eof + _test_eof583: cs = 583; goto _test_eof + _test_eof584: cs = 584; goto _test_eof + _test_eof585: cs = 585; goto _test_eof + _test_eof586: cs = 586; goto _test_eof + _test_eof587: cs = 587; goto _test_eof + _test_eof588: cs = 588; goto _test_eof + _test_eof589: cs = 589; goto _test_eof + _test_eof590: cs = 590; goto _test_eof + _test_eof591: cs = 591; goto _test_eof + _test_eof592: cs = 592; goto _test_eof + _test_eof593: cs = 593; goto _test_eof + _test_eof594: cs = 594; goto _test_eof + _test_eof595: cs = 595; goto _test_eof + _test_eof596: cs = 596; goto _test_eof + _test_eof597: cs = 597; goto _test_eof + _test_eof598: cs = 598; goto _test_eof + _test_eof599: cs = 599; goto _test_eof + _test_eof600: cs = 600; goto _test_eof + _test_eof601: cs = 601; goto _test_eof + _test_eof602: cs = 602; goto _test_eof + _test_eof603: cs = 603; goto _test_eof + _test_eof604: cs = 604; goto _test_eof + _test_eof605: cs = 605; goto _test_eof + _test_eof606: cs = 606; goto _test_eof + _test_eof607: cs = 607; goto _test_eof + _test_eof608: cs = 608; goto _test_eof + _test_eof609: cs = 609; goto _test_eof + _test_eof610: cs = 610; goto _test_eof + _test_eof611: cs = 611; goto _test_eof + _test_eof612: cs = 612; goto _test_eof + _test_eof613: cs = 613; goto _test_eof + _test_eof614: cs = 614; goto _test_eof + _test_eof615: cs = 615; goto _test_eof + _test_eof616: cs = 616; goto _test_eof + _test_eof617: cs = 617; goto _test_eof + _test_eof618: cs = 618; goto _test_eof + _test_eof619: cs = 619; goto _test_eof + _test_eof620: cs = 620; goto _test_eof + _test_eof621: cs = 621; goto _test_eof _test_eof: {} if p == eof { switch cs { - case 59, 60, 61, 62, 64, 65, 66, 67, 68, 69, 70, 72, 73, 74, 75, 76, 77, 78, 80, 81, 82, 83, 84, 85, 86, 88, 89, 90, 91, 92, 93, 94, 95, 97, 98, 100, 101, 102, 103, 104, 105, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 125, 126, 127, 128, 129, 130, 131, 132, 163, 164, 169, 170, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 192, 193, 194, 195, 196, 197, 198, 201, 202, 203, 204, 205, 206, 234, 235, 236, 239, 240, 241, 242, 243, 244, 245, 246, 248, 249, 250, 264, 265, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 303, 304, 305, 306, 307, 308, 309, 310, 311, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 358, 359, 360, 361, 362, 363, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 381, 382, 383, 384, 385, 386, 387, 388, 390, 391, 392, 393, 394, 395, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 409, 410, 411, 412, 413, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 433, 434, 435, 436, 437, 439, 440, 441, 442, 444, 445, 446, 447, 448, 449, 450, 451, 453, 454, 455, 458, 459, 460, 461, 463, 464, 465, 466, 467, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 486, 487, 488, 489, 490, 491, 492, 493, 494, 496, 497, 498, 499, 500, 501, 502, 503, 520, 521, 522, 523, 524, 525, 527, 528, 529, 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 540: -//line msg_parse.rl:125 - - p-- - - {goto st44 } - - case 208, 209, 210, 211, 218, 219, 220, 221, 222, 238, 252, 253, 254, 255, 256, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 313, 314, 315, 316, 317, 318, 319, 320, 519: -//line msg_parse.rl:131 - - p-- - - {goto st44 } - - case 51, 135, 150, 151, 152, 153, 154, 166, 167, 168, 177, 178, 179, 180, 200, 285, 302: -//line msg_parse.rl:131 - - p-- - - {goto st44 } - -//line msg_parse.rl:125 + case 53, 54, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 151, 152, 153, 154, 155, 156, 165, 166, 167, 168, 169, 170, 171, 172, 173, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193, 194, 195, 196, 197, 198, 199, 200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 221, 222, 223, 224, 225, 226, 227, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 310, 311, 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358, 359, 360, 361, 362, 363, 364, 365, 366, 367, 368, 369, 370, 371, 372, 373, 374, 375, 376, 377, 378, 379, 380, 381, 382, 383, 384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396, 397, 398, 399, 400, 401, 402, 403, 404, 405, 406, 407, 408, 409, 410, 411, 412, 413, 414, 415, 416, 417, 418, 419, 420, 421, 422, 423, 424, 425, 426, 427, 428, 429, 430, 431, 432, 433, 434, 435, 436, 437, 438, 439, 440, 441, 442, 443, 444, 445, 446, 447, 448, 449, 450, 451, 452, 453, 454, 455, 456, 457, 458, 459, 460, 461, 462, 463, 464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482, 483, 484, 485, 486, 487, 488, 489, 490, 491, 492, 493, 494, 495, 496, 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 598, 599, 600, 601, 602, 603, 604, 605, 606, 607, 608, 609, 610, 611, 612, 613, 614, 615, 616, 617, 618, 619, 620, 621: +//line msg_parse.rl:189 p-- {goto st44 } -//line msg_parse.go:10746 +//line msg_parse.go:13369 } } _out: {} } -//line msg_parse.rl:365 +//line msg_parse.rl:496 if cs < msg_first_final { diff --git a/sip/msg_parse.rl b/sip/msg_parse.rl index 8d02c8a..b5272ff 100644 --- a/sip/msg_parse.rl +++ b/sip/msg_parse.rl @@ -1,4 +1,27 @@ // -*-go-*- +// +// Ragel SIP Message Parser +// +// This file is compiled into Go code by the Ragel State Machine Compiler for +// the purpose of converting SIP messages into a Msg data structure. This +// machine works in tandem with the Ragel machine defined in uri_parse.rl. +// +// Perhaps it would have been better if the authors of this protocol had chosen +// to use a binary serialization format like protocol buffers. But instead they +// chose to create a plaintext protocol that looks similar to HTTP requests, +// but are phenomenally more complicated. +// +// SIP messages are quite insane. Whitespace can be used liberally in a variety +// of different ways. Header values can have line continuations or even +// comments. Header names are case-insensitive and sometimes have shorthand +// notation. Custom headers may be specified. Via and address headers can be +// repeated, or contain repeating values. URIs can be specified with or without +// address angle brackets. URI parameters can belong to either the URI or the +// address. Values can be escaped. String literals can be quoted. Oh the +// humanity. See the torture messages in msg_test.go for examples. +// +// See: http://www.colm.net/files/ragel/ragel-guide-6.9.pdf +// See: http://zedshaw.com/archive/ragel-state-charts/ package sip @@ -41,8 +64,13 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { var hex byte var value *string var addr **Addr + var via *Via %%{ + action hold { + fhold; + } + action break { fbreak; } @@ -113,31 +141,61 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { msg.Phrase = string(buf[0:amt]) } + action NewVia { + via = new(Via) + } + + action Via { + *viap = via + viap = &via.Next + via = nil + } + + action ViaProtocol { + via.Protocol = string(data[mark:p]) + } + + action ViaVersion { + via.Version = string(data[mark:p]) + } + + action ViaTransport { + via.Transport = string(data[mark:p]) + } + + action ViaHost { + via.Host = string(data[mark:p]) + } + + action ViaPort { + via.Port = via.Port * 10 + (uint16(fc) - 0x30) + } + + action ViaParam { + if via.Params == nil { + via.Params = Params{} + } + via.Params[name] = string(buf[0:amt]) + } + action goto_header { fgoto header; } action goto_value { - fhold; fgoto value; } - action goto_xheader { - fhold; - fgoto xheader; - } - - # Shorthand notation. action gxh { fhold; fgoto xheader; } - action store_name { + action name { name = string(data[mark:p]) } - action store_value {{ + action value {{ b := data[mark:p - 1] if value != nil { *value = string(b) @@ -204,12 +262,6 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { msg.MinExpires = msg.MinExpires * 10 + (int(fc) - 0x30) } - action Via { - *viap, err = ParseVia(string(data[mark:p])) - if err != nil { return nil, err } - for *viap != nil { viap = &(*viap).Next } - } - action lookAheadWSP { lookAheadWSP(data, p, pe) } # https://tools.ietf.org/html/rfc2234 @@ -217,11 +269,15 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { HTAB = "\t"; CR = "\r"; LF = "\n" @line; + DQUOTE = "\""; CRLF = CR LF; WSP = SP | HTAB; LWS = ( WSP* ( CR when lookAheadWSP ) LF )? WSP+; SWS = LWS?; + LWSCRLF_append = ( CR when lookAheadWSP ) @append LF @append; + LWS_append = ( WSP* @append LWSCRLF_append )? WSP+ @append; + UTF8_CONT = 0x80..0xBF @append; UTF8_NONASCII = 0xC0..0xDF @append UTF8_CONT {1} | 0xE0..0xEF @append UTF8_CONT {2} @@ -265,11 +321,10 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { HCOLON = WSP* ":" SWS; LDQUOT = SWS "\""; RDQUOT = "\"" SWS; - ctext = 0x21..0x27 | 0x2A..0x5B | 0x5D..0x7E | UTF8_NONASCII | LWS; - quoted_pair = "\\" ( 0x00..0x09 | 0x0B..0x0C | 0x0E..0x7F ) @append; - comment = LPAREN ( ctext | quoted_pair )* <: RPAREN; # TODO(jart): Nested parens. - qdtext = UTF8_NONASCII | LWS @append | ( 0x21 | 0x23..0x5B | 0x5D..0x7E ) @append; escaped = "%" ( xdigit @hexHi ) ( xdigit @hexLo ) ; + ipv4 = digit | "." ; + ipv6 = xdigit | "." | ":" ; + hostname = alpha | digit | "-" | "." ; uric = reserved | unreserved | "%" | "[" | "]"; uric_no_slash = unreserved | escaped | ";" | "?" | ":" | "@" | "&" | "=" | "+" | "$" | "," ; @@ -287,7 +342,41 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { ReasonPhrase = reasonmc+ >start %ReasonPhrase; hval = ( mUTF8 | LWS )* >mark; - # Address Headers + # Quoted strings can have just about anything, including backslash escapes, + # which aren't quite as fancy as the ones you'd see in programming. + qdtextc = 0x21 | 0x23..0x5B | 0x5D..0x7E; + qdtext = UTF8_NONASCII | LWS_append | qdtextc @append; + quoted_pair = "\\" ( 0x00..0x09 | 0x0B..0x0C | 0x0E..0x7F ) @append; + quoted_content = ( qdtext | quoted_pair )* >start; + quoted_string = SWS DQUOTE quoted_content DQUOTE; + + # Via Parsing + # + # This header is defined in a relatively deterministic manner by the SIP + # RFC and as such can be defined rather eloquently in Ragel. + ViaProtocol = token >mark %ViaProtocol; + ViaVersion = token >mark %ViaVersion; + ViaTransport = token >mark %ViaTransport; + ViaSent = ViaProtocol SLASH ViaVersion SLASH ViaTransport; + ViaHostIPv4 = ( digit | "." )+ >mark %ViaHost; + ViaHostIPv6 = "[" ( xdigit | "." | ":" )+ >mark %ViaHost "]"; + ViaHostName = ( alnum | "." | "-" )+ >mark %ViaHost; + ViaHost = ViaHostIPv4 | ViaHostIPv6 | ViaHostName; + ViaPort = digit {1,5} @ViaPort; + ViaParamName = token >mark %name; + ViaParamContent = tokenhost >start @append; + ViaParamValue = ViaParamContent | quoted_string; + ViaParamEntry = ViaParamName ( EQUAL ViaParamValue )?; + ViaParam = ViaParamEntry %ViaParam; + ViaSentBy = ViaHost ( COLON ViaPort )?; + ViaEntry = ViaSent LWS ViaSentBy ( SEMI ViaParam )* <: any @hold; + Via = ViaEntry >NewVia %Via; + Vias = Via ( COMMA Via )* <: any @hold; + + # Address Header Name Definitions + # + # These headers set the addr pointer to tell the 'value' machine where to + # store the value after using ParseAddrBytes(). aname = ("Contact"i | "m"i) %{addr=&msg.Contact} | ("From"i | "f"i) %{addr=&msg.From} | "P-Asserted-Identity"i %{addr=&msg.PAssertedIdentity} @@ -297,7 +386,10 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { | ("To"i | "t"i) %{addr=&msg.To} ; - # String Headers + # String Header Name Definitions + # + # These headers set the value pointer to tell the 'value' machine where to + # store the resulting token string. sname = "Accept"i %{value=&msg.Accept} | ("Accept-Contact"i | "a"i) %{value=&msg.AcceptContact} | "Accept-Encoding"i %{value=&msg.AcceptEncoding} @@ -336,25 +428,64 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) { | "WWW-Authenticate"i %{value=&msg.WWWAuthenticate} ; - # Custom Headers - cheader = ("Call-ID"i | "i"i) @!gxh HCOLON cid >mark %CallID - | ("Content-Length"i | "l"i) @!gxh HCOLON digit+ >{clen=0} @ContentLength - | ("Content-Type"i | "c"i) @!gxh HCOLON <: hval %ContentType - | "CSeq"i @!gxh HCOLON (digit+ @CSeq) LWS token >mark %CSeqMethod - | ("Expires"i | "l"i) @!gxh HCOLON digit+ >{msg.Expires=0} @Expires - | ("Max-Forwards"i | "l"i) @!gxh HCOLON digit+ >{msg.MaxForwards=0} @MaxForwards - | ("Min-Expires"i | "l"i) @!gxh HCOLON digit+ >{msg.MinExpires=0} @MinExpires - | ("Via"i | "v"i) @!gxh HCOLON <: hval %Via + # Custom Header Definitions + # + # These headers do not jump to the 'value' machine, but instead specify + # their own special type of parsing. + cheader = ("Call-ID"i | "i"i) $!gxh HCOLON cid >mark %CallID + | ("Content-Length"i | "l"i) $!gxh HCOLON digit+ >{clen=0} @ContentLength + | ("Content-Type"i | "c"i) $!gxh HCOLON <: hval %ContentType + | "CSeq"i $!gxh HCOLON (digit+ @CSeq) LWS token >mark %CSeqMethod + | ("Expires"i | "l"i) $!gxh HCOLON digit+ >{msg.Expires=0} @Expires + | ("Max-Forwards"i | "l"i) $!gxh HCOLON digit+ >{msg.MaxForwards=0} @MaxForwards + | ("Min-Expires"i | "l"i) $!gxh HCOLON digit+ >{msg.MinExpires=0} @MinExpires + | ("Via"i | "v"i) $!gxh HCOLON Vias ; - value := hval <: CRLF @store_value @goto_header; - xheader := token >mark %store_name HCOLON <: any @{value=nil;addr=nil} @goto_value; + # Header Parsing + # + # The header machine parses a single header and then jumps to itself to + # loop. When the final CRLF is observed, we then break out of the Ragel + # parser and let the Go code handle payload extraction. + # + # Parsing standard header names is a prefix trie search in generated code. + # Lookahead to set the mark on the header name. In order to support + # extended headers, we'll use $!gxh to jump to the xheader machine when an + # unrecognized character is detected in the header name. + # + # An independent machine has been created for generic header values, so + # that it doesn't need to be duplicated for each leaf in the prefix + # trie. When the value machine has finished reading a value, it'll be + # parsed and stored based on whether the value/addr pointers are set. + # + # Header values can span multiple lines. Lookahead is used in the LWS + # definition to check for whitespace at the start of the next line upon + # encountering a line feed character, in order to determine if a line + # continuation is present. + # + # In order to concatenate across machines, we use lookahead in conjunction + # with the left-guarded concatenation operator. This pattern works is + # defined as follows: `foo <: any @hold @goto_bar`. + # + # Header names are case insensitive. Each recognized header is assigned to + # a specific field in the Msg data structure. Extended headers are stored + # to a linked list data structure with the casing preserved. This is so + # messages can be reproduced with roughly the same appearance. It is the + # responsibility of the person using Msg.Headers to do case-insensitive + # string comparisons. + value := hval <: CRLF @value @goto_header; + xheader := token %name HCOLON <: any @{value=nil;addr=nil} @hold @goto_value; + sheader = cheader <: CRLF @goto_header + | aname $!gxh HCOLON <: any @{value=nil} @hold @goto_value + | sname $!gxh HCOLON <: any @{addr=nil} @hold @goto_value; header := CRLF @break - | cheader <: CRLF @goto_header - | aname >mark @err(goto_xheader) HCOLON <: any @{value=nil} @goto_value - | sname >mark @err(goto_xheader) HCOLON <: any @{addr=nil} @goto_value - ; + | tokenc @mark @hold sheader; + # Start Line Parsing + # + # The Request and Response definitions are very straightforward, and the + # main machine is the union of the two. Once the line feed character has + # been observed, we then jump to the header machine. SIPVersion = "SIP/" SIPVersionNo; Request = Method SP RequestURI SP SIPVersion CRLF @goto_header; Response = SIPVersion SP StatusCode SP ReasonPhrase CRLF @goto_header; diff --git a/sip/msg_test.go b/sip/msg_test.go index e8d8a5e..8ecf14c 100755 --- a/sip/msg_test.go +++ b/sip/msg_test.go @@ -101,6 +101,71 @@ var msgTests = []msgTest{ }, }, + msgTest{ + name: "Line Continuation Warning Followed By Extended Header", + s: "SIP/2.0 200 OK\r\n" + + "Warning: Morning and evening\r\n" + + " Maids heard the goblins cry:\r\n" + + " “Come buy our orchard fruits,\r\n" + + " Come buy, come buy:\r\n" + + " Apples and quinces,\r\n" + + " Lemons and oranges\r\n" + + "X-LOL: omfg\r\n" + + "\r\n", + msg: sip.Msg{ + VersionMajor: 2, + Status: 200, + Phrase: "OK", + Warning: "Morning and evening\r\n" + + " Maids heard the goblins cry:\r\n" + + " “Come buy our orchard fruits,\r\n" + + " Come buy, come buy:\r\n" + + " Apples and quinces,\r\n" + + " Lemons and oranges", + Headers: sip.Headers{ + "X-LOL": "omfg", + }, + }, + }, + + msgTest{ + name: "Line Continuation Extended Followed By Extended", + s: "SIP/2.0 200 OK\r\n" + + "X-Warning: Come buy our orchard fruits,\r\n" + + " Come buy, come buy\r\n" + + "X-LOL: omfg\r\n" + + "\r\n", + msg: sip.Msg{ + VersionMajor: 2, + Status: 200, + Phrase: "OK", + Headers: sip.Headers{ + "X-Warning": "Come buy our orchard fruits,\r\n" + + " Come buy, come buy", + "X-LOL": "omfg", + }, + }, + }, + + msgTest{ + name: "Line Continuation Extended Followed By Extended 2", + s: "SIP/2.0 200 OK\r\n" + + "NewFangledHeader: newfangled value\r\n" + + " continued newfangled value\r\n" + + "UnknownHeaderWithUnusualValue: ;;,,;;,;\r\n" + + "\r\n", + msg: sip.Msg{ + VersionMajor: 2, + Status: 200, + Phrase: "OK", + Headers: sip.Headers{ + "NewFangledHeader": "newfangled value\r\n" + + " continued newfangled value", + "UnknownHeaderWithUnusualValue": ";;,,;;,;", + }, + }, + }, + msgTest{ name: "Line Continuations Addr", s: "SIP/2.0 200 OK\r\n" + @@ -127,6 +192,29 @@ var msgTests = []msgTest{ }, }, + msgTest{ + name: "Extended header looks like standard headers", + s: "SIP/2.0 200 OK\r\n" + + "Proxy-LOL: take\r\n" + + "CSeq2: back\r\n" + + "Contazt: the\r\n" + + "P-Asserted-LOL: dance\r\n" + + "viaz: floor\r\n" + + "\r\n", + msg: sip.Msg{ + VersionMajor: 2, + Status: 200, + Phrase: "OK", + Headers: sip.Headers{ + "Proxy-LOL": "take", + "CSeq2": "back", + "Contazt": "the", + "P-Asserted-LOL": "dance", + "viaz": "floor", + }, + }, + }, + msgTest{ name: "Address Unquoted Display", s: "SIP/2.0 200 OK\r\n" + @@ -296,6 +384,190 @@ var msgTests = []msgTest{ }, }, + // // TODO(jart): Implement me. + // msgTest{ + // name: "Content Type Params", + // s: "SIP/2.0 200 OK\r\n" + + // "Content-Type: multipart/signed;\r\n" + + // " protocol=\"application/pkcs7-signature\";\r\n" + + // " micalg=sha1; boundary=boundary42\r\n" + + // "\r\n", + // msg: sip.Msg{ + // VersionMajor: 2, + // Status: 200, + // Phrase: "OK", + // Expires: 666, + // }, + // }, + + msgTest{ + name: "Via Line Continuation", + s: "SIP/2.0 200 OK\r\n" + + "Via: SIP/2.0/UDP 10.11.34.37,\r\n" + + " SIP/2.0/UDP 10.11.34.38\r\n" + + "Warning: Maids heard the goblins cry\r\n" + + "\r\n", + msg: sip.Msg{ + VersionMajor: 2, + Status: 200, + Phrase: "OK", + Warning: "Maids heard the goblins cry", + Via: &sip.Via{ + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "10.11.34.37", + Next: &sip.Via{ + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "10.11.34.38", + }, + }, + }, + }, + + msgTest{ + name: "Via Multiple Lines", + s: "SIP/2.0 200 OK\r\n" + + "Via: SIP/2.0/UDP 10.11.34.37\r\n" + + "Via: SIP/2.0/UDP 10.11.34.38\r\n" + + "\r\n", + msg: sip.Msg{ + VersionMajor: 2, + Status: 200, + Phrase: "OK", + Via: &sip.Via{ + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "10.11.34.37", + Next: &sip.Via{ + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "10.11.34.38", + }, + }, + }, + }, + + msgTest{ + name: "Via Multiple Lines Continuation", + s: "SIP/2.0 200 OK\r\n" + + "Via: SIP/2.0/UDP 10.11.34.37\r\n" + + "v: SIP/2.0/UDP 10.11.34.38, SIP/2.0/UDP 10.11.34.39\r\n" + + "m: \r\n" + + "\r\n", + msg: sip.Msg{ + VersionMajor: 2, + Status: 200, + Phrase: "OK", + Via: &sip.Via{ + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "10.11.34.37", + Next: &sip.Via{ + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "10.11.34.38", + Next: &sip.Via{ + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "10.11.34.39", + }, + }, + }, + Contact: &sip.Addr{ + Uri: &sip.URI{ + Scheme: "sip", + Host: "love.com", + }, + }, + }, + }, + + msgTest{ + name: "Via Param", + s: "SIP/2.0 200 OK\r\n" + + "Via: SIP/ 2.0/TCP spindle.example.com ;branch=z9hG4bK9ikj8\r\n" + + "\r\n", + msg: sip.Msg{ + VersionMajor: 2, + Status: 200, + Phrase: "OK", + Via: &sip.Via{ + Protocol: "SIP", + Version: "2.0", + Transport: "TCP", + Host: "spindle.example.com", + Params: sip.Params{"branch": "z9hG4bK9ikj8"}, + }, + }, + }, + + msgTest{ + name: "Via Param Torture", + s: "SIP/2.0 200 OK\r\n" + + "v: SIP / 2.0 / TCP spindle.example.com ;\r\n" + + " branch = z9hG4bK9ikj8\r\n" + + "\r\n", + msg: sip.Msg{ + VersionMajor: 2, + Status: 200, + Phrase: "OK", + Via: &sip.Via{ + Protocol: "SIP", + Version: "2.0", + Transport: "TCP", + Host: "spindle.example.com", + Params: sip.Params{"branch": "z9hG4bK9ikj8"}, + }, + }, + }, + + msgTest{ + name: "Via Torture", + s: "SIP/2.0 200 OK\r\n" + + "Via : SIP / 2.0\r\n" + + " /UDP\r\n" + + " 192.0.2.2;branch=390skdjuw\r\n" + + "v: SIP / 2.0 / TCP spindle.example.com ;\r\n" + + " branch = z9hG4bK9ikj8 ,\r\n" + + " SIP / 2.0 / UDP 192.168.255.111 ; branch=\r\n" + + " z9hG4bK30239\r\n" + + "\r\n", + msg: sip.Msg{ + VersionMajor: 2, + Status: 200, + Phrase: "OK", + Via: &sip.Via{ + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "192.0.2.2", + Params: sip.Params{"branch": "390skdjuw"}, + Next: &sip.Via{ + Protocol: "SIP", + Version: "2.0", + Transport: "TCP", + Host: "spindle.example.com", + Params: sip.Params{"branch": "z9hG4bK9ikj8"}, + Next: &sip.Via{ + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "192.168.255.111", + Params: sip.Params{"branch": "z9hG4bK30239"}, + }, + }, + }, + }, + }, + msgTest{ name: "OPTIONS", s: "OPTIONS sip:10.11.34.37:42367 SIP/2.0\r\n" + @@ -323,11 +595,12 @@ var msgTests = []msgTest{ Port: 42367, }, Via: &sip.Via{ - Version: "2.0", - Proto: "UDP", - Host: "10.11.34.37", - Port: 42367, - Params: sip.Params{"rport": "", "branch": "9dc39c3c3e84"}, + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "10.11.34.37", + Port: 42367, + Params: sip.Params{"rport": "", "branch": "9dc39c3c3e84"}, }, To: &sip.Addr{ Uri: &sip.URI{ @@ -394,10 +667,11 @@ var msgTests = []msgTest{ Allow: "INVITE, ACK, CANCEL, OPTIONS, BYE, REFER, SUBSCRIBE, NOTIFY, INFO, PUBLISH", Supported: "replaces, timer", Via: &sip.Via{ - Version: "2.0", - Proto: "UDP", - Host: "127.0.0.1", - Port: 52711, + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "127.0.0.1", + Port: 52711, Params: sip.Params{ "branch": "z9hG4bK-03d1d81e94a0", "received": "127.0.0.1", @@ -478,11 +752,12 @@ var msgTests = []msgTest{ CSeq: 31109, CSeqMethod: "INVITE", Via: &sip.Via{ - Version: "2.0", - Proto: "UDP", - Host: "1.2.3.4", - Port: 55345, - Params: sip.Params{"branch": "z9hG4bK-d1d81e94a099"}, + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "1.2.3.4", + Port: 55345, + Params: sip.Params{"branch": "z9hG4bK-d1d81e94a099"}, }, From: &sip.Addr{ Uri: &sip.URI{ @@ -581,11 +856,12 @@ var msgTests = []msgTest{ Host: "10.11.34.37", }, Via: &sip.Via{ - Version: "2.0", - Proto: "UDP", - Host: "10.11.34.37", - Port: 59516, - Params: sip.Params{"rport": "", "branch": "z9hG4bKS308QB9UUpNyD"}, + Protocol: "SIP", + Version: "2.0", + Transport: "UDP", + Host: "10.11.34.37", + Port: 59516, + Params: sip.Params{"rport": "", "branch": "z9hG4bKS308QB9UUpNyD"}, }, To: &sip.Addr{ Uri: &sip.URI{ @@ -635,6 +911,140 @@ var msgTests = []msgTest{ }, }, }, + + // msgTest{ + // name: "RFC4475 Torture Message #1", + // s: "INVITE sip:vivekg@chair-dnrc.example.com;unknownparam SIP/2.0\r\n" + + // "TO :\r\n" + + // " sip:vivekg@chair-dnrc.example.com ; tag = 1918181833n\r\n" + + // "from : \"J Rosenberg \\\\\\\"\" \r\n" + + // " ;\r\n" + + // " tag = 98asjd8\r\n" + + // "MaX-fOrWaRdS: 0068\r\n" + + // "Call-ID: wsinv.ndaksdj@192.0.2.1\r\n" + + // "Content-Length : 150\r\n" + + // "cseq: 0009\r\n" + + // " INVITE\r\n" + + // "Via : SIP / 2.0\r\n" + + // " /UDP\r\n" + + // " 192.0.2.2;branch=390skdjuw\r\n" + + // "s :\r\n" + + // "NewFangledHeader: newfangled value\r\n" + + // " continued newfangled value\r\n" + + // "UnknownHeaderWithUnusualValue: ;;,,;;,;\r\n" + + // "Content-Type: application/sdp-JART\r\n" + + // "Route:\r\n" + + // " \r\n" + + // "v: SIP / 2.0 / TCP spindle.example.com ;\r\n" + + // " branch = z9hG4bK9ikj8 ,\r\n" + + // " SIP / 2.0 / UDP 192.168.255.111 ; branch=\r\n" + + // " z9hG4bK30239\r\n" + + // "m:\"Quoted string \\\"\\\"\" ; newparam =\r\n" + + // " newvalue ;\r\n" + + // " secondparam ; q = 0.33\r\n" + + // "\r\n" + + // "v=0\r\n" + + // "o=mhandley 29739 7272939 IN IP4 192.0.2.3\r\n" + + // "s=-\r\n" + + // "c=IN IP4 192.0.2.4\r\n" + + // "t=0 0\r\n" + + // "m=audio 49217 RTP/AVP 0 12\r\n" + + // "m=video 3227 RTP/AVP 31\r\n" + + // "a=rtpmap:31 LPC\r\n", + // msg: sip.Msg{ + // Method: "INVITE", + // VersionMajor: 2, + // Request: &sip.URI{ + // Scheme: "sip", + // User: "vivekg", + // Host: "chair-dnrc.example.com", + // Params: sip.Params{"unknownparam": ""}, + // }, + // To: &sip.Addr{ + // Uri: &sip.URI{ + // Scheme: "sip", + // User: "vivekg", + // Host: "chair-dnrc.example.com", + // }, + // Params: sip.Params{"tag": "1918181833n"}, + // }, + // From: &sip.Addr{ + // Display: "J Rosenberg \\\"", + // Uri: &sip.URI{ + // Scheme: "sip", + // User: "vivekg", + // Host: "chair-dnrc.example.com", + // Params: sip.Params{"tag": "98asjd8"}, + // }, + // }, + // MaxForwards: 68, + // CallID: "wsinv.ndaksdj@192.0.2.1", + // CSeq: 9, + // CSeqMethod: "INVITE", + // Via: &sip.Via{ + // Protocol: "SIP", + // Version: "2.0", + // Transport: "UDP", + // Host: "192.0.2.2", + // Params: sip.Params{"branch": "390skdjuw"}, + // Next: &sip.Via{ + // Protocol: "SIP", + // Version: "2.0", + // Transport: "TCP", + // Host: "spindle.example.com", + // Params: sip.Params{"branch": "z9hG4bK9ikj8"}, + // Next: &sip.Via{ + // Protocol: "SIP", + // Version: "2.0", + // Transport: "UDP", + // Host: "192.168.255.111", + // Params: sip.Params{"branch": "z9hG4bK30239"}, + // }, + // }, + // }, + // Subject: "", + // Headers: sip.Headers{ + // "NewFangledHeader": "newfangled value\r\n" + + // " continued newfangled value", + // "UnknownHeaderWithUnusualValue": ";;,,;;,;", + // }, + // Route: &sip.Addr{ + // Uri: &sip.URI{ + // Scheme: "sip", + // Host: "services.example.com", + // Params: sip.Params{ + // "lr": "", + // "unknownwith": "value", + // "unknown-no-value": "", + // }, + // }, + // }, + // Contact: &sip.Addr{ + // Display: "Quoted string \"\"", + // Uri: &sip.URI{ + // Scheme: "sip", + // User: "jdrosen", + // Host: "example.com", + // }, + // Params: sip.Params{ + // "newparam": "newvalue", + // "secondparam": "", + // "q": "0.33", + // }, + // }, + // Payload: &sip.MiscPayload{ + // T: "application/sdp-JART", + // D: []byte("v=0\r\n" + + // "o=mhandley 29739 7272939 IN IP4 192.0.2.3\r\n" + + // "s=-\r\n" + + // "c=IN IP4 192.0.2.4\r\n" + + // "t=0 0\r\n" + + // "m=audio 49217 RTP/AVP 0 12\r\n" + + // "m=video 3227 RTP/AVP 31\r\n" + + // "a=rtpmap:31 LPC\r\n"), + // }, + // }, + // }, } func TestParseMsg(t *testing.T) { @@ -658,6 +1068,9 @@ 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)