db: Introduce a limit in delivery attempts for the SMS search

We do not want to attempt submitting SMS that has failed for
too many times. The failure could be due RF failure or due
a bug in the message handling.
This commit is contained in:
Holger Hans Peter Freyther 2010-12-25 00:33:40 +01:00
parent 812dad0ff7
commit 73b878a85a
3 changed files with 8 additions and 5 deletions

View File

@ -65,7 +65,7 @@ int db_sync_lastauthtuple_for_subscr(struct gsm_auth_tuple *atuple,
int db_sms_store(struct gsm_sms *sms);
struct gsm_sms *db_sms_get(struct gsm_network *net, unsigned long long id);
struct gsm_sms *db_sms_get_unsent(struct gsm_network *net, unsigned long long min_id);
struct gsm_sms *db_sms_get_unsent_by_subscr(struct gsm_network *net, unsigned long long min_subscr_id);
struct gsm_sms *db_sms_get_unsent_by_subscr(struct gsm_network *net, unsigned long long min_subscr_id, unsigned int failed);
struct gsm_sms *db_sms_get_unsent_for_subscr(struct gsm_subscriber *subscr);
int db_sms_mark_sent(struct gsm_sms *sms);
int db_sms_inc_deliver_attempts(struct gsm_sms *sms);

View File

@ -1114,7 +1114,9 @@ struct gsm_sms *db_sms_get_unsent(struct gsm_network *net, unsigned long long mi
return sms;
}
struct gsm_sms *db_sms_get_unsent_by_subscr(struct gsm_network *net, unsigned long long min_subscr_id)
struct gsm_sms *db_sms_get_unsent_by_subscr(struct gsm_network *net,
unsigned long long min_subscr_id,
unsigned int failed)
{
dbi_result result;
struct gsm_sms *sms;
@ -1124,9 +1126,9 @@ struct gsm_sms *db_sms_get_unsent_by_subscr(struct gsm_network *net, unsigned lo
"FROM SMS JOIN Subscriber ON "
"SMS.receiver_id = Subscriber.id "
"WHERE SMS.receiver_id >= %llu AND SMS.sent IS NULL "
"AND Subscriber.lac > 0 "
"AND Subscriber.lac > 0 AND SMS.deliver_attempts < %u "
"ORDER BY SMS.receiver_id, SMS.id LIMIT 1",
min_subscr_id);
min_subscr_id, failed);
if (!result)
return NULL;

View File

@ -20,6 +20,7 @@
*/
#include <stdlib.h>
#include <limits.h>
#include <unistd.h>
#include <sys/types.h>
@ -125,7 +126,7 @@ DEFUN(sms_send_pend,
int id = 0;
while (1) {
sms = db_sms_get_unsent_by_subscr(gsmnet, id);
sms = db_sms_get_unsent_by_subscr(gsmnet, id, UINT_MAX);
if (!sms)
break;