/* #line 133 "./ragel/tsip_parser_header_Record_Route.rl" */ public static List<TSIP_HeaderRecordRoute> Parse(String data) { int cs = 0; int p = 0; int pe = data.Length; int eof = pe; List<TSIP_HeaderRecordRoute> hdr_record_routes = new List<TSIP_HeaderRecordRoute>(); TSIP_HeaderRecordRoute curr_route = null; int tag_start = 0; /* #line 336 "../Headers/TSIP_HeaderRecordRoute.cs" */ { cs = tsip_machine_parser_header_Record_Route_start; } /* #line 147 "./ragel/tsip_parser_header_Record_Route.rl" */ /* #line 343 "../Headers/TSIP_HeaderRecordRoute.cs" */ { sbyte _klen; short _trans; sbyte _acts; sbyte _nacts; short _keys; if ( p == pe ) goto _test_eof; if ( cs == 0 ) goto _out; _resume: _keys = _tsip_machine_parser_header_Record_Route_key_offsets[cs]; _trans = (short)_tsip_machine_parser_header_Record_Route_index_offsets[cs]; _klen = _tsip_machine_parser_header_Record_Route_single_lengths[cs]; if ( _klen > 0 ) { short _lower = _keys; short _mid; short _upper = (short) (_keys + _klen - 1); while (true) { if ( _upper < _lower ) break; _mid = (short) (_lower + ((_upper-_lower) >> 1)); if ( data[p] < _tsip_machine_parser_header_Record_Route_trans_keys[_mid] ) _upper = (short) (_mid - 1); else if ( data[p] > _tsip_machine_parser_header_Record_Route_trans_keys[_mid] ) _lower = (short) (_mid + 1); else { _trans += (short) (_mid - _keys); goto _match; } } _keys += (short) _klen; _trans += (short) _klen; } _klen = _tsip_machine_parser_header_Record_Route_range_lengths[cs]; if ( _klen > 0 ) { short _lower = _keys; short _mid; short _upper = (short) (_keys + (_klen<<1) - 2); while (true) { if ( _upper < _lower ) break; _mid = (short) (_lower + (((_upper-_lower) >> 1) & ~1)); if ( data[p] < _tsip_machine_parser_header_Record_Route_trans_keys[_mid] ) _upper = (short) (_mid - 2); else if ( data[p] > _tsip_machine_parser_header_Record_Route_trans_keys[_mid+1] ) _lower = (short) (_mid + 2); else { _trans += (short)((_mid - _keys)>>1); goto _match; } } _trans += (short) _klen; } _match: _trans = (short)_tsip_machine_parser_header_Record_Route_indicies[_trans]; cs = _tsip_machine_parser_header_Record_Route_trans_targs[_trans]; if ( _tsip_machine_parser_header_Record_Route_trans_actions[_trans] == 0 ) goto _again; _acts = _tsip_machine_parser_header_Record_Route_trans_actions[_trans]; _nacts = _tsip_machine_parser_header_Record_Route_actions[_acts++]; while ( _nacts-- > 0 ) { switch ( _tsip_machine_parser_header_Record_Route_actions[_acts++] ) { case 0: /* #line 32 "./ragel/tsip_parser_header_Record_Route.rl" */ { tag_start = p; } break; case 1: /* #line 36 "./ragel/tsip_parser_header_Record_Route.rl" */ { if(curr_route == null){ curr_route = new TSIP_HeaderRecordRoute(); } } break; case 2: /* #line 42 "./ragel/tsip_parser_header_Record_Route.rl" */ { if(curr_route != null){ curr_route.DisplayName = TSK_RagelState.Parser.GetString(data, p, tag_start); curr_route.DisplayName = TSK_String.UnQuote(curr_route.DisplayName); } } break; case 3: /* #line 49 "./ragel/tsip_parser_header_Record_Route.rl" */ { if(curr_route != null && curr_route.Uri == null){ int len = (int)(p - tag_start); if ((curr_route.Uri = TSIP_ParserUri.Parse(data.Substring(tag_start, len))) != null && !String.IsNullOrEmpty(curr_route.DisplayName)) { curr_route.Uri.DisplayName = curr_route.DisplayName; } } } break; case 4: /* #line 59 "./ragel/tsip_parser_header_Record_Route.rl" */ { if(curr_route != null){ curr_route.Params = TSK_RagelState.Parser.AddParam(data, p, tag_start, curr_route.Params); } } break; case 5: /* #line 65 "./ragel/tsip_parser_header_Record_Route.rl" */ { if(curr_route != null){ hdr_record_routes.Add(curr_route); curr_route = null; } } break; case 6: /* #line 72 "./ragel/tsip_parser_header_Record_Route.rl" */ { } break; /* #line 474 "../Headers/TSIP_HeaderRecordRoute.cs" */ default: break; } } _again: if ( cs == 0 ) goto _out; if ( ++p != pe ) goto _resume; _test_eof: {} _out: {} } /* #line 148 "./ragel/tsip_parser_header_Record_Route.rl" */ if( cs < /* #line 491 "../Headers/TSIP_HeaderRecordRoute.cs" */ 99 /* #line 149 "./ragel/tsip_parser_header_Record_Route.rl" */ ){ TSK_Debug.Error("Failed to parse SIP 'Record-Route' header."); hdr_record_routes.Clear(); hdr_record_routes = null; curr_route.Dispose(); curr_route = null; } return hdr_record_routes; }
/* #line 133 "./ragel/tsip_parser_header_Record_Route.rl" */ public static List <TSIP_HeaderRecordRoute> Parse(String data) { int cs = 0; int p = 0; int pe = data.Length; int eof = pe; List <TSIP_HeaderRecordRoute> hdr_record_routes = new List <TSIP_HeaderRecordRoute>(); TSIP_HeaderRecordRoute curr_route = null; int tag_start = 0; /* #line 336 "../Headers/TSIP_HeaderRecordRoute.cs" */ { cs = tsip_machine_parser_header_Record_Route_start; } /* #line 147 "./ragel/tsip_parser_header_Record_Route.rl" */ /* #line 343 "../Headers/TSIP_HeaderRecordRoute.cs" */ { sbyte _klen; short _trans; sbyte _acts; sbyte _nacts; short _keys; if (p == pe) { goto _test_eof; } if (cs == 0) { goto _out; } _resume: _keys = _tsip_machine_parser_header_Record_Route_key_offsets[cs]; _trans = (short)_tsip_machine_parser_header_Record_Route_index_offsets[cs]; _klen = _tsip_machine_parser_header_Record_Route_single_lengths[cs]; if (_klen > 0) { short _lower = _keys; short _mid; short _upper = (short)(_keys + _klen - 1); while (true) { if (_upper < _lower) { break; } _mid = (short)(_lower + ((_upper - _lower) >> 1)); if (data[p] < _tsip_machine_parser_header_Record_Route_trans_keys[_mid]) { _upper = (short)(_mid - 1); } else if (data[p] > _tsip_machine_parser_header_Record_Route_trans_keys[_mid]) { _lower = (short)(_mid + 1); } else { _trans += (short)(_mid - _keys); goto _match; } } _keys += (short)_klen; _trans += (short)_klen; } _klen = _tsip_machine_parser_header_Record_Route_range_lengths[cs]; if (_klen > 0) { short _lower = _keys; short _mid; short _upper = (short)(_keys + (_klen << 1) - 2); while (true) { if (_upper < _lower) { break; } _mid = (short)(_lower + (((_upper - _lower) >> 1) & ~1)); if (data[p] < _tsip_machine_parser_header_Record_Route_trans_keys[_mid]) { _upper = (short)(_mid - 2); } else if (data[p] > _tsip_machine_parser_header_Record_Route_trans_keys[_mid + 1]) { _lower = (short)(_mid + 2); } else { _trans += (short)((_mid - _keys) >> 1); goto _match; } } _trans += (short)_klen; } _match: _trans = (short)_tsip_machine_parser_header_Record_Route_indicies[_trans]; cs = _tsip_machine_parser_header_Record_Route_trans_targs[_trans]; if (_tsip_machine_parser_header_Record_Route_trans_actions[_trans] == 0) { goto _again; } _acts = _tsip_machine_parser_header_Record_Route_trans_actions[_trans]; _nacts = _tsip_machine_parser_header_Record_Route_actions[_acts++]; while (_nacts-- > 0) { switch (_tsip_machine_parser_header_Record_Route_actions[_acts++]) { case 0: /* #line 32 "./ragel/tsip_parser_header_Record_Route.rl" */ { tag_start = p; } break; case 1: /* #line 36 "./ragel/tsip_parser_header_Record_Route.rl" */ { if (curr_route == null) { curr_route = new TSIP_HeaderRecordRoute(); } } break; case 2: /* #line 42 "./ragel/tsip_parser_header_Record_Route.rl" */ { if (curr_route != null) { curr_route.DisplayName = TSK_RagelState.Parser.GetString(data, p, tag_start); curr_route.DisplayName = TSK_String.UnQuote(curr_route.DisplayName); } } break; case 3: /* #line 49 "./ragel/tsip_parser_header_Record_Route.rl" */ { if (curr_route != null && curr_route.Uri == null) { int len = (int)(p - tag_start); if ((curr_route.Uri = TSIP_ParserUri.Parse(data.Substring(tag_start, len))) != null && !String.IsNullOrEmpty(curr_route.DisplayName)) { curr_route.Uri.DisplayName = curr_route.DisplayName; } } } break; case 4: /* #line 59 "./ragel/tsip_parser_header_Record_Route.rl" */ { if (curr_route != null) { curr_route.Params = TSK_RagelState.Parser.AddParam(data, p, tag_start, curr_route.Params); } } break; case 5: /* #line 65 "./ragel/tsip_parser_header_Record_Route.rl" */ { if (curr_route != null) { hdr_record_routes.Add(curr_route); curr_route = null; } } break; case 6: /* #line 72 "./ragel/tsip_parser_header_Record_Route.rl" */ { } break; /* #line 474 "../Headers/TSIP_HeaderRecordRoute.cs" */ default: break; } } _again: if (cs == 0) { goto _out; } if (++p != pe) { goto _resume; } _test_eof : {} _out : {} } /* #line 148 "./ragel/tsip_parser_header_Record_Route.rl" */ if (cs < /* #line 491 "../Headers/TSIP_HeaderRecordRoute.cs" */ 99 /* #line 149 "./ragel/tsip_parser_header_Record_Route.rl" */ ) { TSK_Debug.Error("Failed to parse SIP 'Record-Route' header."); hdr_record_routes.Clear(); hdr_record_routes = null; curr_route.Dispose(); curr_route = null; } return(hdr_record_routes); }