From bfeef21a9dffd14d2f01f878daa0969b02e0b9e4 Mon Sep 17 00:00:00 2001 From: Denis Kenzior Date: Fri, 5 Feb 2010 12:20:45 -0600 Subject: [PATCH] Fix: Send *EIAAUW after CGDCONT for STE and MBM Otherwise the EIAAUW might fail. --- drivers/mbmmodem/gprs-context.c | 24 +++++++++++++++--------- drivers/stemodem/gprs-context.c | 23 ++++++++++++++--------- 2 files changed, 29 insertions(+), 18 deletions(-) diff --git a/drivers/mbmmodem/gprs-context.c b/drivers/mbmmodem/gprs-context.c index 3e7a75bf..dfc905ac 100644 --- a/drivers/mbmmodem/gprs-context.c +++ b/drivers/mbmmodem/gprs-context.c @@ -350,13 +350,6 @@ static void mbm_gprs_activate_primary(struct ofono_gprs_context *gc, cbd->user = gc; - snprintf(buf, sizeof(buf), "AT*EIAAUW=%d,1,\"%s\",\"%s\"", - ctx->cid, ctx->username, ctx->password); - - if (g_at_chat_send(gcd->chat, buf, none_prefix, - NULL, NULL, NULL) == 0) - goto error; - len = snprintf(buf, sizeof(buf), "AT+CGDCONT=%u,\"IP\"", ctx->cid); if (ctx->apn) @@ -364,8 +357,21 @@ static void mbm_gprs_activate_primary(struct ofono_gprs_context *gc, ctx->apn); if (g_at_chat_send(gcd->chat, buf, none_prefix, - mbm_cgdcont_cb, cbd, g_free) > 0) - return; + mbm_cgdcont_cb, cbd, g_free) == 0) + goto error; + + /* + * Set username and password, this should be done after CGDCONT + * or an error can occur. We don't bother with error checking + * here + * */ + snprintf(buf, sizeof(buf), "AT*EIAAUW=%d,1,\"%s\",\"%s\"", + ctx->cid, ctx->username, ctx->password); + + g_at_chat_send(gcd->chat, buf, none_prefix, NULL, NULL, NULL); + + return; + error: if (cbd) g_free(cbd); diff --git a/drivers/stemodem/gprs-context.c b/drivers/stemodem/gprs-context.c index eb378ed3..0e973bee 100644 --- a/drivers/stemodem/gprs-context.c +++ b/drivers/stemodem/gprs-context.c @@ -426,13 +426,6 @@ static void ste_gprs_activate_primary(struct ofono_gprs_context *gc, gcd->active_context = ctx->cid; cbd->user = gc; - /* Set username and password */ - snprintf(buf, sizeof(buf), "AT*EIAAUW=%d,1,\"%s\",\"%s\"", - ctx->cid, ctx->username, ctx->password); - - if (g_at_chat_send(gcd->chat, buf, none_prefix, NULL, NULL, NULL) == 0) - goto error; - len = snprintf(buf, sizeof(buf), "AT+CGDCONT=%u,\"IP\"", ctx->cid); if (ctx->apn) @@ -440,8 +433,20 @@ static void ste_gprs_activate_primary(struct ofono_gprs_context *gc, ctx->apn); if (g_at_chat_send(gcd->chat, buf, none_prefix, - ste_cgdcont_cb, cbd, g_free) > 0) - return; + ste_cgdcont_cb, cbd, g_free) == 0) + goto error; + + /* + * Set username and password, this should be done after CGDCONT + * or an error can occur. We don't bother with error checking + * here + * */ + snprintf(buf, sizeof(buf), "AT*EIAAUW=%d,1,\"%s\",\"%s\"", + ctx->cid, ctx->username, ctx->password); + + g_at_chat_send(gcd->chat, buf, none_prefix, NULL, NULL, NULL); + + return; error: if (cbd)