Please share the patch ;)

== Rene

-----Original Message-----
From: Toby Phipps [mailto:toby.phi...@nexmedia.com.sg] 
Sent: Monday, 09 August, 2010 18:24
To: 'Nikos Balkanas'; 'Rene Kluwen'; users@kannel.org
Subject: RE: Life without smsbox

Hi Nikos,

I'll certainly try what you suggest, but I'm not quite sure that's the
issue. Although bearerbox may think it doesn't have any smsboxes connected,
it's still happily routing messages to sqlbox - here's a brief extract from
the bearerbox log:

2010-08-09 23:46:52 [24133] [4] WARNING: smsbox_list empty!
2010-08-09 23:46:52 [24133] [4] DEBUG: Thread 4
(gw/bb_boxc.c:sms_to_smsboxes) terminates.
2010-08-09 23:46:52 [24133] [14] DEBUG: send_msg: sending msg to boxc:
<sqlbox>

sqlbox is also getting each message as intended, and I can see it arriving
in its log, and I can also see bearerbox queuing them in the status output.

    smsbox:sqlbox, IP 127.0.0.1 (110 queued), (on-line 0d 0h 0m 50s)

The piece that's missing really seems to be the ACK from sqlbox to bearerbox
for each DLR message it receives. bearerbox is successfully sending each DLR
to sqlbox, and sqlbox is successfully logging it to the DB. However, as
sqlbox is sending no ACK back, bearerbox has no way of knowing that sqlbox
received the DLR and is therefore queuing it locally, and periodically
re-sending to sqlbox.

Now I've read the sqlbox code, it seems that it's a thin shell and doesn't
implement ANY of the ACK processing that smsbox does. It simply logs to the
DB, passes messages to smsbox and hopes that smsbox will pass it back an ACK
that it can then pass to bearerbox so that the loop can be closed. However,
without an smsbox connection, sqlbox is simply processing and dumping each
message from bearerbox, leading to the unnecessary queuing in bearerbox.

Anyway, that's what I've worked out from a few hours of looking through the
code. This is nothing compared to the years that everyone else has with it,
and I'm happy to be proved wrong! 

Just as an aside, between the time I sent my earlier email and I saw your
response, I implemented a very rudimentary #2 (ACK in sqlbox) and it seems
to have resolved the issue. All I'm doing is checking on each message
receipt inside sqlbox to see if a smsbox is connected. If so then nothing
changes - if not, then sqlbox returns the successful ACK. 

Thanks,
Toby

-----Original Message-----
From: Nikos Balkanas [mailto:nbalka...@gmail.com] 
Sent: Tuesday, 10 August 2010 12:08 AM
To: Toby Phipps; 'Rene Kluwen'; users@kannel.org
Subject: Re: Life without smsbox

Hi,

You are missing an smsbox-route group. Once you configure that, your DLR 
problem will disappear. You need to set an smsbox-id in your smsbox group (I

remeber you already have a dummy one), that corresponds to the id in your 
sqlbox. Then configure that to your smsbox-route group. Right now your bb is

getting the DLRs, but doesn't know where to send them. Granted it is pretty 
lame to have only 1 smsbox connected to it, and not know what to do with it.

It could be fixed sometime.

Do not proceed with (2).

BR,
Nikos
----- Original Message ----- 
From: "Toby Phipps" <toby.phi...@nexmedia.com.sg>
To: "'Nikos Balkanas'" <nbalka...@gmail.com>; "'Rene Kluwen'" 
<rene.klu...@chimit.nl>; <users@kannel.org>
Sent: Monday, August 09, 2010 6:17 PM
Subject: RE: Life without smsbox


> Hi Nikos,
>
> Thanks again for the feedback. You hit the nail on the head - I am seeing
> "WARNING: smsbox_list empty!" throughout the bearerbox log. Looks like
> running sqlbox alone is not enough to truly emulate a smsbox.
>
> So, I delved into the source for sqlbox, and from what I can see, it has 
> no
> ACK response logic at all. It receives the DLR (or MO) from bearerbox,
> writes it to the DB and then passes it to a connected smsbox. It appears 
> to
> rely on smsbox to generate the ACK - there's logic in there to pass smsbox
> messages back to bearerbox (which I assume would include the ACKs), but
> nothing to handle the situation where there is no smsbox connected. In 
> this
> case, the message gets written to the DB then simply dropped, hence the
> queuing in bearerbox that I'm seeing.
>
> So, I'm looking at two options and would very much appreciate advice on
> which one would be most appropriate:
>
> 1. Configure a "dummy" smsbox to receive/ACK the messages from sqlbox but 
> do
> nothing else them. Not sure if I can configure smsbox to do this (I'll hit
> the doc), whether I'll need to patch it to provide a "ACK and drop" mode, 
> or
> whether I should have it call a dummy destination to avoid the patching.
>
> 2. Enhance sqlbox to generate its own ACK if it doesn't have a connected
> smsbox to pass the MO/DLR onto.
>
> Any suggestions? If not, I'll probably start on #2 as it seems much 
> cleaner
> to me and avoids the unnecessary overhead of a dummy smsbox process and
> associated IPC. Who is the appropriate sqlbox owner that I should run 
> these
> changes by? I'm sure I'm not the only one that has no need for smsbox.
>
> Thanks,
> Toby.
>
> -----Original Message-----
> From: Nikos Balkanas [mailto:nbalka...@gmail.com]
> Sent: Monday, 9 August 2010 2:17 AM
> To: Toby Phipps; 'Rene Kluwen'; users@kannel.org
> Subject: Re: Life without smsbox
>
> Hi,
>
> The only way for bearerbox to remove the DLR from store is to receive an
> upstream ACK (smsbox or sqlbox). That is the architectural spec. If this 
> is
> not happenning, sqlbox has a bug. You could check for that in maximum 
> detail
>
> bb (and sqlbox) logs. If there is a problem with routing or boxc ids in 
> bb,
> you should get a lot of warnings like "Warning: smsbox-list empty!", which
> will also build up DLR store queue.
>
> BR,
> Nikos
>
>
> ----- Original Message ----- 
> From: "Toby Phipps" <toby.phi...@nexmedia.com.sg>
> To: "'Rene Kluwen'" <rene.klu...@chimit.nl>; <users@kannel.org>
> Sent: Sunday, August 08, 2010 3:26 PM
> Subject: RE: Life without smsbox
>
>
>> Just a follow-up - I also tried setting "smsbox-id = sqlbox" in the
>> "sqlbox"
>> section, and sqlbox starts but I get the same results, which is that the
>> bearerbox store size increments by one for each DLR received, as viewed 
>> in
>> the status output. For example:
>>
>> SMS: received 0 (0 queued), sent 13 (0 queued), store size 85
>>
>> Right now, my sqlbox.conf looks like this:
>>
>> group = sqlbox
>> id = sqlbox
>> smsbox-id = sqlbox
>> bearerbox-port = 13100
>> bearerbox-host = localhost
>> # smsbox-port = 13200
>> sql-log-table = smsgw_kannel_sms_result
>> sql-insert-table = smsgw_kannel_sms_queue
>> log-file = /usr/local/kannel/log/sqlbox.log
>> log-level = 0
>>
>> group = mysql-connection
>> id = sqlbox
>> host = localhost
>> username = <removed>
>> password = <removed>
>> database = <removed>
>> max-connections = 3
>>
>> As you can see, the smsbox-port is commented out, meaning that I don't
>> want
>> sqlbox to try to talk to smsbox. I've tried with this line commented out,
>> or
>> uncommented (but pointed to a non-listening port). Both result in the 
>> same
>> behaviour,
>>
>> Any more ideas anyone? I'm about to start delving into the source...
>>
>> Thanks,
>> Toby.
>>
>>
>>
>
> 





Reply via email to