%% %% %CopyrightBegin% %% %% Copyright Ericsson AB 2003-2016. All Rights Reserved. %% %% Licensed 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. %% %% %CopyrightEnd% %% %% %%---------------------------------------------------------------------- %% Purpose: Encode COMPACT Megaco/H.248 text messages from internal form %%---------------------------------------------------------------------- -module(megaco_compact_text_encoder_v2). -export([encode_message/2, encode_transaction/2, encode_action_requests/2, encode_action_request/2, encode_command_request/2, encode_action_reply/2]). -export([token_tag2string/1]). -include_lib("megaco/include/megaco.hrl"). -include_lib("megaco/include/megaco_message_v2.hrl"). -define(encoder_version_pre_prev3c,true). -include("megaco_text_tokens.hrl"). %%---------------------------------------------------------------------- %% Convert a 'MegacoMessage' record into a binary %% Return {ok, DeepIoList} | {error, Reason} %%---------------------------------------------------------------------- encode_message(EC, MegaMsg) when is_list(EC) andalso is_record(MegaMsg, 'MegacoMessage') -> case (catch enc_MegacoMessage(MegaMsg)) of {'EXIT', Reason} -> {error, Reason}; Bin when is_binary(Bin) -> {ok, Bin}; DeepIoList -> Bin = erlang:list_to_binary(DeepIoList), {ok, Bin} end; encode_message(EncodingConfig, MegaMsg) when is_record(MegaMsg, 'MegacoMessage') -> {error, {bad_encoding_config, EncodingConfig}}; encode_message(_EncodingConfig, _MegaMsg) -> {error, bad_megaco_message}. %%---------------------------------------------------------------------- %% Convert a transaction record into a deep io list %% Return {ok, DeepIoList} | {error, Reason} %%---------------------------------------------------------------------- encode_transaction(_EC, Trans) -> case (catch enc_Transaction(Trans)) of {'EXIT', Reason} -> {error, Reason}; Bin when is_binary(Bin) -> {ok, Bin}; DeepIoList -> Bin = erlang:list_to_binary(DeepIoList), {ok, Bin} end. %%---------------------------------------------------------------------- %% Convert a list of ActionRequest record's into a binary %% Return {ok, DeepIoList} | {error, Reason} %%---------------------------------------------------------------------- encode_action_requests(_EC, ActReqs) -> case (catch enc_ActionRequests(ActReqs)) of {'EXIT', Reason} -> {error, Reason}; Bin when is_binary(Bin) -> {ok, Bin}; DeepIoList -> Bin = erlang:list_to_binary(DeepIoList), {ok, Bin} end. %%---------------------------------------------------------------------- %% Convert a ActionRequest record into a binary %% Return {ok, DeepIoList} | {error, Reason} %%---------------------------------------------------------------------- encode_action_request(_EC, ActReq) when is_record(ActReq, 'ActionRequest') -> case (catch enc_ActionRequest(ActReq)) of {'EXIT', Reason} -> {error, Reason}; Bin when is_binary(Bin) -> {ok, Bin}; DeepIoList -> Bin = erlang:list_to_binary(DeepIoList), {ok, Bin} end. %%---------------------------------------------------------------------- %% Convert a CommandRequest record into a deep io list %% Return {ok, DeepIoList} | {error, Reason} %%---------------------------------------------------------------------- encode_command_request(_EC, CmdReq) when is_record(CmdReq, 'CommandRequest') -> case (catch enc_CommandRequest(CmdReq)) of {'EXIT', Reason} -> {error, Reason}; Bin when is_binary(Bin) -> {ok, Bin}; DeepIoList -> Bin = erlang:list_to_binary(DeepIoList), {ok, Bin} end. %%---------------------------------------------------------------------- %% Convert a action reply into a deep io list %% Return {ok, DeepIoList} | {error, Reason} %%---------------------------------------------------------------------- encode_action_reply(_EC, ActRep) when is_record(ActRep, 'ActionReply') -> case (catch enc_ActionReply(ActRep)) of {'EXIT', Reason} -> {error, Reason}; Bin when is_binary(Bin) -> {ok, Bin}; DeepIoList -> Bin = erlang:list_to_binary(DeepIoList), {ok, Bin} end. %%---------------------------------------------------------------------- %% A utility function to pretty print the tags found in a megaco message %%---------------------------------------------------------------------- token_tag2string(addReq) -> ?CompactAddToken; token_tag2string(addReply) -> ?CompactAddToken; token_tag2string(auditDescriptor) -> ?CompactAuditToken; token_tag2string(auditCapRequest) -> ?CompactAuditCapToken; token_tag2string(auditCapReply) -> ?CompactAuditCapToken; token_tag2string(auditValueRequest) -> ?CompactAuditValueToken; token_tag2string(auditValueReply) -> ?CompactAuditValueToken; %% token_tag2string(X) -> ?CompactAuthToken; token_tag2string(bothway) -> ?CompactBothwayToken; token_tag2string(brief) -> ?CompactBriefToken; %% token_tag2string(X) -> ?CompactBufferToken; %% token_tag2string(X) -> ?CompactCtxToken; %% token_tag2string(X) -> ?CompactContextAuditToken; token_tag2string(digitMapDescriptor) -> ?CompactDigitMapToken; token_tag2string(digitMapToken) -> ?CompactDigitMapToken; %% token_tag2string(X) -> ?CompactDiscardToken; %% token_tag2string(X) -> ?CompactDisconnectedToken; %% token_tag2string(X) -> ?CompactDelayToken; token_tag2string(duration) -> ?CompactDurationToken; %% token_tag2string(X) -> ?CompactEmbedToken; token_tag2string(emergencyAudit) -> ?CompactEmergencyToken; %% token_tag2string(X) -> ?CompactEmergencyOffToken; token_tag2string(errorDescriptor) -> ?CompactErrorToken; token_tag2string(eventBufferDescriptor) -> ?CompactEventBufferToken; token_tag2string(eventBufferToken) -> ?CompactEventBufferToken; token_tag2string(eventsDescriptor) -> ?CompactEventsToken; token_tag2string(eventsToken) -> ?CompactEventsToken; %% token_tag2string(X) -> ?CompactFailoverToken; %% token_tag2string(X) -> ?CompactForcedToken; %% token_tag2string(X) -> ?CompactGracefulToken; %% token_tag2string(X) -> ?CompactH221Token; %% token_tag2string(X) -> ?CompactH223Token; %% token_tag2string(X) -> ?CompactH226Token; %% token_tag2string(X) -> ?CompactHandOffToken; %% token_tag2string(X) -> ?CompactImmAckRequiredToken; token_tag2string(inactive) -> ?CompactInactiveToken; token_tag2string(onInterruptByEvent) -> ?CompactInterruptByEventToken; token_tag2string(onInterruptByNewSignalDescr) -> ?CompactInterruptByNewSignalsDescrToken; token_tag2string(isolate) -> ?CompactIsolateToken; token_tag2string(inSvc) -> ?CompactInSvcToken; token_tag2string(keepActive) -> ?CompactKeepActiveToken; token_tag2string(localDescriptor) -> ?CompactLocalToken; token_tag2string(localControlDescriptor) -> ?CompactLocalControlToken; token_tag2string(lockStep) -> ?CompactLockStepToken; token_tag2string(loopBack) -> ?CompactLoopbackToken; token_tag2string(mediaDescriptor) -> ?CompactMediaToken; token_tag2string(mediaToken) -> ?CompactMediaToken; %% token_tag2string(X) -> ?CompactMegacopToken; %% token_tag2string(X) -> ?CompactMethodToken; %% token_tag2string(X) -> ?CompactMgcIdToken; %% token_tag2string(X) -> ?CompactModeToken; token_tag2string(modReq) -> ?CompactModifyToken; token_tag2string(modReply) -> ?CompactModifyToken; token_tag2string(modemDescriptor) -> ?CompactModemToken; token_tag2string(modemToken) -> ?CompactModemToken; token_tag2string(moveReq) -> ?CompactMoveToken; token_tag2string(moveReply) -> ?CompactMoveToken; %% token_tag2string(X) -> ?CompactMtpToken; token_tag2string(muxDescriptor) -> ?CompactMuxToken; token_tag2string(muxToken) -> ?CompactMuxToken; token_tag2string(notifyReq) -> ?CompactNotifyToken; %% token_tag2string(X) -> ?CompactNotifyCompletionToken; %% token_tag2string(X) -> ?CompactNx64kToken; token_tag2string(observedEventsDescriptor) -> ?CompactObservedEventsToken; token_tag2string(observedEventsToken) -> ?CompactObservedEventsToken; token_tag2string(false) -> ?CompactOffToken; token_tag2string(off) -> ?CompactOffToken; token_tag2string(oneway) -> ?CompactOnewayToken; token_tag2string(onOff) -> ?CompactOnOffToken; token_tag2string(true) -> ?CompactOnToken; token_tag2string(otherReason) -> ?CompactOtherReasonToken; token_tag2string(outOfSvc) -> ?CompactOutOfSvcToken; token_tag2string(packagesDescriptor) -> ?CompactPackagesToken; token_tag2string(packagesToken) -> ?CompactPackagesToken; %% token_tag2string(X) -> ?CompactPendingToken; token_tag2string(priorityAudit) -> ?CompactPriorityToken; %% token_tag2string(X) -> ?CompactProfileToken; %% token_tag2string(X) -> ?CompactReasonToken; token_tag2string(recvOnly) -> ?CompactRecvonlyToken; %% token_tag2string(X) -> ?CompactReplyToken; %% token_tag2string(X) -> ?CompactResponseAckToken; %% token_tag2string(X) -> ?CompactRestartToken; token_tag2string(remoteDescriptor) -> ?CompactRemoteToken; %% token_tag2string(X) -> ?CompactReservedGroupToken; %% token_tag2string(X) -> ?CompactReservedValueToken; token_tag2string(sendOnly) -> ?CompactSendonlyToken; token_tag2string(sendRecv) -> ?CompactSendrecvToken; %% token_tag2string(X) -> ?CompactServicesToken; %% token_tag2string(X) -> ?CompactServiceStatesToken; token_tag2string(serviceChangeReq) -> ?CompactServiceChangeToken; %% token_tag2string(X) -> ?CompactServiceChangeAddressToken; %% token_tag2string(X) -> ?CompactSignalListToken; token_tag2string(signalsDescriptor) -> ?CompactSignalsToken; token_tag2string(signalsToken) -> ?CompactSignalsToken; %% token_tag2string(X) -> ?CompactSignalTypeToken; token_tag2string(statisticsDescriptor) -> ?CompactStatsToken; token_tag2string(statsToken) -> ?CompactStatsToken; %% token_tag2string(X) -> ?CompactStreamToken; token_tag2string(subtractReq) -> ?CompactSubtractToken; token_tag2string(subtractReply) -> ?CompactSubtractToken; %% token_tag2string(X) -> ?CompactSynchISDNToken; %% token_tag2string(X) -> ?CompactTerminationStateToken; token_tag2string(test) -> ?CompactTestToken; token_tag2string(timeOut) -> ?CompactTimeOutToken; token_tag2string(onTimeOut) -> ?CompactTimeOutToken; token_tag2string(topologyAudit) -> ?CompactTopologyToken; %% token_tag2string(X) -> ?CompactTransToken; %% token_tag2string(X) -> ?CompactV18Token; %% token_tag2string(X) -> ?CompactV22Token; %% token_tag2string(X) -> ?CompactV22bisToken; %% token_tag2string(X) -> ?CompactV32Token; %% token_tag2string(X) -> ?CompactV32bisToken; %% token_tag2string(X) -> ?CompactV34Token; %% token_tag2string(X) -> ?CompactV76Token; %% token_tag2string(X) -> ?CompactV90Token; %% token_tag2string(X) -> ?CompactV91Token; %% token_tag2string(X) -> ?CompactVersionToken; token_tag2string(_) -> []. %%---------------------------------------------------------------------- %% Define various macros used by the actual generator code %%---------------------------------------------------------------------- -define(EQUAL, [?EqualToken]). -define(COLON, [?ColonToken]). -define(LBRKT, [?LbrktToken]). -define(RBRKT, [?RbrktToken]). -define(LSBRKT, [?LsbrktToken]). -define(RSBRKT, [?RsbrktToken]). -define(COMMA, [?CommaToken]). -define(DOT, [?DotToken]). -define(SLASH, [?SlashToken]). -define(DQUOTE, [?DoubleQuoteToken]). -define(SP, [?SpToken]). -define(HTAB, [?HtabToken]). -define(CR, [?CrToken]). -define(LF, [?LfToken]). -define(LWSP, []). -define(EOL, ?LF). -define(WSP, ?SP). -define(SEP, ?WSP). -define(INIT_INDENT, []). -define(INC_INDENT(State), State). -define(INDENT(State), State). -define(LBRKT_INDENT(_State), [?LbrktToken]). -define(RBRKT_INDENT(_State), [?RbrktToken]). -define(COMMA_INDENT(_State), [?CommaToken]). -define(SEP_INDENT(_State), [?LfToken]). %%---------------------------------------------------------------------- %% Define token macros %%---------------------------------------------------------------------- -define(AddToken , ?CompactAddToken). -define(AuditToken , ?CompactAuditToken). -define(AuditCapToken , ?CompactAuditCapToken). -define(AuditValueToken , ?CompactAuditValueToken). -define(AuthToken , ?CompactAuthToken). -define(BothwayToken , ?CompactBothwayToken). -define(BriefToken , ?CompactBriefToken). -define(BufferToken , ?CompactBufferToken). -define(CtxToken , ?CompactCtxToken). -define(ContextAuditToken , ?CompactContextAuditToken). -define(DigitMapToken , ?CompactDigitMapToken). -define(DiscardToken , ?CompactDiscardToken). -define(DisconnectedToken , ?CompactDisconnectedToken). -define(DelayToken , ?CompactDelayToken). -define(DeleteToken , ?CompactDeleteToken). -define(DurationToken , ?CompactDurationToken). -define(EmbedToken , ?CompactEmbedToken). -define(EmergencyToken , ?CompactEmergencyToken). -define(EmergencyOffToken , ?CompactEmergencyOffToken). -define(ErrorToken , ?CompactErrorToken). -define(EventBufferToken , ?CompactEventBufferToken). -define(EventsToken , ?CompactEventsToken). -define(FailoverToken , ?CompactFailoverToken). -define(ForcedToken , ?CompactForcedToken). -define(GracefulToken , ?CompactGracefulToken). -define(H221Token , ?CompactH221Token). -define(H223Token , ?CompactH223Token). -define(H226Token , ?CompactH226Token). -define(HandOffToken , ?CompactHandOffToken). -define(ImmAckRequiredToken , ?CompactImmAckRequiredToken). -define(InactiveToken , ?CompactInactiveToken). -define(InterruptByEventToken , ?CompactInterruptByEventToken). -define(InterruptByNewSignalsDescrToken, ?CompactInterruptByNewSignalsDescrToken). -define(IsolateToken , ?CompactIsolateToken). -define(InSvcToken , ?CompactInSvcToken). -define(KeepActiveToken , ?CompactKeepActiveToken). -define(LocalToken , ?CompactLocalToken). -define(LocalControlToken , ?CompactLocalControlToken). -define(LockStepToken , ?CompactLockStepToken). -define(LoopbackToken , ?CompactLoopbackToken). -define(MediaToken , ?CompactMediaToken). -define(MegacopToken , ?CompactMegacopToken). -define(MethodToken , ?CompactMethodToken). -define(MgcIdToken , ?CompactMgcIdToken). -define(ModeToken , ?CompactModeToken). -define(ModifyToken , ?CompactModifyToken). -define(ModemToken , ?CompactModemToken). -define(MoveToken , ?CompactMoveToken). -define(MtpToken , ?CompactMtpToken). -define(MuxToken , ?CompactMuxToken). -define(NotifyToken , ?CompactNotifyToken). -define(NotifyCompletionToken , ?CompactNotifyCompletionToken). -define(Nx64kToken , ?CompactNx64kToken). -define(ObservedEventsToken , ?CompactObservedEventsToken). -define(OffToken , ?CompactOffToken). -define(OnewayToken , ?CompactOnewayToken). -define(OnOffToken , ?CompactOnOffToken). -define(OnToken , ?CompactOnToken). -define(OtherReasonToken , ?CompactOtherReasonToken). -define(OutOfSvcToken , ?CompactOutOfSvcToken). -define(PackagesToken , ?CompactPackagesToken). -define(PendingToken , ?CompactPendingToken). -define(PriorityToken , ?CompactPriorityToken). -define(ProfileToken , ?CompactProfileToken). -define(ReasonToken , ?CompactReasonToken). -define(RecvonlyToken , ?CompactRecvonlyToken). -define(ReplyToken , ?CompactReplyToken). -define(ResponseAckToken , ?CompactResponseAckToken). -define(RestartToken , ?CompactRestartToken). -define(RemoteToken , ?CompactRemoteToken). -define(ReservedGroupToken , ?CompactReservedGroupToken). -define(ReservedValueToken , ?CompactReservedValueToken). -define(SendonlyToken , ?CompactSendonlyToken). -define(SendrecvToken , ?CompactSendrecvToken). -define(ServicesToken , ?CompactServicesToken). -define(ServiceStatesToken , ?CompactServiceStatesToken). -define(ServiceChangeToken , ?CompactServiceChangeToken). -define(ServiceChangeAddressToken , ?CompactServiceChangeAddressToken). -define(SignalListToken , ?CompactSignalListToken). -define(SignalsToken , ?CompactSignalsToken). -define(SignalTypeToken , ?CompactSignalTypeToken). -define(StatsToken , ?CompactStatsToken). -define(StreamToken , ?CompactStreamToken). -define(SubtractToken , ?CompactSubtractToken). -define(SynchISDNToken , ?CompactSynchISDNToken). -define(TerminationStateToken , ?CompactTerminationStateToken). -define(TestToken , ?CompactTestToken). -define(TimeOutToken , ?CompactTimeOutToken). -define(TopologyToken , ?CompactTopologyToken). -define(TransToken , ?CompactTransToken). -define(V18Token , ?CompactV18Token). -define(V22Token , ?CompactV22Token). -define(V22bisToken , ?CompactV22bisToken). -define(V32Token , ?CompactV32Token). -define(V32bisToken , ?CompactV32bisToken). -define(V34Token , ?CompactV34Token). -define(V76Token , ?CompactV76Token). -define(V90Token , ?CompactV90Token). -define(V91Token , ?CompactV91Token). -define(VersionToken , ?CompactVersionToken). %%---------------------------------------------------------------------- %% Include the generator code %%---------------------------------------------------------------------- -include("megaco_text_gen_v2.hrl").