aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorHolger Freyther <zecke@selfish.org>2009-02-16 19:07:18 +0000
committerHolger Freyther <zecke@selfish.org>2009-02-16 19:07:18 +0000
commit9b177760bbe6195793c9ac06de928890468b9656 (patch)
tree268b859cf37d52f3b3775617b1eff816cf57406b /src
parent0a23990be8444a3c5b7c9cd3f0f391638ef7354e (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.c10
-rw-r--r--src/telnet_interface.c18
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;
+}