Paul Bagyenda wrote:

Hi people,

Just came across a small discrepancy between how the SMPP module decodes MO SMS UDH and how the AT2 module does the same. (To be precise, somebody was testing the incoming concatenation patch I posted earlier, and tripped on this.)

The short story is that the SMPP module includes the header length in the decoded UDH, while the AT2 module does not. The fix is a one- liner (not the cleanest I admit, but it works). Attached.

Hi Paul,

yep, confirmed... so this means:

smsc_at.c - decodes PDU into msg struct with pure UDH data in msg->sms.udhdata:
[...]
    /* if there is a UDH */
    udhlen = 0;
    if (udhi && len > 0) {
        udhlen = octstr_get_char(pdu, pos);
        pos++;
        if (udhlen + 1 > len)
            goto msg_error;
        udh = octstr_copy(pdu, pos, udhlen);
        pos += udhlen;
        len -= udhlen + 1;
    } else if (len <= 0) /* len < 0 is impossible, but sure is sure */
        udhi = 0;
[...]

smsc_smpp.c: - decodes PDU into msg struct with lengh byte in front:
[...]
    /*
     * Encode udh if udhi set
     * for reference see GSM03.40, section 9.2.3.24
     */
    if (pdu->u.deliver_sm.esm_class & ESM_CLASS_SUBMIT_UDH_INDICATOR) {
        int udhl;
        udhl = octstr_get_char(msg->sms.msgdata, 0) + 1;
        debug("bb.sms.smpp",0,"SMPP[%s]: UDH length read as %d",
              octstr_get_cstr(smpp->conn->id), udhl);
        if (udhl > octstr_len(msg->sms.msgdata)) {
error(0, "SMPP[%s]: Mallformed UDH length indicator 0x%03x while message length " "0x%03lx. Discarding MO message.", octstr_get_cstr(smpp->conn->id),
                     udhl, octstr_len(msg->sms.msgdata));
            *reason = SMPP_ESME_RINVESMCLASS;
            goto error;
        }
        msg->sms.udhdata = octstr_copy(msg->sms.msgdata, 0, udhl);
        octstr_delete(msg->sms.msgdata, 0, udhl);
    }
[...]

Now, at least I totally agree that we need to change something here, since the modules act different, and we expect the msg->sms.udhdata to have the same value regardless which "smsc type" it used.

So votes please if we should add the length byte in udhdata or not.

I'm +0 on adding the length byte in smsc_at.c code, hence applying Paul's patch.

Stipe

-------------------------------------------------------------------
Kölner Landstrasse 419
40589 Düsseldorf, NRW, Germany

tolj.org system architecture      Kannel Software Foundation (KSF)
http://www.tolj.org/              http://www.kannel.org/

mailto:st_{at}_tolj.org           mailto:stolj_{at}_kannel.org
-------------------------------------------------------------------

Reply via email to