aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-02-02 20:06:52 +0100
committerHarald Welte <laforge@gnumonks.org>2018-02-03 21:45:47 +0100
commitd13700dd6c812961ba34a0ff0a5bce80d0f5d0e7 (patch)
tree983053ac9ed2591a25dbbf552a237390e0d52d55
parent8a3dc925da5f6249659012df005a5c6ece9f38a3 (diff)
MNCC: Represent 'keypad' as one-character charstring, not int
The MNCC Unix Domain Socket encoding uses an int here, which is a bit odd, given that it's an ASCII / IA5 char value on the actual GSM L3. Let's convert from/to something useful. Change-Id: Id17ac502ca33f4962214a3d5938d0dc29ca6ec1b
-rw-r--r--library/MNCC_EncDec.cc10
-rw-r--r--library/MNCC_Types.ttcn2
2 files changed, 7 insertions, 5 deletions
diff --git a/library/MNCC_EncDec.cc b/library/MNCC_EncDec.cc
index 2c68cb17..fef2a401 100644
--- a/library/MNCC_EncDec.cc
+++ b/library/MNCC_EncDec.cc
@@ -155,8 +155,8 @@ OCTETSTRING enc__MNCC__PDU(const MNCC__PDU& in)
mncc.fields |= MNCC_F_SIGNAL;
}
if (in_sig.keypad().is_value()) {
- const INTEGER &kpd = in_sig.keypad();
- mncc.signal = kpd;
+ const CHARSTRING &kpd = in_sig.keypad();
+ mncc.signal = (int) kpd[0].get_char();
mncc.fields |= MNCC_F_KEYPAD;
}
mncc.more = in_sig.more();
@@ -292,8 +292,10 @@ MNCC__PDU dec__MNCC__PDU(const OCTETSTRING& in)
sign.ssversion() = CHARSTRING(in_mncc->ssversion.info);
if (in_mncc->fields & MNCC_F_CCCAP)
sign.cccap() = MNCC__cccap(in_mncc->cccap.dtmf, in_mncc->cccap.pcp);
- if (in_mncc->fields & MNCC_F_KEYPAD)
- sign.keypad() = in_mncc->keypad;
+ if (in_mncc->fields & MNCC_F_KEYPAD) {
+ char kpd[2] = { (char) in_mncc->keypad, 0 };
+ sign.keypad() = CHARSTRING(kpd);
+ }
if (in_mncc->fields & MNCC_F_SIGNAL)
sign.signal() = in_mncc->signal;
diff --git a/library/MNCC_Types.ttcn b/library/MNCC_Types.ttcn
index 258db3fb..bc7c4e65 100644
--- a/library/MNCC_Types.ttcn
+++ b/library/MNCC_Types.ttcn
@@ -303,7 +303,7 @@ type record MNCC_cccap {
};
type int MNCC_notify (0..127);
-type int MNCC_keypad (0..127);
+type charstring MNCC_keypad length (1);
type enumerated MNCC_bcap {
GSM_MNCC_BCAP_SPEECH (0),