[PATCH] Implement CallBarring::ChangePassword in AT backend.

Andrzej Zaborowski andrew.zaborowski at intel.com
Wed Jun 17 21:04:46 PDT 2009


Depends on "[PATCH] Add CallBarring::ChangePassword for setting a new service password."
---
 drivers/atmodem/call-barring.c |   45 ++++++++++++++++++++++++++++++++++++++-
 1 files changed, 43 insertions(+), 2 deletions(-)

diff --git a/drivers/atmodem/call-barring.c b/drivers/atmodem/call-barring.c
index 5d2af58..f0ba18e 100644
--- a/drivers/atmodem/call-barring.c
+++ b/drivers/atmodem/call-barring.c
@@ -152,9 +152,50 @@ error:
 	}
 }
 
+static void cpwd_set_cb(gboolean ok, GAtResult *result, gpointer user_data)
+{
+	struct cb_data *cbd = user_data;
+	ofono_generic_cb_t cb = cbd->cb;
+	struct ofono_error error;
+
+	dump_response("cpwd_set_cb", ok, result);
+	decode_at_error(&error, g_at_result_final_response(result));
+	cb(&error, cbd->data);
+}
+
+static void at_call_barring_set_passwd(struct ofono_modem *modem,
+				const char *lock,
+				const char *old_passwd, const char *new_passwd,
+				ofono_generic_cb_t cb, void *data)
+{
+	struct at_data *at = ofono_modem_userdata(modem);
+	struct cb_data *cbd = cb_data_new(modem, cb, data);
+	char buf[64];
+
+	if (!cbd || strlen(lock) != 2)
+		goto error;
+
+	snprintf(buf, sizeof(buf), "AT+CPWD=\"%s\",\"%s\",\"%s\"",
+			lock, old_passwd, new_passwd);
+
+	if (g_at_chat_send(at->parser, buf, none_prefix,
+				cpwd_set_cb, cbd, g_free) > 0)
+		return;
+
+error:
+	if (cbd)
+		g_free(cbd);
+
+	{
+		DECLARE_FAILURE(error);
+		cb(&error, data);
+	}
+}
+
 static struct ofono_call_barring_ops ops = {
-	.set	= at_call_barring_set,
-	.query	= at_call_barring_query,
+	.set		= at_call_barring_set,
+	.query		= at_call_barring_query,
+	.set_passwd	= at_call_barring_set_passwd,
 };
 
 void at_call_barring_init(struct ofono_modem *modem)
-- 
1.6.0



More information about the ofono mailing list