Browse Source

Remove superfluous machine for Via port parsing.

pull/2/head
Justine Alexandra Roberts Tunney 11 years ago
parent
commit
ef371004f3
4 changed files with 4359 additions and 4588 deletions
  1. +129
    -140
      sip/addr_parse.go
  2. +4173
    -4438
      sip/msg_parse.go
  3. +1
    -10
      sip/msg_parse.rl
  4. +56
    -0
      sip/msg_test.go

+ 129
- 140
sip/addr_parse.go View File

@ -369,18 +369,18 @@ st_case_0:
st0:
cs = 0
goto _out
tr51:
//line addr_parse.rl:43
amt = 0
tr56:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st36
tr56:
tr51:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -673,20 +673,20 @@ tr65:
case 32:
goto st74
case 269:
goto tr121
goto tr120
case 525:
goto st42
}
switch {
case _widec > 12:
if 14 <= _widec {
goto tr121
goto tr120
}
default:
goto tr121
goto tr120
}
goto st0
tr121:
tr120:
//line addr_parse.rl:91
p--
@ -733,7 +733,7 @@ tr121:
case 32:
goto st76
}
goto tr121
goto tr120
tr57:
//line addr_parse.rl:47
@ -965,18 +965,18 @@ tr95:
goto tr79
}
goto st0
tr75:
//line addr_parse.rl:43
amt = 0
tr84:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st51
tr84:
tr75:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -1118,18 +1118,18 @@ tr77:
goto tr84
}
goto st0
tr78:
//line addr_parse.rl:43
amt = 0
tr87:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st55
tr87:
tr78:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -1146,18 +1146,18 @@ tr87:
goto tr84
}
goto st0
tr79:
//line addr_parse.rl:43
amt = 0
tr88:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st56
tr88:
tr79:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -1174,18 +1174,18 @@ tr88:
goto tr87
}
goto st0
tr80:
//line addr_parse.rl:43
amt = 0
tr89:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st57
tr89:
tr80:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -1202,18 +1202,18 @@ tr89:
goto tr88
}
goto st0
tr81:
//line addr_parse.rl:43
amt = 0
tr90:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st58
tr90:
tr81:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -1230,18 +1230,18 @@ tr90:
goto tr89
}
goto st0
tr82:
//line addr_parse.rl:43
amt = 0
tr91:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st59
tr91:
tr82:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -1258,18 +1258,18 @@ tr91:
goto tr90
}
goto st0
tr83:
//line addr_parse.rl:43
amt = 0
tr92:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st60
tr92:
tr83:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -1515,8 +1515,8 @@ tr103:
default:
goto st77
}
goto tr124
tr124:
goto tr123
tr123:
//line addr_parse.rl:65
addr.Uri, err = ParseURIBytes(data[mark:p])
@ -1609,7 +1609,7 @@ tr112:
addr.Params[name] = string(buf[0:amt])
goto st3
tr118:
tr117:
//line addr_parse.rl:70
if addr.Params == nil {
@ -1713,7 +1713,7 @@ tr113:
addr.Params[name] = string(buf[0:amt])
goto st7
tr119:
tr118:
//line addr_parse.rl:70
if addr.Params == nil {
@ -1941,17 +1941,6 @@ tr114:
}
goto st0
tr17:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st72
tr117:
//line addr_parse.rl:47
buf[amt] = data[p]
@ -1963,7 +1952,7 @@ tr117:
goto _test_eof72
}
st_case_72:
//line addr_parse.go:1967
//line addr_parse.go:1956
_widec = int16(data[p])
if 13 <= data[p] && data[p] <= 13 {
_widec = 256 + (int16(data[p]) - 0)
@ -1977,41 +1966,41 @@ tr117:
case 32:
goto tr116
case 33:
goto tr117
goto tr17
case 37:
goto tr117
goto tr17
case 39:
goto tr117
goto tr17
case 44:
goto tr118
goto tr117
case 59:
goto tr119
goto tr118
case 93:
goto tr117
goto tr17
case 126:
goto tr117
goto tr17
case 525:
goto tr120
goto tr119
}
switch {
case _widec < 48:
if 42 <= _widec && _widec <= 46 {
goto tr117
goto tr17
}
case _widec > 58:
switch {
case _widec > 91:
if 95 <= _widec && _widec <= 122 {
goto tr117
goto tr17
}
case _widec >= 65:
goto tr117
goto tr17
}
default:
goto tr117
goto tr17
}
goto st0
tr120:
tr119:
//line addr_parse.rl:70
if addr.Params == nil {
@ -2025,7 +2014,7 @@ tr120:
goto _test_eof10
}
st_case_10:
//line addr_parse.go:2029
//line addr_parse.go:2018
if data[p] == 10 {
goto st11
}
@ -2107,18 +2096,18 @@ tr120:
goto tr26
}
goto st0
tr22:
//line addr_parse.rl:43
amt = 0
tr31:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st14
tr31:
tr22:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -2130,7 +2119,7 @@ tr31:
goto _test_eof14
}
st_case_14:
//line addr_parse.go:2134
//line addr_parse.go:2123
_widec = int16(data[p])
if 13 <= data[p] && data[p] <= 13 {
_widec = 256 + (int16(data[p]) - 0)
@ -2186,7 +2175,7 @@ tr23:
goto _test_eof73
}
st_case_73:
//line addr_parse.go:2190
//line addr_parse.go:2179
_widec = int16(data[p])
if 13 <= data[p] && data[p] <= 13 {
_widec = 256 + (int16(data[p]) - 0)
@ -2200,11 +2189,11 @@ tr23:
case 32:
goto tr116
case 44:
goto tr118
goto tr117
case 59:
goto tr119
goto tr118
case 525:
goto tr120
goto tr119
}
goto st0
tr24:
@ -2218,7 +2207,7 @@ tr24:
goto _test_eof15
}
st_case_15:
//line addr_parse.go:2222
//line addr_parse.go:2211
switch {
case data[p] < 11:
if data[p] <= 9 {
@ -2232,18 +2221,18 @@ tr24:
goto tr31
}
goto st0
tr25:
//line addr_parse.rl:43
amt = 0
tr34:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st16
tr34:
tr25:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -2255,23 +2244,23 @@ tr34:
goto _test_eof16
}
st_case_16:
//line addr_parse.go:2259
//line addr_parse.go:2248
if 128 <= data[p] && data[p] <= 191 {
goto tr31
}
goto st0
tr26:
//line addr_parse.rl:43
amt = 0
tr35:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st17
tr35:
tr26:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -2283,23 +2272,23 @@ tr35:
goto _test_eof17
}
st_case_17:
//line addr_parse.go:2287
//line addr_parse.go:2276
if 128 <= data[p] && data[p] <= 191 {
goto tr34
}
goto st0
tr27:
//line addr_parse.rl:43
amt = 0
tr36:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st18
tr36:
tr27:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -2311,23 +2300,23 @@ tr36:
goto _test_eof18
}
st_case_18:
//line addr_parse.go:2315
//line addr_parse.go:2304
if 128 <= data[p] && data[p] <= 191 {
goto tr35
}
goto st0
tr28:
//line addr_parse.rl:43
amt = 0
tr37:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st19
tr37:
tr28:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -2339,23 +2328,23 @@ tr37:
goto _test_eof19
}
st_case_19:
//line addr_parse.go:2343
//line addr_parse.go:2332
if 128 <= data[p] && data[p] <= 191 {
goto tr36
}
goto st0
tr29:
//line addr_parse.rl:43
amt = 0
tr38:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st20
tr38:
tr29:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -2367,23 +2356,23 @@ tr38:
goto _test_eof20
}
st_case_20:
//line addr_parse.go:2371
//line addr_parse.go:2360
if 128 <= data[p] && data[p] <= 191 {
goto tr37
}
goto st0
tr30:
//line addr_parse.rl:43
amt = 0
tr39:
//line addr_parse.rl:47
buf[amt] = data[p]
amt++
goto st21
tr39:
tr30:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47
buf[amt] = data[p]
@ -2395,7 +2384,7 @@ tr39:
goto _test_eof21
}
st_case_21:
//line addr_parse.go:2399
//line addr_parse.go:2388
if data[p] == 10 {
goto tr40
}
@ -2412,7 +2401,7 @@ tr40:
goto _test_eof22
}
st_case_22:
//line addr_parse.go:2416
//line addr_parse.go:2405
switch data[p] {
case 9:
goto tr31
@ -2549,7 +2538,7 @@ tr115:
goto _test_eof29
}
st_case_29:
//line addr_parse.go:2553
//line addr_parse.go:2542
if data[p] == 10 {
goto st30
}
@ -2764,7 +2753,7 @@ tr115:
}
addr.Params[name] = string(buf[0:amt])
//line addr_parse.go:2768
//line addr_parse.go:2757
}
}


+ 4173
- 4438
sip/msg_parse.go
File diff suppressed because it is too large
View File


+ 1
- 10
sip/msg_parse.rl View File

@ -213,10 +213,6 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) {
fgoto via;
}
action goto_via_port {
fgoto via_port;
}
action goto_via_pname {
amt = 0 // Needed so ViaParam action works when there's no value.
fgoto via_pname;
@ -417,15 +413,10 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) {
| SEMI <: any @hold @ViaParam @goto_via_pname
| COMMA <: any @hold @ViaParam @Via @goto_via;
via_pname := ViaParamName via_pname_end;
via_port_end = ( CR when !lookAheadWSP ) LF @Via @goto_header
| SEMI <: any @hold @goto_via_pname
| COMMA <: any @hold @Via @goto_via;
via_port := ViaPort via_port_end;
via_end = ( CR when !lookAheadWSP ) LF @Via @goto_header
| COLON <: any @hold @goto_via_port
| SEMI <: any @hold @goto_via_pname
| COMMA <: any @hold @Via @goto_via;
via := ViaSent LWS ViaHost via_end;
via := ViaSent LWS ViaHost (COLON ViaPort)? via_end;
# Address Header Name Definitions
#


+ 56
- 0
sip/msg_test.go View File

@ -400,6 +400,62 @@ var msgTests = []msgTest{
// },
// },
msgTest{
name: "Via Host Only",
s: "SIP/2.0 200 OK\r\n" +
"Via: SIP/2.0/UDP 8.8.4.4\r\n" +
"\r\n",
msg: sip.Msg{
VersionMajor: 2,
Status: 200,
Phrase: "OK",
Via: &sip.Via{
Protocol: "SIP",
Version: "2.0",
Transport: "UDP",
Host: "8.8.4.4",
},
},
},
msgTest{
name: "Via Port",
s: "SIP/2.0 200 OK\r\n" +
"Via: SIP/2.0/UDP 8.8.4.4:666\r\n" +
"\r\n",
msg: sip.Msg{
VersionMajor: 2,
Status: 200,
Phrase: "OK",
Via: &sip.Via{
Protocol: "SIP",
Version: "2.0",
Transport: "UDP",
Host: "8.8.4.4",
Port: 666,
},
},
},
msgTest{
name: "Via Port Spacing",
s: "SIP/2.0 200 OK\r\n" +
"Via: SIP/2.0/UDP 8.8.4.4 \t : \t 666\r\n" +
"\r\n",
msg: sip.Msg{
VersionMajor: 2,
Status: 200,
Phrase: "OK",
Via: &sip.Via{
Protocol: "SIP",
Version: "2.0",
Transport: "UDP",
Host: "8.8.4.4",
Port: 666,
},
},
},
msgTest{
name: "Via Line Continuation",
s: "SIP/2.0 200 OK\r\n" +


Loading…
Cancel
Save