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: st0:
cs = 0 cs = 0
goto _out goto _out
tr51:
//line addr_parse.rl:43
amt = 0
tr56:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st36 goto st36
tr56:
tr51:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -673,20 +673,20 @@ tr65:
case 32: case 32:
goto st74 goto st74
case 269: case 269:
goto tr121
goto tr120
case 525: case 525:
goto st42 goto st42
} }
switch { switch {
case _widec > 12: case _widec > 12:
if 14 <= _widec { if 14 <= _widec {
goto tr121
goto tr120
} }
default: default:
goto tr121
goto tr120
} }
goto st0 goto st0
tr121:
tr120:
//line addr_parse.rl:91 //line addr_parse.rl:91
p-- p--
@ -733,7 +733,7 @@ tr121:
case 32: case 32:
goto st76 goto st76
} }
goto tr121
goto tr120
tr57: tr57:
//line addr_parse.rl:47 //line addr_parse.rl:47
@ -965,18 +965,18 @@ tr95:
goto tr79 goto tr79
} }
goto st0 goto st0
tr75:
//line addr_parse.rl:43
amt = 0
tr84:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st51 goto st51
tr84:
tr75:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -1118,18 +1118,18 @@ tr77:
goto tr84 goto tr84
} }
goto st0 goto st0
tr78:
//line addr_parse.rl:43
amt = 0
tr87:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st55 goto st55
tr87:
tr78:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -1146,18 +1146,18 @@ tr87:
goto tr84 goto tr84
} }
goto st0 goto st0
tr79:
//line addr_parse.rl:43
amt = 0
tr88:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st56 goto st56
tr88:
tr79:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -1174,18 +1174,18 @@ tr88:
goto tr87 goto tr87
} }
goto st0 goto st0
tr80:
//line addr_parse.rl:43
amt = 0
tr89:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st57 goto st57
tr89:
tr80:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -1202,18 +1202,18 @@ tr89:
goto tr88 goto tr88
} }
goto st0 goto st0
tr81:
//line addr_parse.rl:43
amt = 0
tr90:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st58 goto st58
tr90:
tr81:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -1230,18 +1230,18 @@ tr90:
goto tr89 goto tr89
} }
goto st0 goto st0
tr82:
//line addr_parse.rl:43
amt = 0
tr91:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st59 goto st59
tr91:
tr82:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -1258,18 +1258,18 @@ tr91:
goto tr90 goto tr90
} }
goto st0 goto st0
tr83:
//line addr_parse.rl:43
amt = 0
tr92:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st60 goto st60
tr92:
tr83:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -1515,8 +1515,8 @@ tr103:
default: default:
goto st77 goto st77
} }
goto tr124
tr124:
goto tr123
tr123:
//line addr_parse.rl:65 //line addr_parse.rl:65
addr.Uri, err = ParseURIBytes(data[mark:p]) addr.Uri, err = ParseURIBytes(data[mark:p])
@ -1609,7 +1609,7 @@ tr112:
addr.Params[name] = string(buf[0:amt]) addr.Params[name] = string(buf[0:amt])
goto st3 goto st3
tr118:
tr117:
//line addr_parse.rl:70 //line addr_parse.rl:70
if addr.Params == nil { if addr.Params == nil {
@ -1713,7 +1713,7 @@ tr113:
addr.Params[name] = string(buf[0:amt]) addr.Params[name] = string(buf[0:amt])
goto st7 goto st7
tr119:
tr118:
//line addr_parse.rl:70 //line addr_parse.rl:70
if addr.Params == nil { if addr.Params == nil {
@ -1941,17 +1941,6 @@ tr114:
} }
goto st0 goto st0
tr17: 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 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -1963,7 +1952,7 @@ tr117:
goto _test_eof72 goto _test_eof72
} }
st_case_72: st_case_72:
//line addr_parse.go:1967
//line addr_parse.go:1956
_widec = int16(data[p]) _widec = int16(data[p])
if 13 <= data[p] && data[p] <= 13 { if 13 <= data[p] && data[p] <= 13 {
_widec = 256 + (int16(data[p]) - 0) _widec = 256 + (int16(data[p]) - 0)
@ -1977,41 +1966,41 @@ tr117:
case 32: case 32:
goto tr116 goto tr116
case 33: case 33:
goto tr117
goto tr17
case 37: case 37:
goto tr117
goto tr17
case 39: case 39:
goto tr117
goto tr17
case 44: case 44:
goto tr118
goto tr117
case 59: case 59:
goto tr119
goto tr118
case 93: case 93:
goto tr117
goto tr17
case 126: case 126:
goto tr117
goto tr17
case 525: case 525:
goto tr120
goto tr119
} }
switch { switch {
case _widec < 48: case _widec < 48:
if 42 <= _widec && _widec <= 46 { if 42 <= _widec && _widec <= 46 {
goto tr117
goto tr17
} }
case _widec > 58: case _widec > 58:
switch { switch {
case _widec > 91: case _widec > 91:
if 95 <= _widec && _widec <= 122 { if 95 <= _widec && _widec <= 122 {
goto tr117
goto tr17
} }
case _widec >= 65: case _widec >= 65:
goto tr117
goto tr17
} }
default: default:
goto tr117
goto tr17
} }
goto st0 goto st0
tr120:
tr119:
//line addr_parse.rl:70 //line addr_parse.rl:70
if addr.Params == nil { if addr.Params == nil {
@ -2025,7 +2014,7 @@ tr120:
goto _test_eof10 goto _test_eof10
} }
st_case_10: st_case_10:
//line addr_parse.go:2029
//line addr_parse.go:2018
if data[p] == 10 { if data[p] == 10 {
goto st11 goto st11
} }
@ -2107,18 +2096,18 @@ tr120:
goto tr26 goto tr26
} }
goto st0 goto st0
tr22:
//line addr_parse.rl:43
amt = 0
tr31:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st14 goto st14
tr31:
tr22:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -2130,7 +2119,7 @@ tr31:
goto _test_eof14 goto _test_eof14
} }
st_case_14: st_case_14:
//line addr_parse.go:2134
//line addr_parse.go:2123
_widec = int16(data[p]) _widec = int16(data[p])
if 13 <= data[p] && data[p] <= 13 { if 13 <= data[p] && data[p] <= 13 {
_widec = 256 + (int16(data[p]) - 0) _widec = 256 + (int16(data[p]) - 0)
@ -2186,7 +2175,7 @@ tr23:
goto _test_eof73 goto _test_eof73
} }
st_case_73: st_case_73:
//line addr_parse.go:2190
//line addr_parse.go:2179
_widec = int16(data[p]) _widec = int16(data[p])
if 13 <= data[p] && data[p] <= 13 { if 13 <= data[p] && data[p] <= 13 {
_widec = 256 + (int16(data[p]) - 0) _widec = 256 + (int16(data[p]) - 0)
@ -2200,11 +2189,11 @@ tr23:
case 32: case 32:
goto tr116 goto tr116
case 44: case 44:
goto tr118
goto tr117
case 59: case 59:
goto tr119
goto tr118
case 525: case 525:
goto tr120
goto tr119
} }
goto st0 goto st0
tr24: tr24:
@ -2218,7 +2207,7 @@ tr24:
goto _test_eof15 goto _test_eof15
} }
st_case_15: st_case_15:
//line addr_parse.go:2222
//line addr_parse.go:2211
switch { switch {
case data[p] < 11: case data[p] < 11:
if data[p] <= 9 { if data[p] <= 9 {
@ -2232,18 +2221,18 @@ tr24:
goto tr31 goto tr31
} }
goto st0 goto st0
tr25:
//line addr_parse.rl:43
amt = 0
tr34:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st16 goto st16
tr34:
tr25:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -2255,23 +2244,23 @@ tr34:
goto _test_eof16 goto _test_eof16
} }
st_case_16: st_case_16:
//line addr_parse.go:2259
//line addr_parse.go:2248
if 128 <= data[p] && data[p] <= 191 { if 128 <= data[p] && data[p] <= 191 {
goto tr31 goto tr31
} }
goto st0 goto st0
tr26:
//line addr_parse.rl:43
amt = 0
tr35:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st17 goto st17
tr35:
tr26:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -2283,23 +2272,23 @@ tr35:
goto _test_eof17 goto _test_eof17
} }
st_case_17: st_case_17:
//line addr_parse.go:2287
//line addr_parse.go:2276
if 128 <= data[p] && data[p] <= 191 { if 128 <= data[p] && data[p] <= 191 {
goto tr34 goto tr34
} }
goto st0 goto st0
tr27:
//line addr_parse.rl:43
amt = 0
tr36:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st18 goto st18
tr36:
tr27:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -2311,23 +2300,23 @@ tr36:
goto _test_eof18 goto _test_eof18
} }
st_case_18: st_case_18:
//line addr_parse.go:2315
//line addr_parse.go:2304
if 128 <= data[p] && data[p] <= 191 { if 128 <= data[p] && data[p] <= 191 {
goto tr35 goto tr35
} }
goto st0 goto st0
tr28:
//line addr_parse.rl:43
amt = 0
tr37:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st19 goto st19
tr37:
tr28:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -2339,23 +2328,23 @@ tr37:
goto _test_eof19 goto _test_eof19
} }
st_case_19: st_case_19:
//line addr_parse.go:2343
//line addr_parse.go:2332
if 128 <= data[p] && data[p] <= 191 { if 128 <= data[p] && data[p] <= 191 {
goto tr36 goto tr36
} }
goto st0 goto st0
tr29:
//line addr_parse.rl:43
amt = 0
tr38:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st20 goto st20
tr38:
tr29:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -2367,23 +2356,23 @@ tr38:
goto _test_eof20 goto _test_eof20
} }
st_case_20: st_case_20:
//line addr_parse.go:2371
//line addr_parse.go:2360
if 128 <= data[p] && data[p] <= 191 { if 128 <= data[p] && data[p] <= 191 {
goto tr37 goto tr37
} }
goto st0 goto st0
tr30:
//line addr_parse.rl:43
amt = 0
tr39:
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
amt++ amt++
goto st21 goto st21
tr39:
tr30:
//line addr_parse.rl:43
amt = 0
//line addr_parse.rl:47 //line addr_parse.rl:47
buf[amt] = data[p] buf[amt] = data[p]
@ -2395,7 +2384,7 @@ tr39:
goto _test_eof21 goto _test_eof21
} }
st_case_21: st_case_21:
//line addr_parse.go:2399
//line addr_parse.go:2388
if data[p] == 10 { if data[p] == 10 {
goto tr40 goto tr40
} }
@ -2412,7 +2401,7 @@ tr40:
goto _test_eof22 goto _test_eof22
} }
st_case_22: st_case_22:
//line addr_parse.go:2416
//line addr_parse.go:2405
switch data[p] { switch data[p] {
case 9: case 9:
goto tr31 goto tr31
@ -2549,7 +2538,7 @@ tr115:
goto _test_eof29 goto _test_eof29
} }
st_case_29: st_case_29:
//line addr_parse.go:2553
//line addr_parse.go:2542
if data[p] == 10 { if data[p] == 10 {
goto st30 goto st30
} }
@ -2764,7 +2753,7 @@ tr115:
} }
addr.Params[name] = string(buf[0:amt]) 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; fgoto via;
} }
action goto_via_port {
fgoto via_port;
}
action goto_via_pname { action goto_via_pname {
amt = 0 // Needed so ViaParam action works when there's no value. amt = 0 // Needed so ViaParam action works when there's no value.
fgoto via_pname; fgoto via_pname;
@ -417,15 +413,10 @@ func ParseMsgBytes(data []byte) (msg *Msg, err error) {
| SEMI <: any @hold @ViaParam @goto_via_pname | SEMI <: any @hold @ViaParam @goto_via_pname
| COMMA <: any @hold @ViaParam @Via @goto_via; | COMMA <: any @hold @ViaParam @Via @goto_via;
via_pname := ViaParamName via_pname_end; 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 via_end = ( CR when !lookAheadWSP ) LF @Via @goto_header
| COLON <: any @hold @goto_via_port
| SEMI <: any @hold @goto_via_pname | SEMI <: any @hold @goto_via_pname
| COMMA <: any @hold @Via @goto_via; | COMMA <: any @hold @Via @goto_via;
via := ViaSent LWS ViaHost via_end;
via := ViaSent LWS ViaHost (COLON ViaPort)? via_end;
# Address Header Name Definitions # 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{ msgTest{
name: "Via Line Continuation", name: "Via Line Continuation",
s: "SIP/2.0 200 OK\r\n" + s: "SIP/2.0 200 OK\r\n" +


Loading…
Cancel
Save