diff options
author | Holger Freyther <zecke@selfish.org> | 2009-02-16 19:07:18 +0000 |
---|---|---|
committer | Holger Freyther <zecke@selfish.org> | 2009-02-16 19:07:18 +0000 |
commit | 9b177760bbe6195793c9ac06de928890468b9656 (patch) | |
tree | 268b859cf37d52f3b3775617b1eff816cf57406b /src | |
parent | 0a23990be8444a3c5b7c9cd3f0f391638ef7354e (diff) |
[sms] Send a notification on incoming SMS
Further tests of the signal class. Send a notification
on incoming SMS.
Diffstat (limited to 'src')
-rw-r--r-- | src/gsm_04_11.c | 10 | ||||
-rw-r--r-- | src/telnet_interface.c | 18 |
2 files changed, 27 insertions, 1 deletions
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 <openbsc/gsm_04_11.h> #include <openbsc/gsm_04_08.h> #include <openbsc/abis_rsl.h> +#include <openbsc/signal.h> #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 <openbsc/gsm_subscriber.h> #include <openbsc/chan_alloc.h> #include <openbsc/gsm_04_08.h> +#include <openbsc/gsm_04_11.h> #include <openbsc/msgb.h> #include <openbsc/abis_rsl.h> #include <openbsc/paging.h> @@ -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; +} |