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.
diff --git a/openbsc/include/openbsc/db.h b/openbsc/include/openbsc/db.h
index 3b70519..5949f9c 100644
--- a/openbsc/include/openbsc/db.h
+++ b/openbsc/include/openbsc/db.h
@@ -65,7 +65,7 @@
 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 bb72fd8..fd5dd81 100644
--- a/openbsc/src/db.c
+++ b/openbsc/src/db.c
@@ -1114,7 +1114,9 @@
 	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 @@
 			"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 a9444ba..f1e5371 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 @@
 	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;