Hello there,
upon a simple test I think kannel mixes the DLR-URL badly in the MySQL storage.
I don't know how does kannel identify each dlr but I think is using a timestamp (ts)?
That's very bad because with fast SMSC it happens that kannel deletes wrong dlrs from the DB and call bad URLs - that is really bad behaviour.
Does anyone has an idea how to solve this ?
Thanks Julien
-------------------- Here is an example:
I'm sending 4 messages to phone A B C and D The phone B is switched off
Phones A,C,D receive the SMS correcly but in the MySQL storage table I can still see a waiting DLR not for the phone B but for another phone.
The phone B result as a 'delivered' and the line from the table is DELETED.
----- PHONE B -----
Adding DLR smsc=smsitaly, ts=160305115627, src=Test, dst=** PHONE B **, mask=31, boxc=
2005-03-16 11:56:27 [8997] [8] DEBUG: sql: INSERT INTO gatewayDelivery (smsc, ts, source, destination, service, url, mask, boxc, status) VALUES ('italy', '160305115627', 'Test', '** PHONE B **', 'italy', 'http://www.censored.it/dlr.php?smsc_id=%i&status=%d&answer=%A&from=%P&to=%p&ts=%t&idmessaggio=4208', '31', '', '0');
----- PHONE A -----
Adding DLR smsc=italy, ts=160305115627, src=Test, dst=** PHONE A **, mask=31, boxc=
2005-03-16 11:56:27 [8997] [8] DEBUG: sql: INSERT INTO gatewayDelivery (smsc, ts, source, destination, service, url, mask, boxc, status) VALUES ('italy', '160305115627', 'Test', '** PHONE B **', 'smsitaly', 'http://www.censored.it/dlr.php?smsc_id=%i&status=%d&answer=%A&from=%P&to=%p&ts=%t&idmessaggio=4209', '31', '', '0');
As you can see, both the DLR have the same ts value, but the PHONE-B-DLR is inserted before A (that's ok, no problem).
As soon as the delivery arrives from the SMSC for PHONE A (phone B il switched OFF), kannel says:
2005-03-16 11:56:43 [8997] [8] DEBUG: DLR[mysql]: Looking for DLR smsc=smsitaly, ts=160305115627, dst=** PHONE A **, type=1
but the query to look for it is:
SELECT mask, service, url, source, destination, boxc FROM gatewayDelivery WHERE smsc='italy' AND ts='160305115627';
this will not return the DLR for ** PHONE A ** but the one for PHONE B because it has been inserted before resulting in a misleading DLR call back
it fetches a wrong URL: created DLR message for URL
and it deletes a wrong DLR entry
DELETE FROM gatewayDelivery WHERE smsc='italy' AND ts='160305115627' LIMIT 1;
