summaryrefslogtreecommitdiffstats
path: root/src/message-waiting.c
diff options
context:
space:
mode:
authorAndrzej Zaborowski <andrew.zaborowski@intel.com>2009-08-05 09:08:40 +0200
committerDenis Kenzior <denkenz@gmail.com>2009-08-05 13:32:49 -0500
commit9a55de9cd01af55f8abf9c94bca4ff96aad33355 (patch)
tree2dd8430dd7700e2a673d68b8fc4cb794cb65bd7a /src/message-waiting.c
parente8552dde07dba231610f71bdb6c43fe55aa763f2 (diff)
downloadofono-9a55de9cd01af55f8abf9c94bca4ff96aad33355.tar.bz2
Implement committing the EF-MBDN records to SIM
Diffstat (limited to 'src/message-waiting.c')
-rw-r--r--src/message-waiting.c30
1 files changed, 24 insertions, 6 deletions
diff --git a/src/message-waiting.c b/src/message-waiting.c
index e33d374d..ec1da395 100644
--- a/src/message-waiting.c
+++ b/src/message-waiting.c
@@ -162,7 +162,7 @@ static DBusMessage *mw_get_properties(DBusConnection *conn,
return reply;
}
-static void mbdn_set_cb(gboolean ok, void *data)
+static void mbdn_set_cb(struct ofono_modem *modem, int ok, void *data)
{
struct mbdn_set_request *req = data;
struct ofono_phone_number *old = &req->mw->mailbox_number[req->mailbox];
@@ -206,11 +206,19 @@ out:
g_free(req);
}
-static void set_mbdn(struct ofono_modem *modem, int mailbox,
+static DBusMessage *set_mbdn(struct ofono_modem *modem, int mailbox,
const char *number, DBusMessage *msg)
{
DBusConnection *conn = ofono_dbus_get_connection();
struct mbdn_set_request *req;
+ unsigned char efmbdn[255];
+
+ if (modem->message_waiting->efmbdn_record_id[mailbox] == 0) {
+ if (msg)
+ return __ofono_error_failed(msg);
+
+ return NULL;
+ }
req = g_new0(struct mbdn_set_request, 1);
@@ -220,8 +228,19 @@ static void set_mbdn(struct ofono_modem *modem, int mailbox,
string_to_phone_number(number, &req->number);
req->msg = dbus_message_ref(msg);
- /* TODO: Fill the actual sim_write data */
- mbdn_set_cb(TRUE, req);
+ sim_adn_build(efmbdn, req->mw->efmbdn_length, &req->number);
+
+ if (ofono_sim_write(modem, SIM_EFMBDN_FILEID, mbdn_set_cb,
+ OFONO_SIM_FILE_STRUCTURE_FIXED,
+ req->mw->efmbdn_record_id[mailbox],
+ efmbdn, req->mw->efmbdn_length, req) == -1) {
+ g_free(req);
+
+ if (msg)
+ return __ofono_error_failed(msg);
+ }
+
+ return NULL;
}
static DBusMessage *mw_set_property(DBusConnection *conn, DBusMessage *msg,
@@ -273,8 +292,7 @@ static DBusMessage *mw_set_property(DBusConnection *conn, DBusMessage *msg,
if (g_str_equal(cur_number, value))
return dbus_message_new_method_return(msg);
- set_mbdn(modem, i, value, msg);
- return NULL;
+ return set_mbdn(modem, i, value, msg);
}
return __ofono_error_invalid_args(msg);