From b6e37fb792edb763f77bfd13e7ec5fafb8eea7b0 Mon Sep 17 00:00:00 2001 From: Aki Niemi Date: Tue, 15 Sep 2009 15:36:11 +0300 Subject: [PATCH] Remove version query; use gisi/client.h instead --- drivers/isimodem/network-registration.c | 120 +++++++++----------------------- 1 file changed, 32 insertions(+), 88 deletions(-) diff --git a/drivers/isimodem/network-registration.c b/drivers/isimodem/network-registration.c index d6c5b32..aa7b610 100644 --- a/drivers/isimodem/network-registration.c +++ b/drivers/isimodem/network-registration.c @@ -47,13 +47,6 @@ #define NETWORK_SCAN_TIMEOUT 60 #define NETWORK_SET_TIMEOUT 100 -/* Used with COMMON_MESSAGE */ -enum sub_message_id { - COMM_ISI_VERSION_GET_REQ = 0x12, - COMM_ISI_VERSION_GET_RESP = 0x13, - COMM_ISA_ENTITY_NOT_REACHABLE_RESP = 0x14 -}; - enum message_id { NET_SET_REQ = 0x07, NET_SET_RESP = 0x08, @@ -70,7 +63,6 @@ enum message_id { NET_AVAILABLE_GET_RESP = 0xE4, NET_OPER_NAME_READ_REQ = 0xE5, NET_OPER_NAME_READ_RESP = 0xE6, - COMMON_MESSAGE = 0xF0 }; enum sub_block_id { @@ -213,12 +205,8 @@ static gboolean decode_reg_status(struct netreg_data *nd, const guint8 *msg, switch (g_isi_sb_iter_get_id(&iter)) { case NET_REG_INFO_COMMON: { - guint8 byte = 0; - if (g_isi_sb_iter_get_len(&iter) < 12) - return FALSE; - if (!g_isi_sb_iter_get_byte(&iter, &byte, 2)) return FALSE; @@ -228,21 +216,17 @@ static gboolean decode_reg_status(struct netreg_data *nd, const guint8 *msg, *status = byte; - /* FIXME: decode alpha tag */ + /* FIXME: decode alpha tag(s) */ break; } case NET_GSM_REG_INFO: { - guint16 word = 0; guint32 dword = 0; guint8 egprs = 0; guint8 hsdpa = 0; guint8 hsupa = 0; - if (g_isi_sb_iter_get_len(&iter) != 24) - return FALSE; - if (!g_isi_sb_iter_get_word(&iter, &word, 2) || !g_isi_sb_iter_get_dword(&iter, &dword, 4) || !g_isi_sb_iter_get_byte(&iter, &egprs, 17) || @@ -419,21 +403,14 @@ static bool name_get_resp_cb(GIsiClient *client, const void *restrict data, switch (g_isi_sb_iter_get_id(&iter)) { case NET_GSM_OPERATOR_INFO: - - if (g_isi_sb_iter_get_len(&iter) < 8) + if (!g_isi_sb_iter_get_oper_code(&iter, op.mcc, op.mnc, 2)) goto error; - - g_isi_sb_iter_get_oper_code(&iter, op.mcc, op.mnc, 2); break; case NET_OPER_NAME_INFO: { - char *tag = NULL; guint8 taglen = 0; - if (g_isi_sb_iter_get_len(&iter) < 4) - goto error; - if (!g_isi_sb_iter_get_byte(&iter, &taglen, 3)) goto error; @@ -538,21 +515,14 @@ static bool available_resp_cb(GIsiClient *client, const void *restrict data, switch (g_isi_sb_iter_get_id(&iter)) { case NET_AVAIL_NETWORK_INFO_COMMON: { - struct ofono_network_operator *op; char *tag = NULL; guint8 taglen = 0; guint8 status = 0; - if (g_isi_sb_iter_get_len(&iter) < 12) - goto error; - - op = list + common++; if (!g_isi_sb_iter_get_byte(&iter, &status, 2)) goto error; - op->status = status; - if (!g_isi_sb_iter_get_byte(&iter, &taglen, 5)) goto error; @@ -560,6 +530,9 @@ static bool available_resp_cb(GIsiClient *client, const void *restrict data, taglen * 2, 6)) goto error; + op = list + common++; + op->status = status; + strncpy(op->name, tag, OFONO_MAX_OPERATOR_NAME_LENGTH); op->name[OFONO_MAX_OPERATOR_NAME_LENGTH] = '\0'; g_free(tag); @@ -567,12 +540,8 @@ static bool available_resp_cb(GIsiClient *client, const void *restrict data, } case NET_DETAILED_NETWORK_INFO: { - struct ofono_network_operator *op; - if (g_isi_sb_iter_get_len(&iter) < 8) - goto error; - op = list + detail++; if (!g_isi_sb_iter_get_oper_code(&iter, op->mcc, op->mnc, 2)) @@ -803,18 +772,18 @@ static void rat_ind_cb(GIsiClient *client, const void *restrict data, switch (g_isi_sb_iter_get_id(&iter)) { case NET_RAT_INFO: { - guint8 info = 0; - - if (g_isi_sb_iter_get_len(&iter) < 4) - goto error; - g_isi_sb_iter_get_byte(&iter, &nd->rat, 2); - g_isi_sb_iter_get_byte(&iter, &info, 3); + if (!g_isi_sb_iter_get_byte(&iter, &nd->rat, 2)) + return; + + if (!g_isi_sb_iter_get_byte(&iter, &info, 3)) + return; if (info) - g_isi_sb_iter_get_byte(&iter, - &nd->gsm_compact, 4); + if (!g_isi_sb_iter_get_byte(&iter, + &nd->gsm_compact, 4)) + return; break; } @@ -826,10 +795,6 @@ static void rat_ind_cb(GIsiClient *client, const void *restrict data, } g_isi_sb_iter_next(&iter); } - -error: - DBG("Truncated message"); - return; } static bool rat_resp_cb(GIsiClient *client, const void *restrict data, @@ -862,18 +827,18 @@ static bool rat_resp_cb(GIsiClient *client, const void *restrict data, switch (g_isi_sb_iter_get_id(&iter)) { case NET_RAT_INFO: { - guint8 info = 0; + + if (!g_isi_sb_iter_get_byte(&iter, &nd->rat, 2)) + return true; - if (g_isi_sb_iter_get_len(&iter) < 4) + if (!g_isi_sb_iter_get_byte(&iter, &info, 3)) return true; - - g_isi_sb_iter_get_byte(&iter, &nd->rat, 2); - g_isi_sb_iter_get_byte(&iter, &info, 3); if (info) - g_isi_sb_iter_get_byte(&iter, - &nd->gsm_compact, 4); + if (!g_isi_sb_iter_get_byte(&iter, + &nd->gsm_compact, 4)) + return true; break; } @@ -931,11 +896,9 @@ static bool rssi_resp_cb(GIsiClient *client, const void *restrict data, switch (g_isi_sb_iter_get_id(&iter)) { case NET_RSSI_CURRENT: { - guint8 rssi = 0; - if (g_isi_sb_iter_get_len(&iter) < 4 || - !g_isi_sb_iter_get_byte(&iter, &rssi, 2)) + if (!g_isi_sb_iter_get_byte(&iter, &rssi, 2)) goto error; strength = rssi != 0 ? rssi : -1; @@ -1016,31 +979,19 @@ static gboolean isi_netreg_register(gpointer user) return FALSE; } -static bool version_resp_cb(GIsiClient *client, const void *restrict data, - size_t len, uint16_t object, void *opaque) +static void reachable_cb(GIsiClient *client, bool alive, void *opaque) { - const unsigned char *msg = data; struct ofono_netreg *netreg = opaque; - struct netreg_data *nd = ofono_netreg_get_data(netreg); - if(!msg) { - DBG("ISI client error: %d", g_isi_client_error(client)); - return true; + if (alive == true) { + DBG("Resource 0x%02X, with version %03d.%03d reachable", + g_isi_client_resource(client), + g_isi_version_major(client), + g_isi_version_minor(client)); + g_idle_add(isi_netreg_register, netreg); + return; } - - if (len < 7 || msg[0] != COMMON_MESSAGE || - msg[1] != COMM_ISI_VERSION_GET_RESP) - return true; - - nd->version.major = msg[2]; - nd->version.minor = msg[3]; - - g_idle_add(isi_netreg_register, netreg); - - DBG("Resource 0x%02X version: %03u.%03u", - g_isi_client_resource(nd->client), - nd->version.major, nd->version.minor); - return true; + DBG("Unable to bootsrap netreg driver"); } static int isi_netreg_probe(struct ofono_netreg *netreg, unsigned int vendor, @@ -1049,12 +1000,6 @@ static int isi_netreg_probe(struct ofono_netreg *netreg, unsigned int vendor, GIsiModem *idx = user; struct netreg_data *nd = g_try_new0(struct netreg_data, 1); - unsigned char msg[] = { - COMMON_MESSAGE, - COMM_ISI_VERSION_GET_REQ, - 0x00 /* Filler */ - }; - if (!nd) return -ENOMEM; @@ -1066,9 +1011,8 @@ static int isi_netreg_probe(struct ofono_netreg *netreg, unsigned int vendor, ofono_netreg_set_data(netreg, nd); - if (!g_isi_request_make(nd->client, msg, sizeof(msg), NETWORK_TIMEOUT, - version_resp_cb, netreg)) - DBG("Version query failed"); + if (!g_isi_verify(nd->client, reachable_cb, netreg)) + DBG("Unable to verify reachability"); return 0; } -- 2.7.4