Fix: Send *EIAAUW after CGDCONT for STE and MBM
authorDenis Kenzior <denkenz@gmail.com>
Fri, 5 Feb 2010 18:20:45 +0000 (12:20 -0600)
committerDenis Kenzior <denkenz@gmail.com>
Fri, 5 Feb 2010 18:20:45 +0000 (12:20 -0600)
Otherwise the EIAAUW might fail.

drivers/mbmmodem/gprs-context.c
drivers/stemodem/gprs-context.c

index 3e7a75b..dfc905a 100644 (file)
@@ -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);
index eb378ed..0e973be 100644 (file)
@@ -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)