diff options
author | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-12-25 00:33:40 +0100 |
---|---|---|
committer | Holger Hans Peter Freyther <zecke@selfish.org> | 2010-12-25 21:39:04 +0100 |
commit | 73b878a85a3d023a855ca623d71950486d26cfbb (patch) | |
tree | 1ce894177924f9d989dbe403c346c291a487a7d8 /openbsc | |
parent | 812dad0ff7e34499ae7c28cbed51e0a86da98846 (diff) |
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.
Diffstat (limited to 'openbsc')
-rw-r--r-- | openbsc/include/openbsc/db.h | 2 | ||||
-rw-r--r-- | openbsc/src/db.c | 8 | ||||
-rw-r--r-- | openbsc/src/vty_interface_layer3.c | 3 |
3 files changed, 8 insertions, 5 deletions
diff --git a/openbsc/include/openbsc/db.h b/openbsc/include/openbsc/db.h index 3b705194c..5949f9c8c 100644 --- a/openbsc/include/openbsc/db.h +++ b/openbsc/include/openbsc/db.h @@ -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); diff --git a/openbsc/src/db.c b/openbsc/src/db.c index bb72fd80f..fd5dd8105 100644 --- a/openbsc/src/db.c +++ b/openbsc/src/db.c @@ -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; diff --git a/openbsc/src/vty_interface_layer3.c b/openbsc/src/vty_interface_layer3.c index a9444ba2c..f1e537183 100644 --- a/openbsc/src/vty_interface_layer3.c +++ b/openbsc/src/vty_interface_layer3.c @@ -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; |