summaryrefslogtreecommitdiffstats
path: root/meta/recipes-connectivity
diff options
context:
space:
mode:
authorRichard Purdie <rpurdie@linux.intel.com>2010-09-01 18:09:11 (GMT)
committerRichard Purdie <rpurdie@linux.intel.com>2010-09-01 18:09:57 (GMT)
commitd62ee7eaf2ba025c3f64b2d4e10dc7cec4637612 (patch)
treef36fe3008f36ff75cbdd31b630f8f13f1f205ebb /meta/recipes-connectivity
parentcaab7fc509bf27706ff3248689f6afd04225cfda (diff)
downloadpoky-d62ee7eaf2ba025c3f64b2d4e10dc7cec4637612.tar.gz
packages: Separate out most of the remaining packages into recipes
Signed-off-by: Richard Purdie <rpurdie@linux.intel.com>
Diffstat (limited to 'meta/recipes-connectivity')
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/dhcp-3.0.3-dhclient-dbus.patch84
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/fix-client-path.patch21
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/fixincludes.patch10
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/noattrmode.patch20
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/site.h21
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp3.inc53
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp4.inc57
-rw-r--r--meta/recipes-connectivity/dhcp/dhcp_4.1.1-P1.bb7
-rw-r--r--meta/recipes-connectivity/dhcp/files/default-relay12
-rw-r--r--meta/recipes-connectivity/dhcp/files/default-server7
-rw-r--r--meta/recipes-connectivity/dhcp/files/dhclient.conf50
-rw-r--r--meta/recipes-connectivity/dhcp/files/dhcpd.conf108
-rw-r--r--meta/recipes-connectivity/dhcp/files/init-relay44
-rw-r--r--meta/recipes-connectivity/dhcp/files/init-server44
-rw-r--r--meta/recipes-connectivity/farsight/farsight2_0.0.9.bb24
-rw-r--r--meta/recipes-connectivity/farsight/libnice_0.0.6.bb23
-rw-r--r--meta/recipes-connectivity/gsm/files/0001-Introduce-ports.patch710
-rw-r--r--meta/recipes-connectivity/gsm/files/0002-Flush-all-pending-commands-before-restarting-the-mod.patch74
-rw-r--r--meta/recipes-connectivity/gsm/files/0003-Correctly-segment-incoming-usock-data-into-packets.patch77
-rw-r--r--meta/recipes-connectivity/gsm/files/0004-Handle-read-and-write-return-values.patch176
-rw-r--r--meta/recipes-connectivity/gsm/files/0005-Add-ask-ds-option-forSMS.patch130
-rw-r--r--meta/recipes-connectivity/gsm/files/024_sms-text-in-bracket.patch70
-rw-r--r--meta/recipes-connectivity/gsm/files/025_sms-status-report.patch133
-rw-r--r--meta/recipes-connectivity/gsm/files/027_phonebook-find-and-read-range-support.patch423
-rw-r--r--meta/recipes-connectivity/gsm/files/028_shell-phonebook-find-and-read-range-support.patch264
-rw-r--r--meta/recipes-connectivity/gsm/files/default59
-rw-r--r--meta/recipes-connectivity/gsm/files/fix_machine_init.patch23
-rw-r--r--meta/recipes-connectivity/gsm/files/gsmd47
-rw-r--r--meta/recipes-connectivity/gsm/files/install-ts-headers.patch11
-rw-r--r--meta/recipes-connectivity/gsm/files/lgsm_send_fix_return_value.patch11
-rw-r--r--meta/recipes-connectivity/gsm/gsmd.inc93
-rw-r--r--meta/recipes-connectivity/gsm/libgsmd_svn.bb5
-rw-r--r--meta/recipes-connectivity/iproute2/iproute2-2.6.34/configure-cross.patch61
-rw-r--r--meta/recipes-connectivity/iproute2/iproute2.inc27
-rw-r--r--meta/recipes-connectivity/iproute2/iproute2_2.6.34.bb6
-rw-r--r--meta/recipes-connectivity/libetpan/files/cxx-is-here.patch18
-rw-r--r--meta/recipes-connectivity/libetpan/libetpan_0.54.bb19
-rw-r--r--meta/recipes-connectivity/libnss-mdns/files/alignment-fix.patch11
-rw-r--r--meta/recipes-connectivity/libnss-mdns/libnss-mdns_0.10.bb36
-rw-r--r--meta/recipes-connectivity/libpcap/libpcap-1.1.1/aclocal.patch165
-rw-r--r--meta/recipes-connectivity/libpcap/libpcap-1.1.1/ieee80215-arphrd.patch22
-rw-r--r--meta/recipes-connectivity/libpcap/libpcap.inc24
-rw-r--r--meta/recipes-connectivity/libpcap/libpcap_1.1.1.bb17
-rw-r--r--meta/recipes-connectivity/network-suspend-scripts/network-suspend-scripts.bb22
-rw-r--r--meta/recipes-connectivity/network-suspend-scripts/network-suspend-scripts/ifupdown26
-rw-r--r--meta/recipes-connectivity/network-suspend-scripts/network-suspend-scripts/usbnet16
-rw-r--r--meta/recipes-connectivity/nfs-utils/libnfsidmap_0.23.bb13
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/nfs-utils-1.0.6-uclibc.patch18
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils/nfsserver161
-rw-r--r--meta/recipes-connectivity/nfs-utils/nfs-utils_1.2.2.bb51
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/configure-targets.patch24
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/ca.patch20
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/config-hurd.patch15
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/debian-targets.patch54
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/engines-path.patch47
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/kfreebsd-pipe.patch13
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/make-targets.patch13
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/man-dir.patch13
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/man-section.patch32
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/no-rpath.patch13
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/no-symbolic.patch13
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/perl-path.diff760
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/pic.patch301
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/pkg-config.patch34
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/rc4-amd64.patch14
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/rehash-crt.patch33
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/rehash_pod.patch60
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/series20
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/shared-lib-ext.patch14
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/stddef.patch12
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/valgrind.patch15
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/debian/version-script.patch33
-rw-r--r--meta/recipes-connectivity/openssl/openssl-0.9.8o/shared-libs.patch48
-rw-r--r--meta/recipes-connectivity/openssl/openssl.inc100
-rw-r--r--meta/recipes-connectivity/openssl/openssl_0.9.8o.bb28
-rw-r--r--meta/recipes-connectivity/openswan/openswan-2.4.7/installflags.patch13
-rw-r--r--meta/recipes-connectivity/openswan/openswan-2.4.7/ld-library-path-breakage.patch26
-rw-r--r--meta/recipes-connectivity/openswan/openswan-2.4.7/openswan-2.4.7-gentoo.patch377
-rw-r--r--meta/recipes-connectivity/openswan/openswan_2.4.7.bb36
-rw-r--r--meta/recipes-connectivity/opensync/libopensync-0.37/build-in-src.patch18
-rw-r--r--meta/recipes-connectivity/opensync/libopensync-0.37/cmake.patch17
-rw-r--r--meta/recipes-connectivity/opensync/libopensync-0.37/no-python-check.patch16
-rw-r--r--meta/recipes-connectivity/opensync/libopensync-plugin-evolution2/0.37-fixes.patch23
-rw-r--r--meta/recipes-connectivity/opensync/libopensync-plugin-evolution2_0.36.bb7
-rw-r--r--meta/recipes-connectivity/opensync/libopensync-plugin-file_0.37.bb1
-rw-r--r--meta/recipes-connectivity/opensync/libopensync-plugin-google-calendar_0.36.bb1
-rw-r--r--meta/recipes-connectivity/opensync/libopensync-plugin-irmc_0.36.bb3
-rw-r--r--meta/recipes-connectivity/opensync/libopensync-plugin-syncml/fixerror.patch13
-rw-r--r--meta/recipes-connectivity/opensync/libopensync-plugin-syncml_0.38.bb7
-rw-r--r--meta/recipes-connectivity/opensync/libopensync-plugin-vformat_0.37.bb3
-rw-r--r--meta/recipes-connectivity/opensync/libopensync-plugin_0.36.inc9
-rw-r--r--meta/recipes-connectivity/opensync/libopensync_0.37.bb25
-rw-r--r--meta/recipes-connectivity/opensync/libsync_svn.bb19
-rw-r--r--meta/recipes-connectivity/opensync/libsyncml/build-in-src.patch19
-rw-r--r--meta/recipes-connectivity/opensync/libsyncml_0.5.4.bb17
-rw-r--r--meta/recipes-connectivity/opensync/msynctool_0.37.bb7
-rw-r--r--meta/recipes-connectivity/portmap/portmap-6.0/destdir-no-strip.patch44
-rw-r--r--meta/recipes-connectivity/portmap/portmap-6.0/tcpd-config.patch28
-rw-r--r--meta/recipes-connectivity/portmap/portmap.inc31
-rwxr-xr-xmeta/recipes-connectivity/portmap/portmap/portmap.init59
-rw-r--r--meta/recipes-connectivity/portmap/portmap_6.0.bb20
-rw-r--r--meta/recipes-connectivity/ppp-dialin/files/host-peer11
-rw-r--r--meta/recipes-connectivity/ppp-dialin/files/ppp-dialin3
-rw-r--r--meta/recipes-connectivity/ppp-dialin/ppp-dialin_0.1.bb35
-rw-r--r--meta/recipes-connectivity/ppp/ppp-2.4.5/08setupdns12
-rw-r--r--meta/recipes-connectivity/ppp/ppp-2.4.5/92removedns5
-rw-r--r--meta/recipes-connectivity/ppp/ppp-2.4.5/cifdefroute.patch290
-rw-r--r--meta/recipes-connectivity/ppp/ppp-2.4.5/enable-ipv6.patch13
-rwxr-xr-xmeta/recipes-connectivity/ppp/ppp-2.4.5/init50
-rwxr-xr-xmeta/recipes-connectivity/ppp/ppp-2.4.5/ip-down43
-rwxr-xr-xmeta/recipes-connectivity/ppp/ppp-2.4.5/ip-up44
-rw-r--r--meta/recipes-connectivity/ppp/ppp-2.4.5/makefile-remove-hard-usr-reference.patch19
-rw-r--r--meta/recipes-connectivity/ppp/ppp-2.4.5/makefile.patch93
-rw-r--r--meta/recipes-connectivity/ppp/ppp-2.4.5/poff26
-rw-r--r--meta/recipes-connectivity/ppp/ppp-2.4.5/pon9
-rw-r--r--meta/recipes-connectivity/ppp/ppp-2.4.5/pppd-resolv-varrun.patch43
-rw-r--r--meta/recipes-connectivity/ppp/ppp_2.4.5.bb77
-rw-r--r--meta/recipes-connectivity/resolvconf/resolvconf_1.43.bb30
-rw-r--r--meta/recipes-connectivity/wbxml/files/no-doc-install.patch15
-rw-r--r--meta/recipes-connectivity/wbxml/wbxml2_0.9.2.bb20
120 files changed, 7010 insertions, 0 deletions
diff --git a/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/dhcp-3.0.3-dhclient-dbus.patch b/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/dhcp-3.0.3-dhclient-dbus.patch
new file mode 100644
index 0000000..579d72f
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/dhcp-3.0.3-dhclient-dbus.patch
@@ -0,0 +1,84 @@
1--- client/scripts/bsdos
2+++ client/scripts/bsdos
3@@ -47,6 +47,11 @@
4 . /etc/dhcp/dhclient-exit-hooks
5 fi
6 # probably should do something with exit status of the local script
7+ if [ x$dhc_dbus != x -a $exit_status -eq 0 ]; then
8+ dbus-send --system --dest=com.redhat.dhcp \
9+ --type=method_call /com/redhat/dhcp/$interface com.redhat.dhcp.set \
10+ 'string:'"`env | grep -Ev '^(PATH|SHLVL|_|PWD|dhc_dbus)\='`"
11+ fi
12 exit $exit_status
13 }
14
15--- client/scripts/freebsd
16+++ client/scripts/freebsd
17@@ -57,6 +57,11 @@
18 . /etc/dhcp/dhclient-exit-hooks
19 fi
20 # probably should do something with exit status of the local script
21+ if [ x$dhc_dbus != x -a $exit_status -eq 0 ]; then
22+ dbus-send --system --dest=com.redhat.dhcp \
23+ --type=method_call /com/redhat/dhcp/$interface com.redhat.dhcp.set \
24+ 'string:'"`env | grep -Ev '^(PATH|SHLVL|_|PWD|dhc_dbus)\='`"
25+ fi
26 exit $exit_status
27 }
28
29--- client/scripts/linux
30+++ client/scripts/linux
31@@ -69,6 +69,11 @@
32 . /etc/dhcp/dhclient-exit-hooks
33 fi
34 # probably should do something with exit status of the local script
35+ if [ x$dhc_dbus != x -a $exit_status -eq 0 ]; then
36+ dbus-send --system --dest=com.redhat.dhcp \
37+ --type=method_call /com/redhat/dhcp/$interface com.redhat.dhcp.set \
38+ 'string:'"`env | grep -Ev '^(PATH|SHLVL|_|PWD|dhc_dbus)\='`"
39+ fi
40 exit $exit_status
41 }
42
43--- client/scripts/netbsd
44+++ client/scripts/netbsd
45@@ -47,6 +47,11 @@
46 . /etc/dhcp/dhclient-exit-hooks
47 fi
48 # probably should do something with exit status of the local script
49+ if [ x$dhc_dbus != x -a $exit_status -eq 0 ]; then
50+ dbus-send --system --dest=com.redhat.dhcp \
51+ --type=method_call /com/redhat/dhcp/$interface com.redhat.dhcp.set \
52+ 'string:'"`env | grep -Ev '^(PATH|SHLVL|_|PWD|dhc_dbus)\='`"
53+ fi
54 exit $exit_status
55 }
56
57--- client/scripts/openbsd
58+++ client/scripts/openbsd
59@@ -47,6 +47,11 @@
60 . /etc/dhcp/dhclient-exit-hooks
61 fi
62 # probably should do something with exit status of the local script
63+ if [ x$dhc_dbus != x -a $exit_status -eq 0 ]; then
64+ dbus-send --system --dest=com.redhat.dhcp \
65+ --type=method_call /com/redhat/dhcp/$interface com.redhat.dhcp.set \
66+ 'string:'"`env | grep -Ev '^(PATH|SHLVL|_|PWD|dhc_dbus)\='`"
67+ fi
68 exit $exit_status
69 }
70
71--- client/scripts/solaris
72+++ client/scripts/solaris
73@@ -47,6 +47,11 @@
74 . /etc/dhcp/dhclient-exit-hooks
75 fi
76 # probably should do something with exit status of the local script
77+ if [ x$dhc_dbus != x -a $exit_status -eq 0 ]; then
78+ dbus-send --system --dest=com.redhat.dhcp \
79+ --type=method_call /com/redhat/dhcp/$interface com.redhat.dhcp.set \
80+ 'string:'"`env | grep -Ev '^(PATH|SHLVL|_|PWD|dhc_dbus)\='`"
81+ fi
82 exit $exit_status
83 }
84
diff --git a/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/fix-client-path.patch b/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/fix-client-path.patch
new file mode 100644
index 0000000..f6a7be1
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/fix-client-path.patch
@@ -0,0 +1,21 @@
1CLIENT_PATH is the only environment when executing dhclient-script,
2without this patch, dhclient-script won't run properly because it
3invokes ifconfig and route
4
57/28/2010 - qhe
6
7diff -ru dhcp-4.1.1-P1.orig//client/Makefile.am dhcp-4.1.1-P1/client/Makefile.am
8--- dhcp-4.1.1-P1.orig//client/Makefile.am 2010-07-29 13:20:05.000000000 +0800
9+++ dhcp-4.1.1-P1/client/Makefile.am 2010-07-29 13:28:14.000000000 +0800
10@@ -10,9 +10,9 @@
11 EXTRA_DIST = $(man_MANS)
12
13 dhclient.o: dhclient.c
14- $(COMPILE) -DCLIENT_PATH='"$(sbindir)"' \
15+ $(COMPILE) -DCLIENT_PATH='"PATH=$(sbindir):$(base_sbindir):$(bindir):$(base_bindir)"' \
16 -DLOCALSTATEDIR='"$(localstatedir)"' -c dhclient.c
17
18 dhc6.o: dhc6.c
19- $(COMPILE) -DCLIENT_PATH='"$(sbindir)"' \
20+ $(COMPILE) -DCLIENT_PATH='"PATH=$(sbindir):$(base_sbindir):$(bindir):$(base_bindir)"' \
21 -DLOCALSTATEDIR='"$(localstatedir)"' -c dhc6.c
diff --git a/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/fixincludes.patch b/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/fixincludes.patch
new file mode 100644
index 0000000..91d99cc
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/fixincludes.patch
@@ -0,0 +1,10 @@
1--- dhcp-3.0.2/common/tr.c~compile 2005-10-13 14:23:37.000000000 +0200
2+++ dhcp-3.0.2/common/tr.c 2005-10-13 14:23:45.000000000 +0200
3@@ -39,6 +39,7 @@
4 #include "includes/netinet/udp.h"
5 #include "includes/netinet/if_ether.h"
6 #include "netinet/if_tr.h"
7+#include <asm/types.h>
8 #include <sys/time.h>
9
10 /*
diff --git a/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/noattrmode.patch b/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/noattrmode.patch
new file mode 100644
index 0000000..5c766d6
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/noattrmode.patch
@@ -0,0 +1,20 @@
1
2#
3# Patch managed by http://www.holgerschurig.de/patcher.html
4#
5
6--- dhcp-3.0.1/includes/dhcpd.h~compile
7+++ dhcp-3.0.1/includes/dhcpd.h
8@@ -306,9 +306,9 @@
9 # define EPHEMERAL_FLAGS (MS_NULL_TERMINATION | \
10 UNICAST_BROADCAST_HACK)
11
12- binding_state_t __attribute__ ((mode (__byte__))) binding_state;
13- binding_state_t __attribute__ ((mode (__byte__))) next_binding_state;
14- binding_state_t __attribute__ ((mode (__byte__))) desired_binding_state;
15+ binding_state_t binding_state;
16+ binding_state_t next_binding_state;
17+ binding_state_t desired_binding_state;
18
19 struct lease_state *state;
20
diff --git a/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/site.h b/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/site.h
new file mode 100644
index 0000000..2289554
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/dhcp-4.1.1-P1/site.h
@@ -0,0 +1,21 @@
1/*
2 * define config file location in ${S}/includes/site.h
3 * still need to take care of installation path (${sysconfdir}/dhcpd.conf)
4 *
5 * 7/22/2010 - qhe
6 */
7
8/* Define this if you want DNS update functionality to be available. */
9
10#define NSUPDATE
11
12/* Define this if you aren't debugging and you want to save memory
13 (potentially a _lot_ of memory) by allocating leases in chunks rather
14 than one at a time. */
15
16#define COMPACT_LEASES
17
18
19/* local */
20#define _PATH_DHCPD_CONF "/etc/dhcp/dhcpd.conf"
21#define _PATH_DHCLIENT_CONF "/etc/dhcp/dhclient.conf"
diff --git a/meta/recipes-connectivity/dhcp/dhcp3.inc b/meta/recipes-connectivity/dhcp/dhcp3.inc
new file mode 100644
index 0000000..3f68f45
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/dhcp3.inc
@@ -0,0 +1,53 @@
1SECTION = "console/network"
2DESCRIPTION = "Internet Software Consortium DHCP package"
3HOMEPAGE = "http://www.isc.org/"
4
5LICENSE = "ISC"
6LIC_FILES_CHKSUM = "file://LICENSE;beginline=4;md5=bb6fd41f5895b67088ebea61ad365e74"
7
8SRC_URI = "ftp://ftp.isc.org/isc/dhcp/dhcp-${PV}.tar.gz \
9 file://init-relay file://default-relay \
10 file://init-server file://default-server \
11 file://dhclient.conf file://dhcpd.conf"
12
13inherit autotools
14
15TARGET_CFLAGS += "-D_GNU_SOURCE"
16
17do_compile() {
18 make RANLIB=${RANLIB} PREDEFINES='-D_PATH_DHCPD_DB=\"/var/lib/dhcp/dhcpd.leases\" \
19 -D_PATH_DHCLIENT_DB=\"/var/lib/dhcp/dhclient.leases\" \
20 -D_PATH_DHCLIENT_SCRIPT=\"/sbin/dhclient-script\" \
21 -D_PATH_DHCPD_CONF=\"/etc/dhcp/dhcpd.conf\" \
22 -D_PATH_DHCLIENT_CONF=\"/etc/dhcp/dhclient.conf\"'
23}
24
25do_install() {
26 make -e DESTDIR=${D} USRMANDIR=${mandir}/man1 ADMMANDIR=${mandir}/man8 FFMANDIR=${mandir}/man5 LIBMANDIR=${mandir}/man3 LIBDIR=${libdir} INCDIR=${includedir} install
27 install -d ${D}${sysconfdir}/init.d
28 install -d ${D}${sysconfdir}/default
29 install -d ${D}${sysconfdir}/dhcp
30 install -m 0755 ${WORKDIR}/init-relay ${D}${sysconfdir}/init.d/dhcp-relay
31 install -m 0644 ${WORKDIR}/default-relay ${D}${sysconfdir}/default/dhcp-relay
32 install -m 0755 ${WORKDIR}/init-server ${D}${sysconfdir}/init.d/dhcp-server
33 install -m 0644 ${WORKDIR}/default-server ${D}${sysconfdir}/default/dhcp-server
34 install -m 0644 ${WORKDIR}/dhclient.conf ${D}${sysconfdir}/dhcp/dhclient.conf
35 install -m 0644 ${WORKDIR}/dhcpd.conf ${D}${sysconfdir}/dhcp/dhcpd.conf
36 install -d ${D}${base_sbindir}/
37 mv ${D}${sbindir}/dhclient ${D}${base_sbindir}/
38 install -m 0755 ${S}/client/scripts/linux ${D}${base_sbindir}/dhclient-script
39}
40
41PACKAGES += "dhcp-server dhcp-client dhcp-relay dhcp-omshell"
42FILES_${PN} = ""
43FILES_dhcp-server = "${sbindir}/dhcpd ${sysconfdir}/init.d/dhcp-server ${sysconfdir}/default/dhcp-server ${sysconfdir}/dhcp/dhcpd.conf"
44FILES_dhcp-relay = "${sbindir}/dhcrelay ${sysconfdir}/init.d/dhcp-relay ${sysconfdir}/default/dhcp-relay"
45
46FILES_dhcp-client = "${base_sbindir}/dhclient ${base_sbindir}/dhclient-script ${sysconfdir}/dhcp/dhclient.conf"
47RDEPENDS_dhcp-client = "bash"
48
49FILES_dhcp-omshell = "${bindir}/omshell"
50
51CONFFILES_dhcp-server_nylon = "/etc/dhcp/dhcpd.conf"
52CONFFILES_dhcp-relay_nylon = "/etc/default/dhcp-relay"
53CONFFILES_dhcp-client_nylon = "/etc/dhcp/dhclient.conf"
diff --git a/meta/recipes-connectivity/dhcp/dhcp4.inc b/meta/recipes-connectivity/dhcp/dhcp4.inc
new file mode 100644
index 0000000..7652b94
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/dhcp4.inc
@@ -0,0 +1,57 @@
1SECTION = "console/network"
2DESCRIPTION = "Internet Software Consortium DHCP package"
3HOMEPAGE = "http://www.isc.org/"
4
5LICENSE = "ISC"
6LIC_FILES_CHKSUM = "file://LICENSE;beginline=4;md5=bb6fd41f5895b67088ebea61ad365e74"
7
8SRC_URI = "ftp://ftp.isc.org/isc/dhcp/dhcp-${PV}.tar.gz \
9 file://site.h \
10 file://init-relay file://default-relay \
11 file://init-server file://default-server \
12 file://dhclient.conf file://dhcpd.conf"
13
14inherit autotools
15
16TARGET_CFLAGS += "-D_GNU_SOURCE"
17EXTRA_OECONF = "--with-srv-lease-file=${localstatedir}/lib/dhcp/dhcpd.leases \
18 --with-srv6-lease-file=${localstatedir}/lib/dhcp/dhcpd6.leases \
19 --with-cli-lease-file=${localstatedir}/lib/dhcp/dhclient.leases \
20 --with-cli6-lease-file=${localstatedir}/lib/dhcp/dhclient6.leases"
21
22do_compile_prepend () {
23 cp -f ${WORKDIR}/site.h ${S}/includes
24}
25
26do_install_append () {
27 install -d ${D}${sysconfdir}/init.d
28 install -d ${D}${sysconfdir}/default
29 install -d ${D}${sysconfdir}/dhcp
30 install -m 0755 ${WORKDIR}/init-relay ${D}${sysconfdir}/init.d/dhcp-relay
31 install -m 0644 ${WORKDIR}/default-relay ${D}${sysconfdir}/default/dhcp-relay
32 install -m 0755 ${WORKDIR}/init-server ${D}${sysconfdir}/init.d/dhcp-server
33 install -m 0644 ${WORKDIR}/default-server ${D}${sysconfdir}/default/dhcp-server
34
35 rm -f ${D}${sysconfdir}/dhclient.conf
36 rm -f ${D}${sysconfdir}/dhcpd.conf
37 install -m 0644 ${WORKDIR}/dhclient.conf ${D}${sysconfdir}/dhcp/dhclient.conf
38 install -m 0644 ${WORKDIR}/dhcpd.conf ${D}${sysconfdir}/dhcp/dhcpd.conf
39
40 install -d ${D}${base_sbindir}/
41 mv ${D}${sbindir}/dhclient ${D}${base_sbindir}/
42 install -m 0755 ${S}/client/scripts/linux ${D}${base_sbindir}/dhclient-script
43}
44
45PACKAGES += "dhcp-server dhcp-client dhcp-relay dhcp-omshell"
46FILES_${PN} = ""
47FILES_dhcp-server = "${sbindir}/dhcpd ${sysconfdir}/init.d/dhcp-server ${sysconfdir}/default/dhcp-server ${sysconfdir}/dhcp/dhcpd.conf"
48FILES_dhcp-relay = "${sbindir}/dhcrelay ${sysconfdir}/init.d/dhcp-relay ${sysconfdir}/default/dhcp-relay"
49
50FILES_dhcp-client = "${base_sbindir}/dhclient ${base_sbindir}/dhclient-script ${sysconfdir}/dhcp/dhclient.conf"
51RDEPENDS_dhcp-client = "bash"
52
53FILES_dhcp-omshell = "${bindir}/omshell"
54
55CONFFILES_dhcp-server_nylon = "/etc/dhcp/dhcpd.conf"
56CONFFILES_dhcp-relay_nylon = "/etc/default/dhcp-relay"
57CONFFILES_dhcp-client_nylon = "/etc/dhcp/dhclient.conf"
diff --git a/meta/recipes-connectivity/dhcp/dhcp_4.1.1-P1.bb b/meta/recipes-connectivity/dhcp/dhcp_4.1.1-P1.bb
new file mode 100644
index 0000000..e9759de
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/dhcp_4.1.1-P1.bb
@@ -0,0 +1,7 @@
1require dhcp4.inc
2
3PR = "r1"
4
5SRC_URI += "file://fixincludes.patch \
6 file://dhcp-3.0.3-dhclient-dbus.patch;striplevel=0 \
7 file://fix-client-path.patch"
diff --git a/meta/recipes-connectivity/dhcp/files/default-relay b/meta/recipes-connectivity/dhcp/files/default-relay
new file mode 100644
index 0000000..59249db
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/files/default-relay
@@ -0,0 +1,12 @@
1# Defaults for dhcp-relay initscript
2# sourced by /etc/init.d/dhcp-relay
3
4# What servers should the DHCP relay forward requests to?
5# e.g: SERVERS="192.168.0.1"
6SERVERS=""
7
8# On what interfaces should the DHCP relay (dhrelay) serve DHCP requests?
9INTERFACES=""
10
11# Additional options that are passed to the DHCP relay daemon?
12OPTIONS="" \ No newline at end of file
diff --git a/meta/recipes-connectivity/dhcp/files/default-server b/meta/recipes-connectivity/dhcp/files/default-server
new file mode 100644
index 0000000..0385d16
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/files/default-server
@@ -0,0 +1,7 @@
1# Defaults for dhcp initscript
2# sourced by /etc/init.d/dhcp-server
3# installed at /etc/default/dhcp-server by the maintainer scripts
4
5# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
6# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
7INTERFACES=""
diff --git a/meta/recipes-connectivity/dhcp/files/dhclient.conf b/meta/recipes-connectivity/dhcp/files/dhclient.conf
new file mode 100644
index 0000000..0e6dcf9
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/files/dhclient.conf
@@ -0,0 +1,50 @@
1# Configuration file for /sbin/dhclient, which is included in Debian's
2# dhcp3-client package.
3#
4# This is a sample configuration file for dhclient. See dhclient.conf's
5# man page for more information about the syntax of this file
6# and a more comprehensive list of the parameters understood by
7# dhclient.
8#
9# Normally, if the DHCP server provides reasonable information and does
10# not leave anything out (like the domain name, for example), then
11# few changes must be made to this file, if any.
12#
13
14#send host-name "andare.fugue.com";
15#send dhcp-client-identifier 1:0:a0:24:ab:fb:9c;
16#send dhcp-lease-time 3600;
17#supersede domain-name "fugue.com home.vix.com";
18#prepend domain-name-servers 127.0.0.1;
19request subnet-mask, broadcast-address, time-offset, routers,
20 domain-name, domain-name-servers, host-name,
21 netbios-name-servers, netbios-scope;
22#require subnet-mask, domain-name-servers;
23#timeout 60;
24#retry 60;
25#reboot 10;
26#select-timeout 5;
27#initial-interval 2;
28#script "/etc/dhcp3/dhclient-script";
29#media "-link0 -link1 -link2", "link0 link1";
30#reject 192.33.137.209;
31
32#alias {
33# interface "eth0";
34# fixed-address 192.5.5.213;
35# option subnet-mask 255.255.255.255;
36#}
37
38#lease {
39# interface "eth0";
40# fixed-address 192.33.137.200;
41# medium "link0 link1";
42# option host-name "andare.swiftmedia.com";
43# option subnet-mask 255.255.255.0;
44# option broadcast-address 192.33.137.255;
45# option routers 192.33.137.250;
46# option domain-name-servers 127.0.0.1;
47# renew 2 2000/1/12 00:00:01;
48# rebind 2 2000/1/12 00:00:01;
49# expire 2 2000/1/12 00:00:01;
50#}
diff --git a/meta/recipes-connectivity/dhcp/files/dhcpd.conf b/meta/recipes-connectivity/dhcp/files/dhcpd.conf
new file mode 100644
index 0000000..0001c0f
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/files/dhcpd.conf
@@ -0,0 +1,108 @@
1#
2# Sample configuration file for ISC dhcpd for Debian
3#
4# $Id: dhcpd.conf,v 1.1.1.1 2002/05/21 00:07:44 peloy Exp $
5#
6
7# The ddns-updates-style parameter controls whether or not the server will
8# attempt to do a DNS update when a lease is confirmed. We default to the
9# behavior of the version 2 packages ('none', since DHCP v2 didn't
10# have support for DDNS.)
11ddns-update-style none;
12
13# option definitions common to all supported networks...
14option domain-name "example.org";
15option domain-name-servers ns1.example.org, ns2.example.org;
16
17default-lease-time 600;
18max-lease-time 7200;
19
20# If this DHCP server is the official DHCP server for the local
21# network, the authoritative directive should be uncommented.
22#authoritative;
23
24# Use this to send dhcp log messages to a different log file (you also
25# have to hack syslog.conf to complete the redirection).
26log-facility local7;
27
28# No service will be given on this subnet, but declaring it helps the
29# DHCP server to understand the network topology.
30
31#subnet 10.152.187.0 netmask 255.255.255.0 {
32#}
33
34# This is a very basic subnet declaration.
35
36#subnet 10.254.239.0 netmask 255.255.255.224 {
37# range 10.254.239.10 10.254.239.20;
38# option routers rtr-239-0-1.example.org, rtr-239-0-2.example.org;
39#}
40
41# This declaration allows BOOTP clients to get dynamic addresses,
42# which we don't really recommend.
43
44#subnet 10.254.239.32 netmask 255.255.255.224 {
45# range dynamic-bootp 10.254.239.40 10.254.239.60;
46# option broadcast-address 10.254.239.31;
47# option routers rtr-239-32-1.example.org;
48#}
49
50# A slightly different configuration for an internal subnet.
51#subnet 10.5.5.0 netmask 255.255.255.224 {
52# range 10.5.5.26 10.5.5.30;
53# option domain-name-servers ns1.internal.example.org;
54# option domain-name "internal.example.org";
55# option routers 10.5.5.1;
56# option broadcast-address 10.5.5.31;
57# default-lease-time 600;
58# max-lease-time 7200;
59#}
60
61# Hosts which require special configuration options can be listed in
62# host statements. If no address is specified, the address will be
63# allocated dynamically (if possible), but the host-specific information
64# will still come from the host declaration.
65
66#host passacaglia {
67# hardware ethernet 0:0:c0:5d:bd:95;
68# filename "vmunix.passacaglia";
69# server-name "toccata.fugue.com";
70#}
71
72# Fixed IP addresses can also be specified for hosts. These addresses
73# should not also be listed as being available for dynamic assignment.
74# Hosts for which fixed IP addresses have been specified can boot using
75# BOOTP or DHCP. Hosts for which no fixed address is specified can only
76# be booted with DHCP, unless there is an address range on the subnet
77# to which a BOOTP client is connected which has the dynamic-bootp flag
78# set.
79#host fantasia {
80# hardware ethernet 08:00:07:26:c0:a5;
81# fixed-address fantasia.fugue.com;
82#}
83
84# You can declare a class of clients and then do address allocation
85# based on that. The example below shows a case where all clients
86# in a certain class get addresses on the 10.17.224/24 subnet, and all
87# other clients get addresses on the 10.0.29/24 subnet.
88
89#class "foo" {
90# match if substring (option vendor-class-identifier, 0, 4) = "SUNW";
91#}
92
93#shared-network 224-29 {
94# subnet 10.17.224.0 netmask 255.255.255.0 {
95# option routers rtr-224.example.org;
96# }
97# subnet 10.0.29.0 netmask 255.255.255.0 {
98# option routers rtr-29.example.org;
99# }
100# pool {
101# allow members of "foo";
102# range 10.17.224.10 10.17.224.250;
103# }
104# pool {
105# deny members of "foo";
106# range 10.0.29.10 10.0.29.230;
107# }
108#}
diff --git a/meta/recipes-connectivity/dhcp/files/init-relay b/meta/recipes-connectivity/dhcp/files/init-relay
new file mode 100644
index 0000000..019a7e8
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/files/init-relay
@@ -0,0 +1,44 @@
1#!/bin/sh
2#
3# $Id: dhcp3-relay,v 1.1 2004/04/16 15:41:08 ml Exp $
4#
5
6# It is not safe to start if we don't have a default configuration...
7if [ ! -f /etc/default/dhcp-relay ]; then
8 echo "/etc/default/dhcp-relay does not exist! - Aborting..."
9 echo "create this file to fix the problem."
10 exit 1
11fi
12
13# Read init script configuration (interfaces the daemon should listen on
14# and the DHCP server we should forward requests to.)
15. /etc/default/dhcp-relay
16
17# Build command line for interfaces (will be passed to dhrelay below.)
18IFCMD=""
19if test "$INTERFACES" != ""; then
20 for I in $INTERFACES; do
21 IFCMD=${IFCMD}"-i "${I}" "
22 done
23fi
24
25DHCRELAYPID=/var/run/dhcrelay.pid
26
27case "$1" in
28 start)
29 start-stop-daemon -S -x /usr/sbin/dhcrelay -- -q $OPTIONS $IFCMD $SERVERS
30 ;;
31 stop)
32 start-stop-daemon -K -x /usr/sbin/dhcrelay
33 ;;
34 restart | force-reload)
35 $0 stop
36 sleep 2
37 $0 start
38 ;;
39 *)
40 echo "Usage: /etc/init.d/dhcp-relay {start|stop|restart|force-reload}"
41 exit 1
42esac
43
44exit 0
diff --git a/meta/recipes-connectivity/dhcp/files/init-server b/meta/recipes-connectivity/dhcp/files/init-server
new file mode 100644
index 0000000..34c2085
--- /dev/null
+++ b/meta/recipes-connectivity/dhcp/files/init-server
@@ -0,0 +1,44 @@
1#!/bin/sh
2#
3# $Id: dhcp3-server.init.d,v 1.4 2003/07/13 19:12:41 mdz Exp $
4#
5
6test -f /usr/sbin/dhcpd || exit 0
7
8# It is not safe to start if we don't have a default configuration...
9if [ ! -f /etc/default/dhcp-server ]; then
10 echo "/etc/default/dhcp-server does not exist! - Aborting..."
11 exit 0
12fi
13
14# Read init script configuration (so far only interfaces the daemon
15# should listen on.)
16. /etc/default/dhcp-server
17
18case "$1" in
19 start)
20 echo -n "Starting DHCP server: "
21 test -d /var/lib/dhcp/ || mkdir -p /var/lib/dhcp/
22 test -f /var/lib/dhcp/dhcpd.leases || touch /var/lib/dhcp/dhcpd.leases
23 start-stop-daemon -S -x /usr/sbin/dhcpd -- -q $INTERFACES
24 echo "."
25 ;;
26 stop)
27 echo -n "Stopping DHCP server: dhcpd3"
28 start-stop-daemon -K -x /usr/sbin/dhcpd
29 echo "."
30 ;;
31 restart | force-reload)
32 $0 stop
33 sleep 2
34 $0 start
35 if [ "$?" != "0" ]; then
36 exit 1
37 fi
38 ;;
39 *)
40 echo "Usage: /etc/init.d/dhcp-server {start|stop|restart|force-reload}"
41 exit 1
42esac
43
44exit 0
diff --git a/meta/recipes-connectivity/farsight/farsight2_0.0.9.bb b/meta/recipes-connectivity/farsight/farsight2_0.0.9.bb
new file mode 100644
index 0000000..06c85f1
--- /dev/null
+++ b/meta/recipes-connectivity/farsight/farsight2_0.0.9.bb
@@ -0,0 +1,24 @@
1DESCRIPTION = "FarSight is an audio/video conferencing framework specifically designed for Instant Messengers."
2HOMEPAGE = "http://farsight.sf.net"
3SRC_URI = "http://farsight.freedesktop.org/releases/farsight2/${P}.tar.gz"
4
5DEPENDS = "libnice glib-2.0 libxml2 zlib dbus gstreamer gst-plugins-base"
6
7inherit autotools
8AUTOTOOLS_STAGE_PKGCONFIG = "1"
9
10PR = "r1"
11
12EXTRA_OECONF = " \
13 --disable-debug \
14 --disable-gtk-doc \
15 --disable-python \
16"
17
18FILES_${PN} += "${libdir}/*/*.so"
19FILES_${PN}-dev += "${libdir}/f*/*a ${libdir}/g*/*a"
20FILES_${PN}-dbg += "${libdir}/*/.debug"
21
22
23
24
diff --git a/meta/recipes-connectivity/farsight/libnice_0.0.6.bb b/meta/recipes-connectivity/farsight/libnice_0.0.6.bb
new file mode 100644
index 0000000..809b691
--- /dev/null
+++ b/meta/recipes-connectivity/farsight/libnice_0.0.6.bb
@@ -0,0 +1,23 @@
1DESCRIPTION = "Libnice is an implementation of the IETF's draft Interactice Connectivity Establishment standard (ICE)."
2HOMEPAGE = "http://nice.freedesktop.org/wiki/"
3SRC_URI = "http://nice.freedesktop.org/releases/libnice-${PV}.tar.gz"
4
5LICENSE = "LGPL/MPL"
6DEPENDS = "glib-2.0 gstreamer"
7
8inherit autotools
9AUTOTOOLS_STAGE_PKGCONFIG = "1"
10
11FILES_${PN} += "${libdir}/gstreamer-0.10/*.so"
12FILES_${PN}-dev += "${libdir}/gstreamer-0.10/*a"
13FILES_${PN}-dbg += "${libdir}/gstreamer-0.10/.debug"
14
15do_compile_append() {
16 for i in $(find ${S} -name "*.pc") ; do
17 sed -i -e s:${STAGING_DIR_TARGET}::g \
18 -e s:/${TARGET_SYS}::g \
19 $i
20 done
21}
22
23
diff --git a/meta/recipes-connectivity/gsm/files/0001-Introduce-ports.patch b/meta/recipes-connectivity/gsm/files/0001-Introduce-ports.patch
new file mode 100644
index 0000000..b3ba3cb
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/0001-Introduce-ports.patch
@@ -0,0 +1,710 @@
1From 516d67c679101d1503dbd4c0613bcd6ff1b604e4 Mon Sep 17 00:00:00 2001
2From: Andrzej Zaborowski <balrog@zabor.org>
3Date: Wed, 19 Sep 2007 14:03:28 +0200
4Subject: [PATCH] Introduce ports.
5
6---
7 include/gsmd/atcmd.h | 2 +-
8 include/gsmd/gsmd.h | 7 +-
9 include/gsmd/uart.h | 28 ++++++
10 include/gsmd/vendorplugin.h | 4 +-
11 src/gsmd/Makefile.am | 2 +-
12 src/gsmd/atcmd.c | 177 +++++++++++++++++---------------------
13 src/gsmd/gsmd.c | 64 ++------------
14 src/gsmd/uart.c | 202 +++++++++++++++++++++++++++++++++++++++++++
15 8 files changed, 328 insertions(+), 158 deletions(-)
16 create mode 100644 include/gsmd/uart.h
17 create mode 100644 src/gsmd/uart.c
18
19diff --git a/include/gsmd/atcmd.h b/include/gsmd/atcmd.h
20index 0d6c62a..a1af6a0 100644
21--- a/include/gsmd/atcmd.h
22+++ b/include/gsmd/atcmd.h
23@@ -9,7 +9,7 @@ typedef int atcmd_cb_t(struct gsmd_atcmd *cmd, void *ctx, char *resp);
24
25 extern struct gsmd_atcmd *atcmd_fill(const char *cmd, int rlen, atcmd_cb_t *cb, void *ctx, u_int16_t id);
26 extern int atcmd_submit(struct gsmd *g, struct gsmd_atcmd *cmd);
27-extern int atcmd_init(struct gsmd *g, int sockfd);
28+extern int atcmd_init(struct gsmd *g, struct gsmd_port *port);
29 extern void atcmd_drain(int fd);
30
31 #endif /* __GSMD__ */
32diff --git a/include/gsmd/gsmd.h b/include/gsmd/gsmd.h
33index ed334f1..4afdf66 100644
34--- a/include/gsmd/gsmd.h
35+++ b/include/gsmd/gsmd.h
36@@ -10,6 +10,7 @@
37 #include <gsmd/machineplugin.h>
38 #include <gsmd/vendorplugin.h>
39 #include <gsmd/select.h>
40+#include <gsmd/uart.h>
41 #include <gsmd/state.h>
42
43 void *gsmd_tallocs;
44@@ -52,6 +53,7 @@ enum llparse_state {
45 #define MLPARSE_BUF_SIZE 65535
46
47 struct llparser {
48+ struct gsmd_port *port;
49 enum llparse_state state;
50 unsigned int len;
51 unsigned int flags;
52@@ -70,7 +72,7 @@ struct gsmd;
53 struct gsmd {
54 unsigned int flags;
55 int interpreter_ready;
56- struct gsmd_fd gfd_uart;
57+ struct gsmd_uart uart;
58 struct gsmd_fd gfd_sock;
59 struct llparser llp;
60 struct llist_head users;
61@@ -81,9 +83,10 @@ struct gsmd {
62 struct gsmd_device_state dev_state;
63
64 struct llist_head operators; /* cached list of operator names */
65- unsigned char *mlbuf; /* ml_parse buffer */
66+ char *mlbuf; /* ml_parse buffer */
67 unsigned int mlbuf_len;
68 int mlunsolicited;
69+ int clear_to_send;
70 };
71
72 struct gsmd_user {
73diff --git a/include/gsmd/uart.h b/include/gsmd/uart.h
74new file mode 100644
75index 0000000..a006fa7
76--- /dev/null
77+++ b/include/gsmd/uart.h
78@@ -0,0 +1,28 @@
79+#ifndef __GSMD_UART_H
80+#define __GSMD_UART_H
81+
82+#ifdef __GSMD__
83+
84+struct gsmd_port {
85+ int (*write)(struct gsmd_port *port, const char data[], int len);
86+ int (*set_break)(struct gsmd_port *port, int state);
87+ /* more parameters here */
88+ int (*newdata_cb)(void *opaque, const char data[], int len);
89+ void *newdata_opaque;
90+};
91+
92+struct gsmd_uart {
93+ struct gsmd_port port;
94+ struct gsmd_fd gfd;
95+ char txfifo[2048];
96+ int tx_start;
97+ int tx_len;
98+};
99+
100+extern int set_baudrate(int fd, int baudrate, int hwflow);
101+extern void uart_drain(int fd);
102+extern int uart_init(struct gsmd_uart *uart, int sockfd);
103+
104+#endif /* __GSMD__ */
105+
106+#endif
107diff --git a/include/gsmd/vendorplugin.h b/include/gsmd/vendorplugin.h
108index 1911fef..1c82790 100644
109--- a/include/gsmd/vendorplugin.h
110+++ b/include/gsmd/vendorplugin.h
111@@ -11,8 +11,8 @@ struct gsmd_unsolicit;
112
113 struct gsmd_vendor_plugin {
114 struct llist_head list;
115- unsigned char *name;
116- unsigned char *ext_chars;
117+ char *name;
118+ char *ext_chars;
119 unsigned int num_unsolicit;
120 const struct gsmd_unsolicit *unsolicit;
121 int (*detect)(struct gsmd *g);
122diff --git a/src/gsmd/Makefile.am b/src/gsmd/Makefile.am
123index 9ac45ee..110b757 100644
124--- a/src/gsmd/Makefile.am
125+++ b/src/gsmd/Makefile.am
126@@ -13,7 +13,7 @@ sbin_PROGRAMS = gsmd
127 gsmd_CFLAGS = -D PLUGINDIR=\"$(plugindir)\"
128 gsmd_SOURCES = gsmd.c atcmd.c select.c machine.c vendor.c unsolicited.c log.c \
129 usock.c talloc.c timer.c operator_cache.c ext_response.c \
130- sms_cb.c sms_pdu.c
131+ sms_cb.c sms_pdu.c uart.c
132 gsmd_LDADD = -ldl
133 gsmd_LDFLAGS = -Wl,--export-dynamic
134
135diff --git a/src/gsmd/atcmd.c b/src/gsmd/atcmd.c
136index 2ef6a10..27dfa41 100644
137--- a/src/gsmd/atcmd.c
138+++ b/src/gsmd/atcmd.c
139@@ -159,7 +159,8 @@ static int llparse_byte(struct llparser *llp, char byte)
140 return ret;
141 }
142
143-static int llparse_string(struct llparser *llp, char *buf, unsigned int len)
144+static int llparse_string(struct llparser *llp, const char *buf,
145+ unsigned int len)
146 {
147 while (len--) {
148 int rc = llparse_byte(llp, *(buf++));
149@@ -187,6 +188,55 @@ static int llparse_init(struct llparser *llp)
150 return 0;
151 }
152
153+/* See if we can now send more commands to the port */
154+static void atcmd_wake_queue(struct gsmd *g)
155+{
156+ int len, rc;
157+ char *cr;
158+
159+ /* write pending commands to UART */
160+ while (g->interpreter_ready && g->clear_to_send) {
161+ struct gsmd_atcmd *pos, *pos2;
162+ llist_for_each_entry_safe(pos, pos2, &g->pending_atcmds, list) {
163+ cr = strchr(pos->cur, '\n');
164+ if (cr)
165+ len = cr - pos->cur;
166+ else
167+ len = pos->buflen;
168+ rc = g->llp.port->write(g->llp.port, pos->cur, len);
169+ if (rc == 0) {
170+ gsmd_log(GSMD_ERROR,
171+ "write returns 0, aborting\n");
172+ break;
173+ }
174+ if (cr && rc == len)
175+ rc ++; /* Skip the \n */
176+ pos->buflen -= rc;
177+ pos->cur += rc;
178+ g->llp.port->write(g->llp.port, "\r", 1);
179+
180+ if (!pos->buflen) {
181+ /* success: remove from global list of
182+ * to-be-sent atcmds */
183+ llist_del(&pos->list);
184+ /* append to global list of executing atcmds */
185+ llist_add_tail(&pos->list, &g->busy_atcmds);
186+
187+ /* we only send one cmd at the moment */
188+ g->clear_to_send = 0;
189+ break;
190+ } else {
191+ /* The write was short or the atcmd has more
192+ * lines to send after a "> ". */
193+ if (rc < len)
194+ break;
195+ g->clear_to_send = 0;
196+ break;
197+ }
198+ }
199+ }
200+}
201+
202 /* mid-level parser */
203
204 static int parse_final_result(const char *res)
205@@ -216,6 +266,7 @@ static int ml_parse(const char *buf, int len, void *ctx)
206 g->interpreter_ready = 1;
207 gsmd_initsettings(g);
208 gmsd_alive_start(g);
209+ atcmd_wake_queue(g);
210 return 0;
211 }
212
213@@ -316,6 +367,7 @@ static int ml_parse(const char *buf, int len, void *ctx)
214 } else {
215 DEBUGP("Calling cmd->cb()\n");
216 cmd->resp = g->mlbuf;
217+ g->mlbuf[g->mlbuf_len] = 0;
218 rc = cmd->cb(cmd, cmd->ctx, cmd->resp);
219 DEBUGP("Clearing mlbuf\n");
220 }
221@@ -370,12 +422,15 @@ static int ml_parse(const char *buf, int len, void *ctx)
222 if (g->mlbuf_len)
223 g->mlbuf[g->mlbuf_len ++] = '\n';
224 DEBUGP("Appending buf to mlbuf\n");
225- if (len > MLPARSE_BUF_SIZE - g->mlbuf_len)
226+ if (len > MLPARSE_BUF_SIZE - g->mlbuf_len) {
227 len = MLPARSE_BUF_SIZE - g->mlbuf_len;
228+ gsmd_log(GSMD_NOTICE, "g->mlbuf overrun\n");
229+ }
230 memcpy(g->mlbuf + g->mlbuf_len, buf, len);
231 g->mlbuf_len += len;
232
233 if (g->mlunsolicited) {
234+ g->mlbuf[g->mlbuf_len] = 0;
235 rc = unsolicited_parse(g, g->mlbuf, g->mlbuf_len,
236 strchr(g->mlbuf, ':') + 1);
237 if (rc == -EAGAIN) {
238@@ -422,8 +477,11 @@ final_cb:
239
240 /* if we're finished with current commands, but still have pending
241 * commands: we want to WRITE again */
242- if (llist_empty(&g->busy_atcmds) && !llist_empty(&g->pending_atcmds))
243- g->gfd_uart.when |= GSMD_FD_WRITE;
244+ if (llist_empty(&g->busy_atcmds)) {
245+ g->clear_to_send = 1;
246+ if (!llist_empty(&g->pending_atcmds))
247+ atcmd_wake_queue(g);
248+ }
249
250 return rc;
251 }
252@@ -433,85 +491,23 @@ static int atcmd_prompt(void *data)
253 {
254 struct gsmd *g = data;
255
256- g->gfd_uart.when |= GSMD_FD_WRITE;
257+ g->clear_to_send = 1;
258+ atcmd_wake_queue(g);
259 }
260
261 /* callback to be called if [virtual] UART has some data for us */
262-static int atcmd_select_cb(int fd, unsigned int what, void *data)
263+static int atcmd_newdata_cb(void *opaque, const char data[], int len)
264 {
265- int len, rc;
266- static char rxbuf[1024];
267- struct gsmd *g = data;
268- char *cr;
269-
270- if (what & GSMD_FD_READ) {
271- memset(rxbuf, 0, sizeof(rxbuf));
272- while ((len = read(fd, rxbuf, sizeof(rxbuf)))) {
273- if (len < 0) {
274- if (errno == EAGAIN)
275- return 0;
276- gsmd_log(GSMD_NOTICE, "ERROR reading from fd %u: %d (%s)\n", fd, len,
277- strerror(errno));
278- return len;
279- }
280- rc = llparse_string(&g->llp, rxbuf, len);
281- if (rc < 0) {
282- gsmd_log(GSMD_ERROR, "ERROR during llparse_string: %d\n", rc);
283- return rc;
284- }
285- }
286- }
287-
288- /* write pending commands to UART */
289- if ((what & GSMD_FD_WRITE) && g->interpreter_ready) {
290- struct gsmd_atcmd *pos, *pos2;
291- llist_for_each_entry_safe(pos, pos2, &g->pending_atcmds, list) {
292- cr = strchr(pos->cur, '\n');
293- if (cr)
294- len = cr - pos->cur;
295- else
296- len = pos->buflen - 1; /* assuming zero-terminated strings */
297- rc = write(fd, pos->cur, len);
298- if (rc == 0) {
299- gsmd_log(GSMD_ERROR, "write returns 0, aborting\n");
300- break;
301- } else if (rc < 0) {
302- gsmd_log(GSMD_ERROR, "error during write to fd %d: %d\n",
303- fd, rc);
304- return rc;
305- }
306- if (!cr || rc == len)
307- rc ++; /* Skip the \n or \0 */
308- pos->buflen -= rc;
309- pos->cur += rc;
310- write(fd, "\r", 1);
311-
312- if (!pos->buflen) {
313- /* success: remove from global list of
314- * to-be-sent atcmds */
315- llist_del(&pos->list);
316- /* append to global list of executing atcmds */
317- llist_add_tail(&pos->list, &g->busy_atcmds);
318-
319- /* we only send one cmd at the moment */
320- break;
321- } else {
322- /* The write was short or the atcmd has more
323- * lines to send after a "> ". */
324- if (rc < len)
325- return 0;
326- break;
327- }
328- }
329+ struct gsmd *g = opaque;
330+ int rc;
331
332- /* Either pending_atcmds is empty or a command has to wait */
333- g->gfd_uart.when &= ~GSMD_FD_WRITE;
334- }
335+ rc = llparse_string(&g->llp, data, len);
336+ if (rc < 0)
337+ gsmd_log(GSMD_ERROR, "ERROR during llparse_string: %d\n", rc);
338
339- return 0;
340+ return rc;
341 }
342
343-
344 struct gsmd_atcmd *atcmd_fill(const char *cmd, int rlen,
345 atcmd_cb_t cb, void *ctx, u_int16_t id)
346 {
347@@ -544,36 +540,18 @@ int atcmd_submit(struct gsmd *g, struct gsmd_atcmd *cmd)
348 {
349 DEBUGP("submitting command `%s'\n", cmd->buf);
350
351- if (llist_empty(&g->pending_atcmds))
352- g->gfd_uart.when |= GSMD_FD_WRITE;
353+ llist_empty(&g->pending_atcmds);
354 llist_add_tail(&cmd->list, &g->pending_atcmds);
355+ atcmd_wake_queue(g);
356
357 return 0;
358 }
359
360-void atcmd_drain(int fd)
361-{
362- int rc;
363- struct termios t;
364- rc = tcflush(fd, TCIOFLUSH);
365- rc = tcgetattr(fd, &t);
366- DEBUGP("c_iflag = 0x%08x, c_oflag = 0x%08x, c_cflag = 0x%08x, c_lflag = 0x%08x\n",
367- t.c_iflag, t.c_oflag, t.c_cflag, t.c_lflag);
368- t.c_iflag = t.c_oflag = 0;
369- cfmakeraw(&t);
370- rc = tcsetattr(fd, TCSANOW, &t);
371-}
372-
373 /* init atcmd parser */
374-int atcmd_init(struct gsmd *g, int sockfd)
375+int atcmd_init(struct gsmd *g, struct gsmd_port *port)
376 {
377 __atcmd_ctx = talloc_named_const(gsmd_tallocs, 1, "atcmds");
378
379- g->gfd_uart.fd = sockfd;
380- g->gfd_uart.when = GSMD_FD_READ;
381- g->gfd_uart.data = g;
382- g->gfd_uart.cb = &atcmd_select_cb;
383-
384 INIT_LLIST_HEAD(&g->pending_atcmds);
385 INIT_LLIST_HEAD(&g->busy_atcmds);
386
387@@ -581,7 +559,9 @@ int atcmd_init(struct gsmd *g, int sockfd)
388
389 g->mlbuf_len = 0;
390 g->mlunsolicited = 0;
391+ g->clear_to_send = 1;
392
393+ g->llp.port = port;
394 g->llp.cur = g->llp.buf;
395 g->llp.len = sizeof(g->llp.buf);
396 g->llp.cb = &ml_parse;
397@@ -589,5 +569,8 @@ int atcmd_init(struct gsmd *g, int sockfd)
398 g->llp.ctx = g;
399 g->llp.flags = LGSM_ATCMD_F_EXTENDED;
400
401- return gsmd_register_fd(&g->gfd_uart);
402+ port->newdata_opaque = g;
403+ port->newdata_cb = atcmd_newdata_cb;
404+
405+ return 0;
406 }
407diff --git a/src/gsmd/gsmd.c b/src/gsmd/gsmd.c
408index 51b4f2c..846bd17 100644
409--- a/src/gsmd/gsmd.c
410+++ b/src/gsmd/gsmd.c
411@@ -26,7 +26,6 @@
412 #include <string.h>
413 #include <errno.h>
414 #include <fcntl.h>
415-#include <termios.h>
416 #include <signal.h>
417
418 #define _GNU_SOURCE
419@@ -247,56 +246,6 @@ int gsmd_initsettings(struct gsmd *gsmd)
420 return atcmd_submit(gsmd, cmd);
421 }
422
423-struct bdrt {
424- int bps;
425- u_int32_t b;
426-};
427-
428-static struct bdrt bdrts[] = {
429- { 0, B0 },
430- { 9600, B9600 },
431- { 19200, B19200 },
432- { 38400, B38400 },
433- { 57600, B57600 },
434- { 115200, B115200 },
435- { 230400, B230400 },
436- { 460800, B460800 },
437- { 921600, B921600 },
438-};
439-
440-static int set_baudrate(int fd, int baudrate, int hwflow)
441-{
442- int i;
443- u_int32_t bd = 0;
444- struct termios ti;
445-
446- for (i = 0; i < ARRAY_SIZE(bdrts); i++) {
447- if (bdrts[i].bps == baudrate)
448- bd = bdrts[i].b;
449- }
450- if (bd == 0)
451- return -EINVAL;
452-
453- i = tcgetattr(fd, &ti);
454- if (i < 0)
455- return i;
456-
457- i = cfsetispeed(&ti, B0);
458- if (i < 0)
459- return i;
460-
461- i = cfsetospeed(&ti, bd);
462- if (i < 0)
463- return i;
464-
465- if (hwflow)
466- ti.c_cflag |= CRTSCTS;
467- else
468- ti.c_cflag &= ~CRTSCTS;
469-
470- return tcsetattr(fd, 0, &ti);
471-}
472-
473 static int gsmd_initialize(struct gsmd *g)
474 {
475 INIT_LLIST_HEAD(&g->users);
476@@ -478,14 +427,19 @@ int main(int argc, char **argv)
477 if (wait >= 0)
478 g.interpreter_ready = !wait;
479
480- if (atcmd_init(&g, fd) < 0) {
481+ if (uart_init(&g.uart, fd) < 0) {
482 fprintf(stderr, "can't initialize UART device\n");
483 exit(1);
484 }
485
486- write(fd, "\r", 1);
487- sleep(1);
488- atcmd_drain(fd);
489+ if (atcmd_init(&g, &g.uart.port) < 0) {
490+ fprintf(stderr, "can't initialize AT parser\n");
491+ exit(1);
492+ }
493+ write(fd, "\r", 1);
494+ sleep(1);
495+
496+ uart_drain(fd);
497
498 if (usock_init(&g) < 0) {
499 fprintf(stderr, "can't open unix socket\n");
500diff --git a/src/gsmd/uart.c b/src/gsmd/uart.c
501new file mode 100644
502index 0000000..22a4a5c
503--- /dev/null
504+++ b/src/gsmd/uart.c
505@@ -0,0 +1,202 @@
506+/* Wrapper for the physical UART in a struct gsmd_port abstraction.
507+ *
508+ * Copyright (C) 2007 OpenMoko, Inc.
509+ * Written by Andrzej Zaborowski <andrew@openedhand.com>
510+ *
511+ * This program is free software; you can redistribute it and/or
512+ * modify it under the terms of the GNU General Public License as
513+ * published by the Free Software Foundation; either version 2 of
514+ * the License, or (at your option) any later version.
515+ *
516+ * This program is distributed in the hope that it will be useful,
517+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
518+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
519+ * GNU General Public License for more details.
520+ *
521+ * You should have received a copy of the GNU General Public License
522+ * along with this program; if not, write to the Free Software
523+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
524+ * MA 02111-1307 USA
525+ */
526+
527+#include <string.h>
528+#include <fcntl.h>
529+#include <termios.h>
530+#include <unistd.h>
531+#include <errno.h>
532+
533+#include "gsmd.h"
534+
535+#include <gsmd/gsmd.h>
536+
537+void uart_drain(int fd)
538+{
539+ int rc;
540+ struct termios t;
541+ rc = tcflush(fd, TCIOFLUSH);
542+ rc = tcgetattr(fd, &t);
543+ DEBUGP(
544+ "c_iflag = 0x%08x, c_oflag = 0x%08x, "
545+ "c_cflag = 0x%08x, c_lflag = 0x%08x\n",
546+ t.c_iflag, t.c_oflag, t.c_cflag, t.c_lflag);
547+ t.c_iflag = t.c_oflag = 0;
548+ cfmakeraw(&t);
549+ rc = tcsetattr(fd, TCSANOW, &t);
550+}
551+
552+struct bdrt {
553+ int bps;
554+ u_int32_t b;
555+};
556+
557+static struct bdrt bdrts[] = {
558+ { 0, B0 },
559+ { 9600, B9600 },
560+ { 19200, B19200 },
561+ { 38400, B38400 },
562+ { 57600, B57600 },
563+ { 115200, B115200 },
564+ { 230400, B230400 },
565+ { 460800, B460800 },
566+ { 921600, B921600 },
567+};
568+
569+int set_baudrate(int fd, int baudrate, int hwflow)
570+{
571+ int i;
572+ u_int32_t bd = 0;
573+ struct termios ti;
574+
575+ for (i = 0; i < ARRAY_SIZE(bdrts); i++) {
576+ if (bdrts[i].bps == baudrate)
577+ bd = bdrts[i].b;
578+ }
579+ if (bd == 0)
580+ return -EINVAL;
581+
582+ i = tcgetattr(fd, &ti);
583+ if (i < 0)
584+ return i;
585+
586+ i = cfsetispeed(&ti, B0);
587+ if (i < 0)
588+ return i;
589+
590+ i = cfsetospeed(&ti, bd);
591+ if (i < 0)
592+ return i;
593+
594+ if (hwflow)
595+ ti.c_cflag |= CRTSCTS;
596+ else
597+ ti.c_cflag &= ~CRTSCTS;
598+
599+ return tcsetattr(fd, 0, &ti);
600+}
601+
602+static int uart_select_cb(int fd, unsigned int what, void *data)
603+{
604+ struct gsmd_uart *uart = (struct gsmd_uart *) data;
605+ static char rxbuf[2048];
606+ int rc, len;
607+
608+ if ((what & GSMD_FD_READ) && uart->port.newdata_cb) {
609+ while ((len = read(fd, rxbuf, sizeof(rxbuf)))) {
610+ if (len < 0) {
611+ if (errno == EAGAIN || errno == EINTR)
612+ return 0;
613+ gsmd_log(GSMD_NOTICE, "ERROR reading from "
614+ "fd %u: %d (%s)\n", fd, errno,
615+ strerror(errno));
616+ return -errno;
617+ }
618+
619+ rc = uart->port.newdata_cb(
620+ uart->port.newdata_opaque,
621+ rxbuf,
622+ len);
623+ if (rc < 0)
624+ return rc;
625+ }
626+ }
627+
628+ /* Write pending data to UART. */
629+ if ((what & GSMD_FD_WRITE) && uart->tx_len) {
630+ while (uart->tx_start + uart->tx_len >= sizeof(uart->txfifo)) {
631+ len = sizeof(uart->txfifo) - uart->tx_start;
632+ rc = write(fd, &uart->txfifo[uart->tx_start], len);
633+ if (rc < 0 && errno != EINTR) {
634+ if (errno == EAGAIN)
635+ return 0;
636+ gsmd_log(GSMD_NOTICE, "ERROR writing "
637+ "fd %u: %d (%s)\n", fd, errno,
638+ strerror(errno));
639+ return -errno;
640+ }
641+
642+ if (rc > 0) {
643+ uart->tx_start += rc;
644+ uart->tx_len -= rc;
645+ }
646+ }
647+ uart->tx_start &= sizeof(uart->txfifo) - 1;
648+
649+ while (uart->tx_len) {
650+ rc = write(fd, &uart->txfifo[uart->tx_start],
651+ uart->tx_len);
652+ if (rc < 0 && errno != EINTR) {
653+ if (errno == EAGAIN)
654+ return 0;
655+ gsmd_log(GSMD_NOTICE, "ERROR writing "
656+ "fd %u: %d (%s)\n", fd, errno,
657+ strerror(errno));
658+ return -errno;
659+ }
660+
661+ if (rc > 0) {
662+ uart->tx_start += rc;
663+ uart->tx_len -= rc;
664+ }
665+ }
666+
667+ /* If we reached here, there's no more data for the moment. */
668+ uart->gfd.when &= ~GSMD_FD_WRITE;
669+ }
670+
671+ return 0;
672+}
673+
674+static int uart_write(struct gsmd_port *port, const char data[], int len)
675+{
676+ struct gsmd_uart *uart = (struct gsmd_uart *) port;
677+ int start = (uart->tx_start + uart->tx_len) &
678+ (sizeof(uart->txfifo) - 1);
679+ int space = sizeof(uart->txfifo) - start;
680+
681+ if (uart->tx_len + len > sizeof(uart->txfifo))
682+ len = sizeof(uart->txfifo) - uart->tx_len;
683+
684+ if (len)
685+ uart->gfd.when |= GSMD_FD_WRITE;
686+
687+ if (len > space) {
688+ memcpy(uart->txfifo + start, data, space);
689+ memcpy(uart->txfifo, data + space, len - space);
690+ } else
691+ memcpy(uart->txfifo + start, data, len);
692+
693+ uart->tx_len += len;
694+ return len;
695+}
696+
697+int uart_init(struct gsmd_uart *uart, int sockfd)
698+{
699+ uart->gfd.fd = sockfd;
700+ uart->gfd.when = GSMD_FD_READ;
701+ uart->gfd.data = uart;
702+ uart->gfd.cb = &uart_select_cb;
703+
704+ uart->port.write = uart_write;
705+
706+ return gsmd_register_fd(&uart->gfd);
707+}
708--
7091.5.2.1
710
diff --git a/meta/recipes-connectivity/gsm/files/0002-Flush-all-pending-commands-before-restarting-the-mod.patch b/meta/recipes-connectivity/gsm/files/0002-Flush-all-pending-commands-before-restarting-the-mod.patch
new file mode 100644
index 0000000..3683596
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/0002-Flush-all-pending-commands-before-restarting-the-mod.patch
@@ -0,0 +1,74 @@
1From 1078f7aced63c6216bffe649930b97c9ccf9a16e Mon Sep 17 00:00:00 2001
2From: Andrzej Zaborowski <balrog@zabor.org>
3Date: Wed, 19 Sep 2007 14:04:50 +0200
4Subject: [PATCH] Flush all pending commands before restarting the modem initialisation.
5
6---
7 include/gsmd/gsmd.h | 1 +
8 src/gsmd/atcmd.c | 21 +++++++++++++++++++++
9 src/gsmd/timer.c | 8 ++++++++
10 3 files changed, 30 insertions(+), 0 deletions(-)
11
12diff --git a/include/gsmd/gsmd.h b/include/gsmd/gsmd.h
13index 4afdf66..6ac9d8e 100644
14--- a/include/gsmd/gsmd.h
15+++ b/include/gsmd/gsmd.h
16@@ -131,6 +131,7 @@ struct gsmd_timer {
17
18 int gsmd_timer_init(void);
19 void gmsd_timer_check_n_run(void);
20+void gsmd_timer_reset(void);
21
22 struct gsmd_timer *gsmd_timer_alloc(void);
23 int gsmd_timer_register(struct gsmd_timer *timer);
24diff --git a/src/gsmd/atcmd.c b/src/gsmd/atcmd.c
25index 27dfa41..2f6cee2 100644
26--- a/src/gsmd/atcmd.c
27+++ b/src/gsmd/atcmd.c
28@@ -264,6 +264,27 @@ static int ml_parse(const char *buf, int len, void *ctx)
29 if (strlen(buf) == 0 ||
30 !strcmp(buf, "AT-Command Interpreter ready")) {
31 g->interpreter_ready = 1;
32+ g->clear_to_send = 1;
33+
34+ /* Flush current queue and reinitialise */
35+ while (!llist_empty(&g->busy_atcmds)) {
36+ cmd = llist_entry(g->busy_atcmds.next,
37+ struct gsmd_atcmd, list);
38+ gsmd_log(GSMD_NOTICE, "discarding busy cmd %s\n",
39+ cmd->buf);
40+ llist_del(&cmd->list);
41+ talloc_free(cmd);
42+ }
43+ while (!llist_empty(&g->pending_atcmds)) {
44+ cmd = llist_entry(g->pending_atcmds.next,
45+ struct gsmd_atcmd, list);
46+ gsmd_log(GSMD_NOTICE, "discarding pending cmd %s\n",
47+ cmd->buf);
48+ llist_del(&cmd->list);
49+ talloc_free(cmd);
50+ }
51+
52+ gsmd_timer_reset();
53 gsmd_initsettings(g);
54 gmsd_alive_start(g);
55 atcmd_wake_queue(g);
56diff --git a/src/gsmd/timer.c b/src/gsmd/timer.c
57index 5200690..8877275 100644
58--- a/src/gsmd/timer.c
59+++ b/src/gsmd/timer.c
60@@ -215,3 +215,11 @@ void gsmd_timer_unregister(struct gsmd_timer *timer)
61 /* re-calculate next expiration */
62 calc_next_expiration();
63 }
64+
65+void gsmd_timer_reset(void)
66+{
67+ while (!llist_empty(&gsmd_timers))
68+ /* TODO: free associated resources (e.g timer->cancel_cb()) */
69+ llist_del(&llist_entry(gsmd_timers.next,
70+ struct gsmd_timer, list)->list);
71+}
72--
731.5.2.1
74
diff --git a/meta/recipes-connectivity/gsm/files/0003-Correctly-segment-incoming-usock-data-into-packets.patch b/meta/recipes-connectivity/gsm/files/0003-Correctly-segment-incoming-usock-data-into-packets.patch
new file mode 100644
index 0000000..984acc9
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/0003-Correctly-segment-incoming-usock-data-into-packets.patch
@@ -0,0 +1,77 @@
1From 8af1bb4a0d0df9baa80859c5f7f56cbd7634aded Mon Sep 17 00:00:00 2001
2From: Andrzej Zaborowski <balrog@zabor.org>
3Date: Wed, 19 Sep 2007 14:06:19 +0200
4Subject: [PATCH] Correctly segment incoming usock data into packets, handler short reads.
5
6---
7 include/gsmd/gsmd.h | 2 ++
8 src/gsmd/usock.c | 20 ++++++++++++++++----
9 2 files changed, 18 insertions(+), 4 deletions(-)
10
11diff --git a/include/gsmd/gsmd.h b/include/gsmd/gsmd.h
12index 6ac9d8e..acec02a 100644
13--- a/include/gsmd/gsmd.h
14+++ b/include/gsmd/gsmd.h
15@@ -95,6 +95,8 @@ struct gsmd_user {
16 struct gsmd *gsmd;
17 struct gsmd_fd gfd; /* the socket */
18 u_int32_t subscriptions; /* bitmaks of subscribed event groups */
19+ char usock_fifo[1024];
20+ int usock_len;
21
22 struct llist_head pb_readrg_list; /* our READRG phonebook list */
23 struct llist_head pb_find_list; /* our FIND phonebook list */
24diff --git a/src/gsmd/usock.c b/src/gsmd/usock.c
25index 32e98d0..bac5f0c 100644
26--- a/src/gsmd/usock.c
27+++ b/src/gsmd/usock.c
28@@ -1529,14 +1529,15 @@ static int usock_rcv_pcmd(struct gsmd_user *gu, char *buf, int len)
29 static int gsmd_usock_user_cb(int fd, unsigned int what, void *data)
30 {
31 struct gsmd_user *gu = data;
32+ struct gsmd_msg_hdr *gph;
33
34 /* FIXME: check some kind of backlog and limit it */
35
36 if (what & GSMD_FD_READ) {
37- char buf[1024];
38 int rcvlen;
39 /* read data from socket, determine what he wants */
40- rcvlen = read(fd, buf, sizeof(buf));
41+ rcvlen = read(fd, gu->usock_fifo + gu->usock_len,
42+ sizeof(gu->usock_fifo) - gu->usock_len);
43 if (rcvlen == 0) {
44 DEBUGP("EOF, this client has just vanished\n");
45 /* EOF, this client has just vanished */
46@@ -1549,8 +1550,18 @@ static int gsmd_usock_user_cb(int fd, unsigned int what, void *data)
47 return 0;
48 } else if (rcvlen < 0)
49 return rcvlen;
50- else
51- return usock_rcv_pcmd(gu, buf, rcvlen);
52+
53+ gu->usock_len += rcvlen;
54+ gph = (struct gsmd_msg_hdr *) gu->usock_fifo;
55+ while (gu->usock_len >= sizeof(*gph) &&
56+ gu->usock_len >= sizeof(*gph) + gph->len) {
57+ usock_rcv_pcmd(gu, gu->usock_fifo, gu->usock_len);
58+ gu->usock_len -= sizeof(*gph) + gph->len;
59+ memmove(gu->usock_fifo,
60+ gu->usock_fifo + sizeof(*gph) +
61+ gph->len,
62+ gu->usock_len);
63+ }
64 }
65
66 if (what & GSMD_FD_WRITE) {
67@@ -1609,6 +1620,7 @@ static int gsmd_usock_cb(int fd, unsigned int what, void *data)
68 newuser->gfd.cb = &gsmd_usock_user_cb;
69 newuser->gsmd = g;
70 newuser->subscriptions = 0xffffffff;
71+ newuser->usock_len = 0;
72 INIT_LLIST_HEAD(&newuser->finished_ucmds);
73 INIT_LLIST_HEAD(&newuser->pb_readrg_list);
74 INIT_LLIST_HEAD(&newuser->pb_find_list);
75--
761.5.2.1
77
diff --git a/meta/recipes-connectivity/gsm/files/0004-Handle-read-and-write-return-values.patch b/meta/recipes-connectivity/gsm/files/0004-Handle-read-and-write-return-values.patch
new file mode 100644
index 0000000..f5e7a79
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/0004-Handle-read-and-write-return-values.patch
@@ -0,0 +1,176 @@
1From 421b0fa14fefbd13a455c20380fecddda616b41a Mon Sep 17 00:00:00 2001
2From: Andrzej Zaborowski <balrog@zabor.org>
3Date: Wed, 19 Sep 2007 18:30:36 +0200
4Subject: [PATCH] Handle read() and write() return values.
5
6---
7 include/libgsmd/libgsmd.h | 3 +-
8 src/gsmd/usock.c | 38 ++++++++++++++++-----------
9 src/libgsmd/lgsm_internals.h | 2 +
10 src/libgsmd/libgsmd.c | 58 ++++++++++++++++++++++++++---------------
11 4 files changed, 63 insertions(+), 38 deletions(-)
12
13diff --git a/include/libgsmd/libgsmd.h b/include/libgsmd/libgsmd.h
14index fc56890..db15aa9 100644
15--- a/include/libgsmd/libgsmd.h
16+++ b/include/libgsmd/libgsmd.h
17@@ -65,6 +65,7 @@ extern int lgsm_subscriptions(struct lgsm_handle *lh, u_int32_t subscriptions);
18
19 extern struct gsmd_msg_hdr *lgsm_gmh_fill(int type, int subtype, int payload_len);
20 extern int lgsm_send(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh);
21-extern int lgsm_handle_packet(struct lgsm_handle *lh, char *buf, int len);
22+extern int lgsm_handle_packet(struct lgsm_handle *lh,
23+ const char *buf, int len);
24
25 #endif
26diff --git a/src/gsmd/usock.c b/src/gsmd/usock.c
27index bac5f0c..2283600 100644
28--- a/src/gsmd/usock.c
29+++ b/src/gsmd/usock.c
30@@ -1569,23 +1569,29 @@ static int gsmd_usock_user_cb(int fd, unsigned int what, void *data)
31 struct gsmd_ucmd *ucmd, *uctmp;
32 llist_for_each_entry_safe(ucmd, uctmp, &gu->finished_ucmds,
33 list) {
34- int rc;
35-
36- rc = write(fd, &ucmd->hdr, sizeof(ucmd->hdr) + ucmd->hdr.len);
37- if (rc < 0) {
38- DEBUGP("write return %d\n", rc);
39- return rc;
40- }
41- if (rc == 0) {
42- DEBUGP("write returns zero!!\n");
43- break;
44+ const void *pos = &ucmd->hdr;
45+ size_t len = sizeof(ucmd->hdr) + ucmd->hdr.len;
46+
47+ while (len) {
48+ ssize_t rc;
49+
50+ rc = write(fd, pos, len);
51+ if (rc < 0 && errno != EINTR) {
52+ DEBUGP("write returned %s\n",
53+ strerror(errno));
54+ return rc;
55+ }
56+ if (rc == 0 && pos == &ucmd->hdr) {
57+ DEBUGP("write returns zero!!\n");
58+ return 0;
59+ }
60+ if (rc > 0) {
61+ len -= rc;
62+ pos += rc;
63+ }
64 }
65- if (rc != sizeof(ucmd->hdr) + ucmd->hdr.len) {
66- DEBUGP("short write\n");
67- break;
68- }
69-
70- DEBUGP("successfully sent cmd %p to user %p, freeing\n", ucmd, gu);
71+ DEBUGP("successfully sent cmd %p to user %p, "
72+ "freeing\n", ucmd, gu);
73 llist_del(&ucmd->list);
74 talloc_free(ucmd);
75 }
76diff --git a/src/libgsmd/lgsm_internals.h b/src/libgsmd/lgsm_internals.h
77index c826723..f1b1a23 100644
78--- a/src/libgsmd/lgsm_internals.h
79+++ b/src/libgsmd/lgsm_internals.h
80@@ -8,6 +8,8 @@ struct lgsm_handle {
81 int fd;
82 lgsm_msg_handler *handler[__NUM_GSMD_MSGS];
83 enum lgsm_netreg_state netreg_state;
84+ char usock_fifo[1024];
85+ int usock_len;
86 };
87
88 int lgsm_send(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh);
89diff --git a/src/libgsmd/libgsmd.c b/src/libgsmd/libgsmd.c
90index 9906ea8..cc804ed 100644
91--- a/src/libgsmd/libgsmd.c
92+++ b/src/libgsmd/libgsmd.c
93@@ -86,34 +86,37 @@ static int lgsm_open_backend(struct lgsm_handle *lh, const char *device)
94 }
95
96 /* handle a packet that was received on the gsmd socket */
97-int lgsm_handle_packet(struct lgsm_handle *lh, char *buf, int len)
98+int lgsm_handle_packet(struct lgsm_handle *lh, const char *buf, int len)
99 {
100 struct gsmd_msg_hdr *gmh;
101 lgsm_msg_handler *handler;
102 int rc = 0;
103
104- while (len) {
105- if (len < sizeof(*gmh))
106- return -EINVAL;
107- gmh = (struct gsmd_msg_hdr *) buf;
108-
109- if (len - sizeof(*gmh) < gmh->len)
110- return -EINVAL;
111- len -= sizeof(*gmh) + gmh->len;
112- buf += sizeof(*gmh) + gmh->len;
113-
114- if (gmh->msg_type >= __NUM_GSMD_MSGS)
115- return -EINVAL;
116-
117- handler = lh->handler[gmh->msg_type];
118+ if (lh->usock_len + len > sizeof(lh->usock_fifo))
119+ return -ENOMEM;
120
121- if (handler)
122+ memcpy(lh->usock_fifo + lh->usock_len, buf, len);
123+ lh->usock_len += len;
124+ gmh = (struct gsmd_msg_hdr *) lh->usock_fifo;
125+ while (lh->usock_len >= sizeof(*gmh) &&
126+ lh->usock_len >= sizeof(*gmh) + gmh->len) {
127+ if (gmh->msg_type < __NUM_GSMD_MSGS &&
128+ (handler = lh->handler[gmh->msg_type]))
129 rc |= handler(lh, gmh);
130- else
131- fprintf(stderr, "unable to handle packet type=%u\n",
132- gmh->msg_type);
133+ else {
134+ fprintf(stderr, "unable to handle packet "
135+ "type=%u id=%u\n",
136+ gmh->msg_type, gmh->id);
137+ rc |= EINVAL;
138+ }
139+
140+ lh->usock_len -= gmh->len + sizeof(*gmh);
141+ memmove(lh->usock_fifo,
142+ lh->usock_fifo + gmh->len + sizeof(*gmh),
143+ lh->usock_len);
144 }
145- return rc;
146+
147+ return -rc;
148 }
149
150 int lgsm_register_handler(struct lgsm_handle *lh, int type, lgsm_msg_handler *handler)
151@@ -193,8 +196,21 @@ static u_int16_t next_msg_id;
152
153 int lgsm_send(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh)
154 {
155+ ssize_t rc;
156+ size_t len = sizeof(*gmh) + gmh->len;
157+ const void *pos = gmh;
158+
159 gmh->id = next_msg_id++;
160- return send(lh->fd, (char *) gmh, sizeof(*gmh) + gmh->len, 0);
161+ while (len) {
162+ rc = send(lh->fd, pos, len, 0);
163+ if (rc < 0 && errno != EINTR)
164+ return -errno;
165+ if (rc > 0) {
166+ len -= rc;
167+ pos += rc;
168+ }
169+ }
170+ return 0;
171 }
172
173 struct gsmd_msg_hdr *lgsm_gmh_fill(int type, int subtype, int payload_len)
174--
1751.5.2.1
176
diff --git a/meta/recipes-connectivity/gsm/files/0005-Add-ask-ds-option-forSMS.patch b/meta/recipes-connectivity/gsm/files/0005-Add-ask-ds-option-forSMS.patch
new file mode 100644
index 0000000..e9f49bd
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/0005-Add-ask-ds-option-forSMS.patch
@@ -0,0 +1,130 @@
1diff --git a/include/gsmd/usock.h b/include/gsmd/usock.h
2index 236ad78..66cdf48 100644
3--- a/include/gsmd/usock.h
4+++ b/include/gsmd/usock.h
5@@ -332,6 +332,7 @@ struct gsmd_sms {
6 struct gsmd_sms_submit {
7 struct gsmd_addr addr;
8 struct gsmd_sms payload;
9+ int ask_ds;
10 };
11
12 /* Refer to GSM 07.05 subclause 4.4 */
13diff --git a/include/libgsmd/sms.h b/include/libgsmd/sms.h
14index 3ada62d..9808442 100644
15--- a/include/libgsmd/sms.h
16+++ b/include/libgsmd/sms.h
17@@ -46,6 +46,7 @@ struct lgsm_sms {
18 enum gsmd_sms_alphabet alpha;
19 u_int8_t data[LGSM_SMS_DATA_MAXLEN+1];
20 int length;
21+ int ask_ds;
22 };
23
24 /* GSM 03.40 subclause 9.2.2.2 and GSM 07.05 subclause 4.4 and subclause 3.1 */
25diff --git a/src/gsmd/sms_pdu.c b/src/gsmd/sms_pdu.c
26index d1235dd..d461999 100644
27--- a/src/gsmd/sms_pdu.c
28+++ b/src/gsmd/sms_pdu.c
29@@ -247,7 +247,8 @@ int sms_pdu_make_smssubmit(char *dest, const struct gsmd_sms_submit *src)
30 GSMD_SMS_TP_MTI_SUBMIT |
31 (0 << 2) | /* Reject Duplicates: 0 */
32 GSMD_SMS_TP_VPF_NOT_PRESENT |
33- GSMD_SMS_TP_SRR_STATUS_REQUEST |
34+ (src->ask_ds ? GSMD_SMS_TP_SRR_STATUS_REQUEST :
35+ GSMD_SMS_TP_SRR_NOT_REQUEST) |
36 (src->payload.has_header ? GSMD_SMS_TP_UDHI_WITH_HEADER :
37 GSMD_SMS_TP_UDHI_NO_HEADER) |
38 GSMD_SMS_TP_RP_NOT_SET;
39diff --git a/src/libgsmd/libgsmd_sms.c b/src/libgsmd/libgsmd_sms.c
40index 22d7dbf..bbc8689 100644
41--- a/src/libgsmd/libgsmd_sms.c
42+++ b/src/libgsmd/libgsmd_sms.c
43@@ -126,6 +126,7 @@ int lgsm_sms_send(struct lgsm_handle *lh,
44 if (lgsm_number2addr(&gss->addr, sms->addr, 1))
45 return -EINVAL;
46
47+ gss->ask_ds = sms->ask_ds;
48 gss->payload.has_header = 0;
49 gss->payload.length = sms->length;
50 gss->payload.coding_scheme = sms->alpha;
51@@ -161,6 +162,7 @@ int lgsm_sms_write(struct lgsm_handle *lh,
52 if (lgsm_number2addr(&gsw->sms.addr, sms_write->sms.addr, 1))
53 return -EINVAL;
54
55+ gsw->sms.ask_ds = sms_write->sms.ask_ds;
56 gsw->sms.payload.has_header = 0;
57 gsw->sms.payload.length = sms_write->sms.length;
58 gsw->sms.payload.coding_scheme = sms_write->sms.alpha;
59diff --git a/src/util/shell.c b/src/util/shell.c
60index f902126..f26e17e 100644
61--- a/src/util/shell.c
62+++ b/src/util/shell.c
63@@ -355,7 +355,7 @@ static int shell_help(void)
64 "\tsd\tSMS Delete (sd=index,delflg)\n"
65 "\tsl\tSMS List (sl=stat)\n"
66 "\tsr\tSMS Read (sr=index)\n"
67- "\tss\tSMS Send (ss=number,text|[\"text\"])\n"
68+ "\tss\tSMS Send (ss=ask_ds,number,text|[\"text\"])\n"
69 "\tsw\tSMS Write (sw=stat,number,text)\n"
70 "\tsm\tSMS Storage stats\n"
71 "\tsM\tSMS Set preferred storage (sM=mem1,mem2,mem3)\n"
72@@ -563,33 +563,29 @@ int shell_main(struct lgsm_handle *lgsmh)
73 struct lgsm_sms sms;
74
75 ptr = strchr(buf, '=');
76+ sms.ask_ds = atoi(ptr+1);
77 fcomma = strchr(buf, ',');
78- if (!ptr || !fcomma) {
79- printf("Wrong command format\n");
80- } else {
81- strncpy(sms.addr, ptr+1, fcomma-ptr-1);
82- sms.addr[fcomma-ptr-1] = '\0';
83-
84- /* todo define \" to allow " in text */
85- if (fcomma[1] == '"' &&
86- !strchr(fcomma+2, '"')) {
87+ lcomma = strchr(fcomma+1, ',');
88+ strncpy(sms.addr, fcomma+1, lcomma-fcomma-1);
89+ sms.addr[lcomma-fcomma-1] = '\0';
90+ /* todo define \" to allow " in text */
91+ if (lcomma[1]=='"' &&
92+ !strchr(lcomma+2, '"')) {
93 /* read until closing '"' */
94 rc = fscanf(stdin, "%[^\"]\"",
95- fcomma+strlen(fcomma));
96+ lcomma+strlen(lcomma));
97 if (rc == EOF) {
98 printf("EOF\n");
99 return -1;
100 }
101 /* remove brackets */
102- fcomma++;
103- fcomma[strlen(fcomma)] = '\0';
104- }
105-
106- printf("Send SMS\n");
107- packing_7bit_character(fcomma+1, &sms);
108+ lcomma++;
109+ lcomma[strlen(lcomma)] = '\0';
110+ }
111+ printf("Send SMS\n");
112+ packing_7bit_character(lcomma+1, &sms);
113
114- lgsm_sms_send(lgsmh, &sms);
115- }
116+ lgsm_sms_send(lgsmh, &sms);
117 } else if ( !strncmp(buf, "sw", 2)) {
118 printf("Write SMS\n");
119 struct lgsm_sms_write sms_write;
120@@ -603,6 +599,7 @@ int shell_main(struct lgsm_handle *lgsmh)
121 sms_write.sms.addr[lcomma-fcomma-1] = '\0';
122 packing_7bit_character(
123 lcomma+1, &sms_write.sms);
124+ sms_write.sms.ask_ds = 0;
125
126 lgsm_sms_write(lgsmh, &sms_write);
127 } else if (!strncmp(buf, "sm", 2)) {
128--
1291.5.2.1
130
diff --git a/meta/recipes-connectivity/gsm/files/024_sms-text-in-bracket.patch b/meta/recipes-connectivity/gsm/files/024_sms-text-in-bracket.patch
new file mode 100644
index 0000000..32a1ca3
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/024_sms-text-in-bracket.patch
@@ -0,0 +1,70 @@
1http://bugzilla.openmoko.org/cgi-bin/bugzilla/show_bug.cgi?id=834
2
3From: Kristian Mueller <kristian@mput.de>
4Subject: [PATCH] libgsmd-tool does not allow sms with more than one word
5
6libgsmd-tool only allows for command strings without spaces.
7SMS messages with more than one word will be parsed as multible commands.
8The patch introduces SMS message text in bracket and fixes a NULL pointer
9reference on mailformed "ss" commands.
10
11Signed-off-by: Jim Huang <jserv@openmoko.org>
12---
13 src/util/shell.c | 32 ++++++++++++++++++++++++++------
14 1 file changed, 26 insertions(+), 6 deletions(-)
15
16Index: gsm/src/util/shell.c
17===================================================================
18--- gsm.orig/src/util/shell.c 2007-08-31 16:15:30.000000000 +0800
19+++ gsm/src/util/shell.c 2007-09-17 23:35:31.000000000 +0800
20@@ -389,7 +389,7 @@
21 "\tsd\tSMS Delete (sd=index,delflg)\n"
22 "\tsl\tSMS List (sl=stat)\n"
23 "\tsr\tSMS Read (sr=index)\n"
24- "\tss\tSMS Send (ss=number,text)\n"
25+ "\tss\tSMS Send (ss=number,text|[\"text\"])\n"
26 "\tsw\tSMS Write (sw=stat,number,text)\n"
27 "\tsm\tSMS Storage stats\n"
28 "\tsM\tSMS Set preferred storage (sM=mem1,mem2,mem3)\n"
29@@ -612,16 +612,36 @@
30
31 lgsm_sms_read(lgsmh, atoi(ptr+1));
32 } else if ( !strncmp(buf, "ss", 2)) {
33- printf("Send SMS\n");
34 struct lgsm_sms sms;
35
36 ptr = strchr(buf, '=');
37 fcomma = strchr(buf, ',');
38- strncpy(sms.addr, ptr+1, fcomma-ptr-1);
39- sms.addr[fcomma-ptr-1] = '\0';
40- packing_7bit_character(fcomma+1, &sms);
41+ if (!ptr || !fcomma) {
42+ printf("Wrong command format\n");
43+ } else {
44+ strncpy(sms.addr, ptr+1, fcomma-ptr-1);
45+ sms.addr[fcomma-ptr-1] = '\0';
46+
47+ /* todo define \" to allow " in text */
48+ if (fcomma[1] == '"' &&
49+ !strchr(fcomma+2, '"')) {
50+ /* read until closing '"' */
51+ rc = fscanf(stdin, "%[^\"]\"",
52+ fcomma+strlen(fcomma));
53+ if (rc == EOF) {
54+ printf("EOF\n");
55+ return -1;
56+ }
57+ /* remove brackets */
58+ fcomma++;
59+ fcomma[strlen(fcomma)] = '\0';
60+ }
61+
62+ printf("Send SMS\n");
63+ packing_7bit_character(fcomma+1, &sms);
64
65- lgsm_sms_send(lgsmh, &sms);
66+ lgsm_sms_send(lgsmh, &sms);
67+ }
68 } else if ( !strncmp(buf, "sw", 2)) {
69 printf("Write SMS\n");
70 struct lgsm_sms_write sms_write;
diff --git a/meta/recipes-connectivity/gsm/files/025_sms-status-report.patch b/meta/recipes-connectivity/gsm/files/025_sms-status-report.patch
new file mode 100644
index 0000000..560e72e
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/025_sms-status-report.patch
@@ -0,0 +1,133 @@
1From: Erin Yueh <erin_yueh@openmoko.com>
2Subject: [PATCH] SMS status report
3
4I made a patch for SMS status report. It can change SMS-Submit messages
5and ask for a status report. When the destination address receives our
6message, the service center will send a SMS-STATUS-REPORT to us. We can
7tell what messages we sent by TP-MR (message reference number) value and
8can know the sending result by TP-ST (Status) value from status report
9messages.
10
11PS. if you don't want to ask a status report, you can change this value
12back. Replace "GSMD_SMS_TP_SRR_STATUS_REQUEST" with
13"GSMD_SMS_TP_SRR_NOT_REQUEST".
14header[pos ++] =
15 GSMD_SMS_TP_MTI_SUBMIT |
16 (0 << 2) | /* Reject Duplicates: 0 */
17 GSMD_SMS_TP_VPF_NOT_PRESENT |
18- GSMD_SMS_TP_SRR_NOT_REQUEST |
19+ GSMD_SMS_TP_SRR_STATUS_REQUEST |
20 (src->payload.has_header ? GSMD_SMS_TP_UDHI_WITH_HEADER :
21 GSMD_SMS_TP_UDHI_NO_HEADER) |
22 GSMD_SMS_TP_RP_NOT_SET;
23
24Signed-off-by: Jim Huang <jserv@openmoko.org>
25---
26 src/gsmd/sms_pdu.c | 54 +++++++++++++++++++++++++++++++++++++++++++-----------
27 src/util/event.c | 6 +++++-
28 2 files changed, 48 insertions(+), 12 deletions(-)
29
30Index: gsm/src/gsmd/sms_pdu.c
31===================================================================
32--- gsm.orig/src/gsmd/sms_pdu.c 2007-09-06 11:14:34.000000000 +0800
33+++ gsm/src/gsmd/sms_pdu.c 2007-09-17 23:39:20.000000000 +0800
34@@ -139,6 +139,17 @@
35 /* Skip TP-PID */
36 len -= 9;
37 src += 9;
38+
39+ /* TP-UDL */
40+ dst->payload.length = src[0];
41+ i = sms_data_bytelen(dst->payload.coding_scheme, src[0]);
42+
43+ /* TP-UD */
44+ if (len < 1 + i || i > GSMD_SMS_DATA_MAXLEN)
45+ return 1;
46+ memcpy(dst->payload.data, src + 1, i);
47+ dst->payload.data[i] = 0;
48+
49 break;
50 case GSMD_SMS_TP_MTI_SUBMIT:
51 if (len < 4)
52@@ -179,23 +190,44 @@
53 src += vpf ? 3 : 2;
54
55 memset(dst->time_stamp, 0, 7);
56+
57+ /* TP-UDL */
58+ dst->payload.length = src[0];
59+ i = sms_data_bytelen(dst->payload.coding_scheme, src[0]);
60+
61+ /* TP-UD */
62+ if (len < 1 + i || i > GSMD_SMS_DATA_MAXLEN)
63+ return 1;
64+ memcpy(dst->payload.data, src + 1, i);
65+ dst->payload.data[i] = 0;
66 break;
67 case GSMD_SMS_TP_MTI_STATUS_REPORT:
68- /* TODO */
69+ if (len < 3)
70+ return 1;
71+
72+ /* TP-MR set it gsmd_sms_list.index*/
73+ dst->index = (int) src[1];
74+ /* TP-STATUS set it to coding_scheme */
75+ dst->payload.coding_scheme = (int) src[len-1];
76+ /* TP-RA */
77+ i = sms_number_bytelen(src[3], src[2]);
78+ if (len < 13 + i)
79+ return 1;
80+ if (sms_address2ascii(&dst->addr, src + 2))
81+ return 1;
82+ len -= 4 + i;
83+ src += 4 + i;
84+ /* TP-SCTS */
85+ memcpy(dst->time_stamp, src, 7);
86+ /* TP-UD */
87+ dst->payload.length = 0;
88+ dst->payload.data[0] = 0;
89+ break;
90 default:
91 /* Unknown PDU type */
92 return 1;
93 }
94
95- /* TP-UDL */
96- dst->payload.length = src[0];
97- i = sms_data_bytelen(dst->payload.coding_scheme, src[0]);
98-
99- /* TP-UD */
100- if (len < 1 + i || i > GSMD_SMS_DATA_MAXLEN)
101- return 1;
102- memcpy(dst->payload.data, src + 1, i);
103- dst->payload.data[i] = 0;
104
105 return 0;
106 }
107@@ -215,7 +247,7 @@
108 GSMD_SMS_TP_MTI_SUBMIT |
109 (0 << 2) | /* Reject Duplicates: 0 */
110 GSMD_SMS_TP_VPF_NOT_PRESENT |
111- GSMD_SMS_TP_SRR_NOT_REQUEST |
112+ GSMD_SMS_TP_SRR_STATUS_REQUEST |
113 (src->payload.has_header ? GSMD_SMS_TP_UDHI_WITH_HEADER :
114 GSMD_SMS_TP_UDHI_NO_HEADER) |
115 GSMD_SMS_TP_RP_NOT_SET;
116Index: gsm/src/util/event.c
117===================================================================
118--- gsm.orig/src/util/event.c 2007-09-06 11:14:34.000000000 +0800
119+++ gsm/src/util/event.c 2007-09-17 23:39:47.000000000 +0800
120@@ -128,8 +128,12 @@
121 static int inds_handler(struct lgsm_handle *lh, int evt,
122 struct gsmd_evt_auxdata *aux)
123 {
124- if (aux->u.ds.inlined)
125+ if (aux->u.ds.inlined) {
126+ struct gsmd_sms_list *sms;
127+ sms = (struct gsmd_sms_list *) aux->data;
128 printf("EVENT: Incoming Status Report\n");
129+ printf("message ref = %d, status = %d\n", sms->index,sms->payload.coding_scheme);
130+ }
131 else
132 printf("EVENT: Incoming Status Report stored at location %i\n",
133 aux->u.ds.index);
diff --git a/meta/recipes-connectivity/gsm/files/027_phonebook-find-and-read-range-support.patch b/meta/recipes-connectivity/gsm/files/027_phonebook-find-and-read-range-support.patch
new file mode 100644
index 0000000..ea0f12d
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/027_phonebook-find-and-read-range-support.patch
@@ -0,0 +1,423 @@
1From: Sean Chiang <sean_chiang@openmoko.com>
2Subject: [PATCH] Improvement for find and read phonebooks in gsmd
3
4This patch is an improvement for find and read phonebooks.
5After clients make a request to find / read phonebooks, then clients
6should make a request to retrieve all the records.
7
8Signed-off-by: Jim Huang <jserv@openmoko.org>
9---
10 include/gsmd/gsmd.h | 3
11 include/gsmd/usock.h | 20 +++-
12 include/libgsmd/phonebook.h | 6 +
13 src/gsmd/usock.c | 184 +++++++++++++++++++++++++++++++++++-----
14 src/libgsmd/libgsmd_phonebook.c | 48 ++++++++++
15 5 files changed, 238 insertions(+), 23 deletions(-)
16
17Index: gsm/include/libgsmd/phonebook.h
18===================================================================
19--- gsm.orig/include/libgsmd/phonebook.h 2007-08-31 16:15:29.000000000 +0800
20+++ gsm/include/libgsmd/phonebook.h 2007-09-17 23:48:41.000000000 +0800
21@@ -106,4 +106,10 @@
22 /* Get the location range/nlength/tlength supported */
23 extern int lgsm_pb_get_support(struct lgsm_handle *lh);
24
25+/* Retrieve the records of READRG request */
26+extern int lgsm_pb_retrieve_readrg(struct lgsm_handle *lh, int num);
27+
28+/* Retrieve the records of FIND request */
29+extern int lgsm_pb_retrieve_find(struct lgsm_handle *lh, int num);
30+
31 #endif
32Index: gsm/include/gsmd/gsmd.h
33===================================================================
34--- gsm.orig/include/gsmd/gsmd.h 2007-08-31 16:15:29.000000000 +0800
35+++ gsm/include/gsmd/gsmd.h 2007-09-17 23:48:41.000000000 +0800
36@@ -92,6 +92,9 @@
37 struct gsmd *gsmd;
38 struct gsmd_fd gfd; /* the socket */
39 u_int32_t subscriptions; /* bitmaks of subscribed event groups */
40+
41+ struct llist_head pb_readrg_list; /* our READRG phonebook list */
42+ struct llist_head pb_find_list; /* our FIND phonebook list */
43 };
44
45 #define GSMD_DEBUG 1 /* debugging information */
46Index: gsm/include/gsmd/usock.h
47===================================================================
48--- gsm.orig/include/gsmd/usock.h 2007-08-31 16:15:29.000000000 +0800
49+++ gsm/include/gsmd/usock.h 2007-09-17 23:48:56.000000000 +0800
50@@ -194,6 +194,8 @@
51 GSMD_PHONEBOOK_GET_SUPPORT = 6,
52 GSMD_PHONEBOOK_LIST_STORAGE = 7,
53 GSMD_PHONEBOOK_SET_STORAGE = 8,
54+ GSMD_PHONEBOOK_RETRIEVE_READRG = 9,
55+ GSMD_PHONEBOOK_RETRIEVE_FIND = 10,
56 };
57
58 /* Type-of-Address, Numbering-Plan-Identification field, GSM 03.40, 9.1.2.5 */
59@@ -431,7 +433,6 @@
60 char text[GSMD_PB_TEXT_MAXLEN+1];
61 } __attribute__ ((packed));
62
63-
64 /* Refer to GSM 07.07 subclause 8.13 */
65 /* FIXME: the tlength depends on SIM, use +CPBR=? to get */
66 struct gsmd_phonebook_find {
67@@ -471,8 +472,18 @@
68 char opname_longalpha[16];
69 };
70
71+/* Refer to GSM 07.07 subclause 8.11 */
72+struct gsmd_phonebook_mem {
73+ u_int8_t type[3];
74+ u_int8_t pad;
75+ u_int16_t used;
76+ u_int16_t total;
77+} __attribute__ ((packed));
78+
79 struct gsmd_phonebook_storage {
80- char storage[3];
81+ /* FIXME the amount of phonebook storage should be dynamic */
82+ u_int8_t num;
83+ struct gsmd_phonebook_mem mem[20];
84 } __attribute__ ((packed));
85
86 /* Subscriber number information from 3GPP TS 07.07, Clause 7.1 */
87@@ -517,6 +528,11 @@
88 char buf[];
89 } __attribute__ ((packed));
90
91+struct gsmd_phonebooks {
92+ struct llist_head list;
93+ struct gsmd_phonebook pb;
94+} __attribute__ ((packed));
95+
96 extern struct gsmd_ucmd *ucmd_alloc(int extra_size);
97 extern int usock_init(struct gsmd *g);
98 extern void usock_cmd_enqueue(struct gsmd_ucmd *ucmd, struct gsmd_user *gu);
99Index: gsm/src/libgsmd/libgsmd_phonebook.c
100===================================================================
101--- gsm.orig/src/libgsmd/libgsmd_phonebook.c 2007-08-31 16:15:29.000000000 +0800
102+++ gsm/src/libgsmd/libgsmd_phonebook.c 2007-09-17 23:48:41.000000000 +0800
103@@ -33,7 +33,7 @@
104 gmh->data[2] = '\0';
105
106 rc = lgsm_send(lh, gmh);
107- if (rc < gmh->len + 3) {
108+ if (rc < gmh->len + sizeof(*gmh)) {
109 lgsm_gmh_free(gmh);
110 return -EIO;
111 }
112@@ -177,3 +177,49 @@
113 {
114 return lgsm_send_simple(lh, GSMD_MSG_PHONEBOOK, GSMD_PHONEBOOK_GET_SUPPORT);
115 }
116+
117+int lgsm_pb_retrieve_readrg(struct lgsm_handle *lh, int num)
118+{
119+ struct gsmd_msg_hdr *gmh;
120+ int rc;
121+
122+ gmh = lgsm_gmh_fill(GSMD_MSG_PHONEBOOK,
123+ GSMD_PHONEBOOK_RETRIEVE_READRG, sizeof(int));
124+ if (!gmh)
125+ return -ENOMEM;
126+
127+ *(int *)(gmh->data) = num;
128+
129+ rc = lgsm_send(lh, gmh);
130+ if (rc < gmh->len + sizeof(*gmh)) {
131+ lgsm_gmh_free(gmh);
132+ return -EIO;
133+ }
134+
135+ lgsm_gmh_free(gmh);
136+
137+ return 0;
138+}
139+
140+int lgsm_pb_retrieve_find(struct lgsm_handle *lh, int num)
141+{
142+ struct gsmd_msg_hdr *gmh;
143+ int rc;
144+
145+ gmh = lgsm_gmh_fill(GSMD_MSG_PHONEBOOK,
146+ GSMD_PHONEBOOK_RETRIEVE_FIND, sizeof(int));
147+ if (!gmh)
148+ return -ENOMEM;
149+
150+ *(int *)(gmh->data) = num;
151+
152+ rc = lgsm_send(lh, gmh);
153+ if (rc < gmh->len + sizeof(*gmh)) {
154+ lgsm_gmh_free(gmh);
155+ return -EIO;
156+ }
157+
158+ lgsm_gmh_free(gmh);
159+
160+ return 0;
161+}
162Index: gsm/src/gsmd/usock.c
163===================================================================
164--- gsm.orig/src/gsmd/usock.c 2007-08-31 16:15:30.000000000 +0800
165+++ gsm/src/gsmd/usock.c 2007-09-17 23:53:34.000000000 +0800
166@@ -1035,21 +1035,56 @@
167
168 static int phonebook_find_cb(struct gsmd_atcmd *cmd, void *ctx, char *resp)
169 {
170- struct gsmd_user *gu = ctx;
171- struct gsmd_ucmd *ucmd;
172-
173+ struct gsmd_user *gu = ctx;
174+ struct gsmd_ucmd *ucmd;
175+ struct gsmd_phonebooks *gps;
176+ char *fcomma, *lcomma, *ptr1, *ptr2 = NULL;
177+ int *num;
178+
179 DEBUGP("resp: %s\n", resp);
180
181- /* FIXME: using link list, also we need to handle the case of
182- * no query result */
183- ucmd = gsmd_ucmd_fill(strlen(resp) + 1, GSMD_MSG_PHONEBOOK,
184+ /*
185+ * [+CPBF: <index1>,<number>,<type>,<text>[[...]
186+ * <CR><LF>+CPBF: <index2>,<unmber>,<type>,<text>]]
187+ */
188+ ucmd = gsmd_ucmd_fill(sizeof(int), GSMD_MSG_PHONEBOOK,
189 GSMD_PHONEBOOK_FIND, 0);
190 if (!ucmd)
191 return -ENOMEM;
192
193- strcpy(ucmd->buf, resp);
194+ num = (int*) ucmd->buf;
195+
196+ *num = 0;
197+
198+ ptr1 = strtok(resp, "\n");
199+
200+ while (ptr1) {
201+ gps = (struct gsmd_phonebooks *) malloc(sizeof(struct gsmd_phonebooks));
202+ ptr2 = strchr(ptr1, ' ');
203+ gps->pb.index = atoi(ptr2+1);
204+
205+ fcomma = strchr(ptr1, '"');
206+ lcomma = strchr(fcomma+1, '"');
207+ strncpy(gps->pb.numb, fcomma + 1, (lcomma-fcomma-1));
208+ gps->pb.numb[(lcomma - fcomma) - 1] = '\0';
209+
210+ gps->pb.type = atoi(lcomma + 2);
211+
212+ ptr2 = strrchr(ptr1, ',');
213+ fcomma = ptr2 + 1;
214+ lcomma = strchr(fcomma + 1, '"');
215+ strncpy(gps->pb.text, fcomma + 1, (lcomma - fcomma - 1));
216+ gps->pb.text[(lcomma - fcomma) - 1] = '\0';
217+
218+ llist_add_tail(&gps->list, &gu->pb_find_list);
219+
220+ (*num)++;
221+
222+ ptr1 = strtok(NULL, "\n");
223+ }
224
225 usock_cmd_enqueue(ucmd, gu);
226+
227 return 0;
228 }
229
230@@ -1102,22 +1137,51 @@
231 {
232 struct gsmd_user *gu = ctx;
233 struct gsmd_ucmd *ucmd;
234+ struct gsmd_phonebooks *gps;
235+ char *fcomma, *lcomma, *ptr1, *ptr2 = NULL;
236+ int *num;
237
238 DEBUGP("resp: %s\n", resp);
239
240 /*
241- * +CPBR: 4,"1234",129,"6C5F745E7965"
242- * +CPBR: 5,"5678",129,"800062115BB6"
243- * +CPBR: 6,"7890",129,"810280AA591A"
244- * +CPBR: 8,"36874",129,"005300650061006E"
245- *
246+ * [+CPBR: <index1>,<number>,<type>,<text>[[...]
247+ * <CR><LF>+CPBR: <index2>,<unmber>,<type>,<text>]]
248 */
249- ucmd = gsmd_ucmd_fill(strlen(resp)+1, GSMD_MSG_PHONEBOOK,
250+ ucmd = gsmd_ucmd_fill(sizeof(int), GSMD_MSG_PHONEBOOK,
251 GSMD_PHONEBOOK_READRG, 0);
252 if (!ucmd)
253 return -ENOMEM;
254
255- strcpy(ucmd->buf, resp);
256+ num = (int*) ucmd->buf;
257+
258+ *num = 0;
259+
260+ ptr1 = strtok(resp, "\n");
261+
262+ while(ptr1) {
263+ gps = (struct gsmd_phonebooks *) malloc(sizeof(struct gsmd_phonebooks));
264+ ptr2 = strchr(ptr1, ' ');
265+ gps->pb.index = atoi(ptr2+1);
266+
267+ fcomma = strchr(ptr1, '"');
268+ lcomma = strchr(fcomma+1, '"');
269+ strncpy(gps->pb.numb, fcomma + 1, (lcomma-fcomma-1));
270+ gps->pb.numb[(lcomma - fcomma) - 1] = '\0';
271+
272+ gps->pb.type = atoi(lcomma + 2);
273+
274+ ptr2 = strrchr(ptr1, ',');
275+ fcomma = ptr2 + 1;
276+ lcomma = strchr(fcomma + 1, '"');
277+ strncpy(gps->pb.text, fcomma + 1, (lcomma - fcomma - 1));
278+ gps->pb.text[(lcomma - fcomma) - 1] = '\0';
279+
280+ llist_add_tail(&gps->list, &gu->pb_readrg_list);
281+
282+ (*num)++;
283+
284+ ptr1 = strtok(NULL, "\n");
285+ }
286
287 usock_cmd_enqueue(ucmd, gu);
288
289@@ -1209,22 +1273,38 @@
290 static int phonebook_list_storage_cb(struct gsmd_atcmd *cmd,
291 void *ctx, char *resp)
292 {
293- /* +CPBS: ("EN","BD","FD","DC","LD","RC","LR","MT","AD",
294- * "SM","SD","MC","LM","AF","ON","UD") */
295 /* TODO; using link list ; need to handle command error */
296 struct gsmd_user *gu = ctx;
297 struct gsmd_ucmd *ucmd;
298+ struct gsmd_phonebook_storage *gps;
299+ char *ptr;
300
301 DEBUGP("resp: %s\n", resp);
302
303- ucmd = gsmd_ucmd_fill(strlen(resp) + 1,
304+ /*
305+ * +CPBS: (<storage>s)
306+ */
307+
308+ ucmd = gsmd_ucmd_fill(sizeof(*gps),
309 GSMD_MSG_PHONEBOOK,
310 GSMD_PHONEBOOK_LIST_STORAGE, 0);
311
312 if (!ucmd)
313 return -ENOMEM;
314
315- strcpy(ucmd->buf, resp);
316+ gps = (struct gsmd_phonebook_storage *) ucmd->buf;
317+ gps->num = 0;
318+
319+ if (!strncmp(resp, "+CPBS", 5)) {
320+ char* delim = "(,";
321+ ptr = strpbrk(resp, delim);
322+ while ( ptr ) {
323+ strncpy(gps->mem[gps->num].type, ptr+2, 2);
324+ gps->mem[gps->num].type[2] = '\0';
325+ ptr = strpbrk(ptr+2, delim);
326+ gps->num++;
327+ }
328+ }
329
330 usock_cmd_enqueue(ucmd, gu);
331
332@@ -1235,11 +1315,13 @@
333 struct gsmd_msg_hdr *gph,int len)
334 {
335 struct gsmd_atcmd *cmd = NULL;
336+ struct gsmd_ucmd *ucmd = NULL;
337 struct gsmd_phonebook_readrg *gpr;
338 struct gsmd_phonebook *gp;
339 struct gsmd_phonebook_find *gpf;
340- int *index;
341- int atcmd_len;
342+ struct gsmd_phonebooks *cur, *cur2;
343+ int *index, *num;
344+ int atcmd_len, i;
345 char *storage;
346 char buf[1024];
347
348@@ -1343,6 +1425,66 @@
349 cmd = atcmd_fill("AT+CPBR=?", 9+1,
350 &phonebook_get_support_cb, gu, gph->id);
351 break;
352+ case GSMD_PHONEBOOK_RETRIEVE_READRG:
353+ if (len < sizeof(*gph) + sizeof(int))
354+ return -EINVAL;
355+
356+ num = (int *) ((void *)gph + sizeof(*gph));
357+
358+ ucmd = gsmd_ucmd_fill(sizeof(struct gsmd_phonebook)*(*num),
359+ GSMD_MSG_PHONEBOOK,
360+ GSMD_PHONEBOOK_RETRIEVE_READRG, 0);
361+ if (!ucmd)
362+ return -ENOMEM;
363+
364+ gp = (struct gsmd_phonebook*) ucmd->buf;
365+
366+ if (!llist_empty(&gu->pb_readrg_list)) {
367+
368+ llist_for_each_entry_safe(cur, cur2,
369+ &gu->pb_readrg_list, list) {
370+ gp->index = cur->pb.index;
371+ strcpy(gp->numb, cur->pb.numb);
372+ gp->type = cur->pb.type;
373+ strcpy(gp->text, cur->pb.text);
374+ gp++;
375+
376+ llist_del(&cur->list);
377+ free(cur);
378+ }
379+ }
380+
381+ usock_cmd_enqueue(ucmd, gu);
382+
383+ break;
384+ case GSMD_PHONEBOOK_RETRIEVE_FIND:
385+ if (len < sizeof(*gph) + sizeof(int))
386+ return -EINVAL;
387+
388+ num = (int *) ((void *)gph + sizeof(*gph));
389+
390+ ucmd = gsmd_ucmd_fill(sizeof(struct gsmd_phonebook)*(*num), GSMD_MSG_PHONEBOOK,
391+ GSMD_PHONEBOOK_RETRIEVE_FIND, 0);
392+ if (!ucmd)
393+ return -ENOMEM;
394+
395+ gp = (struct gsmd_phonebook*) ucmd->buf;
396+
397+ if (!llist_empty(&gu->pb_find_list)) {
398+ llist_for_each_entry_safe(cur, cur2, &gu->pb_find_list, list) {
399+ gp->index = cur->pb.index;
400+ strcpy(gp->numb, cur->pb.numb);
401+ gp->type = cur->pb.type;
402+ strcpy(gp->text, cur->pb.text);
403+ gp++;
404+
405+ llist_del(&cur->list);
406+ free(cur);
407+ }
408+ }
409+
410+ usock_cmd_enqueue(ucmd, gu);
411+ break;
412 default:
413 return -EINVAL;
414 }
415@@ -1468,6 +1610,8 @@
416 newuser->gsmd = g;
417 newuser->subscriptions = 0xffffffff;
418 INIT_LLIST_HEAD(&newuser->finished_ucmds);
419+ INIT_LLIST_HEAD(&newuser->pb_readrg_list);
420+ INIT_LLIST_HEAD(&newuser->pb_find_list);
421
422 llist_add(&newuser->list, &g->users);
423 gsmd_register_fd(&newuser->gfd);
diff --git a/meta/recipes-connectivity/gsm/files/028_shell-phonebook-find-and-read-range-support.patch b/meta/recipes-connectivity/gsm/files/028_shell-phonebook-find-and-read-range-support.patch
new file mode 100644
index 0000000..db07a5d
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/028_shell-phonebook-find-and-read-range-support.patch
@@ -0,0 +1,264 @@
1From: Sean Chiang <sean_chiang@openmoko.com>
2Subject: [PATCH] improvement for find and read phonebooks in shell
3
4This patch improves the functions to find and read phonebooks in shell.
5
6Besides prr and pf, I add two new commands pRr and pRf to retrieve the
7phonebook.
8
9Signed-off-by: Jim Huang <jserv@openmoko.org>
10
11Index: gsm/src/util/shell.c
12===================================================================
13--- gsm.orig/src/util/shell.c 2007-09-17 23:57:51.000000000 +0800
14+++ gsm/src/util/shell.c 2007-09-17 23:59:04.000000000 +0800
15@@ -34,8 +34,6 @@
16 #include <gsmd/usock.h>
17 #include <gsmd/ts0705.h>
18
19-#include <common/linux_list.h>
20-
21 #ifndef __GSMD__
22 #define __GSMD__
23 #include <gsmd/talloc.h>
24@@ -43,9 +41,8 @@
25 #endif
26
27 #define STDIN_BUF_SIZE 1024
28-
29-static LLIST_HEAD(storage_list);
30-static LLIST_HEAD(phonebook_list);
31+static int nFIND = 0;
32+static int nREADRG = 0;
33
34 /* this is the handler for receiving passthrough responses */
35 static int pt_msghandler(struct lgsm_handle *lh, struct gsmd_msg_hdr *gmh)
36@@ -62,46 +59,23 @@
37 struct gsmd_phonebook_storage *gpst;
38 char *payload;
39 char *fcomma, *lcomma, *ptr = NULL;
40+ int *num;
41 char buf[128];
42+ int i;
43
44 switch (gmh->msg_subtype) {
45-#if 0
46 case GSMD_PHONEBOOK_FIND:
47+ num = (int *) ((char *)gmh + sizeof(*gmh));
48+ printf("Records:%d\n", *num);
49+
50+ nFIND = *num;
51+ break;
52 case GSMD_PHONEBOOK_READRG:
53- payload = (char *)gmh + sizeof(*gmh);
54+ num = (int *) ((char *)gmh + sizeof(*gmh));
55+ printf("Records:%d\n", *num);
56
57- if (!strncmp(payload, "+CPBR", 5) ||
58- !strncmp(payload, "+CPBF", 5)) {
59- gp = (struct gsmd_phonebook *) malloc(sizeof(struct gsmd_phonebook));
60- ptr = strchr(payload, ' ');
61- gp->index = atoi(ptr+1);
62-
63- fcomma = strchr(payload, '"');
64- lcomma = strchr(fcomma+1, '"');
65- strncpy(gp->numb, fcomma + 1, (lcomma-fcomma-1));
66- gp->numb[(lcomma - fcomma) - 1] = '\0';
67-
68- gp->type = atoi(lcomma + 2);
69-
70- ptr = strrchr(payload, ',');
71- fcomma = ptr + 1;
72- lcomma = strchr(fcomma + 1, '"');
73- strncpy(gp->text, fcomma + 1, (lcomma - fcomma - 1));
74- gp->text[(lcomma - fcomma) - 1] = '\0';
75-
76- llist_add_tail(&gp->list, &phonebook_list);
77-
78-#if 0
79- llist_for_each_entry(gp, &phonebook_list, list) {
80- printf("%d, %s, %d, %s\n", gp->index, gp->numb, gp->type, gp->text);
81- }
82-#endif
83- printf("%d, %s, %d, %s\n", gp->index, gp->numb, gp->type, gp->text);
84- }
85- else
86- printf("%s\n", payload);
87+ nREADRG = *num;
88 break;
89-#endif
90 case GSMD_PHONEBOOK_READ:
91 gp = (struct gsmd_phonebook *) ((char *)gmh + sizeof(*gmh));
92 if (gp->index)
93@@ -115,48 +89,18 @@
94 gps = (struct gsmd_phonebook_support *) ((char *)gmh + sizeof(*gmh));
95 printf("(1-%d), %d, %d\n", gps->index, gps->nlength, gps->tlength);
96 break;
97-#if 0
98- case GSMD_PHONEBOOK_LIST_STORAGE:
99- payload = (char *)gmh + sizeof(*gmh);
100
101- if (!strncmp(payload, "+CPBS", 5)) {
102- char* delim = "(,";
103- struct gsmd_phonebook_storage *cur, *cur2;
104-
105- /* Remove previous record */
106- if (!llist_empty(&storage_list)) {
107- llist_for_each_entry_safe(cur, cur2,
108- &storage_list, list) {
109- llist_del(&cur->list);
110- talloc_free(cur);
111- }
112- }
113-
114- ptr = strpbrk(payload, delim);
115-
116- while ( ptr ) {
117- gpst = (struct gsmd_phonebook_storage *) malloc(sizeof(struct gsmd_phonebook_storage));
118- strncpy(gpst->storage, ptr+2, 2);
119- gpst->storage[2] = '\0';
120-
121- ptr = strpbrk(ptr+2, delim);
122-
123- llist_add_tail(&gpst->list, &storage_list);
124- }
125+ case GSMD_PHONEBOOK_LIST_STORAGE:
126+ gpst = (struct gsmd_phonebook_storage *)((char *)gmh + sizeof(*gmh));
127
128- if (llist_empty(&storage_list))
129- return 0;
130+ for (i = 0; i < gpst->num; i++) {
131+ printf("%s, ", gpst->mem[i].type);
132+ }
133
134- llist_for_each_entry(cur, &storage_list, list) {
135- printf("\n%s",cur->storage);
136- }
137+ printf("\n");
138
139- printf("\n");
140- }
141- else
142- printf("%s\n", payload);
143 break;
144-#endif
145+
146 case GSMD_PHONEBOOK_WRITE:
147 case GSMD_PHONEBOOK_DELETE:
148 case GSMD_PHONEBOOK_SET_STORAGE:
149@@ -164,6 +108,26 @@
150 payload = (char *)gmh + sizeof(*gmh);
151 printf("%s\n", payload);
152 break;
153+ case GSMD_PHONEBOOK_RETRIEVE_READRG:
154+ gp = (struct gsmd_phonebook *) ((char *)gmh + sizeof(*gmh));
155+
156+ for (i=0; i<nREADRG; i++) {
157+ printf("%d,%s,%d,%s\n", gp->index, gp->numb, gp->type, gp->text);
158+ gp++;
159+ }
160+
161+ nREADRG = 0;
162+ break;
163+ case GSMD_PHONEBOOK_RETRIEVE_FIND:
164+ gp = (struct gsmd_phonebook *) ((char *)gmh + sizeof(*gmh));
165+
166+ for (i = 0; i < nFIND; i++) {
167+ printf("%d,%s,%d,%s\n", gp->index, gp->numb, gp->type, gp->text);
168+ gp++;
169+ }
170+
171+ nFIND = 0;
172+ break;
173 default:
174 return -EINVAL;
175 }
176@@ -381,11 +345,13 @@
177 "\tpd\tPB Delete (pb=index)\n"
178 "\tpr\tPB Read (pr=index)\n"
179 "\tprr\tPB Read Range (prr=index1,index2)\n"
180- "\tpf\tPB Find (pff=indtext)\n"
181+ "\tpf\tPB Find (pf=indtext)\n"
182 "\tpw\tPB Write (pw=index,number,text)\n"
183 "\tps\tPB Support\n"
184 "\tpm\tPB Memory\n"
185 "\tpp\tPB Set Memory (pp=storage)\n"
186+ "\tpRr\tRetrieve Readrg Records\n"
187+ "\tpRf\tRetrieve Find Records\n"
188 "\tsd\tSMS Delete (sd=index,delflg)\n"
189 "\tsl\tSMS List (sl=stat)\n"
190 "\tsr\tSMS Read (sr=index)\n"
191@@ -509,48 +475,21 @@
192 printf("Delete Phonebook Entry\n");
193 ptr = strchr(buf, '=');
194 lgsm_pb_del_entry(lgsmh, atoi(ptr+1));
195-#if 0
196 } else if ( !strncmp(buf, "prr", 3)) {
197 printf("Read Phonebook Entries\n");
198 struct lgsm_phonebook_readrg pb_readrg;
199- struct gsmd_phonebook *gp_cur, *gp_cur2;
200-
201- /* Remove records */
202- if (!llist_empty(&phonebook_list)) {
203- llist_for_each_entry_safe(gp_cur,
204- gp_cur2,
205- &phonebook_list,
206- list) {
207- llist_del(&gp_cur->list);
208- talloc_free(gp_cur);
209- }
210- }
211
212 ptr = strchr(buf, '=');
213 pb_readrg.index1 = atoi(ptr+1);
214 ptr = strchr(buf, ',');
215 pb_readrg.index2 = atoi(ptr+1);
216 lgsm_pb_read_entries(lgsmh, &pb_readrg);
217-#endif
218 } else if ( !strncmp(buf, "pr", 2)) {
219 ptr = strchr(buf, '=');
220 lgsm_pb_read_entry(lgsmh, atoi(ptr+1));
221-#if 0
222 } else if ( !strncmp(buf, "pf", 2)) {
223 printf("Find Phonebook Entry\n");
224 struct lgsm_phonebook_find pb_find;
225- struct gsmd_phonebook *gp_cur, *gp_cur2;
226-
227- /* Remove records */
228- if (!llist_empty(&phonebook_list)) {
229- llist_for_each_entry_safe(gp_cur,
230- gp_cur2,
231- &phonebook_list,
232- list) {
233- llist_del(&gp_cur->list);
234- talloc_free(gp_cur);
235- }
236- }
237
238 ptr = strchr(buf, '=');
239 strncpy(pb_find.findtext,
240@@ -559,7 +498,6 @@
241 pb_find.findtext[strlen(ptr+1)] = '\0';
242
243 lgsm_pb_find_entry(lgsmh, &pb_find);
244-#endif
245 } else if ( !strncmp(buf, "pw", 2)) {
246 printf("Write Phonebook Entry\n");
247 struct lgsm_phonebook pb;
248@@ -591,6 +529,16 @@
249 } else if ( !strncmp(buf, "ps", 2)) {
250 printf("Get Phonebook Support\n");
251 lgsm_pb_get_support(lgsmh);
252+ } else if( !strncmp(buf, "pRr", 3) ) {
253+ printf("Retrieve Readrg Records\n");
254+
255+ if ( nREADRG )
256+ lgsm_pb_retrieve_readrg(lgsmh, nREADRG);
257+ } else if( !strncmp(buf, "pRf", 3) ) {
258+ printf("Retrieve Find Records\n");
259+
260+ if ( nFIND )
261+ lgsm_pb_retrieve_find(lgsmh, nFIND);
262 } else if ( !strncmp(buf, "sd", 2)) {
263 printf("Delete SMS\n");
264 struct lgsm_sms_delete sms_del;
diff --git a/meta/recipes-connectivity/gsm/files/default b/meta/recipes-connectivity/gsm/files/default
new file mode 100644
index 0000000..6ef4f6d
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/default
@@ -0,0 +1,59 @@
1# gsmd This shell script configures for the gsmd init script.
2
3. /etc/init.d/functions
4
5case `machine_id` in
6 "gta01"|"gta02")
7 GSMD_OPTS="-s 115200 -F"
8 if [ -d '/sys/bus/platform/devices/gta01-pm-gsm.0' ] ; then
9 GSM_POW="/sys/bus/platform/devices/gta01-pm-gsm.0/power_on"
10 GSM_RES="/sys/bus/platform/devices/gta01-pm-gsm.0/reset"
11 else
12 GSM_POW="/sys/bus/platform/devices/neo1973-pm-gsm.0/power_on"
13 GSM_RES="/sys/bus/platform/devices/neo1973-pm-gsm.0/reset"
14 fi
15 GSM_DEV="/dev/ttySAC0"
16 GSM_DL="/sys/devices/platform/neo1973-pm-gsm.0/download"
17 ;;
18 "htc_apache"|"htc_blueangel"|"htc_universal")
19 GSMD_OPTS="-s 115200 -F"
20 GSM_DEV="/dev/ttyS0"
21 ;;
22 "htc_himalaya")
23 GSMD_OPTS="-s 115200 -F"
24 GSM_DEV="/dev/ttyS2"
25 ;;
26 "htc_magician")
27 GSMD_OPTS="-s 115200 -F"
28 GSM_DEV="/dev/ttyS1"
29 ;;
30 "palm_treo_650")
31 GSMD_OPTS="-s 460800 -F -w 1"
32 GSM_DEV="/dev/ttyS0"
33 ;;
34 "motorola_ezx_platform")
35 GSMD_OPTS="-s 115200 -F -v ti"
36 GSM_DEV="/dev/mux0"
37 ;;
38 "omap3430_ldp_board")
39 # Need a machine for the Zoom modem, but this will do
40 GSMD_OPTS="-s 460800 -F -v ti -m gta01"
41 GSM_DEV="/dev/ttyS0"
42 ;;
43 *)
44 # Unknown board
45
46 # If you must specify special options, uncomment and modify the next line
47 #GSMD_OPTS="-s 115200 -F"
48
49 # If your GSM device needs to be powered up, uncomment and modify the next line
50 #GSM_POW="/sys/bus/platform/devices/gta01-pm-gsm.0/power_on"
51
52 # If your GSM device then needs to be reset, uncomment and modify the next line
53 #GSM_RES="/sys/bus/platform/devices/gta01-pm-gsm.0/reset"
54
55 # This should be in a common /etc/default/serial, together with
56 # BT_DEV and IR_DEV for devices that have those on a serial port
57 #GSM_DEV="/dev/ttyS1"
58 ;;
59esac
diff --git a/meta/recipes-connectivity/gsm/files/fix_machine_init.patch b/meta/recipes-connectivity/gsm/files/fix_machine_init.patch
new file mode 100644
index 0000000..808bb17
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/fix_machine_init.patch
@@ -0,0 +1,23 @@
1Index: src/gsmd/gsmd.c
2===================================================================
3--- a/src/gsmd/gsmd.c (revision 4304)
4+++ b/src/gsmd/gsmd.c (working copy)
5@@ -196,13 +196,13 @@
6
7 sms_cb_init(gsmd);
8
9- if (gsmd->vendorpl && gsmd->vendorpl->initsettings){
10+ if (gsmd->vendorpl && gsmd->vendorpl->initsettings)
11 rc |= gsmd->vendorpl->initsettings(gsmd);
12+
13+ if (gsmd->machinepl && gsmd->machinepl->initsettings)
14 rc |= gsmd->machinepl->initsettings(gsmd);
15- return rc;
16- }
17- else
18- return rc;
19+
20+ return rc;
21 }
22
23 static int firstcmd_response = 0;
diff --git a/meta/recipes-connectivity/gsm/files/gsmd b/meta/recipes-connectivity/gsm/files/gsmd
new file mode 100644
index 0000000..dc10e63
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/gsmd
@@ -0,0 +1,47 @@
1#! /bin/sh
2#
3# gsmd This shell script starts and stops gsmd.
4#
5# chkconfig: 345 90 40
6# description: Gsmd manages access to a serial- or USB-connected GSM
7# processname: gsmd
8
9PATH=/bin:/usr/bin:/sbin:/usr/sbin
10
11[ -f /etc/default/rcS ] && . /etc/default/rcS
12[ -f /etc/default/gsmd ] && . /etc/default/gsmd
13
14case "$1" in
15 start)
16 [ -n "$GSM_POW" ] && ( echo "0" >$GSM_POW; sleep 1 )
17 [ -n "$GSM_POW" ] && ( echo "1" >$GSM_POW; sleep 1 )
18 [ -n "$GSM_RES" ] && ( echo "1" >$GSM_RES; sleep 1 )
19 [ -n "$GSM_RES" ] && ( echo "0" >$GSM_RES; sleep 2 )
20
21 echo -n "Starting GSM daemon: "
22 start-stop-daemon -S -x /usr/sbin/gsmd -- gsmd -p $GSM_DEV $GSMD_OPTS -d -l syslog
23
24 if [ $? = 0 ]; then
25 echo "gsmd."
26 else
27 echo "(failed.)"
28 fi
29 ;;
30 stop)
31 [ -n "$GSM_POW" ] && echo "0" >$GSM_POW
32
33 echo -n "Stopping GSM daemon: "
34 start-stop-daemon -K -x /usr/sbin/gsmd
35 echo "gsmd."
36 ;;
37 restart|force-reload)
38 $0 stop
39 $0 start
40 ;;
41 *)
42 echo "Usage: /etc/init.d/gsmd {start|stop|restart|force-reload}"
43 exit 1
44 ;;
45esac
46
47exit 0
diff --git a/meta/recipes-connectivity/gsm/files/install-ts-headers.patch b/meta/recipes-connectivity/gsm/files/install-ts-headers.patch
new file mode 100644
index 0000000..88e3b6d
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/install-ts-headers.patch
@@ -0,0 +1,11 @@
1Index: gsm/include/gsmd/Makefile.am
2===================================================================
3--- gsm.orig/include/gsmd/Makefile.am 2007-10-29 21:05:57.000000000 +0100
4+++ gsm/include/gsmd/Makefile.am 2007-10-29 21:06:03.000000000 +0100
5@@ -1,4 +1,4 @@
6
7-pkginclude_HEADERS = event.h usock.h
8+pkginclude_HEADERS = event.h ts0705.h ts0707.h usock.h
9
10-noinst_HEADERS = atcmd.h gsmd.h select.h ts0705.h ts0707.h unsolicited.h usock.h vendorplugin.h
11+noinst_HEADERS = atcmd.h gsmd.h select.h unsolicited.h usock.h vendorplugin.h
diff --git a/meta/recipes-connectivity/gsm/files/lgsm_send_fix_return_value.patch b/meta/recipes-connectivity/gsm/files/lgsm_send_fix_return_value.patch
new file mode 100644
index 0000000..00ba3a4
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/files/lgsm_send_fix_return_value.patch
@@ -0,0 +1,11 @@
1--- gsm/src/libgsmd/libgsmd.c.orig 2007-09-25 00:41:56.000000000 -0500
2+++ gsm/src/libgsmd/libgsmd.c 2007-09-25 00:43:44.000000000 -0500
3@@ -210,7 +210,7 @@
4 pos += rc;
5 }
6 }
7- return 0;
8+ return (sizeof(*gmh) + gmh->len);
9 }
10
11 struct gsmd_msg_hdr *lgsm_gmh_fill(int type, int subtype, int payload_len)
diff --git a/meta/recipes-connectivity/gsm/gsmd.inc b/meta/recipes-connectivity/gsm/gsmd.inc
new file mode 100644
index 0000000..a69fdd9
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/gsmd.inc
@@ -0,0 +1,93 @@
1DESCRIPTION = "GSM libraries and daemons implementing the 07.10 specification"
2HOMEPAGE = "http://www.openmoko.org"
3LICENSE = "GPL LGPL"
4SECTION = "libs/gsm"
5PROVIDES += "gsmd"
6RPROVIDES_${PN} = "libgsmd0 libgsmd gsmd gsmd-devel"
7PV = "0.1+svnr${SRCREV}"
8PR = "r47"
9
10SRC_URI = "svn://svn.openmoko.org/trunk/src/target;module=gsm;proto=http \
11 file://fix_machine_init.patch;patch=1 \
12 file://gsmd \
13 file://default"
14S = "${WORKDIR}/gsm"
15
16inherit autotools pkgconfig update-rc.d
17# handle update-rc.d RDEPENDS manually, we don't need it on
18# anything but gsmd
19RDEPENDS_append = ""
20
21INITSCRIPT_NAME = "gsmd"
22INITSCRIPT_PARAMS = "defaults 35"
23
24do_install_append() {
25 install -d ${D}/${sysconfdir}/init.d
26 install -m 0755 ${WORKDIR}/gsmd ${D}/${sysconfdir}/init.d/
27 install -d ${D}/${sysconfdir}/default
28 install ${WORKDIR}/default ${D}/${sysconfdir}/default/gsmd
29}
30
31PACKAGES =+ "\
32 ${PN}-tools \
33 ${BASEPN}-plugins \
34 ${BASEPN}-plugin-machine-generic \
35 ${BASEPN}-plugin-machine-tihtc \
36 ${BASEPN}-plugin-machine-gta01 \
37 ${BASEPN}-plugin-vendor-bcm \
38 ${BASEPN}-plugin-vendor-qc \
39 ${BASEPN}-plugin-vendor-ti \
40 ${BASEPN}-plugin-vendor-tihtc \
41"
42
43ALLOW_EMPTY_${BASEPN}-plugin-machine-gta01 = "1"
44
45RDEPENDS_${BASEPN}-plugins = "\
46 ${BASEPN}-plugin-machine-generic \
47 ${BASEPN}-plugin-machine-tihtc \
48 ${BASEPN}-plugin-machine-gta01 \
49 ${BASEPN}-plugin-vendor-bcm \
50 ${BASEPN}-plugin-vendor-qc \
51 ${BASEPN}-plugin-vendor-ti \
52 ${BASEPN}-plugin-vendor-tihtc \
53"
54
55RDEPENDS_${PN} += "update-rc.d initscripts"
56RRECOMMENDS_${PN} += "${BASEPN}-plugins"
57
58FILES_${PN}-dbg += "${libdir}/gsmd/.debug/*"
59FILES_${PN}-tools = "${bindir}/*"
60FILES_${BASEPN}-plugins = ""
61FILES_${BASEPN}-plugin-machine-generic = "${libdir}/gsmd/libgsmd-machine_generic.so*"
62FILES_${BASEPN}-plugin-machine-tihtc = "${libdir}/gsmd/libgsmd-machine_tihtc.so*"
63FILES_${BASEPN}-plugin-machine-gta01 = "${libdir}/gsmd/libgsmd-machine_gta01.so*"
64FILES_${BASEPN}-plugin-vendor-qc = "${libdir}/gsmd/libgsmd-vendor_qc.so*"
65FILES_${BASEPN}-plugin-vendor-bcm = "${libdir}/gsmd/libgsmd-vendor_bcm.so*"
66FILES_${BASEPN}-plugin-vendor-ti = "${libdir}/gsmd/libgsmd-vendor_ti.so*"
67FILES_${BASEPN}-plugin-vendor-tihtc = "${libdir}/gsmd/libgsmd-vendor_tihtc.so*"
68
69PACKAGES_DYNAMIC = "lib${BASEPN}* ${BASEPN}"
70
71ALLOW_EMPTY_${BASEPN}-plugins = "1"
72
73RCONFLICTS_lib${BASEPN} = "lib${CONFLICTNAME}"
74RCONFLICTS_${BASEPN} = "${CONFLICTNAME}"
75RCONFLICTS_${BASEPN}-plugins = "${CONFLICTNAME}-plugins"
76RCONFLICTS_${BASEPN}-plugin-machine-generic = "${CONFLICTNAME}-plugin-machine-generic"
77RCONFLICTS_${BASEPN}-plugin-machine-tihtc = "${CONFLICTNAME}-plugin-machine-tihtc"
78RCONFLICTS_${BASEPN}-plugin-machine-gta01 = "${CONFLICTNAME}-plugin-machine-gta01"
79RCONFLICTS_${BASEPN}-plugin-vendor-qc = "${CONFLICTNAME}-plugin-vendor-qc"
80RCONFLICTS_${BASEPN}-plugin-vendor-bcm = "${CONFLICTNAME}-plugin-vendor-bcm"
81RCONFLICTS_${BASEPN}-plugin-vendor-ti = "${CONFLICTNAME}-plugin-vendor-ti"
82RCONFLICTS_${BASEPN}-plugin-vendor-tihtc = "${CONFLICTNAME}-plugin-vendor-tihtc"
83
84RPROVIDES_lib${BASEPN} += "lib${CONFLICTNAME}"
85RPROVIDES_${BASEPN} = "${CONFLICTNAME}"
86RPROVIDES_${BASEPN}-plugins = "${CONFLICTNAME}-plugins"
87RPROVIDES_${BASEPN}-plugin-machine-generic = "${CONFLICTNAME}-plugin-machine-generic"
88RPROVIDES_${BASEPN}-plugin-machine-tihtc = "${CONFLICTNAME}-plugin-machine-tihtc"
89RPROVIDES_${BASEPN}-plugin-machine-gta01 = "${CONFLICTNAME}-plugin-machine-gta01"
90RPROVIDES_${BASEPN}-plugin-vendor-qc = "${CONFLICTNAME}-plugin-vendor-qc"
91RPROVIDES_${BASEPN}-plugin-vendor-bcm = "${CONFLICTNAME}-plugin-vendor-bcm"
92RPROVIDES_${BASEPN}-plugin-vendor-ti = "${CONFLICTNAME}-plugin-vendor-ti"
93RPROVIDES_${BASEPN}-plugin-vendor-tihtc = "${CONFLICTNAME}-plugin-vendor-tihtc"
diff --git a/meta/recipes-connectivity/gsm/libgsmd_svn.bb b/meta/recipes-connectivity/gsm/libgsmd_svn.bb
new file mode 100644
index 0000000..9d3ca19
--- /dev/null
+++ b/meta/recipes-connectivity/gsm/libgsmd_svn.bb
@@ -0,0 +1,5 @@
1BASEPN = "gsmd"
2CONFLICTNAME = "gsmd-devel"
3
4require gsmd.inc
5
diff --git a/meta/recipes-connectivity/iproute2/iproute2-2.6.34/configure-cross.patch b/meta/recipes-connectivity/iproute2/iproute2-2.6.34/configure-cross.patch
new file mode 100644
index 0000000..67dc6f5
--- /dev/null
+++ b/meta/recipes-connectivity/iproute2/iproute2-2.6.34/configure-cross.patch
@@ -0,0 +1,61 @@
1# borrow from OE, to handle cross compile mess
2#
3# ktian1, 06/28/2010
4Index: iproute2-2.6.34/configure
5===================================================================
6--- iproute2-2.6.34.orig/configure
7+++ iproute2-2.6.34/configure
8@@ -4,7 +4,7 @@
9 INCLUDE=${1:-"$PWD/include"}
10
11 TABLES=
12-
13+SYSROOT=$1
14 check_atm()
15 {
16 cat >/tmp/atmtest.c <<EOF
17@@ -15,7 +15,7 @@ int main(int argc, char **argv) {
18 return 0;
19 }
20 EOF
21-gcc -I$INCLUDE -o /tmp/atmtest /tmp/atmtest.c -latm >/dev/null 2>&1
22+$CC -I$INCLUDE -o /tmp/atmtest /tmp/atmtest.c -latm >/dev/null 2>&1
23 if [ $? -eq 0 ]
24 then
25 echo "TC_CONFIG_ATM:=y" >>Config
26@@ -49,7 +49,7 @@ int main(int argc, char **argv)
27
28 EOF
29
30-if gcc -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl -lxtables >/dev/null 2>&1
31+if $CC -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl -lxtables >/dev/null 2>&1
32 then
33 echo "TC_CONFIG_XT:=y" >>Config
34 echo "using xtables"
35@@ -86,7 +86,7 @@ int main(int argc, char **argv) {
36 }
37
38 EOF
39-gcc -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl >/dev/null 2>&1
40+$CC -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl >/dev/null 2>&1
41
42 if [ $? -eq 0 ]
43 then
44@@ -126,7 +126,7 @@ int main(int argc, char **argv) {
45 }
46
47 EOF
48-gcc -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl >/dev/null 2>&1
49+$CC -I$INCLUDE $IPTC -o /tmp/ipttest /tmp/ipttest.c $IPTL -ldl >/dev/null 2>&1
50
51 if [ $? -eq 0 ]
52 then
53@@ -150,7 +150,7 @@ check_ipt()
54 check_ipt_lib_dir()
55 {
56 IPT_LIB_DIR=""
57- for dir in /lib /usr/lib /usr/local/lib
58+ for dir in $SYSROOT/lib $SYSROOT/usr/lib $SYSROOT/usr/local/lib
59 do
60 for file in $dir/$TABLES/lib*t_*so ; do
61 if [ -f $file ]; then
diff --git a/meta/recipes-connectivity/iproute2/iproute2.inc b/meta/recipes-connectivity/iproute2/iproute2.inc
new file mode 100644
index 0000000..7246b87
--- /dev/null
+++ b/meta/recipes-connectivity/iproute2/iproute2.inc
@@ -0,0 +1,27 @@
1DESCRIPTION = "kernel routing and traffic control utilities"
2HOMEPAGE = "http://www.linuxfoundation.org/collaborate/workgroups/networking/iproute2"
3SECTION = "base"
4LICENSE = "GPLv2+"
5LIC_FILES_CHKSUM = "file://COPYING;md5=eb723b61539feef013de476e68b5c50a \
6 file://ip/ip.c;md5=186731afa4b42e30b9b37efa4ec90b93"
7DEPENDS = "flex-native bison-native"
8
9inherit update-alternatives
10
11EXTRA_OEMAKE = "CC='${CC}' KERNEL_INCLUDE=${STAGING_KERNEL_DIR}/include DOCDIR=${docdir}/iproute2 SUBDIRS='lib tc ip' SBINDIR=/sbin"
12
13do_install () {
14 oe_runmake DESTDIR=${D} install
15 mv ${D}${base_sbindir}/ip ${D}${base_sbindir}/ip.iproute2
16 install -d ${D}${datadir}
17 mv ${D}/share/* ${D}${datadir}/ || true
18 rm ${D}/share -rf || true
19}
20
21FILES_${PN} += "/usr/lib/tc/*"
22FILES_${PN}-dbg += "/usr/lib/tc/.debug"
23
24ALTERNATIVE_NAME = "ip"
25ALTERNATIVE_PATH = "${base_sbindir}/ip.iproute2"
26ALTERNATIVE_LINK = "${base_bindir}/ip"
27ALTERNATIVE_PRIORITY = "100"
diff --git a/meta/recipes-connectivity/iproute2/iproute2_2.6.34.bb b/meta/recipes-connectivity/iproute2/iproute2_2.6.34.bb
new file mode 100644
index 0000000..c5e0ef6
--- /dev/null
+++ b/meta/recipes-connectivity/iproute2/iproute2_2.6.34.bb
@@ -0,0 +1,6 @@
1require iproute2.inc
2
3PR = "r0"
4
5SRC_URI = "http://developer.osdl.org/dev/iproute2/download/${P}.tar.bz2 \
6 file://configure-cross.patch"
diff --git a/meta/recipes-connectivity/libetpan/files/cxx-is-here.patch b/meta/recipes-connectivity/libetpan/files/cxx-is-here.patch
new file mode 100644
index 0000000..d910daa
--- /dev/null
+++ b/meta/recipes-connectivity/libetpan/files/cxx-is-here.patch
@@ -0,0 +1,18 @@
1---
2 configure.ac | 1 +
3 1 file changed, 1 insertion(+)
4
5--- libetpan-0.54.orig/configure.ac
6+++ libetpan-0.54/configure.ac
7@@ -104,10 +104,11 @@ if test "$have_w32_system" = yes; then
8 fi
9 AM_CONDITIONAL(HAVE_MINGW32_SYSTEM, test "$have_w32_system" = yes)
10
11 # Check the C compiler.
12 AC_PROG_CC
13+AC_PROG_CXX
14
15 # Compiler flags.
16 AC_ARG_ENABLE(debug, [ --enable-debug setup flags (gcc) for debugging (default=no)],
17 if test "x$GCC" = xyes; then
18 CFLAGS="$CFLAGS -O2 -g"
diff --git a/meta/recipes-connectivity/libetpan/libetpan_0.54.bb b/meta/recipes-connectivity/libetpan/libetpan_0.54.bb
new file mode 100644
index 0000000..5666ea0
--- /dev/null
+++ b/meta/recipes-connectivity/libetpan/libetpan_0.54.bb
@@ -0,0 +1,19 @@
1DESCRIPTION = "libetpan is a library for communicating with mail and news servers. \
2It supports the protocols SMTP, POP3, IMAP and NNTP."
3HOMEPAGE = "http://www.etpan.org"
4SECTION = "libs"
5DEPENDS = "curl expat gnutls"
6LICENSE = "BSD"
7PR = "r1"
8
9SRC_URI = "${SOURCEFORGE_MIRROR}/libetpan/libetpan-${PV}.tar.gz \
10 file://cxx-is-here.patch;patch=1"
11
12inherit autotools pkgconfig gettext binconfig
13
14EXTRA_OECONF = "--without-openssl --with-gnutls --disable-db"
15
16PARALLEL_MAKE = ""
17
18FILES_${PN} = "${libdir}/lib*.so.*"
19FILES_${PN}-dev = "${bindir} ${includedir} ${libdir}/lib*.so ${libdir}/*.la ${libdir}/*.a ${libdir}/pkgconfig"
diff --git a/meta/recipes-connectivity/libnss-mdns/files/alignment-fix.patch b/meta/recipes-connectivity/libnss-mdns/files/alignment-fix.patch
new file mode 100644
index 0000000..11d4655
--- /dev/null
+++ b/meta/recipes-connectivity/libnss-mdns/files/alignment-fix.patch
@@ -0,0 +1,11 @@
1--- nss-mdns-0.6/src/nss.c.orig 2005-09-25 17:27:51 +0200
2+++ nss-mdns-0.6/src/nss.c 2005-09-25 17:28:55 +0200
3@@ -456,6 +456,8 @@
4 result->h_addrtype = af;
5 result->h_length = address_length;
6
7+ idx+=(sizeof(char*)-idx%sizeof(char*)); /* Align on 32 bit boundary */
8+
9 /* Check if there's enough space for the addresses */
10 if (buflen < idx+u.data_len+sizeof(char*)*(u.count+1)) {
11 *errnop = ERANGE;
diff --git a/meta/recipes-connectivity/libnss-mdns/libnss-mdns_0.10.bb b/meta/recipes-connectivity/libnss-mdns/libnss-mdns_0.10.bb
new file mode 100644
index 0000000..69eaa33
--- /dev/null
+++ b/meta/recipes-connectivity/libnss-mdns/libnss-mdns_0.10.bb
@@ -0,0 +1,36 @@
1DESCRIPTION = "NSS module for Multicast DNS name resolution"
2HOMEPAGE = "http://0pointer.de/lennart/projects/nss-mdns/"
3SECTION = "libs"
4PRIORITY = "optional"
5
6LICENSE = "LGPLv2.1+"
7LIC_FILES_CHKSUM = "file://LICENSE;md5=2d5025d4aa3495befef8f17206a5b0a1"
8
9DEPENDS = "avahi"
10RDEPENDS = "avahi-daemon"
11PR = "r0"
12
13SRC_URI = "http://0pointer.de/lennart/projects/nss-mdns/nss-mdns-${PV}.tar.gz"
14S = "${WORKDIR}/nss-mdns-${PV}"
15
16inherit autotools
17
18# suppress warning, but don't bother with autonamer
19LEAD_SONAME = "libnss_mdns.so"
20DEBIANNAME_${PN} = "libnss-mdns"
21
22EXTRA_OECONF = "--libdir=/lib --disable-lynx --enable-avahi"
23
24pkg_postinst () {
25 cat /etc/nsswitch.conf | grep "hosts:\s*files dns$" > /dev/null && {
26 cat /etc/nsswitch.conf | sed 's/hosts:\s*files dns/& mdns4/' > /tmp/nsswitch.conf
27 mv /tmp/nsswitch.conf /etc/nsswitch.conf
28 }
29}
30
31pkg_prerm () {
32 cat /etc/nsswitch.conf | grep "hosts:\s*files dns mdns$" > /dev/null && {
33 cat /etc/nsswitch.conf | sed 's/\(hosts:\s*files dns\) mdns4*/\1/' > /tmp/nsswitch.conf
34 mv /tmp/nsswitch.conf /etc/nsswitch.conf