From 9a11f8a7405c14931d651ff49052d3460d5511a2 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Mon, 26 Oct 2015 13:59:21 +0100 Subject: Add escape service to kme --- kme.erl | 166 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 164 insertions(+), 2 deletions(-) (limited to 'kme.erl') diff --git a/kme.erl b/kme.erl index e38d139..3791251 100644 --- a/kme.erl +++ b/kme.erl @@ -145,7 +145,9 @@ 'enc_KmeSpeedDial'/2, 'enc_KmeSpeedDialRequest'/2, 'enc_KmeTimeStamp'/2, -'enc_KmeDeviceLock'/2 +'enc_KmeDeviceLock'/2, +'enc_EscapeResult'/2, +'enc_EscapeArgument'/2 ]). -export([ @@ -277,7 +279,17 @@ 'dec_KmeSpeedDial'/2, 'dec_KmeSpeedDialRequest'/2, 'dec_KmeTimeStamp'/2, -'dec_KmeDeviceLock'/2 +'dec_KmeDeviceLock'/2, +'dec_EscapeResult'/2, +'dec_EscapeArgument'/2 +]). + +-export([ +'enc_escape'/3 +]). + +-export([ +'dec_escape'/3 ]). -export([info/0]). @@ -448,6 +460,8 @@ encode_disp('KmeSpeedDial',Data) -> 'enc_KmeSpeedDial'(Data); encode_disp('KmeSpeedDialRequest',Data) -> 'enc_KmeSpeedDialRequest'(Data); encode_disp('KmeTimeStamp',Data) -> 'enc_KmeTimeStamp'(Data); encode_disp('KmeDeviceLock',Data) -> 'enc_KmeDeviceLock'(Data); +encode_disp('EscapeResult',Data) -> 'enc_EscapeResult'(Data); +encode_disp('EscapeArgument',Data) -> 'enc_EscapeArgument'(Data); encode_disp(Type,_Data) -> exit({error,{asn1,{undefined_type,Type}}}). @@ -580,6 +594,8 @@ decode_disp('KmeSpeedDial',Data) -> 'dec_KmeSpeedDial'(Data); decode_disp('KmeSpeedDialRequest',Data) -> 'dec_KmeSpeedDialRequest'(Data); decode_disp('KmeTimeStamp',Data) -> 'dec_KmeTimeStamp'(Data); decode_disp('KmeDeviceLock',Data) -> 'dec_KmeDeviceLock'(Data); +decode_disp('EscapeResult',Data) -> 'dec_EscapeResult'(Data); +decode_disp('EscapeArgument',Data) -> 'dec_EscapeArgument'(Data); decode_disp(Type,_Data) -> exit({error,{asn1,{undefined_type,Type}}}). @@ -11310,6 +11326,152 @@ Default1 -> exit({error,{asn1,{illegal_enumerated,Default1}}}) end. + +%%================================ +%% EscapeResult +%%================================ +'enc_EscapeResult'(Val) -> + 'enc_EscapeResult'(Val, []). + +'enc_EscapeResult'(Val, TagIn) -> + {EncBytes,EncLen} = case element(1,Val) of + extensions -> + 'CSTA-extension-types':'enc_CSTACommonArguments'(element(2,Val), [<<126>>]); + noData -> + encode_null(element(2,Val), [<<5>>]); + Else -> + exit({error,{asn1,{invalid_choice_type,Else}}}) + end, + +encode_tags(TagIn, EncBytes, EncLen). + + + + +'dec_EscapeResult'(Tlv) -> + 'dec_EscapeResult'(Tlv, []). + +'dec_EscapeResult'(Tlv, TagIn) -> +Tlv1 = match_tags(Tlv, TagIn), +case (case Tlv1 of [CtempTlv1] -> CtempTlv1; _ -> Tlv1 end) of + +%% 'extensions' + {65566, V1} -> + {extensions, 'CSTA-extension-types':'dec_CSTACommonArguments'(V1, [])}; + + +%% 'noData' + {5, V1} -> + {noData, decode_null(V1, [])}; + + Else -> + exit({error,{asn1,{invalid_choice_tag,Else}}}) + end +. + + +%%================================ +%% EscapeArgument +%%================================ +'enc_EscapeArgument'(Val) -> + 'enc_EscapeArgument'(Val, [<<48>>]). + +'enc_EscapeArgument'(Val, TagIn) -> +{_,Cindex1, Cindex2, Cindex3} = Val, + +%%------------------------------------------------- +%% attribute escapeRegisterID(1) with type OCTET STRING OPTIONAL +%%------------------------------------------------- + {EncBytes1,EncLen1} = case Cindex1 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + encode_restricted_string(Cindex1, [<<4>>,<<160>>]) + end, + +%%------------------------------------------------- +%% attribute security(2) External CSTA-security:CSTASecurityData OPTIONAL +%%------------------------------------------------- + {EncBytes2,EncLen2} = case Cindex2 of + asn1_NOVALUE -> {<<>>,0}; + _ -> + 'CSTA-security':'enc_CSTASecurityData'(Cindex2, [<<48>>]) + end, + +%%------------------------------------------------- +%% attribute privateData(3) External CSTA-extension-types:CSTAPrivateData +%%------------------------------------------------- + {EncBytes3,EncLen3} = 'CSTA-extension-types':'enc_CSTAPrivateData'(Cindex3, []), + + BytesSoFar = [EncBytes1, EncBytes2, EncBytes3], +LenSoFar = EncLen1 + EncLen2 + EncLen3, +encode_tags(TagIn, BytesSoFar, LenSoFar). + + +'dec_EscapeArgument'(Tlv) -> + 'dec_EscapeArgument'(Tlv, [16]). + +'dec_EscapeArgument'(Tlv, TagIn) -> + %%------------------------------------------------- + %% decode tag and length + %%------------------------------------------------- +Tlv1 = match_tags(Tlv, TagIn), + +%%------------------------------------------------- +%% attribute escapeRegisterID(1) with type OCTET STRING OPTIONAL +%%------------------------------------------------- +{Term1,Tlv2} = case Tlv1 of +[{131072,V1}|TempTlv2] -> + {decode_octet_string(V1, [4]), TempTlv2}; + _ -> + { asn1_NOVALUE, Tlv1} +end, + +%%------------------------------------------------- +%% attribute security(2) External CSTA-security:CSTASecurityData OPTIONAL +%%------------------------------------------------- +{Term2,Tlv3} = case Tlv2 of +[{16,V2}|TempTlv3] -> + {'CSTA-security':'dec_CSTASecurityData'(V2, []), TempTlv3}; + _ -> + { asn1_NOVALUE, Tlv2} +end, + +%%------------------------------------------------- +%% attribute privateData(3) External CSTA-extension-types:CSTAPrivateData +%%------------------------------------------------- +[V3|Tlv4] = Tlv3, +Term3 = 'CSTA-extension-types':'dec_CSTAPrivateData'(V3, []), + +case Tlv4 of +[] -> true;_ -> exit({error,{asn1, {unexpected,Tlv4}}}) % extra fields not allowed +end, + {'EscapeArgument', Term1, Term2, Term3}. + + + + +%%================================ +%% escape +%%================================ +'enc_escape'('ArgumentType', Val, _RestPrimFieldName) -> + 'enc_EscapeArgument'(Val, [<<48>>]); +'enc_escape'('ResultType', Val, _RestPrimFieldName) -> + 'enc_EscapeResult'(Val, []). + + +'dec_escape'('ArgumentType', Bytes,_) -> + Tlv = tlv_format(Bytes), + 'dec_EscapeArgument'(Tlv, [16]); +'dec_escape'('ResultType', Bytes,_) -> + Tlv = tlv_format(Bytes), + 'dec_EscapeResult'(Tlv, []). + +tlv_format(Bytes) when is_binary(Bytes) -> + {Tlv,_} = ber_decode_nif(Bytes), + Tlv; +tlv_format(Bytes) -> + Bytes. + %%% %%% Run-time functions. %%% -- cgit v1.2.3