summaryrefslogtreecommitdiffstats
path: root/drivers/huaweimodem
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2010-10-05 16:28:52 +0200
committerMarcel Holtmann <marcel@holtmann.org>2010-10-05 16:28:52 +0200
commitb41f354a2fdddb673562be174f134238ebd84f68 (patch)
treeaa78dc5173850f33a1af071469fdc1b02740dd53 /drivers/huaweimodem
parent45a2077e67b902b0ffc9081f5000afea8ea3b81d (diff)
downloadofono-b41f354a2fdddb673562be174f134238ebd84f68.tar.bz2
huaweimodem: Add error handling for too many ^DHCP failures
Diffstat (limited to 'drivers/huaweimodem')
-rw-r--r--drivers/huaweimodem/gprs-context.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/drivers/huaweimodem/gprs-context.c b/drivers/huaweimodem/gprs-context.c
index c36060b1..265963ee 100644
--- a/drivers/huaweimodem/gprs-context.c
+++ b/drivers/huaweimodem/gprs-context.c
@@ -50,6 +50,7 @@ struct gprs_context_data {
GAtChat *chat;
unsigned int active_context;
unsigned int dhcp_source;
+ unsigned int dhcp_count;
union {
ofono_gprs_context_cb_t down_cb; /* Down callback */
ofono_gprs_context_up_cb_t up_cb; /* Up callback */
@@ -64,8 +65,13 @@ static gboolean dhcp_poll(gpointer user_data)
struct ofono_gprs_context *gc = user_data;
struct gprs_context_data *gcd = ofono_gprs_context_get_data(gc);
- check_dhcp(gc);
+ if (gcd->dhcp_count > 10)
+ CALLBACK_WITH_FAILURE(gcd->up_cb, NULL, 0, NULL, NULL,
+ NULL, NULL, gcd->cb_data);
+ else
+ check_dhcp(gc);
+ gcd->dhcp_count++;
gcd->dhcp_source = 0;
return FALSE;
@@ -189,6 +195,8 @@ static void at_ndisdup_up_cb(gboolean ok, GAtResult *result,
gcd->up_cb = cb;
gcd->cb_data = cbd->data;
+ gcd->dhcp_count = 0;
+
check_dhcp(gc);
return;
}