Good Hello!
We've identified a bug in the STABLE version (1.2.1) involving the PPG.
When messages with length 140-[0-6] arrive at dispatch_datagram in
wapbox.c, the length of the existing udhdata (UDH port addressing IE) is
not counted with the length of the msgdata (the WSP Push PDU).
This results in malformed Push OTA messages being sent out.
Our results with the one-line patch needed to fix this in 1.2.1 have
been satisfactory.
This bug is fixed in CVS HEAD by hard-wiring the maximum number of
messages to 10. The enclosed patch reverts to a corrected version of the
old logic to calculate the number of SMs needed for Push OTA.
David WHITE
ONE GmbH
Index: gw/wapbox.c
===================================================================
RCS file: /home/cvs/gateway/gw/wapbox.c,v
retrieving revision 1.169
diff -u -r1.169 wapbox.c
--- gw/wapbox.c 7 Oct 2003 22:58:42 -0000 1.169
+++ gw/wapbox.c 24 Oct 2003 12:29:11 -0000
@@ -359,6 +359,8 @@
*part;
List *sms_datagrams;
static unsigned long msg_sequence = 0L; /* Used only by this function */
+ long max_msgs,
+ msg_len;
msg = part = NULL;
@@ -375,8 +377,10 @@
} else {
msg_sequence = counter_increase(sequence_counter) & 0xff;
msg = pack_sms_datagram(dgram);
+ msg_len = octstr_len(msg->sms.msgdata) + octstr_len(msg->sms.udhdata);
+ num_msgs = (msg_len / MAX_SMS_OCTETS) + 1;
sms_datagrams = sms_split(msg, NULL, NULL, NULL, NULL, concatenation,
- msg_sequence, max_messages, MAX_SMS_OCTETS);
+ msg_sequence, max_msgs, MAX_SMS_OCTETS);
debug("wap",0,"WDP (wapbox): delivering %ld segments to bearerbox",
list_len(sms_datagrams));
while ((part = list_extract_first(sms_datagrams)) != NULL) {