diff --git a/openbsc/include/openbsc/db.h b/openbsc/include/openbsc/db.h index ba7c5a74b..3b705194c 100644 --- a/openbsc/include/openbsc/db.h +++ b/openbsc/include/openbsc/db.h @@ -63,6 +63,7 @@ int db_sync_lastauthtuple_for_subscr(struct gsm_auth_tuple *atuple, /* SMS store-and-forward */ 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_for_subscr(struct gsm_subscriber *subscr); diff --git a/openbsc/src/db.c b/openbsc/src/db.c index ec1e72ce9..bb72fd80f 100644 --- a/openbsc/src/db.c +++ b/openbsc/src/db.c @@ -1063,6 +1063,28 @@ static struct gsm_sms *sms_from_result(struct gsm_network *net, dbi_result resul return sms; } +struct gsm_sms *db_sms_get(struct gsm_network *net, unsigned long long id) +{ + dbi_result result; + struct gsm_sms *sms; + + result = dbi_conn_queryf(conn, + "SELECT * FROM SMS WHERE SMS.id = %llu", id); + if (!result) + return NULL; + + if (!dbi_result_next_row(result)) { + dbi_result_free(result); + return NULL; + } + + sms = sms_from_result(net, result); + + dbi_result_free(result); + + 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) {