summaryrefslogtreecommitdiffstats
path: root/gisi
diff options
context:
space:
mode:
authorMika Liljeberg <mika.liljeberg@nokia.com>2010-11-29 11:36:11 +0200
committerAki Niemi <aki.niemi@nokia.com>2010-12-22 17:13:47 +0200
commit3652340b1bcf802b0d45c1499494dfd8fc2e7b34 (patch)
tree32959d0a605768f66137d1cbb8405c9d9254dad1 /gisi
parent38f49a769a222b1a5227ff7bec69248bc512a3ca (diff)
downloadofono-3652340b1bcf802b0d45c1499494dfd8fc2e7b34.tar.bz2
gisi: modify reachability check
Always cache server object ID and ISI version.
Diffstat (limited to 'gisi')
-rw-r--r--gisi/modem.c24
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,