summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--kme.erl166
-rw-r--r--kme.hrl3
-rw-r--r--lib/kme.set.asn11
3 files changed, 168 insertions, 2 deletions
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.
%%%
diff --git a/kme.hrl b/kme.hrl
index b5dc864..efe36b2 100644
--- a/kme.hrl
+++ b/kme.hrl
@@ -206,4 +206,7 @@ serialNumber, registeredDigits = asn1_NOVALUE, callerName = asn1_NOVALUE}).
-record('KmeSpeedDialRequest',{
startSerialNo, number, tenantNo = asn1_NOVALUE}).
+-record('EscapeArgument',{
+escapeRegisterID = asn1_NOVALUE, security = asn1_NOVALUE, privateData}).
+
-endif. %% _KME_HRL_
diff --git a/lib/kme.set.asn1 b/lib/kme.set.asn1
index 2b36391..499743c 100644
--- a/lib/kme.set.asn1
+++ b/lib/kme.set.asn1
@@ -1 +1,2 @@
+CSTA-escape-service.asn1
KME-specific-types.asn1