module Mail::Parsers::ReceivedParser
Constants
- ReceivedStruct
Attributes
_eof_actions[RW]
_index_offsets[RW]
_indicies[RW]
_key_spans[RW]
_trans_actions[RW]
_trans_keys[RW]
_trans_targs[RW]
en_comment_tail[RW]
en_main[RW]
error[RW]
first_final[RW]
start[RW]
Public Class Methods
parse(data)
click to toggle source
# File lib/mail/parsers/received_parser.rb, line 7495 def self.parse(data) data = data.dup.force_encoding(Encoding::ASCII_8BIT) if data.respond_to?(:force_encoding) raise Mail::Field::NilParseError.new(Mail::ReceivedElement) if data.nil? # Parser state received = ReceivedStruct.new received_tokens_s = date_s = time_s = nil # 5.1 Variables Used by Ragel p = 0 eof = pe = data.length stack = [] begin p ||= 0 pe ||= data.length cs = start top = 0 end begin testEof = false _slen, _trans, _keys, _inds, _acts, _nacts = nil _goto_level = 0 _resume = 10 _eof_trans = 15 _again = 20 _test_eof = 30 _out = 40 while true if _goto_level <= 0 if p == pe _goto_level = _test_eof next end if cs == 0 _goto_level = _out next end end if _goto_level <= _resume _keys = cs << 1 _inds = _index_offsets[cs] _slen = _key_spans[cs] _wide = data[p].ord _trans = if ( _slen > 0 && _trans_keys[_keys] <= _wide && _wide <= _trans_keys[_keys + 1] ) then _indicies[ _inds + _wide - _trans_keys[_keys] ] else _indicies[ _inds + _slen ] end cs = _trans_targs[_trans] if _trans_actions[_trans] != 0 case _trans_actions[_trans] when 8 then begin received.info = chars(data, received_tokens_s, p-1) end when 54 then begin date_s = p end when 131 then begin received.time = chars(data, time_s, p-1) end when 9 then begin end when 52 then begin end when 127 then begin end when 68 then begin end when 10 then begin end when 22 then begin end when 64 then begin end when 61 then begin end when 26 then begin end when 24 then begin end when 70 then begin end when 63 then begin end when 47 then begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end when 130 then begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 3 then begin received_tokens_s = p end begin received.info = chars(data, received_tokens_s, p-1) end when 4 then begin received_tokens_s = p end begin end when 5 then begin received_tokens_s = p end begin end when 59 then begin date_s = p end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end when 57 then begin received.date = chars(data, date_s, p-1).strip end begin time_s = p end when 132 then begin received.time = chars(data, time_s, p-1) end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end when 81 then begin end begin end when 105 then begin end begin end when 120 then begin end begin end when 50 then begin end begin received.info = chars(data, received_tokens_s, p-1) end when 51 then begin end begin end when 69 then begin end begin end when 53 then begin end begin end when 66 then begin end begin end when 72 then begin end begin end when 71 then begin end begin end when 56 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end when 128 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end when 129 then begin end begin begin top -= 1 cs = stack[top] _goto_level = _again next end end when 77 then begin end begin received.info = chars(data, received_tokens_s, p-1) end when 78 then begin end begin end when 79 then begin end begin end when 67 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end when 104 then begin end begin received.info = chars(data, received_tokens_s, p-1) end when 106 then begin end begin end when 38 then begin end begin end when 15 then begin end begin end when 65 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end when 6 then begin end begin end when 60 then begin end begin end when 25 then begin end begin end when 116 then begin end begin received.info = chars(data, received_tokens_s, p-1) end when 117 then begin end begin end when 118 then begin end begin end when 73 then begin end begin end when 55 then begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin date_s = p end when 1 then begin received_tokens_s = p end begin end begin end when 21 then begin end begin end begin end when 58 then begin end begin received.date = chars(data, date_s, p-1).strip end begin time_s = p end when 86 then begin end begin end begin end when 111 then begin end begin end begin end when 125 then begin end begin end begin end when 85 then begin end begin end begin received.info = chars(data, received_tokens_s, p-1) end when 87 then begin end begin end begin end when 110 then begin end begin end begin received.info = chars(data, received_tokens_s, p-1) end when 112 then begin end begin end begin end when 45 then begin end begin end begin end when 48 then begin end begin end begin end when 124 then begin end begin end begin received.info = chars(data, received_tokens_s, p-1) end when 126 then begin end begin end begin end when 75 then begin end begin end begin end when 20 then begin end begin end begin received.info = chars(data, received_tokens_s, p-1) end when 23 then begin end begin end begin end when 101 then begin end begin end begin end when 98 then begin end begin end begin received.info = chars(data, received_tokens_s, p-1) end when 99 then begin end begin end begin end when 100 then begin end begin end begin end when 31 then begin end begin end begin end when 80 then begin end begin end begin end when 102 then begin end begin end begin end when 119 then begin end begin end begin end when 62 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end when 114 then begin end begin end begin end when 74 then begin end begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end when 7 then begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end when 2 then begin received_tokens_s = p end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end when 37 then begin end begin end begin end begin end when 94 then begin end begin end begin end begin end when 82 then begin end begin end begin end begin end when 93 then begin end begin end begin end begin received.info = chars(data, received_tokens_s, p-1) end when 95 then begin end begin end begin end begin end when 107 then begin end begin end begin end begin end when 83 then begin end begin end begin end begin end when 108 then begin end begin end begin end begin end when 122 then begin end begin end begin end begin end when 121 then begin end begin end begin end begin end when 49 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end when 88 then begin end begin end begin end begin received.info = chars(data, received_tokens_s, p-1) end when 17 then begin end begin end begin end begin end when 36 then begin end begin end begin end begin received.info = chars(data, received_tokens_s, p-1) end when 39 then begin end begin end begin end begin end when 13 then begin end begin end begin end begin received.info = chars(data, received_tokens_s, p-1) end when 14 then begin end begin end begin end begin end when 16 then begin end begin end begin end begin end when 96 then begin end begin end begin end begin end when 18 then begin end begin end begin end begin end when 76 then begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end when 103 then begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end when 115 then begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end when 44 then begin end begin end begin end begin end begin end when 90 then begin end begin end begin end begin end begin end when 43 then begin end begin end begin end begin end begin received.info = chars(data, received_tokens_s, p-1) end when 46 then begin end begin end begin end begin end begin end when 91 then begin end begin end begin end begin end begin end when 84 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end when 109 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end when 123 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end when 113 then begin end begin end begin end begin end begin received.info = chars(data, received_tokens_s, p-1) end when 33 then begin end begin end begin end begin end begin end when 11 then begin end begin end begin end begin end begin end when 29 then begin end begin end begin end begin end begin received.info = chars(data, received_tokens_s, p-1) end when 30 then begin end begin end begin end begin end begin end when 32 then begin end begin end begin end begin end begin end when 97 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end when 34 then begin end begin end begin end begin end begin end when 19 then begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end begin end when 40 then begin end begin end begin end begin end begin end begin end when 41 then begin end begin end begin end begin end begin end begin end when 92 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end begin end when 27 then begin end begin end begin end begin end begin end begin end when 89 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end begin end when 35 then begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end begin end begin end when 12 then begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end begin end begin end when 42 then begin end begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end begin end begin end when 28 then begin begin stack[top] = cs top+= 1 cs = 636 _goto_level = _again next end end begin end begin end begin end begin end begin end begin end end end end if _goto_level <= _again if cs == 0 _goto_level = _out next end p += 1 if p != pe _goto_level = _resume next end end if _goto_level <= _test_eof if p == eof case _eof_actions[cs] when 131 then begin received.time = chars(data, time_s, p-1) end when 52 then begin end end end end if _goto_level <= _out break end end end if p != eof || cs < 648 raise Mail::Field::IncompleteParseError.new(Mail::ReceivedElement, data, p) end received end