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.
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, [