summaryrefslogtreecommitdiffstats
path: root/gisi
diff options
context:
space:
mode:
authorPekka Pessi <pekka.pessi@nokia.com>2010-11-23 16:07:00 +0200
committerAki Niemi <aki.niemi@nokia.com>2010-12-22 17:13:47 +0200
commitedd0b327e0479c5f3ce48f3d2b25fdc8abb379ea (patch)
treea13fde9637e276c759073ec5bdb64d9302ceaf9a /gisi
parent5c4645b2f49fb8ff26d4dc4c525afca2133515b7 (diff)
downloadofono-edd0b327e0479c5f3ce48f3d2b25fdc8abb379ea.tar.bz2
gisi: Remove forward reference
Diffstat (limited to 'gisi')
-rw-r--r--gisi/modem.c189
1 files changed, 94 insertions, 95 deletions
diff --git a/gisi/modem.c b/gisi/modem.c
index 746a56f1..971d09e9 100644
--- a/gisi/modem.c
+++ b/gisi/modem.c
@@ -275,53 +275,44 @@ static gboolean isi_callback(GIOChannel *channel, GIOCondition cond,
return TRUE;
}
-GIsiModem *g_isi_modem_create(unsigned index)
+static gboolean modem_subs_update(gpointer data)
{
- GIsiModem *modem;
- GIOChannel *inds;
- GIOChannel *reqs;
-
- if (index == 0) {
- errno = ENODEV;
- return NULL;
- }
+ GHashTableIter iter;
+ gpointer keyptr, value;
- modem = g_try_new0(GIsiModem, 1);
- if (!modem) {
- errno = ENOMEM;
- return NULL;
- }
+ GIsiModem *modem = data;
+ uint8_t msg[3 + 256] = {
+ 0, PNS_SUBSCRIBED_RESOURCES_IND,
+ 0,
+ };
+ uint8_t count = 0;
- inds = g_isi_phonet_new(index);
- reqs = g_isi_phonet_new(index);
+ modem->subs_source = 0;
- if (!inds || !reqs) {
- g_free(modem);
- return NULL;
- }
+ g_hash_table_iter_init(&iter, modem->services);
- modem->req_fd = g_io_channel_unix_get_fd(reqs);
- modem->req_watch = g_io_add_watch(reqs,
- G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
- isi_callback, modem);
- modem->ind_fd = g_io_channel_unix_get_fd(inds);
- modem->ind_watch = g_io_add_watch(inds,
- G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
- isi_callback, modem);
+ while (g_hash_table_iter_next(&iter, &keyptr, &value)) {
+ GIsiServiceMux *mux = value;
- g_io_channel_unref(reqs);
- g_io_channel_unref(inds);
+ if (mux->subscriptions > 0) {
+ msg[3 + count] = mux->resource;
+ count++;
+ }
+ }
+ msg[2] = count;
- modem->index = index;
- modem->services = g_hash_table_new_full(g_direct_hash, NULL,
- NULL, service_finalize);
+ sendto(modem->ind_fd, msg, 3 + msg[2], MSG_NOSIGNAL, (void *)&commgr,
+ sizeof(commgr));
- return modem;
+ return FALSE;
}
-GIsiModem *g_isi_modem_create_by_name(const char *name)
+static void modem_subs_update_when_idle(GIsiModem *modem)
{
- return g_isi_modem_create(if_nametoindex(name));
+ if (modem->subs_source > 0)
+ return;
+
+ modem->subs_source = g_idle_add(modem_subs_update, modem);
}
static void service_name_register(GIsiServiceMux *mux)
@@ -358,45 +349,85 @@ static void service_name_deregister(GIsiServiceMux *mux)
(void *)&namesrv, sizeof(namesrv));
}
-static gboolean modem_subs_update(gpointer data)
+static void pending_destroy(gpointer value, gpointer user)
{
- GHashTableIter iter;
- gpointer keyptr, value;
+ GIsiPending *op = value;
- GIsiModem *modem = data;
- uint8_t msg[3 + 256] = {
- 0, PNS_SUBSCRIBED_RESOURCES_IND,
- 0,
- };
- uint8_t count = 0;
+ if (!op)
+ return;
- modem->subs_source = 0;
+ if (op->timeout > 0)
+ g_source_remove(op->timeout);
- g_hash_table_iter_init(&iter, modem->services);
+ if (op->destroy)
+ op->destroy(op->data);
- while (g_hash_table_iter_next(&iter, &keyptr, &value)) {
- GIsiServiceMux *mux = value;
+ g_free(op);
+}
- if (mux->subscriptions > 0) {
- msg[3 + count] = mux->resource;
- count++;
- }
- }
- msg[2] = count;
+static void service_finalize(gpointer value)
+{
+ GIsiServiceMux *mux = value;
+ GIsiModem *modem = mux->modem;
- sendto(modem->ind_fd, msg, 3 + msg[2], MSG_NOSIGNAL, (void *)&commgr,
- sizeof(commgr));
+ if (mux->subscriptions > 0)
+ modem_subs_update_when_idle(modem);
- return FALSE;
-}
+ if (mux->registrations > 0)
+ service_name_deregister(mux);
+ g_slist_foreach(mux->pending, pending_destroy, NULL);
+ g_slist_free(mux->pending);
+ g_free(mux);
+}
-static void modem_subs_update_when_idle(GIsiModem *modem)
+GIsiModem *g_isi_modem_create(unsigned index)
{
- if (modem->subs_source > 0)
- return;
+ GIsiModem *modem;
+ GIOChannel *inds;
+ GIOChannel *reqs;
- modem->subs_source = g_idle_add(modem_subs_update, modem);
+ if (index == 0) {
+ errno = ENODEV;
+ return NULL;
+ }
+
+ modem = g_try_new0(GIsiModem, 1);
+ if (!modem) {
+ errno = ENOMEM;
+ return NULL;
+ }
+
+ inds = g_isi_phonet_new(index);
+ reqs = g_isi_phonet_new(index);
+
+ if (!inds || !reqs) {
+ g_free(modem);
+ return NULL;
+ }
+
+ modem->req_fd = g_io_channel_unix_get_fd(reqs);
+ modem->req_watch = g_io_add_watch(reqs,
+ G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
+ isi_callback, modem);
+ modem->ind_fd = g_io_channel_unix_get_fd(inds);
+ modem->ind_watch = g_io_add_watch(inds,
+ G_IO_IN|G_IO_ERR|G_IO_HUP|G_IO_NVAL,
+ isi_callback, modem);
+
+ g_io_channel_unref(reqs);
+ g_io_channel_unref(inds);
+
+ modem->index = index;
+ modem->services = g_hash_table_new_full(g_direct_hash, NULL,
+ NULL, service_finalize);
+
+ return modem;
+}
+
+GIsiModem *g_isi_modem_create_by_name(const char *name)
+{
+ return g_isi_modem_create(if_nametoindex(name));
}
static uint8_t service_next_utid(GIsiServiceMux *mux)
@@ -449,38 +480,6 @@ static void service_regs_decr(GIsiServiceMux *mux)
service_name_deregister(mux);
}
-static void pending_destroy(gpointer value, gpointer user)
-{
- GIsiPending *op = value;
-
- if (!op)
- return;
-
- if (op->timeout > 0)
- g_source_remove(op->timeout);
-
- if (op->destroy)
- op->destroy(op->data);
-
- g_free(op);
-}
-
-static void service_finalize(gpointer value)
-{
- GIsiServiceMux *mux = value;
- GIsiModem *modem = mux->modem;
-
- if (mux->subscriptions > 0)
- modem_subs_update_when_idle(modem);
-
- if (mux->registrations > 0)
- service_name_deregister(mux);
-
- g_slist_foreach(mux->pending, pending_destroy, NULL);
- g_slist_free(mux->pending);
- g_free(mux);
-}
-
void g_isi_modem_destroy(GIsiModem *modem)
{
if (!modem)