Hi Anton,

Why don't you change the patch to enable a Kannel user to set a parameter in
their SMSC configuration and so choose if they would like the SMSs that are
throttled to move to the beginning of the queue or keep the current
functionality and move the throttled messages to the end of queue (leave as
the default)?

Hopefully this will be accepted and we can then all use this feature.

rgds

----------------------------------------------------------------------------
-------------
Date: Tue, 23 Feb 2010 20:05:01 +0300
From: Anton Virchenko <[email protected]>
To: [email protected]
Subject: SMPP Throttling error processing
Message-ID:
        <[email protected]>
Content-Type: text/plain; charset="iso-8859-1"

Hi all,

I've noticed that after receiving SMPP throttling error 0x58 the message
that hit the limit is moved to the end of the outgoing_sms queue
via bb_smscconn_send_failed() in bb_smscconn.c.
I suggest to keep it in the msgs_to_send queue with the same parameters as
before the error occurred to have it processed first after the throttling
condition is over.

I did the following patch to smsc/smsc_smpp.c in "case submit_sm_resp:"
section from line 1609:
change
***
if (pdu->u.submit_sm_resp.command_status == SMPP_ESME_RTHROTTLED)
    time(&(smpp->throttling_err_time));
else
    smpp->throttling_err_time = 0;

bb_smscconn_send_failed(smpp->conn, msg, reason, octstr_format("0x%08lx/%s",
pdu->u.submit_sm_resp.command_status,

 smpp_error_to_string(pdu->u.submit_sm_resp.command_status)));
***
to
***
if (pdu->u.submit_sm_resp.command_status == SMPP_ESME_RTHROTTLED) {
    time(&(smpp->throttling_err_time));
    /* Put the message back into the SMPP queue */
    gw_prioqueue_produce(smpp->msgs_to_send, msg);
} else {
    smpp->throttling_err_time = 0;
    bb_smscconn_send_failed(smpp->conn, msg, reason,
octstr_format("0x%08lx/%s", pdu->u.submit_sm_resp.command_status,
        smpp_error_to_string(pdu->u.submit_sm_resp.command_status)));
}
***

and in sms.c I have changed the function sms_priority_compare() to reverse
time sorting order (for some reason it was LIFO):
if (msg1->sms.time > msg2->sms.time)
    ret = -1;
else if (msg1->sms.time < msg2->sms.time)
    ret = 1;
-------------- next part --------------
An HTML attachment was scrubbed...
URL:
<http://www.kannel.org/pipermail/devel/attachments/20100223/9c78626b/attachm
ent-0001.html>




Reply via email to