summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2011-12-09 09:50:26 +0100
committerHarald Welte <laforge@gnumonks.org>2011-12-09 09:50:26 +0100
commit6cc415222f5462409a5eb23b567b05a44b70a33f (patch)
treefa6d41217ef3c685edd4f629d68a751a013770d2
parentd940afc0e8b69e31d0431f5bcd7b822ceb7c1e8f (diff)
Add separate TCAP decoder that is not linked to MAP
this way we can parse only the TCAP layer into dialogue portion and component portion, but without actually parsing those.
-rw-r--r--asn1/TC.asn101
-rw-r--r--asn1/tcap_asn.set.asn11
-rw-r--r--ebin/osmo_map.app2
3 files changed, 103 insertions, 1 deletions
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 <laforge@gnumonks.org>
+--
+-- 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, [