aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--contrib/TestSender.st6
-rw-r--r--src/mtp_layer3.c16
2 files changed, 22 insertions, 0 deletions
diff --git a/contrib/TestSender.st b/contrib/TestSender.st
index c059dae..fa3a2c6 100644
--- a/contrib/TestSender.st
+++ b/contrib/TestSender.st
@@ -18,6 +18,12 @@ Eval [
datagram data: msg.
socket nextPut: datagram.
+ "TFP"
+ msg := #(2 0 0 1 0 0 0 0 0 0 0 8
+ 192 232 197 7 0 20 62 2) asByteArray.
+ datagram data: msg.
+ socket nextPut: datagram.
+
"TRA"
msg := #(2 0 0 1 0 0 0 0 0 0 0 6 192 232 197 7 0 23) asByteArray.
datagram data: msg.
diff --git a/src/mtp_layer3.c b/src/mtp_layer3.c
index 14933f2..7dd3a7f 100644
--- a/src/mtp_layer3.c
+++ b/src/mtp_layer3.c
@@ -288,6 +288,7 @@ static int mtp_link_sign_msg(struct mtp_link *link, struct mtp_level_3_hdr *hdr,
{
struct msgb *msg;
struct mtp_level_3_cmn *cmn;
+ uint16_t *apc;
if (hdr->ni != link->ni || l3_len < 1) {
LOGP(DINP, LOGL_ERROR, "Unhandled data (ni: %d len: %d)\n",
@@ -321,6 +322,21 @@ static int mtp_link_sign_msg(struct mtp_link *link, struct mtp_level_3_hdr *hdr,
break;
}
break;
+ case MTP_PROHIBIT_MSG_GRP:
+ switch (cmn->h1) {
+ case MTP_PROHIBIT_MSG_SIG:
+ if (l3_len < 3) {
+ LOGP(DINP, LOGL_ERROR, "TFP is too short.\n");
+ return -1;
+ }
+
+ apc = (uint16_t *) &hdr->data[1];
+ LOGP(DINP, LOGL_INFO,
+ "TFP for the affected point code: %d\n", *apc);
+ return 0;
+ break;
+ }
+ break;
}
LOGP(DINP, LOGL_ERROR, "Unknown message:%d/%d %s\n", cmn->h0, cmn->h1, hexdump(&hdr->data[0], l3_len));