diff options
author | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2016-10-14 17:56:17 +0200 |
---|---|---|
committer | Neels Hofmeyr <nhofmeyr@sysmocom.de> | 2017-03-09 17:12:23 +0100 |
commit | 3a30f461d4c1ece3157ed39081b59c6c1c98f425 (patch) | |
tree | ff18f2b83cf23b54880eb8a5a54563dccf8e22e8 /openbsc/src/libmgcp/mgcp_common.c | |
parent | f5828633bc1d56251bd6aa0a8b97ab1b47633911 (diff) |
mgcp: handle responses from the MGCP GW
Change-Id: I5c0493feaec775461b5a017c36b93cc2ad63c896
Diffstat (limited to 'openbsc/src/libmgcp/mgcp_common.c')
-rw-r--r-- | openbsc/src/libmgcp/mgcp_common.c | 21 |
1 files changed, 21 insertions, 0 deletions
diff --git a/openbsc/src/libmgcp/mgcp_common.c b/openbsc/src/libmgcp/mgcp_common.c index 9f104739a..4d7d36ab8 100644 --- a/openbsc/src/libmgcp/mgcp_common.c +++ b/openbsc/src/libmgcp/mgcp_common.c @@ -20,6 +20,8 @@ * */ +#include <errno.h> + #include <osmocom/core/utils.h> #include <openbsc/mgcp.h> @@ -30,3 +32,22 @@ const struct value_string mgcp_connection_mode_strs[] = { { MGCP_CONN_RECV_ONLY, "recvonly" }, { MGCP_CONN_LOOPBACK, "loopback" }, }; + +/* Ensure that the msg->l2h is NUL terminated. */ +int mgcp_msg_terminate_nul(struct msgb *msg) +{ + unsigned char *tail = msg->l2h + msgb_l2len(msg); /* char after l2 data */ + if (tail[-1] == '\0') + /* nothing to do */; + else if (msgb_tailroom(msg) > 0) + tail[0] = '\0'; + else if (tail[-1] == '\r' || tail[-1] == '\n') + tail[-1] = '\0'; + else { + LOGP(DMGCP, LOGL_ERROR, "Cannot NUL terminate MGCP message: " + "Length: %d, Buffer size: %d\n", + msgb_l2len(msg), msg->data_len); + return -ENOTSUP; + } + return 0; +} |