further SMS work
* implement ID based lookup of gsm_subscriber from database
* look-up recipient and sender subscribers from database
diff --git a/openbsc/include/openbsc/gsm_subscriber.h b/openbsc/include/openbsc/gsm_subscriber.h
index dc4f6d7..e8dbf87 100644
--- a/openbsc/include/openbsc/gsm_subscriber.h
+++ b/openbsc/include/openbsc/gsm_subscriber.h
@@ -42,6 +42,7 @@
GSM_SUBSCRIBER_IMSI,
GSM_SUBSCRIBER_TMSI,
GSM_SUBSCRIBER_EXTENSION,
+ GSM_SUBSCRIBER_ID,
};
enum gsm_subscriber_update_reason {
diff --git a/openbsc/src/db.c b/openbsc/src/db.c
index 1bcd101..2d99749 100644
--- a/openbsc/src/db.c
+++ b/openbsc/src/db.c
@@ -226,6 +226,13 @@
);
free(quoted);
break;
+ case GSM_SUBSCRIBER_ID:
+ dbi_conn_quote_string_copy(conn, id, "ed);
+ result = dbi_conn_queryf(conn,
+ "SELECT * FROM Subscriber "
+ "WHERE id = %s ", quoted);
+ free(quoted);
+ break;
default:
printf("DB: Unknown query selector for Subscriber.\n");
return NULL;
@@ -428,7 +435,10 @@
struct gsm_sms *db_sms_get_unsent(int min_id)
{
dbi_result result;
+ long long unsigned int sender_id, receiver_id;
struct gsm_sms *sms = malloc(sizeof(*sms));
+ char *text;
+ char buf[32];
if (!sms) {
free(sms);
@@ -442,8 +452,21 @@
free(sms);
return NULL;
}
+ sms->id = dbi_result_get_ulonglong(result, "id");
- /* FIXME: fill gsm_sms from database */
+ sender_id = dbi_result_get_ulonglong(result, "sender_id");
+ sprintf(buf, "%llu", sender_id);
+ sms->sender = db_get_subscriber(GSM_SUBSCRIBER_ID, buf);
+
+ receiver_id = dbi_result_get_ulonglong(result, "receiver_id");
+ sprintf(buf, "%llu", receiver_id);
+ sms->receiver = db_get_subscriber(GSM_SUBSCRIBER_ID, buf);
+
+ /* FIXME: fill header */
+
+ text = dbi_result_get_string(result, "text");
+ if (text)
+ strncpy(sms->text, text, sizeof(sms->text));
dbi_result_free(result);
return sms;