smsc-id's can't be unique. That would ruin load-balancing for example.

smsc-admin-id's could be unique though... (imho, they _should_ be unique, 
otherwise it's pointless to use it).

Regards,

Alex
--
Alejandro Guerrieri
[email protected]



On 19/03/2010, at 12:51, Konstantin Vayner wrote:

> Actually, now that i'm rereading this conversation again...
> 
> > You have to remember SMSC pointer not only SMSC-name/id and then teach all 
> > routing parts
> > to respect it...
> 
> What if kannel gets shut down and then starts up again?
> Obviousely, smsc pointers are different... 
> 
> I say lets make smsc-id's a must and unique, that'll make things better ;)
> 
> On Thu, Mar 18, 2010 at 11:00 AM, Alexander Malysh <[email protected]> wrote:
> Hi,
> 
> the possibility for endless loop is equal for each part. So this will not 
> help... We need real fix...
> 
> Thanks,
> Alexander Malysh
> 
> Am 17.03.2010 um 18:04 schrieb Michael Zervakis:
> 
> > Dear Alex,
> >
> >   From my experience endless loops from temporary errors usually occur 
> > before ever transmitting the first message part. It's a very rare occurence 
> > to transmit first part and then enter in an endless loop with left parts. A 
> > partial fix could be to keep two counters in split_parts struct, parts_left 
> > and parts_len, to make it possible to determine which part we are 
> > transmitting. So if temp error occurs and we are sending first part we can 
> > safely put the whole message into resend queue without the drawback of 
> > sending extra SMS parts to receiver. I know this is not a real fix, but I 
> > believe it will hanlde most of the endless loop cases.
> >
> >
> > Am 17.12.2009 um 11:28 schrieb Konstantin Vayner:
> >
> >
> >
> > why remembering smsc-id in sms.smsc_id is not enough?
> >
> >
> > due to accepted-smsc in smsc config group and because SMSCs may have the 
> > same names (or even no names defines)...
> >
> >
> >
> > how does smsbox remember routing when i submit a message with predefined 
> > smsc id from http (sendsms) ?
> >
> > On Thu, Dec 17, 2009 at 12:10 PM, Alexander Malysh <[email protected] 
> > <mailto:[email protected]>> wrote:
> >
> >
> > Am 17.12.2009 um 10:43 schrieb Konstantin Vayner:
> >
> >
> >
> > so the best option would be to requeue the part via same smsc, right ?
> >
> >
> > yes, but it's not easy todo. You have to remember SMSC pointer not only 
> > SMSC-name/id and then teach all routing parts
> >
> > to respect it...
> >
> >
> >
> > cause requeueing all parts may also get extra messages to the handset 
> > despite it not being able to reconstruct (not to mention the extra money ;) 
> > )
> >
> > On Thu, Dec 17, 2009 at 11:33 AM, Alexander Malysh <[email protected] 
> > <mailto:[email protected]>> wrote:
> >
> > Hi,
> >
> >
> > unfortunately this will not work as expected (the rule is: _all_ parts if 
> > multipart message have to be send via the same SMSC)...
> >
> >
> > example:
> >
> >
> >           SMSC-A -> splits (2 parts) -> 1 part sent OK -> 2 part get temp. 
> > error -> you put it into global queue for resend -> 2 part sent via SMSC-B 
> > -> handset rejects it
> >
> >
> > We have only two possibility here:
> >
> > 1) if temp error occurs put the _whole_ message into resend queue and 
> > resend then _all_ parts (very easy todo)
> >
> > 2) remember smsc which was used for first parts and resend it via the same 
> > smsc (complicated but save money :) )
> >
> >
> > Thanks,
> >
> > Alexander Malysh
> >
> >
> > Am 16.12.2009 um 18:17 schrieb Konstantin Vayner:
> >
> >
> >
> > Bug report: http://redmine.kannel.org/issues/show/529
> >
> > Quote from gw/bb_smscconn.c :
> >
> > static void handle_split(SMSCConn *conn, Msg *msg, long reason)
> > {
> >   struct split_parts *split = msg->sms.split_parts;
> >
> >   /*
> >    * If temporarely failed, try again immediately but only if connection 
> > active.
> >    * Because if connection is not active we will loop for ever here 
> > consuming 100% CPU
> >    * time due to internal queue cleanup in smsc module that call 
> > bb_smscconn_failed.
> >    */
> >   if (reason == SMSCCONN_FAILED_TEMPORARILY && smscconn_status(conn) == 
> > SMSCCONN_ACTIVE &&
> >       smscconn_send(conn, msg) == 0) {
> >       /* destroy this message because it will be duplicated in smsc module 
> > */
> >       msg_destroy(msg);
> >       return;
> >   }
> >
> > (end quote)
> >
> > So, if an smsc is alive and throws temporary error every time you try to 
> > submit such a message, we enter endless loop of attempting to resend it....
> >
> >
> > Suggested patch follows (also attached).
> > Sorry its not cvs diff - having firewall issues accessing pserver now so i 
> > ran diff vs snapshot generated yesterday
> > I will be able to produce a normal cvs diff tomorrow morning if it is needed
> >
> >
> > --- kannel-snapshot/gw/bb_smscconn.c    2009-11-15 16:12:28.000000000 +0200
> > +++ gateway-cvs/gw/bb_smscconn.c        2009-12-16 19:47:32.000000000 +0200
> > @@ -203,18 +203,6 @@
> >    struct split_parts *split = msg->sms.split_parts;
> >       /*
> > -     * If temporarely failed, try again immediately but only if connection 
> > active.
> > -     * Because if connection is not active we will loop for ever here 
> > consuming 100% CPU
> > -     * time due to internal queue cleanup in smsc module that call 
> > bb_smscconn_failed.
> > -     */
> > -    if (reason == SMSCCONN_FAILED_TEMPORARILY && smscconn_status(conn) == 
> > SMSCCONN_ACTIVE &&
> > -        smscconn_send(conn, msg) == 0) {
> > -        /* destroy this message because it will be duplicated in smsc 
> > module */
> > -        msg_destroy(msg);
> > -        return;
> > -    }
> > -   -    /*
> >     * if the reason is not a success and status is still success
> >     * then set status of a split to the reason.
> >     * Note: reason 'malformed','discarded' or 'rejected' has higher 
> > priority!
> > @@ -303,7 +291,7 @@
> > void bb_smscconn_send_failed(SMSCConn *conn, Msg *sms, int reason, Octstr 
> > *reply)
> > {
> > -    if (sms->sms.split_parts != NULL) {
> > +    if (reason != SMSCCONN_FAILED_TEMPORARILY && sms->sms.split_parts != 
> > NULL) {
> >        handle_split(conn, sms, reason);
> >        octstr_destroy(reply);
> >        return;
> >
> >
> >
> >
> >
> > <bb_smscconn.diff>
> >
> >
> >
> >
> >
> >
> >
> 
> 

Reply via email to