Hello community,
here is the log from the commit of package gigaset-frontend for openSUSE:Factory checked in at 2015-01-29 09:56:21
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/gigaset-frontend (Old)
and /work/SRC/openSUSE:Factory/.gigaset-frontend.new (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "gigaset-frontend"
Changes:
--------
--- /work/SRC/openSUSE:Factory/gigaset-frontend/gigaset-frontend.changes 2011-09-23 01:59:43.000000000 +0200
+++ /work/SRC/openSUSE:Factory/.gigaset-frontend.new/gigaset-frontend.changes 2015-01-29 09:56:23.000000000 +0100
@@ -1,0 +2,14 @@
+Wed Jan 14 22:55:02 UTC 2015 - p.drouand@gmail.com
+
+- Update to version 0.7.1
+ + build improvements
+- Changes from version 0.7.0
+ + phonebook function improvements
+ + documentation improvements
+ + add gigaconf and gigacontr --version option
+- Remove redundant %clean section
+- Specfile cleanup
+- Remove gigaset-frontend-fix_uninitialized.patch; merged on upstream
+ release
+
+-------------------------------------------------------------------
Old:
----
gigaset-frontend-0.6.0.tar.gz
gigaset-frontend-fix_uninitialized.patch
New:
----
gigaset-frontend-0.7.1.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ gigaset-frontend.spec ++++++
--- /var/tmp/diff_new_pack.gn4aJL/_old 2015-01-29 09:56:24.000000000 +0100
+++ /var/tmp/diff_new_pack.gn4aJL/_new 2015-01-29 09:56:24.000000000 +0100
@@ -1,7 +1,7 @@
#
# spec file for package gigaset-frontend
#
-# Copyright (c) 2011 SUSE LINUX Products GmbH, Nuernberg, Germany.
+# Copyright (c) 2015 SUSE LINUX Products GmbH, Nuernberg, Germany.
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,27 +18,22 @@
Name: gigaset-frontend
-Version: 0.6.0
-Release: 1
+Version: 0.7.1
+Release: 0
Summary: Siemens Gigaset configuration software
Source: http://prdownloads.sourceforge.net/gigaset307x/gigaset-frontend-%{version}.tar.gz
Source1: gigaset-frontend.desktop
Patch1: gigaset-frontend-optflags.patch
-Patch2: gigaset-frontend-fix_uninitialized.patch
Source99: gigaset-frontend-rpmlintrc
Url: http://gigaset307x.sourceforge.net/frontend.html
Group: Hardware/ISDN
License: GPL-2.0
BuildRoot: %{_tmppath}/%{name}-%{version}-build
-%if 0%{?suse_version} == 0
-BuildRequires: kernel-source
-%else
%if 0%{?suse_version} > 1120
BuildRequires: linux-glibc-devel
%else
BuildRequires: linux-kernel-headers
-%endif #1120
-%endif #0
+%endif
BuildRequires: libqt4-devel
BuildRequires: libexpat-devel
BuildRequires: gcc gcc-c++ glibc-devel make pkgconfig
@@ -49,8 +44,6 @@
ISDN devices.
%package qt
-
-
Summary: Siemens Gigaset configuration software (GUI)
Group: Hardware/ISDN
@@ -61,7 +54,6 @@
%prep
%setup -q
%patch1
-%patch2
%build
# not autotools:
@@ -112,9 +104,6 @@
%__install -D -m0644 "%{SOURCE1}" "%{buildroot}%{_datadir}/applications/%{name}.desktop"
%suse_update_desktop_file -r "%{name}" Settings HardwareSettings
-%clean
-%{?buildroot:%__rm -rf "%{buildroot}"}
-
%files
%defattr(-,root,root)
%doc COPYING README TODO Release.notes known_bugs.txt
++++++ gigaset-frontend-0.6.0.tar.gz -> gigaset-frontend-0.7.1.tar.gz ++++++
++++ 1622 lines of diff (skipped)
++++ retrying with extended exclude list
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/Makefile new/gigaset-frontend-0.7.1/Makefile
--- old/gigaset-frontend-0.6.0/Makefile 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/Makefile 2013-05-12 23:19:53.000000000 +0200
@@ -14,7 +14,7 @@
# default: "PREFIX/man"
PACKAGE = gigaset-frontend
-VERSION = 0.6.0
+VERSION = 0.7.1
export VERSION
distdir = $(PACKAGE)-$(VERSION)
@@ -29,6 +29,8 @@
-include Makefile.config
+export QTDIR
+
ifndef PREFIX
PREFIX := /usr/local
endif
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/README new/gigaset-frontend-0.7.1/README
--- old/gigaset-frontend-0.6.0/README 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/README 2013-05-12 23:19:53.000000000 +0200
@@ -1,9 +1,9 @@
-Front-end for GigaSet 307x Device Driver (Version 0.6.0)
+Front-end for GigaSet 307x Device Driver (Version 0.7.1)
========================================================
0. Warning
-------
- The front-end utilities gigacontr, qgigaset and gigaconf are still very
+ The front-end utilities gigacontr, qgigaset and gigaconf are still
experimental. Use at your own risk.
@@ -14,10 +14,10 @@
installed before building the front-ends.
The front-end tool "gigaconf" requires the "expat" XML parser library
- (Version 1.x). For (open)SUSE 9.x and later, the necessary package
- "expat" is part of the default selection, but you may still want to
- check it is there. For Debian, do an "apt-get install libexpat1-dev".
- The front-end tool "qgigaset" requires Qt4.
+ (Version 1.x). For openSUSE, the necessary package "expat" is part of
+ the default selection, but you may still want to check it is there.
+ For Debian, do an "apt-get install libexpat1-dev". The front-end tool
+ "qgigaset" requires Qt4.
You can only use these programs when the kernel modules are loaded
and the device nodes have been created (see README of the driver).
@@ -30,17 +30,23 @@
2.1. Binary packages (rpm)
---------------------
- We provide rpms for some distributions (currently SuSE; if you want to
- provide packages for your distribution, please let us know). You can
+ We provide rpms for some distributions (currently openSUSE; if you want
+ to provide packages for your distribution, please let us know). You can
install them using
rpm -i gigaset-frontend-<version>.rpm
or with some graphical front-end.
- If the installation fails because libexpat.so.0 is missing (notably on
- SuSE 10.1) you can add the option "--nodeps" to the rpm command:
+ If the installation fails because libexpat.so.0 is missing you can add
+ the option "--nodeps" to the rpm command:
rpm -i --nodeps gigaset-frontend-<version>.rpm
You won't be able to run "gigaconf", but "gigacontr" will work fine.
+ The command line utilities gigacontr and gigaconf are installed as
+ system utilities in the system binary directory /usr/sbin. You can run
+ them as a non-root user if that user has write permission on the
+ Gigaset device file /dev/ttyG*. On openSUSE this can be achieved by
+ granting that user membership in the "dialout" group.
+
2.2. Build rpm packages from source rpms
-----------------------------------
If you didn't find a binary rpm matching your system, or for some other
@@ -94,7 +100,7 @@
tar -xjvf gigaset-frontend-VERSION.tar.bz2
will create a directory gigaset-frontend-VERSION containing the sources
- (VERSION is currently 0.6.0).
+ (VERSION is currently 0.7.1).
After changing to this directory with
cd gigaset-frontend-VERSION
@@ -121,10 +127,9 @@
--without-qt
don't build qgigaset (default)
--with-debug
- build debug version of qgigaset (default, requires installed Qt4
- debug libraries)
+ build debug version of qgigaset (requires Qt4 debug libraries)
--without-debug
- build release version (use if Qt4 debug libraries aren't installed)
+ build release version (default)
--with-qtlibs
build and install private Qt4 libraries (not yet implemented)
--without-qtlibs
@@ -213,10 +218,10 @@
5. Feedback
--------
- If you can't solve problems with the programs on your own, feel free to
- use one of the forums, bug trackers, or mailing lists on
+ If you encounter a problem with the programs you can't solve on your own,
+ feel free to use one of the forums, bug trackers, or mailing lists on
http://sourceforge.net/projects/gigaset307x
- or write an electronic mail to .
+ or write a mail to .
Try to provide as much information as possible, such as
- distribution
@@ -238,13 +243,16 @@
Things that work reasonably well at this stage:
- reading out the call journal (log) of the base
+ - uploading and downloading phonebooks to/from the handsets
+ - dialing a call for a handset from the PC
- registering M101 and M105 to a base
- basic parameter queries (device type, firmware version ...)
Things that are unfinished but harmless:
- sending and receiving SMS messages (but watch your phone bill ...)
- downloading and uploading answering machine messages (not much use
- as you can neither listen to them nor record new ones on the PC)
+ as you can neither listen to them nor record new ones on the PC,
+ due to the undocumented codec)
Things that could be dangerous:
- fiddling with the configuration values of the base
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/Release.notes new/gigaset-frontend-0.7.1/Release.notes
--- old/gigaset-frontend-0.6.0/Release.notes 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/Release.notes 2013-05-12 23:19:53.000000000 +0200
@@ -8,6 +8,16 @@
uw - Uwe Wendt
+2013-05-12
+ 0.7.1
+ - build improvements
+
+2013-05-08
+ 0.7.0
+ - phonebook function improvements
+ - documentation improvements
+ - add gigaconf and gigacontr --version option
+
2011-02-06
0.6.0
- move development repository from CVS to git
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/TODO new/gigaset-frontend-0.7.1/TODO
--- old/gigaset-frontend-0.6.0/TODO 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/TODO 2013-05-12 23:19:53.000000000 +0200
@@ -4,6 +4,7 @@
-> fix SMS chaining problem (differing timestamps?)
-> win32: fix configuration mode for M105
-> move from sbin / man8 to bin / man1
+ -> add device ID 10 (SX353 built-in phone) where necessary (docs, range checks)
lib:
gigaconf:
-> solve expat problem
@@ -13,7 +14,6 @@
gigacontr:
-> log dump for firmware 1.x
-> config-values: names for pids
- -> phonebook: set supp.data (melody, alarm)
-> sms: UCS2
-> sms: encoding: better error messages
-> mregister: check timeout
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/console/Makefile new/gigaset-frontend-0.7.1/console/Makefile
--- old/gigaset-frontend-0.6.0/console/Makefile 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/console/Makefile 2013-05-12 23:19:53.000000000 +0200
@@ -30,6 +30,12 @@
endif
+ifdef VERSION
+CFLAGS += -DVERSION=$(VERSION)
+else
+CFLAGS += -DVERSION=unknown
+endif
+
all: $(ALL)
ifdef MINGW
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/console/gigaconf.8 new/gigaset-frontend-0.7.1/console/gigaconf.8
--- old/gigaset-frontend-0.6.0/console/gigaconf.8 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/console/gigaconf.8 2013-05-12 23:19:53.000000000 +0200
@@ -1,7 +1,7 @@
.\" Process this file with
.\" groff -man -t -Tascii gigaconf.8
.\"
-.TH gigaconf 8 "2005\-11\-06" gigaset\-0.5.0 "Linux System Administration"
+.TH gigaconf 8 "2013\-05\-12" gigaset\-0.7.1 "Linux System Administration"
.SH NAME
gigaconf \- Gigaset base configuration
.SH SYNOPSIS
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/console/gigaconf.c new/gigaset-frontend-0.7.1/console/gigaconf.c
--- old/gigaset-frontend-0.6.0/console/gigaconf.c 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/console/gigaconf.c 2013-05-12 23:19:53.000000000 +0200
@@ -29,6 +29,9 @@
#define BUFFSIZE 8192
#define MAXKEYS 4
+#define stringify(x) str(x)
+#define str(x) #x
+
/* XML attribute names */
const char *attrtab[] = {
"id",
@@ -616,13 +619,14 @@
}
/* command line options */
-const char *optstring = "hvqd:e:o:x:";
+const char *optstring = "hVvqd:e:o:x:";
const struct option longopts[] = {
{ "help", no_argument, NULL, 'h' },
{ "device", required_argument, NULL, 'd' },
{ "extension", required_argument, NULL, 'e' },
{ "output", required_argument, NULL, 'o' },
{ "homerpar", required_argument, NULL, 'x' },
+ { "version", no_argument, NULL, 'V' },
{ "verbose", no_argument, NULL, 'v' },
{ "quiet", no_argument, NULL, 'q' },
{ NULL, 0, NULL, 0 }
@@ -645,6 +649,7 @@
"\n -x, --homerpar=<file> set location of homerpar.xml file"
"\n (default: %s)"
"\n -h, --help show this message"
+ "\n -V, --version show version number"
"\n -v, --verbose show more details about operations"
"\n -q, --quiet show less details about operations"
"\n\n",
@@ -794,6 +799,12 @@
else
gl.verb = 0;
break;
+ case 'V': /* version */
+ fprintf(stderr,
+ "%s: gigaset-frontend release " stringify(VERSION) "\n"
+ "Copyright (C) 2011 Tilman Schmidt\n",
+ argv[0]);
+ exit(0);
case 'h': /* help */
usage(argv[0]);
exit(0);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/console/gigacontr.8 new/gigaset-frontend-0.7.1/console/gigacontr.8
--- old/gigaset-frontend-0.6.0/console/gigacontr.8 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/console/gigacontr.8 2013-05-12 23:19:53.000000000 +0200
@@ -1,7 +1,7 @@
.\" Process this file with
.\" groff -man -t -Tascii gigacontr.8
.\"
-.TH gigacontr 8 "2011\-02\-06" gigaset\-frontend\-0.6.0 "Linux System Administration"
+.TH gigacontr 8 "2013\-05\-12" gigaset\-frontend\-0.7.1 "Linux System Administration"
.SH NAME
gigacontr \- access to the Gigaset devices and drivers
.SH SYNOPSIS
@@ -370,7 +370,8 @@
.B This might be changed to utf\-8.
.IP "\-\-pbdump \fIid\fR \fImode\fR"
Receive phonebook entries from handset
-.IR id .
+.I id
+and dump them to the standard output.
.br
If
.I mode
@@ -391,23 +392,32 @@
.BR 0 ,
the command uses "new mode"
for handsets which support it, and "old mode" for all others.
-.IP "\-\-pbent \fIname\fR \fInumber\fR \fIid\fR"
-Send phonebook entry to handset
-.IR id .
.IP "\-\-pbfile \fIfile\fR \fIid\fR"
Send phonebook entries from
.I file
(`\-' means standard input) to handset
.IR id .
-
-File format:
-.I name
-.B tab
-.I number
-.B newline ...
+.IP "\-\-pbent \fIname\fR \fInumber\fR \fIid\fR"
+Send a single phonebook entry to handset
+.IR id .
.IP "\-\-pbdel \fIid\fR"
Delete all phonebook entries from handset
.IR id .
+.PP
+The data format for the \-\-pbfile and \-\-pbdump commands is
+one line per entry, with fields separated by tab characters.
+The fields are, in order:
+.IR name ,
+.IR number ,
+.I melody
+(0..10),
+.I alert
+flag (0 or 1),
+.I time
+(hh:mm),
+.I date
+(yy\-mm\-dd).
+Unused fields may be omitted.
.SS CONFIGURATION
.B Warning: Using wrong parameter ids and data types can cause serious problems.
.IP "\-\-cfgread \fIpid\fR \fIid\fR \fItype\fR"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/console/gigacontr.c new/gigaset-frontend-0.7.1/console/gigacontr.c
--- old/gigaset-frontend-0.6.0/console/gigacontr.c 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/console/gigacontr.c 2013-05-12 23:19:53.000000000 +0200
@@ -33,6 +33,11 @@
#include
#include
+#define stringify(x) str(x)
+#define str(x) #x
+
+#define MAXLINE 256
+#define MAXFIELDS 6
#define CF_OPEN 0x0001
#define CF_LOCK 0x0002
@@ -135,7 +140,6 @@
{
struct glog gl;
struct gstatus *gs; /* NULL while !(cs.pflags & CF_OPEN) */
- //const char * procpath;
const char * interface;
unsigned pflags;
int abort;
@@ -154,7 +158,6 @@
struct gigaset_sm * messages;
struct gigaset_sm_chain * send_chain;
struct gigaset_sm * send_messages;
- //int havelist;
/* at most one of these can be selected */
struct gigaset_sm_chain * selected_chain;
@@ -520,25 +523,11 @@
set_error_num_msg(cs, -ERR_PARAMINVALID, 0, argv[0]);
}
-#if 0
-static void cmd_nodev(struct contr_state*cs, char**argv, unsigned long data)
-{
- cs->interface=NULL;
-}
-#endif
-
static void cmd_dev(struct contr_state*cs, char**argv, unsigned long data)
{
cs->interface=argv[0];
}
-#if 0
-static void cmd_path(struct contr_state*cs, char**argv, unsigned long data)
-{
- cs->procpath=argv[0];
-}
-#endif
-
static void cmd_mreset(struct contr_state*cs, char**argv, unsigned long data)
{
int r;
@@ -684,6 +673,7 @@
set_error_msg(cs, r, "setting auto release timer");
}
+/* process a file of phonebook entries */
static void cmd_pbfile(struct contr_state *cs, char **argv, unsigned long data)
{
FILE *f;
@@ -691,6 +681,8 @@
char *s;
char *buf = NULL;
size_t n;
+ char *field[MAXFIELDS];
+ int nfields;
gigaset_log(&cs->gl, GLOG_APPDBG, "PBFILE %s %s\n", argv[0], argv[1]);
if (!strcmp(argv[0],"-"))
@@ -704,12 +696,13 @@
}
for(;;) {
- buf=malloc(256);
+ /* read next line */
+ buf = malloc(MAXLINE);
if (!buf) {
set_error_num_msg(cs, -ERR_MEM, 0, "reading phonebook file");
break;
}
- if (!fgets(buf,256,f)) { /* we cannot handle long lines... */
+ if (!fgets(buf, MAXLINE, f)) {
/* EOF or error */
if (ferror(f))
set_error_num_msg(cs, -ERR_FILEREAD, errno, argv[0]);
@@ -717,33 +710,119 @@
}
n=strlen(buf);
if (!n||buf[n-1]!='\n') {
- gigaset_log(&cs->gl, GLOG_APPERR, "line does not end in newline!\n");
+ gigaset_log(&cs->gl, GLOG_APPERR, "line too long or missing newline!\n");
set_error_num(cs, -ERR_DATA, 0);
break;
}
buf[n-1]='\0';
- s=memchr(buf,(unsigned char)'\t',n);
- if(!s) {
+
+ /* split on tabs */
+ for (s = buf, nfields = 1; nfields <= MAXFIELDS; nfields++) {
+ field[nfields-1]=s;
+ s=strchr(s,'\t');
+ if (!s) break;
+ *s++='\0';
+ }
+
+ if (nfields < 2) {
gigaset_log(&cs->gl, GLOG_APPERR, "tab not found!\n");
set_error_num(cs, -ERR_DATA, 0);
break;
}
- *s='\0';
- while(*++s=='\t');
- pbcur = malloc (sizeof *pbcur);
+ /* build entry */
+ pbcur = calloc(1, sizeof *pbcur);
if (!pbcur) {
set_error_num_msg(cs, -ERR_MEM, 0, "reading phonebook file");
break;
}
+ pbcur->name = field[0];
+ pbcur->number = field[1];
+ if (nfields >= 3) {
+ pbcur->melody = strtol(field[2], &s, 10);
+ if (*s || pbcur->melody < 0 || pbcur->melody > 10) {
+ gigaset_log(&cs->gl, GLOG_APPERR, "bad melody number %s!\n", field[2]);
+ set_error_num(cs, -ERR_DATA, 0);
+ break;
+ }
+ } else {
+ pbcur->melody = -1;
+ }
+ if (nfields >= 6) {
+ pbcur->alert = strtol(field[3], &s, 10);
+ if (*s || pbcur->alert < 0 || pbcur->alert > 1) {
+ gigaset_log(&cs->gl, GLOG_APPERR, "bad alert flag %s!\n", field[3]);
+ set_error_num(cs, -ERR_DATA, 0);
+ break;
+ }
+ pbcur->hour = strtol(field[4], &s, 10);
+ if (!*s) {
+ /* hhmm */
+ pbcur->minute = pbcur->hour % 100;
+ pbcur->hour /= 100;
+ } else if (*s++ == ':') {
+ /* hh:mm */
+ pbcur->minute = strtol(s, &s, 10);
+ }
+ if (*s || pbcur->hour < 0 || pbcur->hour > 23 || pbcur->minute < 0 || pbcur->minute > 59) {
+ gigaset_log(&cs->gl, GLOG_APPERR, "bad alert time %s!\n", field[4]);
+ set_error_num(cs, -ERR_DATA, 0);
+ break;
+ }
+
+ pbcur->year = strtol(field[5], &s, 10);
+ switch (*s) {
+ case '\0':
+ /* [yy]mmdd */
+ pbcur->day = pbcur->year % 100;
+ pbcur->year /= 100;
+ pbcur->month = pbcur->year % 100;
+ pbcur->year /= 100;
+ break;
+ case '-':
+ s++;
+ pbcur->month = strtol(s, &s, 10);
+ if (!*s) {
+ /* mm-dd */
+ pbcur->day = pbcur->month;
+ pbcur->month = pbcur->year;
+ pbcur->year = 0;
+ } else if (*s++ == '-')
+ /* yy-mm-dd */
+ pbcur->day = strtol(s, &s, 10);
+ break;
+ case '.':
+ /* dd.mm.[yy] */
+ pbcur->day = pbcur->year;
+ s++;
+ pbcur->month = strtol(s, &s, 10);
+ if (!*s)
+ pbcur->year = 0;
+ else if (*s++ == '.')
+ pbcur->year = strtol(s, &s, 10);
+ }
+ if (*s || pbcur->year < 0 || pbcur->year > 99 || pbcur->month < 1 || pbcur->month > 12 || pbcur->day < 1 || pbcur->day > 31) {
+ gigaset_log(&cs->gl, GLOG_APPERR, "bad alert date %s!\n", field[5]);
+ set_error_num(cs, -ERR_DATA, 0);
+ break;
+ }
+ if (nfields > 6) {
+ gigaset_log(&cs->gl, GLOG_WARN, "%d extra fields ignored!\n", nfields-6);
+ }
+ } else {
+ pbcur->alert = -1;
+ if (nfields > 3) {
+ gigaset_log(&cs->gl, GLOG_WARN, "incomplete alert (%d fields) ignored!\n", nfields-3);
+ }
+ }
+
+ /* put onto chain */
if (cs->pblast)
cs->pblast->next=pbcur;
else
cs->pbfirst=pbcur;
cs->pblast=pbcur;
pbcur->next=NULL;
- pbcur->name=buf;
- pbcur->number=s;
pbcur->pnr=argv[1];
pbcur->buffer=buf;
buf=NULL;
@@ -752,6 +831,7 @@
free(buf);
}
+/* queue one phonebook entry for transmission to handset */
static void cmd_pbent(struct contr_state *cs, char **argv, unsigned long data)
{
struct gphonebook *pbcur;
@@ -1541,35 +1621,6 @@
}
}
-#if 0
-static void cmd_testfile(struct contr_state*cs, char**argv, unsigned long data)
-{
- FILE *f;
- ssize_t s;
- char *buf;
- int from_stdin;
-
- f = open_file(argv[0], "rb", &from_stdin, stdin);
- if (f == NULL) {
- set_error_num_msg(cs, -ERR_FILEOPEN, errno, NULL);
- return;
- }
-
- s = read_file(f, &buf);
- if (s < 0) {
- set_error_num_msg(cs, s, errno, NULL);
- close_file(f, from_stdin);
- return;
- }
-
- close_file(f, from_stdin);
-
- fwrite(buf, 1, s, stdout);
-
- free(buf);
-}
-#endif
-
static void cmd_amput(struct contr_state*cs, char**argv, unsigned long data)
{
FILE *f;
@@ -1796,52 +1847,7 @@
return -1;
}
}
-#if 0
-static int * fwver (struct gstatus * gs)
-{
- static int ver[4]={-1};
- char * s, * p, * buf;
- int r, i;
-
- if(ver[0]>=0) return ver;
-
- r=gigaset_version(gs,&buf);
- if (r<0)
- {
- ver[0]=-2;
- return ver;
- }
-
- s=buf;
- for (i=0;i<3;++i)
- {
- p=strchr(s,'.');
- if (!p) goto error;
- *p=0;
- if ((ver[i]=tointext(s,0,INT_MAX,-1,10))<0) goto error;
- s=p+1;
- }
- if ((ver[3]=tointext(s,0,INT_MAX,-1,10))<0) goto error;
- free(buf);
- return ver;
-
-error:
- ver[0]=-2;
- free(buf);
- return ver;
-}
-#endif
-#if 0
- ssize_t l;
- size_t pos,n;
- const char * path;
- unsigned long handle, flags;
- int32_t num;
- unsigned u;
- int datatype;
- int newstyle;
-#endif
static void cmd_cfgread(struct contr_state *cs, char **argv, unsigned long data)
{
unsigned id;
@@ -2274,6 +2280,13 @@
}
}
+static void cmd_progversion(struct contr_state *cs, char **argv, unsigned long data)
+{
+ fprintf(stderr,
+ "gigacontr: gigaset-frontend release " stringify(VERSION) "\n"
+ "Copyright (C) 2011 Tilman Schmidt\n");
+}
+
static struct cmd_def commands[];
static void cmd_usage(struct contr_state *cs, char **argv, unsigned long data)
@@ -2399,6 +2412,8 @@
{{"--help","-h","-?"}, 0, PF_OVERWRITE|PF_ABORT, 0,0, cmd_help, 0, NULL,
"show this usage message"},
{{"--usage"}, 0, PF_OVERWRITE|PF_ABORT, 0,0, cmd_usage, 0},
+ {{"--version","-V"}, 0, PF_OVERWRITE|PF_ABORT, 0,0, cmd_progversion, 0, NULL,
+ "show program version"},
{{"-q","--quiet"}, 0, 0, CF_ANY, 0, cmd_verbosity, 0, NULL,
"supress error messages"},
{{"--show-errors"}, 0, 0, CF_ANY, 0, cmd_verbosity, 1, NULL,
@@ -2409,7 +2424,6 @@
"show debug messages"},
{{"--dev"}, 1, 0, 0, 0, cmd_dev, 0, "FILE",
"use the given device node"},
-// {{"--nodev"}, 0, 0, 0, 0, cmd_nodev},
{{"--mode"}, 1, PF_LAST, CF_ANY, 0, cmd_mode, 0, "MODE",
"set operation mode"},
{{"--sleep"}, 1, 0, CF_ANY, 0, cmd_sleep, 0, "SECONDS",
@@ -2456,8 +2470,6 @@
"list all audio messages in phone memory"},
{{"--amget"}, 2, 0, CF_AB, CF_AB, cmd_amget, 0, "ID FILE",
"archive message in file"},
-// {{"--testfile"}, 1, 0, CF_ANY, 0, cmd_testfile, 0, "FILE",
-// "copy file to stdout"},
{{"--amput"}, 1, 0, CF_AB, CF_AB, cmd_amput, 0, "FILE",
"transfer message from file to phone memory"},
{{"--amdel"}, 1, 0, CF_AB, CF_AB, cmd_amdel, 0, "ID",
@@ -2648,83 +2660,7 @@
return *interface;
}
-#if 0
-static char * get_procpath (const char ** path, const char ** interface, const char * name)
-{
- static const char * const list[] = {"/proc/driver/ser_gigaset","/proc/driver/bas_gigaset","/proc/driver/usb_gigaset", "/proc/driver/gigaset_hw",NULL};
-
- struct stat buf;
- const char * const * p; /* <- funny syntax. hl just found out, that it works ;)*/
- char * result;
- size_t l1,l2;
-
- if (!path||!interface)
- {
- gigaset_log(&cs->gl, GLOG_APPERR, "get_procpath: path==NULL or interface==NULL\n");
- return NULL;
- }
- if (!*path) /* search only if not found/set before*/
- {
- for (p=list;*p;++p)
- if(stat(*p, &buf)==0)
- break; /* found => abort loop;*/
- if (!*p) return NULL;
- *path = *p;
- }
- if (!*interface)
- {
- if (stat("/dev/ttyG",&buf)==0)
- *interface="/dev/ttyG";
- else
- *interface=NULL;
- }
-
- l1=strlen(*path);
- if (name)
- {
- if (!strcmp(name,"interface")&&*interface)
- {
- l1=strlen(*interface);
- result=malloc(l1+1);
- if (result) memcpy(result,*interface,l1+1); /* copy _with_ zero-byte*/
- }
- else
- {
- l2=strlen(name);
- result=malloc(l1+1+l2+1);
- if (result)
- {
- memcpy(result,*path,l1);
- result[l1]='/';
- memcpy(result+l1+1,name,l2+1); /* copy _with_ zero-byte*/
- }
- }
- }
- else
- {
- result=malloc(l1+1);
- if (result) memcpy(result,*path,l1+1); /* copy _with_ zero-byte*/
- }
- return result;
-}
-#endif
-
-#if 0
-static int get_procfile (const char *path)
-{
- FILE *fp;
- char readbuffer[512];
-
- fp=fopen(path, "r");
- if (!fp) return -1;
- while (fgets(readbuffer, sizeof readbuffer, fp))
- fputs(readbuffer, stdout);
- if (ferror(fp)) return -1;
- if (fclose(fp)) return -1;
- return 0;
-}
-#endif
-
+/* clear a state flag, processing queued operations for that state */
static int clearflag (struct contr_state * cs, unsigned flag)
{
struct gphonebook * pbcur;
@@ -2999,7 +2935,6 @@
static int keepflag (struct contr_state * cs, unsigned flag)
{
int r;//FIXME
- //ssize_t ss;
switch (flag)
{
@@ -3121,7 +3056,6 @@
cs.gs = NULL;
cs.abort=0;
cs.pflags=0;
- //cs.procpath=NULL;
cs.interface=NULL;
cs.pbfirst=cs.pblast=NULL;
//cs.list=NULL;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/frontend.spec new/gigaset-frontend-0.7.1/frontend.spec
--- old/gigaset-frontend-0.6.0/frontend.spec 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/frontend.spec 2013-05-12 23:19:53.000000000 +0200
@@ -1,54 +1,59 @@
-Version: 0.6.0
-Release: 1
+Name: gigaset-frontend
+Version: 0.7.1
+Release: 1
+Summary: Gigaset configuration software
+Source: http://prdownloads.sourceforge.net/gigaset307x/gigaset-frontend-%{version}.tar.gz
+URL: http://gigaset307x.sourceforge.net/frontend.html
+Group: Hardware/ISDN
+License: GPL-2.0
+BuildRoot: %{_tmppath}/%{name}-%{version}-build
+Provides: %{name} = %{version}-%{release}
%{?ccomp: %{expand: %%define cc_option CC=%ccomp}}
%{!?_with_qt: %{!?_without_qt: %define _without_qt --without-qt}}
%{!?_with_qtlibs: %{!?_without_qtlibs: %define _without_qtlibs --without-qtlibs}}
-%{!?_with_debug: %{!?_without_debug: %define _with_debug --with-debug}}
+%{!?_with_debug: %{!?_without_debug: %define _without_debug --without-debug}}
%{!?_with_expat: %{!?_without_expat: %define _with_expat --with-expat}}
-Summary : Siemens Gigaset configuration software
-Name : gigaset-frontend
-Vendor : gigaset307x
-Source0 : http://telia.dl.sourceforge.net/sourceforge/gigaset307x/gigaset-frontend-%{version}.tar.gz
-Buildroot : %{_tmppath}/%{name}-root
-License : GPL
-Group : System Environment/Kernel
-Provides : %{name} = %{version}-%{release}
-
-#Removed because of the differences among the distributions:
-#Requires : kernel = %{kernel_version}
-
-URL : http://gigaset307x.sourceforge.net/
-
%description
-This package contains user space configuration programs for Siemens Gigaset ISDN devices.
+This package contains user space programs for configuring and controlling
+Gigaset ISDN devices.
%package qt
-Summary : Siemens Gigaset configuration software (GUI)
-Group : System Environment/Kernel
+
+Summary: Gigaset configuration software (GUI)
+Group: Hardware/ISDN
+
%description qt
-This package contains qgigaset, a graphical user space configuration program for Siemens Gigaset ISDN devices.
+This package contains qgigaset, a graphical user space program for
+configuring and controlling Gigaset ISDN devices.
%package qt-lib
-Summary : Qt4 libs for qgigaset
-Group : System Environment/Kernel
+
+Summary: Qt4 libs for qgigaset
+Group: Hardware/ISDN
+
%description qt-lib
-This package contains Qt4 libs for qgigaset, a graphical user space configuration program for Siemens Gigaset ISDN devices.
+This package contains Qt4 libs for qgigaset, a graphical user space program for
+configuring and controlling Gigaset ISDN devices.
%prep
-[ %{buildroot} != / ] && [ -d %{buildroot} ] && rm -rf %{buildroot}
%setup
-./configure --destdir=%{buildroot} --mandir=%{_mandir} --prefix=%{_prefix} --libdir=%{_libdir} --datadir=%{_datadir} \
+
+%build
+./configure \
+ --destdir=%{buildroot} \
+ --prefix=%{_prefix} \
+ --libdir=%{_libdir} \
+ --mandir=%{_mandir} \
+ --datadir=%{_datadir} \
+ %{?_with_expat} %{?_without_expat} \
%{?_with_debug} %{?_without_debug} \
%{?_with_qt} %{?_without_qt} \
%{?_with_qtlibs} %{?_without_qtlibs}
-
-%build
make %{?cc_option}
%install
-[ %{buildroot} != / ] && [ -d %{buildroot} ] && rm -rf %{buildroot}
make %{?cc_option} install
%clean
@@ -80,6 +85,14 @@
ldconfig
%changelog
+* Sun May 12 2013 Tilman Schmidt
+- version 0.7.1
+- partially adapt formatting to openSUSE
+- default to --without debug
+
+* Wed May 08 2013 Tilman Schmidt
+- version 0.7.0
+
* Sat Feb 06 2011 Tilman Schmidt
- version 0.6.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/known_bugs.txt new/gigaset-frontend-0.7.1/known_bugs.txt
--- old/gigaset-frontend-0.6.0/known_bugs.txt 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/known_bugs.txt 2013-05-12 23:19:53.000000000 +0200
@@ -4,7 +4,7 @@
The following bugs are known and need not be reported again.
Fixes are of course always welcome! :)
-V 0.6.0 (unfixed)
+V 0.7.1 (unfixed)
-------
- The gigacontr commands --smslist, --smsdump and --smsdumpext for
@@ -25,9 +25,18 @@
specified message does not exist, because of an "unusual" response
of the device.
-- gigacontr: An answering machine command after --amput does not
- work at the moment. The device does not work as described in the
- specs.
+- gigacontr: An answering machine command after --amput currently does
+ not work. The device does not behave as described in the specs.
+
+
+V 0.7.0 (fixed in V 0.7.1)
+-------
+
+- Compiling qgigaset without QTDIR set fails if Qt doesn't happen to
+ be installed in /bin (ie. QTDIR=/).
+
+- Compiling qgigaset assumes debug build by default, failing if Qt
+ debug libraries are not installed.
V 0.5.3 (fixed in V 0.6)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/lib/basemisc.c new/gigaset-frontend-0.7.1/lib/basemisc.c
--- old/gigaset-frontend-0.6.0/lib/basemisc.c 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/lib/basemisc.c 2013-05-12 23:19:53.000000000 +0200
@@ -36,7 +36,10 @@
r=gigaset_expectresponse(gs, "OK", 2+1, NULL, 30);
if (r<0) return r;
r=gigaset_expectresponse(gs, rsp, l, buf, 30);
- if (r<0) return r;
+ if (r<0) {
+ free(*buf);
+ return r;
+ }
memmove(*buf,*buf+l,strlen(*buf)-l+1);
return 0;
}
@@ -176,8 +179,10 @@
if (r < 0)
goto APD0;
r = gigaset_expectresponse(gs, "ZGACI=", 6, &buf, 30);
- if (r < 0)
+ if (r < 0) {
+ free(buf);
goto APD0;
+ }
errno = 0;
cid = strtoul(buf+6, &end, 10);
@@ -231,15 +236,19 @@
gs->may_interrupt = 1;
r = gigaset_expectcidresponse(gs, "ZSAU=", 5, cid, &buf, GIG_INFTY);
gs->may_interrupt = 0;
- if (r < 0)
+ if (r < 0) {
+ free(buf);
goto rmcid;
+ }
if (!strcmp(buf, "ZSAU=CALL_DELIVERED")) {
free(buf);
gs->may_interrupt = 1;
r = gigaset_expectcidresponse(gs, "ZSAU=", 5, cid, &buf, GIG_INFTY);
gs->may_interrupt = 0;
- if (r < 0)
+ if (r < 0) {
+ free(buf);
goto rmcid;
+ }
}
if (strcmp(buf, "ZSAU=ACTIVE")) {
//FIXME return codes for local hup, remote hup, success, error?
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/lib/block.c new/gigaset-frontend-0.7.1/lib/block.c
--- old/gigaset-frontend-0.6.0/lib/block.c 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/lib/block.c 2013-05-12 23:19:53.000000000 +0200
@@ -216,12 +216,14 @@
r = gigaset_expectresponse(gs, "ZBDAT=", 6, &s, tout);
tout=30; /* 1s is not enough, although suggested by the specs */
- if (r == -FILTER_ZBABORT) {
- doabort = 0;
- r = -ERR_ABORT;
+ if (r<0) {
+ if (r == -FILTER_ZBABORT) {
+ doabort = 0;
+ r = -ERR_ABORT;
+ }
+ free(s);
break;
}
- if (r<0) break;
r=gigaset_blockdecode (&curtype, &cursize, &curseq, &curdatatype, &curblock, s+6);
free(s);
@@ -313,10 +315,10 @@
char * s;
int tout=50; // FIXME: initial timeout guessed
int doabort=1;
- uint32_t totsize;
+ uint32_t totsize = 0;
char * curblock;
- char * pos;
- size_t cursize, bytesleft;
+ char * pos = 0;
+ size_t cursize, bytesleft = 0;
uint8_t curseq, curtype, curdatatype;
char * dest=NULL;
int badblocks=0;
@@ -334,12 +336,14 @@
gigaset_log(gs->gl, GLOG_DEBUG, " status: datatype==0x%02x/phase==%d/seq==%d\n", datatype,phase,seq);
r = gigaset_expectresponse(gs, "ZBDAT=", 6, &s, tout);
tout=30; /* 3 secs */
- if (r == -FILTER_ZBABORT) {
- doabort = 0;
- r = -ERR_ABORT;
+ if (r<0) {
+ if (r == -FILTER_ZBABORT) {
+ doabort = 0;
+ r = -ERR_ABORT;
+ }
+ free(s);
break;
}
- if (r<0) break;
gigaset_logstr (gs->gl, GLOG_DEBUG, " response: ", s);
r=gigaset_blockdecode (&curtype, &cursize, &curseq, &curdatatype, &curblock, s+6);
free(s);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/lib/conf.c new/gigaset-frontend-0.7.1/lib/conf.c
--- old/gigaset-frontend-0.6.0/lib/conf.c 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/lib/conf.c 2013-05-12 23:19:53.000000000 +0200
@@ -146,8 +146,11 @@
//if (r<0) return r;
r=gigaset_expectresponse(gs, "ZCFGR=", 6, &s, 30);
- if (r==-FILTER_ZCFGERR) r=-ERR_ABORT;
- if (r<0) goto exit;
+ if (r<0) {
+ if (r==-FILTER_ZCFGERR) r=-ERR_ABORT;
+ free(s);
+ goto exit;
+ }
l=strlen(s+6)-4;
fcs=gigaset_fromhex4(s+6+l);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/lib/interf-private.h new/gigaset-frontend-0.7.1/lib/interf-private.h
--- old/gigaset-frontend-0.6.0/lib/interf-private.h 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/lib/interf-private.h 2013-05-12 23:19:53.000000000 +0200
@@ -102,8 +102,6 @@
int gigaset_sendcommand(struct gstatus *gs, const char *s);
ssize_t gigaset_getresponse(struct gstatus *gs, char **p, int timeout);
-ssize_t gigaset_getfilteredresponse(struct gstatus *gs, char **p, int timeout,
- int cid, const char *str, size_t len, const char *prefix, size_t preflen);
ssize_t gigaset_expectcidresponse(struct gstatus *gs, const char *s, size_t l, unsigned cid, char **p, int timeout);
ssize_t gigaset_expectresponse(struct gstatus *gs, const char *s, size_t l, char **p, int timeout);
ssize_t gigaset_expectconfigresponse(struct gstatus *gs, const char *s, size_t l, char **p, int timeout);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/lib/interf.c new/gigaset-frontend-0.7.1/lib/interf.c
--- old/gigaset-frontend-0.6.0/lib/interf.c 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/lib/interf.c 2013-05-12 23:19:53.000000000 +0200
@@ -266,6 +266,7 @@
* gs status structure
* p pointer to a pointer variable which will be set to a malloc'd
* copy of the actually received response or NULL on return
+ * (may be NULL)
* timeout maximum time to wait, in 1/10 sec.
* cid if >0, only consider responses with this call ID
* str expected normal response (NULL: only previously added filters)
@@ -274,12 +275,10 @@
* preflen number of characters in prefix
* Return value:
* length of response (>0) if response specified in str received
- * (*p points to response)
* -(filter return value of response) if other expected response received
- * (*p set to NULL)
* error codes: -ERR_TIMEOUT, -ERR_SIGINT, -ERR_MEM, -ERR_READ
*/
-ssize_t gigaset_getfilteredresponse(struct gstatus *gs, char **p, int timeout, int cid, const char *str, size_t len, const char *prefix, size_t preflen)
+static ssize_t gigaset_getfilteredresponse(struct gstatus *gs, char **p, int timeout, int cid, const char *str, size_t len, const char *prefix, size_t preflen)
{
struct resp_filter *tempfilter = NULL;
int match;
@@ -290,18 +289,20 @@
struct resp_buf *resp, *next;
int r;
+ if (p) *p = NULL;
+
if (gs->locked != 1)
return -ERR_LOCK;
- if (!p)
- return -ERR_PARAMINVALID;
- *p = NULL;
if (cid > CID_MAX)
return -ERR_PARAMINVALID;
if (str) {
+ gigaset_logstr(gs->gl, GLOG_DEBUG, "expecting: ", str);
tempfilter = gigaset_addfilter(gs, FILTER_CURRENT, len, str, preflen, prefix);
if (!tempfilter)
return -ERR_MEM;
}
+ else
+ gigaset_log(gs->gl, GLOG_DEBUG, "expecting response\n");
if (cid > 0) {
cidptr = cidbuf + sizeof cidbuf;
*--cidptr = 0;
@@ -356,13 +357,17 @@
resp->len -= preflen + 2;
memmove(resp->str, resp->str + preflen + 2, resp->len + 1);
}
- *p = resp->str;
+ gigaset_logstr(gs->gl, GLOG_DEBUG, "got: ", resp->str);
retval = resp->len;
- free_resp(gs, resp, 0);
} else {
+ gigaset_log(gs->gl, GLOG_DEBUG, "matched: %d\n", match);
retval = -match;
- free_resp(gs, resp, 1);
}
+ if (p) {
+ *p = resp->str;
+ free_resp(gs, resp, 0);
+ } else
+ free_resp(gs, resp, 1);
exit:
if (tempfilter)
@@ -494,42 +499,15 @@
* timeout maximum time to wait, in 1/10 sec.
* Return value:
* length of response (>0) if response specified in s received
- * (*p points to response)
* -(filter return value of response) if other expected response received
- * (*p set to NULL)
* error codes: -ERR_TIMEOUT, -ERR_SIGINT, -ERR_MEM, -ERR_READ
*/
ssize_t gigaset_expectcidresponse(struct gstatus *gs, const char *s, size_t l, unsigned cid, char **p, int timeout)
/* if p!=NULL => return string in *p, if response is found (retval>=0) */
{
- ssize_t r;
- char *b;
- char **p2;
-
if (cid < 1 || cid > CID_MAX)
return -ERR_PARAMINVALID;
-
- if (p)
- p2 = p;
- else
- p2 = &b;
-
- if (s)
- gigaset_logstr(gs->gl, GLOG_DEBUG, "expecting: ", s);
- else
- gigaset_log(gs->gl, GLOG_DEBUG, "expecting response\n");
- r = gigaset_getfilteredresponse(gs, p2, timeout, cid, s, l, NULL, 0);
- if (r < 0)
- return r;
-
- gigaset_logstr(gs->gl, GLOG_DEBUG, "got: ", *p2);
-
- if (!p) {
- free(*p2);
- *p2 = NULL;
- }
-
- return r;
+ return gigaset_getfilteredresponse(gs, p, timeout, cid, s, l, NULL, 0);
}
/* read from device until the expected response or one of the previously added
@@ -540,75 +518,40 @@
* l number of characters in s
* p pointer to a pointer variable which will be set to a malloc'd
* copy of the actually received response or NULL on return
+ * (may be NULL)
* timeout maximum time to wait, in 1/10 sec.
* Return value:
* length of response (>0) if response specified in s received
- * (*p points to response)
* -(filter return value of response) if other expected response received
- * (*p set to NULL)
* error codes: -ERR_TIMEOUT, -ERR_SIGINT, -ERR_MEM, -ERR_READ
*/
ssize_t gigaset_expectresponse(struct gstatus *gs, const char *s, size_t l, char **p, int timeout)
/* if p!=NULL => return string in *p, if response is found (retval>=0) */
{
- ssize_t r;
- char *b;
- char **p2;
-
- if (p)
- p2 = p;
- else
- p2 = &b;
-
- if (s)
- gigaset_logstr(gs->gl, GLOG_DEBUG, "expecting: ", s);
- else
- gigaset_log(gs->gl, GLOG_DEBUG, "expecting response\n");
- r = gigaset_getfilteredresponse(gs, p2, timeout, -1, s, l, NULL, 0);
- if (r < 0)
- return r;
-
- gigaset_logstr(gs->gl, GLOG_DEBUG, "got: ", *p2);
-
- if (!p) {
- free(*p2);
- *p2 = NULL;
- }
-
- return r;
+ return gigaset_getfilteredresponse(gs, p, timeout, -1, s, l, NULL, 0);
}
+/* read from device until the expected response or one of the previously added
+ * filter responses turns up in M10x configuration mode
+ * Parameters:
+ * gs status structure
+ * s expected response (may be NULL)
+ * l number of characters in s
+ * p pointer to a pointer variable which will be set to a malloc'd
+ * copy of the actually received response or NULL on return
+ * (may be NULL)
+ * timeout maximum time to wait, in 1/10 sec.
+ * Return value:
+ * length of response (>0) if response specified in s received
+ * -(filter return value of response) if other expected response received
+ * error codes: -ERR_TIMEOUT, -ERR_SIGINT, -ERR_MEM, -ERR_READ
+ */
ssize_t gigaset_expectconfigresponse(struct gstatus *gs, const char *s, size_t l, char **p, int timeout)
/* if p!=NULL => return string in *p, if response is found (retval>=0) */
{
- ssize_t r;
- char *b;
- char **p2;
-
if (gs->config != 1)
return -1;
-
- if (p)
- p2 = p;
- else
- p2 = &b;
-
- if (s)
- gigaset_logstr(gs->gl, GLOG_DEBUG, "expecting: ", s);
- else
- gigaset_log(gs->gl, GLOG_DEBUG, "expecting response\n");
- r = gigaset_getfilteredresponse(gs, p2, timeout, -1, s, l, gs->prefix, gs->preflen);
- if (r < 0)
- return r;
-
- gigaset_logstr(gs->gl, GLOG_DEBUG, "got: ", *p2);
-
- if (!p) {
- free(*p2);
- *p2 = NULL;
- }
-
- return r;
+ return gigaset_getfilteredresponse(gs, p, timeout, -1, s, l, gs->prefix, gs->preflen);
}
/* send command in configuration mode and collect response
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/lib/log.c new/gigaset-frontend-0.7.1/lib/log.c
--- old/gigaset-frontend-0.6.0/lib/log.c 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/lib/log.c 2013-05-12 23:19:53.000000000 +0200
@@ -20,7 +20,6 @@
int gigaset_logdel(struct gstatus *gs)
{
int r;
- char *buf;
int newstyle;
if (!gs->have_ver_fwbase)
@@ -34,10 +33,9 @@
r = gigaset_sendcommand(gs, "AT^SLOG=RESET"); // => ZLOG=0000
if (r < 0)
return r;
- r = gigaset_expectresponse(gs, "ZLOG=", 5, &buf, 30);
+ r = gigaset_expectresponse(gs, "ZLOG=", 5, NULL, 30);
if (r < 0)
return r;
- free(buf);
return 0;
}
@@ -70,8 +68,10 @@
if (r < 0)
return r;
l = gigaset_expectresponse(gs, "ZLOG=", 5, &buf, 30);
- if (l < 0)
+ if (l < 0) {
+ free(buf);
return l;
+ }
r = gigaset_unstuffbuf((char*) &dst, buf+5, l-5, 0x7d, 6);
free(buf);
@@ -161,8 +161,10 @@
resplen = 5;
}
l = gigaset_expectresponse(gs, resp, resplen, &buf, 30);
- if (l < 0)
+ if (l < 0) {
+ free(buf);
return l;
+ }
entry = buf + resplen;
l -= resplen;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/lib/phonebook.c new/gigaset-frontend-0.7.1/lib/phonebook.c
--- old/gigaset-frontend-0.6.0/lib/phonebook.c 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/lib/phonebook.c 2013-05-12 23:19:53.000000000 +0200
@@ -60,6 +60,44 @@
}
#endif
+static const struct pbcau_desc {
+ unsigned type, value, level;
+ const char *text;
+} pbcau_table[] = {
+ { 0, 0x10, GLOG_DEBUG, "normal call clearing" }
+};
+
+#define pbcau_table_END (pbcau_table + sizeof(pbcau_table)/sizeof((pbcau_table)[0]))
+
+
+static void gigaset_logpbcau(struct glog *gl, const char *s)
+{
+ unsigned type, value;
+ char * vptr;
+ const struct pbcau_desc * ppd;
+
+ if (memcmp(s, "ZPBCAU=", 7)) {
+ gigaset_log(gl, GLOG_ERR, "invalid cause code: %s\n", s);
+ return;
+ }
+ type = strtoul(s+7, &vptr, 16);
+ if (*vptr != ',') {
+ gigaset_log(gl, GLOG_ERR, "invalid cause code: %s\n", s);
+ return;
+ }
+ value = strtoul(vptr+1, &vptr, 16);
+ if (*vptr) {
+ gigaset_log(gl, GLOG_ERR, "invalid cause code: %s\n", s);
+ return;
+ }
+ for (ppd = pbcau_table; ppd < pbcau_table_END; ppd++)
+ if (type == ppd->type && value == ppd->value) {
+ gigaset_log(gl, ppd->level, "cause code: %s\n", ppd->text);
+ return;
+ }
+ gigaset_log(gl, GLOG_WARN, "cause code: %x,%x\n", type, value);
+}
+
static int pbinit(struct gstatus *gs, struct resp_filter *filter[3])
{
filter[0] = gigaset_addfilter(gs, FILTER_ZPBEND, 6+1, "ZPBEND", 0, NULL);
@@ -86,31 +124,33 @@
static int gigaset_pbend (struct gstatus * gs)
{
int r, needok, needend;
+ char * resp;
r = gigaset_sendcommand(gs, "AT^SPBEND");
- if (r < 0) return r;
- for (needok = needend = 1; needok || needend; )
+ for (needok = needend = 1; r >= 0 && (needok || needend); )
{
- r = gigaset_expectresponse(gs, "OK", 2+1, NULL, 30);
+ r = gigaset_expectresponse(gs, "OK", 2+1, &resp, 30);
if (r > 0)
needok = 0;
- else if (r == -FILTER_ZPBEND)
+ else if (r == -FILTER_ZPBEND) {
needend = 0;
- else if (r == -FILTER_ZPBCAU)
- gigaset_log(gs->gl, GLOG_WARN, "ZPBCAU received\n");
- else
- return r;
+ r = 0;
+ } else if (r == -FILTER_ZPBCAU) {
+ gigaset_logpbcau(gs->gl, resp);
+ r = 0;
+ }
+ free(resp);
}
- return 0;
+ return r;
}
static int gigaset_pbstart (struct gstatus * gs, const char * nmbr, char mode)
{
size_t l;
ssize_t r;
- char * cmd;
+ char * cmd, * resp;
l=strlen(nmbr);
cmd=malloc(12+l+2+1);
@@ -128,23 +168,25 @@
if (r < 0) return r;
gs->may_interrupt = 1;
- r = gigaset_expectresponse(gs, "ZPBCONN", 7+1, NULL, 30);
- if (r >= 0) r = gigaset_expectresponse(gs, "ZPBREADY", 8+1, NULL, 30);
+ r = gigaset_expectresponse(gs, "ZPBCONN", 7+1, &resp, 150);
+ if (r >= 0) {
+ free(resp);
+ r = gigaset_expectresponse(gs, "ZPBREADY", 8+1, &resp, 600);
+ }
gs->may_interrupt = 0;
- if (r>=0) return 0;
-
- if (r == -FILTER_ZPBEND)
- return -ERR_ABORT;
-
if (r == -FILTER_ZPBCAU) {
- r = gigaset_expectresponse(gs, "ZPBEND", 6+1, NULL, 0);
- if (r >= 0)
- return -ERR_ABORT;
- r = -ERR_ABORT;
+ gigaset_logpbcau(gs->gl, resp);
+ r = gigaset_expectresponse(gs, NULL, 0, NULL, 0);
+ if (r != -FILTER_ZPBEND)
+ r = -ERR_ABORT;
}
- gigaset_pbend(gs);
+ free(resp);
+ if (r == -FILTER_ZPBEND)
+ return -ERR_ABORT;
+ if (r < 0)
+ gigaset_pbend(gs);
return r;
}
@@ -162,7 +204,7 @@
if (r < 0)
error = r;
- r = gigaset_expectresponse(gs, NULL, 6+1, NULL, 30);
+ r = gigaset_expectresponse(gs, NULL, 0, NULL, 30);
if (r != -FILTER_ZPBEOT)
error = r;
@@ -246,7 +288,7 @@
}
/* supplementary data */
- if (cur->alert == 1) {
+ if (cur->melody >= 0) {
gigaset_log(gs->gl, GLOG_DEBUG, "cur: %.2i\t%.2i\t%.2i:%.2i\t%.2i-%.2i-%.2i\n",
cur->melody, cur->alert,
cur->hour, cur->minute,
@@ -280,7 +322,6 @@
if (error < 0) continue;
//ZPBREPLY may take 7-8 sec to arrive, set ample timeout
error=gigaset_expectresponse(gs, "ZPBRPLY=", 8, &s, 150);
- if (error < 0) continue;
//FIXME test ZPBRPLY value for 0000
free(s);
}
@@ -457,7 +498,7 @@
if (error >= 0)
error = gigaset_expectresponse(gs, "OK", 2+1, NULL, 30);
} else if (method==PB_TRANSFER_NEW) {
- timeout = 30; /* no user action necessary */
+ timeout = 150; /* no user action necessary */
error = gigaset_pbstart(gs, pnmbr, 'R');
} else
return -ERR_PARAMINVALID;
@@ -476,24 +517,23 @@
gs->may_interrupt = 0;
if (len < 0) {
if (len == -FILTER_ZPBCAU) {
+ gigaset_logpbcau(gs->gl, s);
send_pbend = 1;
- len = gigaset_expectresponse(gs, "ZPBEND", 7, NULL, 30);
- if (len >=0) /* hangup and zpbend? */
- send_pbend = 0;
- break; //FIXME
+ len = gigaset_expectresponse(gs, NULL, 0, NULL, 30);
}
+ free(s);
if (len == -FILTER_ZPBEND) {
send_pbend = 0;
} else if (len == -FILTER_ZPBEOT) {
send_pbend = 1;
- len = gigaset_expectresponse(gs, "ZPBCAU=", 7, NULL, 5);
- if (len >=0) {
- len = gigaset_expectresponse(gs, "ZPBEND", 7, NULL, 5);
- if (len >=0) { /* hangup and zpbend? */
+ len = gigaset_expectresponse(gs, NULL, 0, &s, 5);
+ if (len == -FILTER_ZPBCAU) {
+ gigaset_logpbcau(gs->gl, s);
+ len = gigaset_expectresponse(gs, NULL, 0, NULL, 5);
+ if (len == -FILTER_ZPBEND) /* hangup and zpbend? */
send_pbend = 0;
- break;
- }
}
+ free(s);
} else if (error >= 0)
error = len;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/lib/sms.c new/gigaset-frontend-0.7.1/lib/sms.c
--- old/gigaset-frontend-0.6.0/lib/sms.c 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/lib/sms.c 2013-05-12 23:19:53.000000000 +0200
@@ -44,7 +44,7 @@
#ifndef GIG_TEST
int gigaset_smsend (struct gstatus * gs)
{
- ssize_t r;
+ ssize_t r = 0;
unsigned zsmend;
zsmend = gs->temp_filter[FLT_ZSMEND]->status;
@@ -262,8 +262,10 @@
{
ssize_t r;
r=gigaset_smscommand(gs,cmd,rsp,rsplen,buf);
- if (r < 0) return r;
- if (r < rsplen) return -ERR_RESPINVALID;
+ if (r < rsplen) {
+ free(*buf);
+ return r<0 ? r : -ERR_RESPINVALID;
+ }
r -= rsplen;
memmove(*buf, *buf+rsplen, r+1);
return r;
@@ -274,7 +276,10 @@
char * buf;
ssize_t r;
r=gigaset_smscommand(gs,cmd,rsp,rsplen,&buf);
- if (r<0) return r;
+ if (r < 0) {
+ free(buf);
+ return r;
+ }
r=gigaset_32fromdec (num,buf+rsplen);
//if (r<0) r=-1; //FIXME
return r;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' --exclude Makefile.in --exclude configure --exclude config.guess --exclude '*.pot' --exclude mkinstalldirs --exclude aclocal.m4 --exclude config.sub --exclude depcomp --exclude install-sh --exclude ltmain.sh old/gigaset-frontend-0.6.0/qt/dial.cc new/gigaset-frontend-0.7.1/qt/dial.cc
--- old/gigaset-frontend-0.6.0/qt/dial.cc 2011-02-06 15:00:45.000000000 +0100
+++ new/gigaset-frontend-0.7.1/qt/dial.cc 2013-05-12 23:19:53.000000000 +0200
@@ -165,7 +165,7 @@
case 1:
type = GIG_TYPE_EXTERNAL;
break;
- case -1:
+ default:
return; //FIXME msg
}
--
To unsubscribe, e-mail: opensuse-commit+unsubscribe@opensuse.org
For additional commands, e-mail: opensuse-commit+help@opensuse.org