aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorDaniel Willmann <daniel@totalueberwachung.de>2008-12-29 03:45:50 +0000
committerDaniel Willmann <daniel@totalueberwachung.de>2008-12-29 03:45:50 +0000
commitaecbbed5e439d03c613531c2f64d9c3eacde66fa (patch)
treecdbf22ec6ed4ec82ebfc8f07ada634829a0caa2e /src
parent9dfbf253c69401ebd78066ea53f2187530ad5cea (diff)
RP-ACK needs to be sent in a CP-DATA
Diffstat (limited to 'src')
-rw-r--r--src/gsm_04_11.c11
1 files changed, 7 insertions, 4 deletions
diff --git a/src/gsm_04_11.c b/src/gsm_04_11.c
index a409a59db..59ab6d356 100644
--- a/src/gsm_04_11.c
+++ b/src/gsm_04_11.c
@@ -127,10 +127,12 @@ static int gsm411_send_rp_ack(struct gsm_lchan *lchan, u_int8_t trans_id,
msg->lchan = lchan;
gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh));
- gh->proto_discr = GSM48_PDISC_SMS | trans_id<<4;
- gh->msg_type = GSM411_MT_CP_ACK;
+ // Outgoing needs the highest bit set
+ gh->proto_discr = GSM48_PDISC_SMS | trans_id<<4 | 0x80;
+ gh->msg_type = GSM411_MT_CP_DATA;
rp = (struct gsm411_rp_hdr *)msgb_put(msg, sizeof(*rp));
+ rp->len = 2;
rp->msg_type = GSM411_MT_RP_ACK_MT;
rp->msg_ref = msg_ref;
@@ -149,8 +151,9 @@ static int gsm411_send_rp_error(struct gsm_lchan *lchan, u_int8_t trans_id,
msg->lchan = lchan;
gh = (struct gsm48_hdr *) msgb_put(msg, sizeof(*gh));
- gh->proto_discr = GSM48_PDISC_SMS | trans_id<<4;
- gh->msg_type = GSM411_MT_CP_ERROR;
+ // Outgoing needs the highest bit set
+ gh->proto_discr = GSM48_PDISC_SMS | trans_id<<4 | 0x80;
+ gh->msg_type = GSM411_MT_CP_DATA;
rp = (struct gsm411_rp_hdr *)msgb_put(msg, sizeof(*rp));
rp->msg_type = GSM411_MT_RP_ERROR_MT;