libbeat/reader/syslog/rfc3164_gen.go (781 lines of code) (raw):
// Licensed to Elasticsearch B.V. under one or more contributor
// license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright
// ownership. Elasticsearch B.V. licenses this file to you under
// the Apache License, Version 2.0 (the "License"); you may
// not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
// Code generated by ragel. DO NOT EDIT.
package syslog
import (
"io"
"time"
"go.uber.org/multierr"
)
const rfc3164_parser_start int = 1
const rfc3164_parser_first_final int = 24
const rfc3164_parser_error int = 0
const rfc3164_parser_en_main int = 1
// parseRFC3164 parses an RFC 3164-formatted syslog message. loc is used to enrich
// timestamps that lack a time zone.
func parseRFC3164(data string, loc *time.Location) (message, error) {
var errs error
var p, cs, tok int
pe := len(data)
eof := len(data)
m := message{
priority: -1,
}
{
cs = rfc3164_parser_start
}
{
if p == pe {
goto _test_eof
}
switch cs {
case 1:
goto st_case_1
case 0:
goto st_case_0
case 2:
goto st_case_2
case 3:
goto st_case_3
case 4:
goto st_case_4
case 5:
goto st_case_5
case 6:
goto st_case_6
case 24:
goto st_case_24
case 25:
goto st_case_25
case 26:
goto st_case_26
case 27:
goto st_case_27
case 28:
goto st_case_28
case 29:
goto st_case_29
case 30:
goto st_case_30
case 7:
goto st_case_7
case 8:
goto st_case_8
case 9:
goto st_case_9
case 10:
goto st_case_10
case 11:
goto st_case_11
case 12:
goto st_case_12
case 13:
goto st_case_13
case 14:
goto st_case_14
case 15:
goto st_case_15
case 16:
goto st_case_16
case 17:
goto st_case_17
case 18:
goto st_case_18
case 19:
goto st_case_19
case 20:
goto st_case_20
case 21:
goto st_case_21
case 22:
goto st_case_22
case 23:
goto st_case_23
}
goto st_out
st_case_1:
if data[p] == 60 {
goto st8
}
switch {
case data[p] < 65:
if 48 <= data[p] && data[p] <= 57 {
goto tr1
}
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto tr3
}
default:
goto tr3
}
goto tr0
tr0:
errs = multierr.Append(errs, &ParseError{Err: io.ErrUnexpectedEOF, Pos: p + 1})
p--
goto st0
st_case_0:
st0:
cs = 0
goto _out
tr1:
tok = p
goto st2
st2:
if p++; p == pe {
goto _test_eof2
}
st_case_2:
switch data[p] {
case 43:
goto st3
case 58:
goto st3
}
switch {
case data[p] < 48:
if 45 <= data[p] && data[p] <= 46 {
goto st3
}
case data[p] > 57:
switch {
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st3
}
case data[p] >= 65:
goto st3
}
default:
goto st7
}
goto tr0
st3:
if p++; p == pe {
goto _test_eof3
}
st_case_3:
if data[p] == 32 {
goto tr6
}
if 48 <= data[p] && data[p] <= 57 {
goto st2
}
goto tr0
tr6:
if err := m.setTimestampRFC3339(data[tok:p]); err != nil {
errs = multierr.Append(errs, &ValidationError{Err: err, Pos: tok + 1})
}
goto st4
tr30:
if err := m.setTimestampBSD(data[tok:p], loc); err != nil {
errs = multierr.Append(errs, &ValidationError{Err: err, Pos: tok + 1})
}
goto st4
st4:
if p++; p == pe {
goto _test_eof4
}
st_case_4:
if 33 <= data[p] && data[p] <= 126 {
goto tr8
}
goto tr0
tr8:
tok = p
goto st5
st5:
if p++; p == pe {
goto _test_eof5
}
st_case_5:
if data[p] == 32 {
goto tr9
}
if 33 <= data[p] && data[p] <= 126 {
goto st5
}
goto tr0
tr9:
m.setHostname(data[tok:p])
goto st6
st6:
if p++; p == pe {
goto _test_eof6
}
st_case_6:
switch {
case data[p] < 59:
if 33 <= data[p] && data[p] <= 57 {
goto tr12
}
case data[p] > 90:
if 92 <= data[p] && data[p] <= 126 {
goto tr12
}
default:
goto tr12
}
goto tr11
tr11:
tok = p
goto st24
st24:
if p++; p == pe {
goto _test_eof24
}
st_case_24:
goto st24
tr12:
tok = p
goto st25
st25:
if p++; p == pe {
goto _test_eof25
}
st_case_25:
switch data[p] {
case 58:
goto tr34
case 91:
goto tr35
}
if 33 <= data[p] && data[p] <= 126 {
goto st25
}
goto st24
tr34:
m.setTag(data[tok:p])
goto st26
st26:
if p++; p == pe {
goto _test_eof26
}
st_case_26:
if data[p] == 32 {
goto st27
}
goto st24
st27:
if p++; p == pe {
goto _test_eof27
}
st_case_27:
goto tr11
tr35:
m.setTag(data[tok:p])
goto st28
st28:
if p++; p == pe {
goto _test_eof28
}
st_case_28:
if 48 <= data[p] && data[p] <= 57 {
goto tr37
}
goto st24
tr37:
tok = p
goto st29
st29:
if p++; p == pe {
goto _test_eof29
}
st_case_29:
if data[p] == 93 {
goto tr39
}
if 48 <= data[p] && data[p] <= 57 {
goto st29
}
goto st24
tr39:
m.setContent(data[tok:p])
goto st30
st30:
if p++; p == pe {
goto _test_eof30
}
st_case_30:
if data[p] == 58 {
goto st26
}
goto st24
st7:
if p++; p == pe {
goto _test_eof7
}
st_case_7:
switch data[p] {
case 32:
goto tr6
case 43:
goto st3
case 58:
goto st3
}
switch {
case data[p] < 48:
if 45 <= data[p] && data[p] <= 46 {
goto st3
}
case data[p] > 57:
switch {
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st3
}
case data[p] >= 65:
goto st3
}
default:
goto st7
}
goto tr0
st8:
if p++; p == pe {
goto _test_eof8
}
st_case_8:
if 33 <= data[p] && data[p] <= 126 {
goto tr13
}
goto tr0
tr13:
tok = p
goto st9
st9:
if p++; p == pe {
goto _test_eof9
}
st_case_9:
if data[p] == 62 {
goto tr15
}
if 33 <= data[p] && data[p] <= 126 {
goto st9
}
goto tr0
tr15:
if err := m.setPriority(data[tok:p]); err != nil {
errs = multierr.Append(errs, &ValidationError{Err: err, Pos: tok + 1})
}
goto st10
st10:
if p++; p == pe {
goto _test_eof10
}
st_case_10:
if data[p] == 62 {
goto tr15
}
switch {
case data[p] < 65:
switch {
case data[p] < 48:
if 33 <= data[p] && data[p] <= 47 {
goto st9
}
case data[p] > 57:
if 58 <= data[p] && data[p] <= 64 {
goto st9
}
default:
goto tr16
}
case data[p] > 90:
switch {
case data[p] < 97:
if 91 <= data[p] && data[p] <= 96 {
goto st9
}
case data[p] > 122:
if 123 <= data[p] && data[p] <= 126 {
goto st9
}
default:
goto tr17
}
default:
goto tr17
}
goto tr0
tr16:
tok = p
goto st11
st11:
if p++; p == pe {
goto _test_eof11
}
st_case_11:
switch data[p] {
case 43:
goto st12
case 47:
goto st9
case 58:
goto st12
case 62:
goto tr15
}
switch {
case data[p] < 59:
switch {
case data[p] < 45:
if 33 <= data[p] && data[p] <= 44 {
goto st9
}
case data[p] > 46:
if 48 <= data[p] && data[p] <= 57 {
goto st13
}
default:
goto st12
}
case data[p] > 64:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto st12
}
case data[p] > 96:
switch {
case data[p] > 122:
if 123 <= data[p] && data[p] <= 126 {
goto st9
}
case data[p] >= 97:
goto st12
}
default:
goto st9
}
default:
goto st9
}
goto tr0
st12:
if p++; p == pe {
goto _test_eof12
}
st_case_12:
switch data[p] {
case 32:
goto tr6
case 62:
goto tr15
}
switch {
case data[p] < 48:
if 33 <= data[p] && data[p] <= 47 {
goto st9
}
case data[p] > 57:
if 58 <= data[p] && data[p] <= 126 {
goto st9
}
default:
goto st11
}
goto tr0
st13:
if p++; p == pe {
goto _test_eof13
}
st_case_13:
switch data[p] {
case 32:
goto tr6
case 43:
goto st12
case 47:
goto st9
case 58:
goto st12
case 62:
goto tr15
}
switch {
case data[p] < 59:
switch {
case data[p] < 45:
if 33 <= data[p] && data[p] <= 44 {
goto st9
}
case data[p] > 46:
if 48 <= data[p] && data[p] <= 57 {
goto st13
}
default:
goto st12
}
case data[p] > 64:
switch {
case data[p] < 91:
if 65 <= data[p] && data[p] <= 90 {
goto st12
}
case data[p] > 96:
switch {
case data[p] > 122:
if 123 <= data[p] && data[p] <= 126 {
goto st9
}
case data[p] >= 97:
goto st12
}
default:
goto st9
}
default:
goto st9
}
goto tr0
tr17:
tok = p
goto st14
st14:
if p++; p == pe {
goto _test_eof14
}
st_case_14:
switch data[p] {
case 32:
goto st15
case 62:
goto tr15
}
switch {
case data[p] < 91:
switch {
case data[p] > 64:
if 65 <= data[p] && data[p] <= 90 {
goto st14
}
case data[p] >= 33:
goto st9
}
case data[p] > 96:
switch {
case data[p] > 122:
if 123 <= data[p] && data[p] <= 126 {
goto st9
}
case data[p] >= 97:
goto st14
}
default:
goto st9
}
goto tr0
st15:
if p++; p == pe {
goto _test_eof15
}
st_case_15:
if data[p] == 32 {
goto st15
}
if 48 <= data[p] && data[p] <= 57 {
goto st16
}
goto tr0
st16:
if p++; p == pe {
goto _test_eof16
}
st_case_16:
if data[p] == 32 {
goto st17
}
if 48 <= data[p] && data[p] <= 57 {
goto st16
}
goto tr0
st17:
if p++; p == pe {
goto _test_eof17
}
st_case_17:
if data[p] == 32 {
goto st17
}
if 48 <= data[p] && data[p] <= 57 {
goto st18
}
goto tr0
st18:
if p++; p == pe {
goto _test_eof18
}
st_case_18:
if data[p] == 58 {
goto st19
}
if 48 <= data[p] && data[p] <= 57 {
goto st18
}
goto tr0
st19:
if p++; p == pe {
goto _test_eof19
}
st_case_19:
if 48 <= data[p] && data[p] <= 57 {
goto st20
}
goto tr0
st20:
if p++; p == pe {
goto _test_eof20
}
st_case_20:
if data[p] == 58 {
goto st21
}
if 48 <= data[p] && data[p] <= 57 {
goto st20
}
goto tr0
st21:
if p++; p == pe {
goto _test_eof21
}
st_case_21:
if 48 <= data[p] && data[p] <= 57 {
goto st22
}
goto tr0
st22:
if p++; p == pe {
goto _test_eof22
}
st_case_22:
if data[p] == 32 {
goto tr30
}
if 48 <= data[p] && data[p] <= 57 {
goto st22
}
goto tr0
tr3:
tok = p
goto st23
st23:
if p++; p == pe {
goto _test_eof23
}
st_case_23:
if data[p] == 32 {
goto st15
}
switch {
case data[p] > 90:
if 97 <= data[p] && data[p] <= 122 {
goto st23
}
case data[p] >= 65:
goto st23
}
goto tr0
st_out:
_test_eof2:
cs = 2
goto _test_eof
_test_eof3:
cs = 3
goto _test_eof
_test_eof4:
cs = 4
goto _test_eof
_test_eof5:
cs = 5
goto _test_eof
_test_eof6:
cs = 6
goto _test_eof
_test_eof24:
cs = 24
goto _test_eof
_test_eof25:
cs = 25
goto _test_eof
_test_eof26:
cs = 26
goto _test_eof
_test_eof27:
cs = 27
goto _test_eof
_test_eof28:
cs = 28
goto _test_eof
_test_eof29:
cs = 29
goto _test_eof
_test_eof30:
cs = 30
goto _test_eof
_test_eof7:
cs = 7
goto _test_eof
_test_eof8:
cs = 8
goto _test_eof
_test_eof9:
cs = 9
goto _test_eof
_test_eof10:
cs = 10
goto _test_eof
_test_eof11:
cs = 11
goto _test_eof
_test_eof12:
cs = 12
goto _test_eof
_test_eof13:
cs = 13
goto _test_eof
_test_eof14:
cs = 14
goto _test_eof
_test_eof15:
cs = 15
goto _test_eof
_test_eof16:
cs = 16
goto _test_eof
_test_eof17:
cs = 17
goto _test_eof
_test_eof18:
cs = 18
goto _test_eof
_test_eof19:
cs = 19
goto _test_eof
_test_eof20:
cs = 20
goto _test_eof
_test_eof21:
cs = 21
goto _test_eof
_test_eof22:
cs = 22
goto _test_eof
_test_eof23:
cs = 23
goto _test_eof
_test_eof:
{
}
if p == eof {
switch cs {
case 24, 25, 26, 27, 28, 29, 30:
m.setMsg(data[tok:p])
case 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23:
errs = multierr.Append(errs, &ParseError{Err: io.ErrUnexpectedEOF, Pos: p + 1})
p--
}
}
_out:
{
}
}
return m, errs
}