add a equipment table
This commit is contained in:
parent
a3d0438ff7
commit
fac25fccbd
|
@ -32,5 +32,6 @@ struct gsm_subscriber* db_create_subscriber(char imsi[GSM_IMSI_LENGTH]);
|
||||||
int db_get_subscriber(enum gsm_subscriber_field field, struct gsm_subscriber* subscriber);
|
int db_get_subscriber(enum gsm_subscriber_field field, struct gsm_subscriber* subscriber);
|
||||||
int db_set_subscriber(struct gsm_subscriber* subscriber);
|
int db_set_subscriber(struct gsm_subscriber* subscriber);
|
||||||
int db_subscriber_alloc_tmsi(struct gsm_subscriber* subscriber);
|
int db_subscriber_alloc_tmsi(struct gsm_subscriber* subscriber);
|
||||||
|
int db_subscriber_assoc_imei(struct gsm_subscriber* subscriber, char imei[GSM_IMEI_LENGTH]);
|
||||||
|
|
||||||
#endif /* _DB_H */
|
#endif /* _DB_H */
|
||||||
|
|
|
@ -4,11 +4,13 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include "gsm_data.h"
|
#include "gsm_data.h"
|
||||||
|
|
||||||
|
#define GSM_IMEI_LENGTH 17
|
||||||
#define GSM_IMSI_LENGTH 17
|
#define GSM_IMSI_LENGTH 17
|
||||||
#define GSM_TMSI_LENGTH 17
|
#define GSM_TMSI_LENGTH 17
|
||||||
#define GSM_NAME_LENGTH 128
|
#define GSM_NAME_LENGTH 128
|
||||||
|
|
||||||
struct gsm_subscriber {
|
struct gsm_subscriber {
|
||||||
|
u_int64_t id;
|
||||||
char imsi[GSM_IMSI_LENGTH];
|
char imsi[GSM_IMSI_LENGTH];
|
||||||
char tmsi[GSM_TMSI_LENGTH];
|
char tmsi[GSM_TMSI_LENGTH];
|
||||||
u_int16_t lac;
|
u_int16_t lac;
|
||||||
|
|
113
src/db.c
113
src/db.c
|
@ -89,6 +89,21 @@ int db_prepare() {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
dbi_result_free(result);
|
dbi_result_free(result);
|
||||||
|
result = dbi_conn_query(conn,
|
||||||
|
"CREATE TABLE IF NOT EXISTS EquipmentWatch ("
|
||||||
|
"id INTEGER PRIMARY KEY AUTOINCREMENT, "
|
||||||
|
"subscriber_id NUMERIC NOT NULL, "
|
||||||
|
"equipment_id NUMERIC NOT NULL, "
|
||||||
|
"created TIMESTAMP NOT NULL, "
|
||||||
|
"updated TIMESTAMP NOT NULL, "
|
||||||
|
"UNIQUE (subscriber_id, equipment_id) "
|
||||||
|
")"
|
||||||
|
);
|
||||||
|
if (result==NULL) {
|
||||||
|
printf("DB: Failed to create Equipment table.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
dbi_result_free(result);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -98,23 +113,6 @@ int db_fini() {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int db_insert_imei(u_int64_t imei) {
|
|
||||||
dbi_result result;
|
|
||||||
result = dbi_conn_queryf(conn,
|
|
||||||
"INSERT OR IGNORE INTO Equipment "
|
|
||||||
"(imei) "
|
|
||||||
"VALUES "
|
|
||||||
"(%llu) ",
|
|
||||||
imei
|
|
||||||
);
|
|
||||||
if (result==NULL) {
|
|
||||||
printf("DB: Failed to create Equipment by IMEI.\n");
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
dbi_result_free(result);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct gsm_subscriber* db_create_subscriber(char imsi[GSM_IMSI_LENGTH]) {
|
struct gsm_subscriber* db_create_subscriber(char imsi[GSM_IMSI_LENGTH]) {
|
||||||
dbi_result result;
|
dbi_result result;
|
||||||
struct gsm_subscriber* subscriber;
|
struct gsm_subscriber* subscriber;
|
||||||
|
@ -136,8 +134,9 @@ struct gsm_subscriber* db_create_subscriber(char imsi[GSM_IMSI_LENGTH]) {
|
||||||
if (result==NULL) {
|
if (result==NULL) {
|
||||||
printf("DB: Failed to create Subscriber by IMSI.\n");
|
printf("DB: Failed to create Subscriber by IMSI.\n");
|
||||||
}
|
}
|
||||||
|
subscriber->id = dbi_conn_sequence_last(conn, NULL);
|
||||||
dbi_result_free(result);
|
dbi_result_free(result);
|
||||||
printf("DB: New Subscriber: IMSI %s\n", subscriber->imsi);
|
printf("DB: New Subscriber: ID %llu, IMSI %s\n", subscriber->id, subscriber->imsi);
|
||||||
return subscriber;
|
return subscriber;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -171,13 +170,14 @@ int db_get_subscriber(enum gsm_subscriber_field field, struct gsm_subscriber* su
|
||||||
dbi_result_free(result);
|
dbi_result_free(result);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
subscriber->id = dbi_result_get_ulonglong(result, "id");
|
||||||
strncpy(subscriber->imsi, dbi_result_get_string(result, "imsi"), GSM_IMSI_LENGTH);
|
strncpy(subscriber->imsi, dbi_result_get_string(result, "imsi"), GSM_IMSI_LENGTH);
|
||||||
strncpy(subscriber->tmsi, dbi_result_get_string(result, "tmsi"), GSM_TMSI_LENGTH);
|
strncpy(subscriber->tmsi, dbi_result_get_string(result, "tmsi"), GSM_TMSI_LENGTH);
|
||||||
// FIXME handle extension
|
// FIXME handle extension
|
||||||
subscriber->lac = dbi_result_get_uint(result, "lac");
|
subscriber->lac = dbi_result_get_uint(result, "lac");
|
||||||
subscriber->authorized = dbi_result_get_uint(result, "authorized");
|
subscriber->authorized = dbi_result_get_uint(result, "authorized");
|
||||||
printf("DB: Found Subscriber: IMSI %s, TMSI %s, LAC %hu, AUTH %u\n",
|
printf("DB: Found Subscriber: ID %llu, IMSI %s, TMSI %s, LAC %hu, AUTH %u\n",
|
||||||
subscriber->imsi, subscriber->tmsi, subscriber->lac, subscriber->authorized);
|
subscriber->id, subscriber->imsi, subscriber->tmsi, subscriber->lac, subscriber->authorized);
|
||||||
dbi_result_free(result);
|
dbi_result_free(result);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -227,3 +227,76 @@ int db_subscriber_alloc_tmsi(struct gsm_subscriber* subscriber) {
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int db_subscriber_assoc_imei(struct gsm_subscriber* subscriber, char imei[GSM_IMEI_LENGTH]) {
|
||||||
|
u_int64_t equipment_id, watch_id;
|
||||||
|
dbi_result result;
|
||||||
|
|
||||||
|
result = dbi_conn_queryf(conn,
|
||||||
|
"INSERT OR IGNORE INTO Equipment "
|
||||||
|
"(imei) "
|
||||||
|
"VALUES "
|
||||||
|
"(%s) ",
|
||||||
|
imei
|
||||||
|
);
|
||||||
|
if (result==NULL) {
|
||||||
|
printf("DB: Failed to create Equipment by IMEI.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
equipment_id = dbi_conn_sequence_last(conn, NULL);
|
||||||
|
dbi_result_free(result);
|
||||||
|
if (equipment_id) {
|
||||||
|
printf("DB: New Equipment: ID %llu, IMEI %s\n", equipment_id, imei);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
result = dbi_conn_queryf(conn,
|
||||||
|
"SELECT id FROM Equipment "
|
||||||
|
"WHERE imei = %s ",
|
||||||
|
imei
|
||||||
|
);
|
||||||
|
if (result==NULL) {
|
||||||
|
printf("DB: Failed to query Equipment by IMEI.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
if (!dbi_result_next_row(result)) {
|
||||||
|
printf("DB: Failed to find the Equipment.\n");
|
||||||
|
dbi_result_free(result);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
equipment_id = dbi_result_get_ulonglong(result, "id");
|
||||||
|
dbi_result_free(result);
|
||||||
|
}
|
||||||
|
|
||||||
|
result = dbi_conn_queryf(conn,
|
||||||
|
"INSERT OR IGNORE INTO EquipmentWatch "
|
||||||
|
"(subscriber_id, equipment_id, created, updated) "
|
||||||
|
"VALUES "
|
||||||
|
"(%llu, %llu, datetime('now'), datetime('now')) ",
|
||||||
|
subscriber->id, equipment_id
|
||||||
|
);
|
||||||
|
if (result==NULL) {
|
||||||
|
printf("DB: Failed to create EquipmentWatch.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
watch_id = dbi_conn_sequence_last(conn, NULL);
|
||||||
|
dbi_result_free(result);
|
||||||
|
if (watch_id) {
|
||||||
|
printf("DB: New EquipmentWatch: ID %llu, IMSI %s, IMEI %s\n", equipment_id, subscriber->imsi, imei);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
result = dbi_conn_queryf(conn,
|
||||||
|
"UPDATE EquipmentWatch "
|
||||||
|
"SET updated = datetime('now') "
|
||||||
|
"WHERE subscriber_id = %llu AND equipment_id = %llu ",
|
||||||
|
subscriber->id, equipment_id
|
||||||
|
);
|
||||||
|
if (result==NULL) {
|
||||||
|
printf("DB: Failed to update EquipmentWatch.\n");
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
dbi_result_free(result);
|
||||||
|
printf("DB: Updated EquipmentWatch: ID %llu, IMSI %s, IMEI %s\n", equipment_id, subscriber->imsi, imei);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -56,6 +56,8 @@ int main() {
|
||||||
db_subscriber_alloc_tmsi(alice);
|
db_subscriber_alloc_tmsi(alice);
|
||||||
alice->lac=42;
|
alice->lac=42;
|
||||||
db_set_subscriber(alice);
|
db_set_subscriber(alice);
|
||||||
|
db_subscriber_assoc_imei(alice, "1234567890");
|
||||||
|
db_subscriber_assoc_imei(alice, "6543560920");
|
||||||
db_get_subscriber(GSM_SUBSCRIBER_IMSI, alice);
|
db_get_subscriber(GSM_SUBSCRIBER_IMSI, alice);
|
||||||
free(alice);
|
free(alice);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue