aboutsummaryrefslogtreecommitdiffstats
path: root/openbsc/src/libmsc/db.c
diff options
context:
space:
mode:
Diffstat (limited to 'openbsc/src/libmsc/db.c')
-rw-r--r--openbsc/src/libmsc/db.c61
1 files changed, 32 insertions, 29 deletions
diff --git a/openbsc/src/libmsc/db.c b/openbsc/src/libmsc/db.c
index 035d5488f..28e978213 100644
--- a/openbsc/src/libmsc/db.c
+++ b/openbsc/src/libmsc/db.c
@@ -643,20 +643,21 @@ struct gsm_sms *db_sms_get(struct gsm_network *net, unsigned long long id)
return sms;
}
-/* retrieve the next unsent SMS with ID >= min_id */
-struct gsm_sms *db_sms_get_unsent(struct gsm_network *net, unsigned long long min_id)
+struct gsm_sms *db_sms_get_next_unsent(struct gsm_network *net,
+ unsigned long long min_sms_id,
+ unsigned int max_failed)
{
dbi_result result;
struct gsm_sms *sms;
result = dbi_conn_queryf(conn,
- "SELECT SMS.* "
- "FROM SMS JOIN Subscriber ON "
- "SMS.dest_addr = Subscriber.extension "
- "WHERE SMS.id >= %llu AND SMS.sent IS NULL "
- "AND Subscriber.lac > 0 "
- "ORDER BY SMS.id LIMIT 1",
- min_id);
+ "SELECT * FROM SMS"
+ " WHERE sent IS NULL"
+ " AND id >= %llu"
+ " AND deliver_attempts <= %u"
+ " ORDER BY id LIMIT 1",
+ min_sms_id, max_failed);
+
if (!result)
return NULL;
@@ -672,21 +673,24 @@ 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,
- unsigned int failed)
+/* retrieve the next unsent SMS for a given subscriber */
+struct gsm_sms *db_sms_get_unsent_for_subscr(struct vlr_subscr *vsub,
+ unsigned int max_failed)
{
+ struct gsm_network *net = vsub->vlr->user_ctx;
dbi_result result;
struct gsm_sms *sms;
+ if (!vsub->lu_complete)
+ return NULL;
+
result = dbi_conn_queryf(conn,
- "SELECT SMS.* "
- "FROM SMS JOIN Subscriber ON "
- "SMS.dest_addr = Subscriber.extension "
- "WHERE Subscriber.id >= %llu AND SMS.sent IS NULL "
- "AND Subscriber.lac > 0 AND SMS.deliver_attempts < %u "
- "ORDER BY Subscriber.id, SMS.id LIMIT 1",
- min_subscr_id, failed);
+ "SELECT * FROM SMS"
+ " WHERE sent IS NULL"
+ " AND dest_addr=%s"
+ " AND deliver_attempts <= %u"
+ " ORDER BY id LIMIT 1",
+ vsub->msisdn, max_failed);
if (!result)
return NULL;
@@ -702,21 +706,20 @@ struct gsm_sms *db_sms_get_unsent_by_subscr(struct gsm_network *net,
return sms;
}
-/* retrieve the next unsent SMS for a given subscriber */
-struct gsm_sms *db_sms_get_unsent_for_subscr(struct vlr_subscr *vsub)
+struct gsm_sms *db_sms_get_next_unsent_rr_msisdn(struct gsm_network *net,
+ const char *last_msisdn,
+ unsigned int max_failed)
{
- struct gsm_network *net = vsub->vlr->user_ctx;
dbi_result result;
struct gsm_sms *sms;
result = dbi_conn_queryf(conn,
- "SELECT SMS.* "
- "FROM SMS JOIN Subscriber ON "
- "SMS.dest_addr = Subscriber.extension "
- "WHERE Subscriber.id = %llu AND SMS.sent IS NULL "
- "AND Subscriber.lac > 0 "
- "ORDER BY SMS.id LIMIT 1",
- vsub->id);
+ "SELECT * FROM SMS"
+ " WHERE sent IS NULL"
+ " AND dest_addr > '%s'"
+ " AND deliver_attempts <= %u"
+ " ORDER BY dest_addr, id LIMIT 1",
+ last_msisdn, max_failed);
if (!result)
return NULL;