From a18b11602cb19198544a090078faaa0a826ec19c Mon Sep 17 00:00:00 2001 From: Holger Hans Peter Freyther Date: Fri, 1 Apr 2011 17:32:21 +0200 Subject: [PATCH] nat: Make the USSD number matching a regexp This allows to match multiple numbers and multiple patterns --- openbsc/include/openbsc/bsc_nat.h | 1 + openbsc/src/osmo-bsc_nat/bsc_nat_vty.c | 8 ++++---- openbsc/src/osmo-bsc_nat/bsc_ussd.c | 6 +++--- 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 - * (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 @@ -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 */