diff --git a/asn1/TC.asn b/asn1/TC.asn new file mode 100644 index 0000000..b002b6f --- /dev/null +++ b/asn1/TC.asn @@ -0,0 +1,101 @@ +-- This is a manually-crafted simplified TCAP ASN.1 syntax, created +-- for the signerl project by Harald Welte +-- +-- The "problem" with the real TCAP spec is its use of templates, +-- which is nice if you want to create a fully integrated TCAP + MAP +-- decoder, but in this case we simply want to parse all the common +-- parts and ignore the application-specific parameters/rsults of the +-- respective operation. + +TC + +DEFINITIONS IMPLICIT TAGS + +::= + +BEGIN + +Components ::= [APPLICATION 12] SEQUENCE SIZE (1..MAX) OF Component + +Component ::= CHOICE { + invoke [1] Invoke, + returnResult [2] ReturnResult, + returnError [3] ReturnError, + reject [4] Reject, + returnResultNotLast [7] ReturnResult +} + +Invoke ::= SEQUENCE { + invokeId InvokeId, + linkedId CHOICE { + present [0] IMPLICIT present < InvokeId, + absent [1] IMPLICIT NULL + } OPTIONAL, + opcode Code, + argument Param +} + +ReturnResult ::= SEQUENCE { + invokeId InvokeId, + result SEQUENCE { + opcode Code, + result Param OPTIONAL + } +} + +ReturnError ::= SEQUENCE { + invokeId InvokeId, + errcode Code, + parameter Param OPTIONAL +} + +Reject ::= SEQUENCE { + invokeId InvokeId, + problem CHOICE { + general [0] GeneralProblem, + invoke [1] InvokeProblem, + returnResult [2] ReturnResultProblem, + returnError [3] ReturnErrorProblem + } +} + +GeneralProblem ::= INTEGER { + unrecognizedPDU(0), mistypedPDU(1), badlyStructuredPDU(2)} + +InvokeProblem ::= INTEGER { + duplicateInvocation(0), unrecognizedOperation(1), mistypedArgument(2), + resourceLimitation(3), releaseInProgress(4), unrecognizedLinkedId(5), + linkedResponseUnexpected(6), unexpectedLinkedOperation(7)} + +ReturnResultProblem ::= INTEGER { + unrecognizedInvocation(0), resultResponseUnexpected(1), mistypedResult(2) +} + +ReturnErrorProblem ::= INTEGER { + unrecognizedInvocation(0), errorResponseUnexpected(1), unrecognizedError(2), + unexpectedError(3), mistypedParameter(4)} + +RejectProblem ::= INTEGER { + general-unrecognizedPDU(0), general-mistypedPDU(1), + general-badlyStructuredPDU(2), invoke-duplicateInvocation(10), + invoke-unrecognizedOperation(11), invoke-mistypedArgument(12), + invoke-resourceLimitation(13), invoke-releaseInProgress(14), + invoke-unrecognizedLinkedId(15), invoke-linkedResponseUnexpected(16), + invoke-unexpectedLinkedOperation(17), + returnResult-unrecognizedInvocation(20), + returnResult-resultResponseUnexpected(21), returnResult-mistypedResult(22), + returnError-unrecognizedInvocation(30), + returnError-errorResponseUnexpected(31), returnError-unrecognizedError(32), + returnError-unexpectedError(33), returnError-mistypedParameter(34)} + +InvokeId ::= CHOICE {present INTEGER, + absent NULL +} + +Code ::= CHOICE {local INTEGER, + global OBJECT IDENTIFIER +} + +Param ::= ANY + +END diff --git a/asn1/tcap_asn.set.asn1 b/asn1/tcap_asn.set.asn1 new file mode 100644 index 0000000..af2b2d3 --- /dev/null +++ b/asn1/tcap_asn.set.asn1 @@ -0,0 +1 @@ +TC.asn diff --git a/ebin/osmo_map.app b/ebin/osmo_map.app index 651e055..c91ee3d 100644 --- a/ebin/osmo_map.app +++ b/ebin/osmo_map.app @@ -1,7 +1,7 @@ {application, osmo_map, [{description, "Osmocom SS7 MAP"}, {vsn, "1"}, - {modules, [map, map_codec]}, + {modules, [map, map_codec, tcap_asn]}, {registered, []}, {applications, []}, {env, [