aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHolger Hans Peter Freyther <zecke@selfish.org>2011-04-01 17:32:21 +0200
committerHolger Hans Peter Freyther <zecke@selfish.org>2011-04-01 17:32:21 +0200
commita18b11602cb19198544a090078faaa0a826ec19c (patch)
treec4d7bf2172864e468f370f592aaf38f8bf92362c
parent9e7e55f16476c618869ed54590b77724aa1a9817 (diff)
nat: Make the USSD number matching a regexp
This allows to match multiple numbers and multiple patterns
-rw-r--r--openbsc/include/openbsc/bsc_nat.h1
-rw-r--r--openbsc/src/osmo-bsc_nat/bsc_nat_vty.c8
-rw-r--r--openbsc/src/osmo-bsc_nat/bsc_ussd.c6
3 files changed, 8 insertions, 7 deletions
diff --git a/openbsc/include/openbsc/bsc_nat.h b/openbsc/include/openbsc/bsc_nat.h
index e62892508..af753cc40 100644
--- a/openbsc/include/openbsc/bsc_nat.h
+++ b/openbsc/include/openbsc/bsc_nat.h
@@ -249,6 +249,7 @@ struct bsc_nat {
/* USSD messages we want to match */
char *ussd_lst_name;
char *ussd_query;
+ regex_t ussd_query_re;
char *ussd_token;
char *ussd_local;
struct bsc_fd ussd_listen;
diff --git a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c
index 40409f879..3158f3472 100644
--- a/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c
+++ b/openbsc/src/osmo-bsc_nat/bsc_nat_vty.c
@@ -1,6 +1,6 @@
/* OpenBSC NAT interface to quagga VTY */
-/* (C) 2010 by Holger Hans Peter Freyther
- * (C) 2010 by On-Waves
+/* (C) 2010-2011 by Holger Hans Peter Freyther
+ * (C) 2010-2011 by On-Waves
* All Rights Reserved
*
* This program is free software; you can redistribute it and/or modify
@@ -463,11 +463,11 @@ DEFUN(cfg_nat_ussd_lst_name,
DEFUN(cfg_nat_ussd_query,
cfg_nat_ussd_query_cmd,
- "ussd-query QUERY",
+ "ussd-query REGEXP",
"Set the USSD query to match with the ussd-list-name\n"
"The query to match")
{
- bsc_replace_string(_nat, &_nat->ussd_query, argv[0]);
+ bsc_parse_reg(_nat, &_nat->ussd_query_re, &_nat->ussd_query, argc, argv);
return CMD_SUCCESS;
}
diff --git a/openbsc/src/osmo-bsc_nat/bsc_ussd.c b/openbsc/src/osmo-bsc_nat/bsc_ussd.c
index 14d154d0b..0dd0d8731 100644
--- a/openbsc/src/osmo-bsc_nat/bsc_ussd.c
+++ b/openbsc/src/osmo-bsc_nat/bsc_ussd.c
@@ -1,8 +1,8 @@
/* USSD Filter Code */
/*
- * (C) 2010 by Holger Hans Peter Freyther <zecke@selfish.org>
- * (C) 2010 by On-Waves
+ * (C) 2010-2011 by Holger Hans Peter Freyther <zecke@selfish.org>
+ * (C) 2010-2011 by On-Waves
* All Rights Reserved
*
* This program is free software; you can redistribute it and/or modify
@@ -352,7 +352,7 @@ int bsc_check_ussd(struct sccp_connections *con, struct bsc_nat_parsed *parsed,
if (req.text[0] == 0xff)
return 0;
- if (strcmp(req.text, con->bsc->nat->ussd_query) != 0)
+ if (regexec(&con->bsc->nat->ussd_query_re, req.text, 0, NULL, 0) == REG_NOMATCH)
return 0;
/* found a USSD query for our subscriber */