From 9b177760bbe6195793c9ac06de928890468b9656 Mon Sep 17 00:00:00 2001 From: Holger Freyther Date: Mon, 16 Feb 2009 19:07:18 +0000 Subject: [PATCH] [sms] Send a notification on incoming SMS Further tests of the signal class. Send a notification on incoming SMS. --- include/openbsc/signal.h | 9 ++++++++- src/gsm_04_11.c | 10 ++++++++++ src/telnet_interface.c | 18 +++++++++++++++++- 3 files changed, 35 insertions(+), 2 deletions(-) diff --git a/include/openbsc/signal.h b/include/openbsc/signal.h index eb4fc8d8f..e53c19429 100644 --- a/include/openbsc/signal.h +++ b/include/openbsc/signal.h @@ -28,7 +28,8 @@ /* * Signalling areas */ -#define S_PAGING 0x0001 +#define S_PAGING 0x0001 +#define S_SMS 0x0002 struct signal_data { @@ -46,6 +47,12 @@ struct paging_signal_data { struct gsm_lchan *lchan; }; +struct sms_signal_data { + struct signal_data data; + + struct sms_submit *sms; +}; + /* Management */ void register_signal_handler(int areas, int (*sig)(struct signal_data *, void *data), void *data); diff --git a/src/gsm_04_11.c b/src/gsm_04_11.c index b0d3a0127..d3546633e 100644 --- a/src/gsm_04_11.c +++ b/src/gsm_04_11.c @@ -36,6 +36,7 @@ #include #include #include +#include #define GSM411_ALLOC_SIZE 1024 #define GSM411_ALLOC_HEADROOM 128 @@ -118,6 +119,15 @@ static int gsm411_sms_submit_from_msgb(struct msgb *msg) "UserData: \"%s\"\n", sms->mti, sms->vpf, sms->msg_ref, sms->pid, sms->dcs, sms->ud_len, sms->user_data); + struct sms_signal_data sig = { + .data = { + .area = S_SMS, + }, + + .sms = sms, + }; + dispatch_signal(&sig.data); + free(sms); return 0; diff --git a/src/telnet_interface.c b/src/telnet_interface.c index e3f56c2c2..b9ef139f7 100644 --- a/src/telnet_interface.c +++ b/src/telnet_interface.c @@ -29,6 +29,7 @@ #include #include #include +#include #include #include #include @@ -49,6 +50,7 @@ LLIST_HEAD(active_connections); /* per network data */ static int telnet_new_connection(struct bsc_fd *fd, unsigned int what); static int telnet_paging_callback(struct signal_data *signal, void *data); +static int telnet_sms_callback(struct signal_data *signal, void *data); static struct bsc_fd server_socket = { .when = BSC_FD_READ, @@ -88,8 +90,9 @@ void telnet_init(struct gsm_network *network, int port) { server_socket.fd = fd; bsc_register_fd(&server_socket); - /* register paging callbacks */ + /* register callbacks */ register_signal_handler(S_PAGING, telnet_paging_callback, network); + register_signal_handler(S_SMS, telnet_sms_callback, network); } void telnet_write_help(int fd) { @@ -381,3 +384,16 @@ static int telnet_paging_callback(struct signal_data *signal, void *data) return 0; } + +static int telnet_sms_callback(struct signal_data *signal, void *data) +{ + struct sms_signal_data *sms = + (struct sms_signal_data *) signal; + struct telnet_connection *con; + + llist_for_each_entry(con, &active_connections, entry) { + WRITE_CONNECTION(con->fd.fd, "Incoming SMS: %s\n", sms->sms->user_data); + } + + return 0; +}