Module: Mail::Parsers::ReceivedParser

Extended by:
Mail::ParserTools
Defined in:
lib/mail/parsers/received_parser.rb

Defined Under Namespace

Classes: ReceivedStruct

Class Attribute Summary collapse

Class Method Summary collapse

Methods included from Mail::ParserTools

chars

Class Attribute Details

._eof_actionsObject

Returns the value of attribute _eof_actions


7379
7380
7381
# File 'lib/mail/parsers/received_parser.rb', line 7379

def _eof_actions
  @_eof_actions
end

._index_offsetsObject

Returns the value of attribute _index_offsets


355
356
357
# File 'lib/mail/parsers/received_parser.rb', line 355

def _index_offsets
  @_index_offsets
end

._indiciesObject

Returns the value of attribute _indicies


444
445
446
# File 'lib/mail/parsers/received_parser.rb', line 444

def _indicies
  @_indicies
end

._key_spansObject

Returns the value of attribute _key_spans


266
267
268
# File 'lib/mail/parsers/received_parser.rb', line 266

def _key_spans
  @_key_spans
end

._trans_actionsObject

Returns the value of attribute _trans_actions


7196
7197
7198
# File 'lib/mail/parsers/received_parser.rb', line 7196

def _trans_actions
  @_trans_actions
end

._trans_keysObject

Returns the value of attribute _trans_keys


13
14
15
# File 'lib/mail/parsers/received_parser.rb', line 13

def _trans_keys
  @_trans_keys
end

._trans_targsObject

Returns the value of attribute _trans_targs


7013
7014
7015
# File 'lib/mail/parsers/received_parser.rb', line 7013

def _trans_targs
  @_trans_targs
end

.en_comment_tailObject

Returns the value of attribute en_comment_tail


7481
7482
7483
# File 'lib/mail/parsers/received_parser.rb', line 7481

def en_comment_tail
  @en_comment_tail
end

.en_mainObject

Returns the value of attribute en_main


7485
7486
7487
# File 'lib/mail/parsers/received_parser.rb', line 7485

def en_main
  @en_main
end

.errorObject

Returns the value of attribute error


7476
7477
7478
# File 'lib/mail/parsers/received_parser.rb', line 7476

def error
  @error
end

.first_finalObject

Returns the value of attribute first_final


7472
7473
7474
# File 'lib/mail/parsers/received_parser.rb', line 7472

def first_final
  @first_final
end

.startObject

Returns the value of attribute start


7468
7469
7470
# File 'lib/mail/parsers/received_parser.rb', line 7468

def start
  @start
end

Class Method Details

.parse(data) ⇒ Object


7489
7490
7491
7492
7493
7494
7495
7496
7497
7498
7499
7500
7501
7502
7503
7504
7505
7506
7507
7508
7509
7510
7511
7512
7513
7514
7515
7516
7517
7518
7519
7520
7521
7522
7523
7524
7525
7526
7527
7528
7529
7530
7531
7532
7533
7534
7535
7536
7537
7538
7539
7540
7541
7542
7543
7544
7545
7546
7547
7548
7549
7550
7551
7552
7553
7554
7555
7556
7557
7558
7559
7560
7561
7562
7563
7564
7565
7566
7567
7568
7569
7570
7571
7572
7573
7574
7575
7576
7577
7578
7579
7580
7581
7582
7583
7584
7585
7586
7587
7588
7589
7590
7591
7592
7593
7594
7595
7596
7597
7598
7599
7600
7601
7602
7603
7604
7605
7606
7607
7608
7609
7610
7611
7612
7613
7614
7615
7616
7617
7618
7619
7620
7621
7622
7623
7624
7625
7626
7627
7628
7629
7630
7631
7632
7633
7634
7635
7636
7637
7638
7639
7640
7641
7642
7643
7644
7645
7646
7647
7648
7649
7650
7651
7652
7653
7654
7655
7656
7657
7658
7659
7660
7661
7662
7663
7664
7665
7666
7667
7668
7669
7670
7671
7672
7673
7674
7675
7676
7677
7678
7679
7680
7681
7682
7683
7684
7685
7686
7687
7688
7689
7690
7691
7692
7693
7694
7695
7696
7697
7698
7699
7700
7701
7702
7703
7704
7705
7706
7707
7708
7709
7710
7711
7712
7713
7714
7715
7716
7717
7718
7719
7720
7721
7722
7723
7724
7725
7726
7727
7728
7729
7730
7731
7732
7733
7734
7735
7736
7737
7738
7739
7740
7741
7742
7743
7744
7745
7746
7747
7748
7749
7750
7751
7752
7753
7754
7755
7756
7757
7758
7759
7760
7761
7762
7763
7764
7765
7766
7767
7768
7769
7770
7771
7772
7773
7774
7775
7776
7777
7778
7779
7780
7781
7782
7783
7784
7785
7786
7787
7788
7789
7790
7791
7792
7793
7794
7795
7796
7797
7798
7799
7800
7801
7802
7803
7804
7805
7806
7807
7808
7809
7810
7811
7812
7813
7814
7815
7816
7817
7818
7819
7820
7821
7822
7823
7824
7825
7826
7827
7828
7829
7830
7831
7832
7833
7834
7835
7836
7837
7838
7839
7840
7841
7842
7843
7844
7845
7846
7847
7848
7849
7850
7851
7852
7853
7854
7855
7856
7857
7858
7859
7860
7861
7862
7863
7864
7865
7866
7867
7868
7869
7870
7871
7872
7873
7874
7875
7876
7877
7878
7879
7880
7881
7882
7883
7884
7885
7886
7887
7888
7889
7890
7891
7892
7893
7894
7895
7896
7897
7898
7899
7900
7901
7902
7903
7904
7905
7906
7907
7908
7909
7910
7911
7912
7913
7914
7915
7916
7917
7918
7919
7920
7921
7922
7923
7924
7925
7926
7927
7928
7929
7930
7931
7932
7933
7934
7935
7936
7937
7938
7939
7940
7941
7942
7943
7944
7945
7946
7947
7948
7949
7950
7951
7952
7953
7954
7955
7956
7957
7958
7959
7960
7961
7962
7963
7964
7965
7966
7967
7968
7969
7970
7971
7972
7973
7974
7975
7976
7977
7978
7979
7980
7981
7982
7983
7984
7985
7986
7987
7988
7989
7990
7991
7992
7993
7994
7995
7996
7997
7998
7999
8000
8001
8002
8003
8004
8005
8006
8007
8008
8009
8010
8011
8012
8013
8014
8015
8016
8017
8018
8019
8020
8021
8022
8023
8024
8025
8026
8027
8028
8029
8030
8031
8032
8033
8034
8035
8036
8037
8038
8039
8040
8041
8042
8043
8044
8045
8046
8047
8048
8049
8050
8051
8052
8053
8054
8055
8056
8057
8058
8059
8060
8061
8062
8063
8064
8065
8066
8067
8068
8069
8070
8071
8072
8073
8074
8075
8076
8077
8078
8079
8080
8081
8082
8083
8084
8085
8086
8087
8088
8089
8090
8091
8092
8093
8094
8095
8096
8097
8098
8099
8100
8101
8102
8103
8104
8105
8106
8107
8108
8109
8110
8111
8112
8113
8114
8115
8116
8117
8118
8119
8120
8121
8122
8123
8124
8125
8126
8127
8128
8129
8130
8131
8132
8133
8134
8135
8136
8137
8138
8139
8140
8141
8142
8143
8144
8145
8146
8147
8148
8149
8150
8151
8152
8153
8154
8155
8156
8157
8158
8159
8160
8161
8162
8163
8164
8165
8166
8167
8168
8169
8170
8171
8172
8173
8174
8175
8176
8177
8178
8179
8180
8181
8182
8183
8184
8185
8186
8187
8188
8189
8190
8191
8192
8193
8194
8195
8196
8197
8198
8199
8200
8201
8202
8203
8204
8205
8206
8207
8208
8209
8210
8211
8212
8213
8214
8215
8216
8217
8218
8219
8220
8221
8222
8223
8224
8225
8226
8227
8228
8229
8230
8231
8232
8233
8234
8235
8236
8237
8238
8239
8240
8241
8242
8243
8244
8245
8246
8247
8248
8249
8250
8251
8252
8253
8254
8255
8256
8257
8258
8259
8260
8261
8262
8263
8264
8265
8266
8267
8268
8269
8270
8271
8272
8273
8274
8275
8276
8277
8278
8279
8280
8281
8282
8283
8284
8285
8286
8287
8288
8289
8290
8291
8292
8293
8294
8295
8296
8297
8298
8299
8300
8301
8302
8303
8304
8305
8306
8307
8308
8309
8310
8311
8312
8313
8314
8315
8316
8317
8318
8319
8320
8321
8322
8323
8324
8325
8326
8327
8328
8329
8330
8331
8332
8333
8334
8335
8336
8337
8338
8339
8340
8341
8342
8343
8344
8345
8346
8347
8348
8349
8350
8351
8352
8353
8354
8355
8356
8357
8358
8359
8360
8361
8362
8363
8364
8365
8366
8367
8368
8369
8370
8371
8372
8373
8374
8375
8376
8377
8378
8379
8380
8381
8382
8383
8384
8385
8386
8387
8388
8389
8390
8391
8392
8393
8394
8395
8396
8397
8398
8399
8400
8401
8402
8403
8404
8405
8406
8407
8408
8409
8410
8411
8412
8413
8414
8415
8416
8417
8418
8419
8420
8421
8422
8423
8424
8425
8426
8427
8428
8429
8430
8431
8432
8433
8434
8435
8436
8437
8438
8439
8440
8441
8442
8443
8444
8445
8446
8447
8448
8449
8450
8451
8452
8453
8454
8455
8456
8457
8458
8459
8460
8461
8462
8463
8464
8465
8466
8467
8468
8469
8470
8471
8472
8473
8474
8475
8476
8477
8478
8479
8480
8481
8482
8483
8484
8485
8486
8487
8488
8489
8490
8491
8492
8493
8494
8495
8496
8497
8498
8499
8500
8501
8502
8503
8504
8505
8506
8507
8508
8509
8510
8511
8512
8513
8514
8515
8516
8517
8518
8519
8520
8521
8522
8523
8524
8525
8526
8527
8528
8529
8530
8531
8532
8533
8534
8535
8536
8537
8538
8539
8540
8541
8542
8543
8544
8545
8546
8547
8548
8549
8550
8551
8552
8553
8554
8555
8556
8557
8558
8559
8560
8561
8562
8563
8564
8565
8566
8567
8568
8569
8570
8571
8572
8573
8574
8575
8576
8577
8578
8579
8580
8581
8582
8583
8584
8585
8586
8587
8588
8589
8590
8591
8592
8593
8594
8595
8596
8597
8598
8599
8600
8601
8602
8603
8604
8605
8606
8607
8608
8609
8610
8611
8612
8613
8614
8615
8616
8617
8618
8619
8620
8621
8622
8623
8624
8625
8626
8627
8628
8629
8630
8631
8632
8633
8634
8635
8636
8637
8638
8639
8640
8641
8642
8643
8644
8645
8646
8647
8648
8649
8650
8651
8652
8653
8654
8655
8656
8657
8658
8659
8660
8661
8662
8663
8664
8665
8666
8667
8668
8669
8670
8671
8672
8673
8674
8675
8676
8677
8678
8679
8680
8681
8682
8683
8684
8685
8686
8687
8688
8689
8690
8691
8692
8693
8694
8695
8696
8697
8698
8699
8700
8701
8702
8703
8704
8705
8706
8707
8708
8709
8710
8711
8712
8713
8714
8715
8716
8717
8718
8719
8720
8721
8722
8723
8724
8725
8726
8727
8728
8729
8730
8731
8732
8733
8734
8735
8736
8737
8738
8739
8740
8741
8742
8743
8744
8745
8746
8747
8748
8749
8750
8751
8752
8753
8754
8755
8756
8757
8758
8759
8760
8761
8762
8763
8764
8765
8766
8767
8768
8769
8770
8771
8772
8773
8774
# File 'lib/mail/parsers/received_parser.rb', line 7489

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])
                   _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
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 54
            begin
              date_s = p
            end
          when 131
            begin
              received.time = chars(data, time_s, p - 1)
            end
          when 9
            begin
            end
          when 52
            begin
            end
          when 127
            begin
            end
          when 68
            begin
            end
          when 10
            begin
            end
          when 22
            begin
            end
          when 64
            begin
            end
          when 61
            begin
            end
          when 26
            begin
            end
          when 24
            begin
            end
          when 70
            begin
            end
          when 63
            begin
            end
          when 47
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
          when 130
            begin
              begin
                top -= 1
                cs = stack[top]
                _goto_level = _again
                next
              end
            end
          when 3
            begin
              received_tokens_s = p
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 4
            begin
              received_tokens_s = p
            end
            begin
            end
          when 5
            begin
              received_tokens_s = p
            end
            begin
            end
          when 59
            begin
              date_s = p
            end
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
          when 57
            begin
              received.date = chars(data, date_s, p - 1).strip
            end
            begin
              time_s = p
            end
          when 132
            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
            begin
            end
            begin
            end
          when 105
            begin
            end
            begin
            end
          when 120
            begin
            end
            begin
            end
          when 50
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 51
            begin
            end
            begin
            end
          when 69
            begin
            end
            begin
            end
          when 53
            begin
            end
            begin
            end
          when 66
            begin
            end
            begin
            end
          when 72
            begin
            end
            begin
            end
          when 71
            begin
            end
            begin
            end
          when 56
            begin
            end
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
          when 128
            begin
            end
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
          when 129
            begin
            end
            begin
              begin
                top -= 1
                cs = stack[top]
                _goto_level = _again
                next
              end
            end
          when 77
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 78
            begin
            end
            begin
            end
          when 79
            begin
            end
            begin
            end
          when 67
            begin
            end
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
          when 104
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 106
            begin
            end
            begin
            end
          when 38
            begin
            end
            begin
            end
          when 15
            begin
            end
            begin
            end
          when 65
            begin
            end
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
          when 6
            begin
            end
            begin
            end
          when 60
            begin
            end
            begin
            end
          when 25
            begin
            end
            begin
            end
          when 116
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 117
            begin
            end
            begin
            end
          when 118
            begin
            end
            begin
            end
          when 73
            begin
            end
            begin
            end
          when 55
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
            begin
              date_s = p
            end
          when 1
            begin
              received_tokens_s = p
            end
            begin
            end
            begin
            end
          when 21
            begin
            end
            begin
            end
            begin
            end
          when 58
            begin
            end
            begin
              received.date = chars(data, date_s, p - 1).strip
            end
            begin
              time_s = p
            end
          when 86
            begin
            end
            begin
            end
            begin
            end
          when 111
            begin
            end
            begin
            end
            begin
            end
          when 125
            begin
            end
            begin
            end
            begin
            end
          when 85
            begin
            end
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 87
            begin
            end
            begin
            end
            begin
            end
          when 110
            begin
            end
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 112
            begin
            end
            begin
            end
            begin
            end
          when 45
            begin
            end
            begin
            end
            begin
            end
          when 48
            begin
            end
            begin
            end
            begin
            end
          when 124
            begin
            end
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 126
            begin
            end
            begin
            end
            begin
            end
          when 75
            begin
            end
            begin
            end
            begin
            end
          when 20
            begin
            end
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 23
            begin
            end
            begin
            end
            begin
            end
          when 101
            begin
            end
            begin
            end
            begin
            end
          when 98
            begin
            end
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 99
            begin
            end
            begin
            end
            begin
            end
          when 100
            begin
            end
            begin
            end
            begin
            end
          when 31
            begin
            end
            begin
            end
            begin
            end
          when 80
            begin
            end
            begin
            end
            begin
            end
          when 102
            begin
            end
            begin
            end
            begin
            end
          when 119
            begin
            end
            begin
            end
            begin
            end
          when 62
            begin
            end
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
            begin
            end
          when 114
            begin
            end
            begin
            end
            begin
            end
          when 74
            begin
            end
            begin
            end
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
          when 7
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
            begin
            end
            begin
            end
          when 2
            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
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 94
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 82
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 93
            begin
            end
            begin
            end
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 95
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 107
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 83
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 108
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 122
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 121
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 49
            begin
            end
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
            begin
            end
            begin
            end
          when 88
            begin
            end
            begin
            end
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 17
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 36
            begin
            end
            begin
            end
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 39
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 13
            begin
            end
            begin
            end
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 14
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 16
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 96
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 18
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 76
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
            begin
            end
            begin
            end
            begin
            end
          when 103
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
            begin
            end
            begin
            end
            begin
            end
          when 115
            begin
              begin
                stack[top] = cs
                top += 1
                cs = 636
                _goto_level = _again
                next
              end
            end
            begin
            end
            begin
            end
            begin
            end
          when 44
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 90
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 43
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 46
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 91
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 84
            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
            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
            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
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 33
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 11
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 29
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
              received.info = chars(data, received_tokens_s, p - 1)
            end
          when 30
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 32
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 97
            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
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 19
            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
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 41
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 92
            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
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
            begin
            end
          when 89
            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
            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
            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
            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
            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
            begin
              received.time = chars(data, time_s, p - 1)
            end
          when 52
            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