diff options
author | Mika Liljeberg <mika.liljeberg@nokia.com> | 2010-11-29 11:36:11 +0200 |
---|---|---|
committer | Aki Niemi <aki.niemi@nokia.com> | 2010-12-22 17:13:47 +0200 |
commit | 3652340b1bcf802b0d45c1499494dfd8fc2e7b34 (patch) | |
tree | 32959d0a605768f66137d1cbb8405c9d9254dad1 /gisi | |
parent | 38f49a769a222b1a5227ff7bec69248bc512a3ca (diff) | |
download | ofono-3652340b1bcf802b0d45c1499494dfd8fc2e7b34.tar.bz2 |
gisi: modify reachability check
Always cache server object ID and ISI version.
Diffstat (limited to 'gisi')
-rw-r--r-- | gisi/modem.c | 24 |
1 files changed, 11 insertions, 13 deletions
diff --git a/gisi/modem.c b/gisi/modem.c index 7476bef7..84486f43 100644 --- a/gisi/modem.c +++ b/gisi/modem.c @@ -45,6 +45,7 @@ struct _GIsiServiceMux { GIsiVersion version; uint8_t resource; uint8_t last_utid; + uint16_t object; unsigned subscriptions; unsigned registrations; gboolean reachable; @@ -194,6 +195,11 @@ static void common_message_decode(GIsiServiceMux *mux, GIsiMessage *msg) return; switch (code) { + case COMM_ISA_ENTITY_NOT_REACHABLE_RESP: + mux->reachable = FALSE; + msg->error = ENOENT; + break; + case COMM_ISI_VERSION_GET_RESP: if (g_isi_msg_data_get_byte(msg, 1, &major) && @@ -201,13 +207,7 @@ static void common_message_decode(GIsiServiceMux *mux, GIsiMessage *msg) mux->version.major = major; mux->version.minor = minor; } - mux->version_pending = FALSE; - break; - - case COMM_ISA_ENTITY_NOT_REACHABLE_RESP: - mux->reachable = FALSE; - msg->error = ENOENT; - break; + /* fall through */ case 0x00: /* @@ -215,7 +215,9 @@ static void common_message_decode(GIsiServiceMux *mux, GIsiMessage *msg) * 0x00 message as a response. Work around this modem * wart. */ + mux->object = g_isi_msg_object(msg); mux->version_pending = FALSE; + mux->reachable = TRUE; break; } msg->version = &mux->version; @@ -262,12 +264,6 @@ static gboolean isi_callback(GIOChannel *channel, GIOCondition cond, if (!mux) return TRUE; - /* - * For now, assume any message received means that the - * resource is reachable - */ - mux->reachable = TRUE; - if (g_isi_msg_id(&msg) == COMMON_MESSAGE) common_message_decode(mux, &msg); @@ -953,6 +949,8 @@ static gboolean reachable_notify(gpointer data) struct sockaddr_pn addr = { .spn_resource = mux->resource, + .spn_dev = mux->object >> 8, + .spn_obj = mux->object & 0xff, }; GIsiMessage msg = { .version = &mux->version, |