More accurate detection of USSD codes
This commit is contained in:
parent
6ccce8ff31
commit
86a1c498ec
1
Makefile
1
Makefile
@ -154,6 +154,7 @@ dist:
|
|||||||
$(PACKAGE)-$(VERSION)/src/plugins/48x48/project.conf \
|
$(PACKAGE)-$(VERSION)/src/plugins/48x48/project.conf \
|
||||||
$(PACKAGE)-$(VERSION)/tests/modems.c \
|
$(PACKAGE)-$(VERSION)/tests/modems.c \
|
||||||
$(PACKAGE)-$(VERSION)/tests/plugins.c \
|
$(PACKAGE)-$(VERSION)/tests/plugins.c \
|
||||||
|
$(PACKAGE)-$(VERSION)/tests/ussd.c \
|
||||||
$(PACKAGE)-$(VERSION)/tests/Makefile \
|
$(PACKAGE)-$(VERSION)/tests/Makefile \
|
||||||
$(PACKAGE)-$(VERSION)/tests/tests.sh \
|
$(PACKAGE)-$(VERSION)/tests/tests.sh \
|
||||||
$(PACKAGE)-$(VERSION)/tests/project.conf \
|
$(PACKAGE)-$(VERSION)/tests/project.conf \
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* $Id$ */
|
/* $Id$ */
|
||||||
/* Copyright (c) 2011-2013 Pierre Pronchery <khorben@defora.org> */
|
/* Copyright (c) 2011-2014 Pierre Pronchery <khorben@defora.org> */
|
||||||
/* This file is part of DeforaOS Desktop Phone */
|
/* This file is part of DeforaOS Desktop Phone */
|
||||||
/* This program is free software: you can redistribute it and/or modify
|
/* This program is free software: you can redistribute it and/or modify
|
||||||
* it under the terms of the GNU General Public License as published by
|
* it under the terms of the GNU General Public License as published by
|
||||||
@ -371,6 +371,7 @@ static void _on_code_ext_error(ModemPlugin * modem, char const * answer);
|
|||||||
/* helpers */
|
/* helpers */
|
||||||
static int _is_figure(int c);
|
static int _is_figure(int c);
|
||||||
static int _is_number(char const * number);
|
static int _is_number(char const * number);
|
||||||
|
static int _is_ussd_code(char const * number);
|
||||||
|
|
||||||
|
|
||||||
/* variables */
|
/* variables */
|
||||||
@ -759,8 +760,6 @@ static char * _request_attention(ModemPlugin * modem, ModemRequest * request)
|
|||||||
{
|
{
|
||||||
unsigned int type = request->type;
|
unsigned int type = request->type;
|
||||||
char buf[32];
|
char buf[32];
|
||||||
char const * p;
|
|
||||||
size_t len;
|
|
||||||
|
|
||||||
switch(type)
|
switch(type)
|
||||||
{
|
{
|
||||||
@ -784,9 +783,7 @@ static char * _request_attention(ModemPlugin * modem, ModemRequest * request)
|
|||||||
break;
|
break;
|
||||||
case MODEM_REQUEST_CALL:
|
case MODEM_REQUEST_CALL:
|
||||||
if(request->call.call_type == MODEM_CALL_TYPE_VOICE
|
if(request->call.call_type == MODEM_CALL_TYPE_VOICE
|
||||||
&& (p = request->call.number) != NULL
|
&& _is_ussd_code(request->call.number))
|
||||||
&& (len = strlen(p)) > 2
|
|
||||||
&& p[0] == '*' && p[len - 1] == '#')
|
|
||||||
return _request_attention_call_ussd(modem,
|
return _request_attention_call_ussd(modem,
|
||||||
request);
|
request);
|
||||||
return _request_attention_call(modem, request);
|
return _request_attention_call(modem, request);
|
||||||
@ -4086,3 +4083,19 @@ static int _is_number(char const * number)
|
|||||||
return 0;
|
return 0;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* is_ussd_code */
|
||||||
|
static int _is_ussd_code(char const * number)
|
||||||
|
{
|
||||||
|
if(number == NULL || number[0] != '*')
|
||||||
|
return 0;
|
||||||
|
for(number++; *number != '\0'; number++)
|
||||||
|
if((*number >= '0' && *number <= '9') || *number == '*')
|
||||||
|
continue;
|
||||||
|
else if(*number == '#' && *(number + 1) == '\0')
|
||||||
|
return 1;
|
||||||
|
else
|
||||||
|
return 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
TARGETS = modems plugins tests.log
|
TARGETS = modems plugins ussd tests.log
|
||||||
PREFIX = /usr/local
|
PREFIX = /usr/local
|
||||||
DESTDIR =
|
DESTDIR =
|
||||||
BINDIR = $(PREFIX)/bin
|
BINDIR = $(PREFIX)/bin
|
||||||
@ -31,7 +31,14 @@ plugins_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
|||||||
plugins: $(plugins_OBJS)
|
plugins: $(plugins_OBJS)
|
||||||
$(CC) -o plugins $(plugins_OBJS) $(plugins_LDFLAGS)
|
$(CC) -o plugins $(plugins_OBJS) $(plugins_LDFLAGS)
|
||||||
|
|
||||||
tests.log: modems plugins tests.sh
|
ussd_OBJS = ussd.o
|
||||||
|
ussd_CFLAGS = $(CPPFLAGSF) $(CPPFLAGS) $(CFLAGSF) $(CFLAGS)
|
||||||
|
ussd_LDFLAGS = $(LDFLAGSF) $(LDFLAGS)
|
||||||
|
|
||||||
|
ussd: $(ussd_OBJS)
|
||||||
|
$(CC) -o ussd $(ussd_OBJS) $(ussd_LDFLAGS)
|
||||||
|
|
||||||
|
tests.log: modems plugins tests.sh ussd
|
||||||
./tests.sh -P "$(PREFIX)" -- "tests.log"
|
./tests.sh -P "$(PREFIX)" -- "tests.log"
|
||||||
|
|
||||||
modems.o: modems.c
|
modems.o: modems.c
|
||||||
@ -40,8 +47,11 @@ modems.o: modems.c
|
|||||||
plugins.o: plugins.c
|
plugins.o: plugins.c
|
||||||
$(CC) $(plugins_CFLAGS) -c plugins.c
|
$(CC) $(plugins_CFLAGS) -c plugins.c
|
||||||
|
|
||||||
|
ussd.o: ussd.c ../src/modems/hayes.c
|
||||||
|
$(CC) $(ussd_CFLAGS) -c ussd.c
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
$(RM) -- $(modems_OBJS) $(plugins_OBJS) $(tests.log_OBJS)
|
$(RM) -- $(modems_OBJS) $(plugins_OBJS) $(ussd_OBJS) $(tests.log_OBJS)
|
||||||
./tests.sh -c -P "$(PREFIX)" -- "tests.log"
|
./tests.sh -c -P "$(PREFIX)" -- "tests.log"
|
||||||
|
|
||||||
distclean: clean
|
distclean: clean
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
targets=modems,plugins,tests.log
|
targets=modems,plugins,ussd,tests.log
|
||||||
cppflags_force=-I ../include
|
cppflags_force=-I ../include
|
||||||
cflags_force=-W `pkg-config --cflags libDesktop`
|
cflags_force=-W `pkg-config --cflags libDesktop`
|
||||||
cflags=-Wall -g -O2
|
cflags=-Wall -g -O2
|
||||||
@ -16,4 +16,11 @@ sources=plugins.c
|
|||||||
[tests.log]
|
[tests.log]
|
||||||
type=script
|
type=script
|
||||||
script=./tests.sh
|
script=./tests.sh
|
||||||
depends=modems,plugins,tests.sh
|
depends=modems,plugins,tests.sh,ussd
|
||||||
|
|
||||||
|
[ussd]
|
||||||
|
type=binary
|
||||||
|
sources=ussd.c
|
||||||
|
|
||||||
|
[ussd.c]
|
||||||
|
depends=../src/modems/hayes.c
|
||||||
|
@ -98,7 +98,7 @@ target="$1"
|
|||||||
$DATE > "$target"
|
$DATE > "$target"
|
||||||
FAILED=
|
FAILED=
|
||||||
echo "Performing tests:" 1>&2
|
echo "Performing tests:" 1>&2
|
||||||
#_test "plugins"
|
_test "ussd"
|
||||||
echo "Expected failures:" 1>&2
|
echo "Expected failures:" 1>&2
|
||||||
_fail "modems"
|
_fail "modems"
|
||||||
_fail "plugins"
|
_fail "plugins"
|
||||||
|
59
tests/ussd.c
Normal file
59
tests/ussd.c
Normal file
@ -0,0 +1,59 @@
|
|||||||
|
/* $Id$ */
|
||||||
|
/* Copyright (c) 2014 Pierre Pronchery <khorben@defora.org> */
|
||||||
|
/* This file is part of DeforaOS Desktop Phone */
|
||||||
|
/* This program is free software: you can redistribute it and/or modify
|
||||||
|
* it under the terms of the GNU General Public License as published by
|
||||||
|
* the Free Software Foundation, version 3 of the License.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program. If not, see <http://www.gnu.org/licenses/>. */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
#include "../src/modems/hayes.c"
|
||||||
|
|
||||||
|
|
||||||
|
/* private */
|
||||||
|
/* prototypes */
|
||||||
|
static int _ussd(void);
|
||||||
|
|
||||||
|
|
||||||
|
/* functions */
|
||||||
|
/* ussd */
|
||||||
|
static int _ussd(void)
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
const char * codes[] = { "*100#" };
|
||||||
|
const char * notcodes[] = { "*#06#" };
|
||||||
|
size_t i;
|
||||||
|
|
||||||
|
for(i = 0; i < sizeof(codes) / sizeof(*codes); i++)
|
||||||
|
if(!_is_ussd_code(codes[i]))
|
||||||
|
{
|
||||||
|
printf("%s: %s: %s\n", "ussd", codes[i],
|
||||||
|
"Is a valid USSD code");
|
||||||
|
ret = 2;
|
||||||
|
}
|
||||||
|
for(i = 0; i < sizeof(notcodes) / sizeof(*notcodes); i++)
|
||||||
|
if(_is_ussd_code(notcodes[i]))
|
||||||
|
{
|
||||||
|
printf("%s: %s: %s\n", "ussd", notcodes[i],
|
||||||
|
"Is not a valid USSD code");
|
||||||
|
ret = 2;
|
||||||
|
}
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* public */
|
||||||
|
/* functions */
|
||||||
|
/* main */
|
||||||
|
int main(void)
|
||||||
|
{
|
||||||
|
return (_ussd() == 0) ? 0 : 2;
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user