📄 megaco_flex_scanner_drv.flex.src
字号:
/* ``The contents of this file are subject to the Erlang Public License, * Version 1.1, (the "License"); you may not use this file except in * compliance with the License. You should have received a copy of the * Erlang Public License along with this software. If not, it can be * retrieved via the world wide web at http://www.erlang.org/. * * Software distributed under the License is distributed on an "AS IS" * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See * the License for the specific language governing rights and limitations * under the License. * * The Initial Developer of the Original Code is Ericsson Utvecklings AB. * Portions created by Ericsson are Copyright 1999, Ericsson Utvecklings * AB. All Rights Reserved.'' * * $Id$ * ---------------------------------------------------------------------- * Author: Hakan Mattsson <hakan@cslab.ericsson.com> * Purpose : Scanner for text encoded Megaco/H.248 messages * ---------------------------------------------------------------------- * * Throughout this file the prefix mfs is used for megaco_flex_scanner. * The reason is to get shorter function and variable names. */%option case-insensitive /* MEGACO_YY_LINENO_OPTION * Note that this construction is intended to make it * possible to generate flex files that either reports * line-number or one that don't. * See MEGACO_DUMMY_DECL_YY_LINENO and * MEGACO_LINENO_OR_TOKENCOUNTER below. */%MEGACO_YY_LINENO_OPTION%%option noyywrap%option noinput%option nounput %{#define HAVE_UIO_H#include "erl_driver.h"#include <stdarg.h>#include <stdlib.h>#include <string.h>#include <ctype.h>#define TRUE 1;#define FALSE 0;#define FREE(bufP) driver_free(bufP)#define ALLOC(sz) driver_alloc(sz)#define REALLOC(bufP, sz) driver_realloc(bufP, sz)#define YY_MAIN false#define YY_FATAL_ERROR(msg) mfs_fatal_error(msg)static ErlDrvTermData mfs_AddToken = 0;static ErlDrvTermData mfs_AndAUDITSelectToken = 0; /* v3 */static ErlDrvTermData mfs_AuditCapToken = 0;static ErlDrvTermData mfs_AuditToken = 0;static ErlDrvTermData mfs_AuditValueToken = 0;static ErlDrvTermData mfs_AuthToken = 0;static ErlDrvTermData mfs_BothToken = 0; /* v3 */static ErlDrvTermData mfs_BothwayToken = 0;static ErlDrvTermData mfs_BriefToken = 0;static ErlDrvTermData mfs_BufferToken = 0;static ErlDrvTermData mfs_COLON = 0;static ErlDrvTermData mfs_COMMA = 0;static ErlDrvTermData mfs_ContextAttrToken = 0; /* v3 */static ErlDrvTermData mfs_ContextAuditToken = 0;static ErlDrvTermData mfs_ContextListToken = 0; /* v3 */static ErlDrvTermData mfs_CtxToken = 0;static ErlDrvTermData mfs_DelayToken = 0;static ErlDrvTermData mfs_DeleteToken = 0;static ErlDrvTermData mfs_DigitMapDescriptor = 0;static ErlDrvTermData mfs_DigitMapDescriptorToken = 0;static ErlDrvTermData mfs_DigitMapToken = 0;static ErlDrvTermData mfs_DigitMapValue = 0;static ErlDrvTermData mfs_DirectionToken = 0; /* v3 */static ErlDrvTermData mfs_DiscardToken = 0;static ErlDrvTermData mfs_DisconnectedToken = 0;static ErlDrvTermData mfs_DurationToken = 0;static ErlDrvTermData mfs_EQUAL = 0;static ErlDrvTermData mfs_EmbedToken = 0;static ErlDrvTermData mfs_EmergencyToken = 0;static ErlDrvTermData mfs_EmergencyOffToken = 0; /* v3 */static ErlDrvTermData mfs_EmergencyValueToken = 0; /* v3 */static ErlDrvTermData mfs_ErrorToken = 0;static ErlDrvTermData mfs_EventBufferToken = 0;static ErlDrvTermData mfs_EventsToken = 0;static ErlDrvTermData mfs_ExternalToken = 0; /* v3 */static ErlDrvTermData mfs_FailoverToken = 0;static ErlDrvTermData mfs_ForcedToken = 0;static ErlDrvTermData mfs_GREATER = 0;static ErlDrvTermData mfs_GracefulToken = 0;static ErlDrvTermData mfs_H221Token = 0;static ErlDrvTermData mfs_H223Token = 0;static ErlDrvTermData mfs_H226Token = 0;static ErlDrvTermData mfs_HandOffToken = 0;static ErlDrvTermData mfs_IEPSToken = 0; /* v3 */static ErlDrvTermData mfs_IllegalChar = 0;static ErlDrvTermData mfs_ImmAckRequiredToken = 0;static ErlDrvTermData mfs_InactiveToken = 0;static ErlDrvTermData mfs_InSvcToken = 0;static ErlDrvTermData mfs_IntsigDelayToken = 0; /* v3 */static ErlDrvTermData mfs_InternalToken = 0; /* v3 */static ErlDrvTermData mfs_InterruptByEventToken = 0;static ErlDrvTermData mfs_InterruptByNewSignalsDescrToken = 0;static ErlDrvTermData mfs_IsolateToken = 0;static ErlDrvTermData mfs_IterationToken = 0; /* v3 */static ErlDrvTermData mfs_KeepActiveToken = 0;static ErlDrvTermData mfs_LBRKT = 0;static ErlDrvTermData mfs_LESSER = 0;static ErlDrvTermData mfs_LSBRKT = 0;static ErlDrvTermData mfs_LocalControlToken = 0;static ErlDrvTermData mfs_LocalDescriptorToken = 0;static ErlDrvTermData mfs_LocalToken = 0;static ErlDrvTermData mfs_LockStepToken = 0;static ErlDrvTermData mfs_LoopbackToken = 0;static ErlDrvTermData mfs_MediaToken = 0;static ErlDrvTermData mfs_MegacopToken = 0;static ErlDrvTermData mfs_MethodToken = 0;/* static ErlDrvTermData mfs_MessageSegmentToken = 0; */static ErlDrvTermData mfs_MgcIdToken = 0;static ErlDrvTermData mfs_ModeToken = 0;static ErlDrvTermData mfs_ModemToken = 0;static ErlDrvTermData mfs_ModifyToken = 0;static ErlDrvTermData mfs_MoveToken = 0;static ErlDrvTermData mfs_MtpAddressToken = 0;static ErlDrvTermData mfs_MuxToken = 0;static ErlDrvTermData mfs_NEQUAL = 0;static ErlDrvTermData mfs_NeverNotifyToken = 0; /* v3 */static ErlDrvTermData mfs_NotifyCompletionToken = 0;static ErlDrvTermData mfs_NotifyImmediateToken = 0; /* v3 */static ErlDrvTermData mfs_NotifyRegulatedToken = 0; /* v3 */static ErlDrvTermData mfs_NotifyToken = 0;static ErlDrvTermData mfs_Nx64kToken = 0;static ErlDrvTermData mfs_ObservedEventsToken = 0;static ErlDrvTermData mfs_OffToken = 0;static ErlDrvTermData mfs_OnOffToken = 0;static ErlDrvTermData mfs_OnToken = 0;static ErlDrvTermData mfs_OnewayToken = 0;static ErlDrvTermData mfs_OnewayBothToken = 0; /* v3 */static ErlDrvTermData mfs_OnewayExternalToken = 0; /* v3 */static ErlDrvTermData mfs_OrAUDITselectToken = 0; /* v3 */static ErlDrvTermData mfs_OtherReasonToken = 0;static ErlDrvTermData mfs_OutOfSvcToken = 0;static ErlDrvTermData mfs_PackagesToken = 0;static ErlDrvTermData mfs_PendingToken = 0;static ErlDrvTermData mfs_PriorityToken = 0;static ErlDrvTermData mfs_ProfileToken = 0;static ErlDrvTermData mfs_QuotedChars = 0;static ErlDrvTermData mfs_RBRKT = 0;static ErlDrvTermData mfs_RSBRKT = 0;static ErlDrvTermData mfs_ReasonToken = 0;static ErlDrvTermData mfs_RecvonlyToken = 0;static ErlDrvTermData mfs_RemoteDescriptorToken = 0;static ErlDrvTermData mfs_RemoteToken = 0;static ErlDrvTermData mfs_RequestIDToken = 0; /* v3 */static ErlDrvTermData mfs_ReplyToken = 0;static ErlDrvTermData mfs_ReservedGroupToken = 0;static ErlDrvTermData mfs_ReservedValueToken = 0;static ErlDrvTermData mfs_ResetEventsDescriptorToken = 0; /* v3 */static ErlDrvTermData mfs_ResponseAckToken = 0;static ErlDrvTermData mfs_RestartToken = 0;static ErlDrvTermData mfs_SEP = 0;static ErlDrvTermData mfs_SafeChars = 0;/* static ErlDrvTermData mfs_SegmentationCOmpleteToken = 0; */ /* v3 */static ErlDrvTermData mfs_SendonlyToken = 0;static ErlDrvTermData mfs_SendrecvToken = 0;static ErlDrvTermData mfs_ServiceChangeAddressToken = 0;static ErlDrvTermData mfs_ServiceChangeIncompleteToken = 0; /* v3 */static ErlDrvTermData mfs_ServiceChangeToken = 0;static ErlDrvTermData mfs_ServiceStatesToken = 0;static ErlDrvTermData mfs_ServicesToken = 0;static ErlDrvTermData mfs_SignalListToken = 0;static ErlDrvTermData mfs_SignalTypeToken = 0;static ErlDrvTermData mfs_SignalsToken = 0;static ErlDrvTermData mfs_StatsToken = 0;static ErlDrvTermData mfs_StreamToken = 0;static ErlDrvTermData mfs_SubtractToken = 0;static ErlDrvTermData mfs_SynchISDNToken = 0;static ErlDrvTermData mfs_TerminationStateToken = 0;static ErlDrvTermData mfs_TestToken = 0;static ErlDrvTermData mfs_TimeOutToken = 0;static ErlDrvTermData mfs_TimeStampToken = 0; /* OTP-5042 */static ErlDrvTermData mfs_TopologyToken = 0;static ErlDrvTermData mfs_TransToken = 0;static ErlDrvTermData mfs_V18Token = 0;static ErlDrvTermData mfs_V22Token = 0;static ErlDrvTermData mfs_V22bisToken = 0;static ErlDrvTermData mfs_V32Token = 0;static ErlDrvTermData mfs_V32bisToken = 0;static ErlDrvTermData mfs_V34Token = 0;static ErlDrvTermData mfs_V76Token = 0;static ErlDrvTermData mfs_V90Token = 0;static ErlDrvTermData mfs_V91Token = 0;static ErlDrvTermData mfs_VersionToken = 0;static ErlDrvTermData mfs_asn1_NOVALUE = 0;static ErlDrvTermData mfs_endOfMessage = 0;/* MEGACO_DUMMY_DECL_YY_LINENO * Note that this construction is intended to make it * possible to generate flex files that either reports * line-number or one that don't. * See MEGACO_YY_LINENO_OPTION above and * MEGACO_LINENO_OR_TOKENCOUNTER below. */%MEGACO_DUMMY_DECL_YY_LINENO%static ErlDrvPort mfs_port = 0;static char* mfs_digit_map_name_ptr = 0;static int mfs_digit_map_name_len = 0;static char* mfs_digit_map_value_ptr = 0;static int mfs_digit_map_value_len = 0;static char* mfs_digit_map_start_ptr = 0;static char* mfs_digit_map_short_ptr = 0;static char* mfs_digit_map_long_ptr = 0;static char* mfs_digit_map_duration_ptr = 0;static int mfs_error = FALSE;static char mfs_error_msg[256];static char* mfs_text_buf = 0;static char* mfs_text_ptr = 0;static ErlDrvTermData* mfs_term_spec = 0;static int mfs_term_spec_size = 0;static int mfs_term_spec_index = 0;static int mfs_token_counter = 0;static void mfs_alloc_failed(char* msg, int sz);static void mfs_fatal_error(char* msg); static void mfs_short_load_token(ErlDrvTermData token_tag);static void mfs_lower_load_token(ErlDrvTermData token_tag);static void mfs_octet_load_token(ErlDrvTermData token_tag, int is_empty);static void mfs_load_map_name();static void mfs_load_map_value();static void mfs_load_map_timer();static void mfs_load_map_token();static void mfs_ensure_term_spec(int size);static ErlDrvData mfs_start(ErlDrvPort port, char *buf);static void mfs_stop(ErlDrvData handle);static void mfs_command(ErlDrvData handle, char *buf, int buf_len);static int mfs_control(ErlDrvData handle, unsigned int command, char *buf, int buf_len, char **res_buf, int res_buf_len);static void mfs_finish(void);/* * The driver entry */static ErlDrvEntry mfs_entry = { NULL, /* init, always NULL for dynamic drivers */ mfs_start, /* start, called when port is opened */ mfs_stop, /* stop, called when port is closed */ mfs_command, /* output, called when erlang has sent */ NULL, /* ready_input, called when input descriptor ready */ NULL, /* ready_output, called when output descriptor ready */ MEGACO_DRV_NAME, /* char *driver_name, the arg to open_port */ mfs_finish, /* finish, called when unloaded */ NULL, /* void * that is not used (BC) */ mfs_control, /* control, port_control callback */ NULL, /* timeout, called on timeouts */ NULL /* outputv, vector output interface */}; #define LOAD_TOKEN(TokenTag) mfs_lower_load_token(TokenTag)#define LOAD_SHORT_TOKEN(TokenTag) mfs_short_load_token(TokenTag)#define LOAD_OCTET_TOKEN(TokenTag) mfs_octet_load_token(TokenTag, 0)#define LOAD_EMPTY_OCTET_TOKEN(TokenTag) mfs_octet_load_token(TokenTag, 1)/* OTP-4236 */#define ASSIGN_TERM_SPEC(what) \{ \ if (mfs_term_spec != NULL) \ mfs_term_spec[mfs_term_spec_index++] = what; \}%}%x SKIP_RBRKT MTP_HEXDIG LOCAL_OCTETS REMOTE_OCTETS %x MAP_NAME MAP_OPT_LBRKT MAP_VALUE MAP_SKIP_COMMA MAP_BODY%x QUOTED_CHARS SKIP_DQUOTEdigit ([0-9])alpha ([a-zA-Z])hexdig ([0-9a-fA-F])sp (\x20)htab (\x09)cr (\x0D)lf (\x0A)slash (\/)dquote (\")colon (\:)dot (\.)wsp ({sp}|{htab})eol ({cr}|({cr}{lf})|{lf})safechar ({digit}|{alpha}|[\+\-\&\!\_\/\'\?\@\^\`\~\*\$\\\(\)\%\|\.])restchar ([\;\[\]\{\}\:\,\#\<\>\=])octet ((\\\})|[\x01-\x7C\x7E-\xFF]) comment (\;({safechar}|{restchar}|{wsp}|\x22)*{eol})lwsp ({wsp}|{comment}|{eol})* equal ({lwsp}\={lwsp})nequal ({lwsp}\#{lwsp})lesser ({lwsp}\<{lwsp})greater ({lwsp}\>{lwsp})lbrkt ({lwsp}\{{lwsp})rbrkt ({lwsp}\}{lwsp})lsbrkt ({lwsp}\[{lwsp})rsbrkt ({lwsp}\]{lwsp})lpar ({lwsp}\({lwsp})rpar ({lwsp}\){lwsp})vbar ({lwsp}\|{lwsp})comma ({lwsp}\,{lwsp})sep (({wsp}|{eol}|{comment}){lwsp})+opt ((o\-)?)wild ((w\-)?)%%<SKIP_RBRKT>{rbrkt} BEGIN(INITIAL); {digit}{8,8}t{digit}{8,8} LOAD_TOKEN(mfs_TimeStampToken); /* OTP-5042 */ (MTP){lbrkt} BEGIN(MTP_HEXDIG);<MTP_HEXDIG>{hexdig}{4,8} {LOAD_TOKEN(mfs_MtpAddressToken); BEGIN(SKIP_RBRKT);} ((Local)|L){lbrkt} BEGIN(LOCAL_OCTETS);<LOCAL_OCTETS>{rbrkt} {LOAD_EMPTY_OCTET_TOKEN(mfs_LocalDescriptorToken); BEGIN(INITIAL);}<LOCAL_OCTETS>{octet}+ {LOAD_OCTET_TOKEN(mfs_LocalDescriptorToken); BEGIN(SKIP_RBRKT);} ((Remote)|R){lbrkt} BEGIN(REMOTE_OCTETS);<REMOTE_OCTETS>{rbrkt} {LOAD_EMPTY_OCTET_TOKEN(mfs_RemoteDescriptorToken); BEGIN(INITIAL);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -