diff --git a/obexd/client/map-event.c b/obexd/client/map-event.c
index bbe3519..d424924 100644
--- a/obexd/client/map-event.c
+++ b/obexd/client/map-event.c
#include <glib.h>
#include <string.h>
#include <stdbool.h>
+#include <inttypes.h>
#include "log.h"
#include "map-event.h"
diff --git a/obexd/client/map-event.h b/obexd/client/map-event.h
index d77b477..ba5d5d2 100644
--- a/obexd/client/map-event.h
+++ b/obexd/client/map-event.h
struct map_event {
enum map_event_type type;
- char *handle;
+ uint64_t handle;
char *folder;
char *old_folder;
char *msg_type;
diff --git a/obexd/client/map.c b/obexd/client/map.c
index 68bd998..72c4de4 100644
--- a/obexd/client/map.c
+++ b/obexd/client/map.c
#include <string.h>
#include <stdio.h>
#include <stdbool.h>
+#include <inttypes.h>
#include <glib.h>
#include <gdbus/gdbus.h>
#include <gobex/gobex-apparam.h>
struct map_msg {
struct map_data *data;
char *path;
- char *handle;
+ uint64_t handle;
char *subject;
char *timestamp;
char *sender;
g_free(msg->path);
g_free(msg->subject);
- g_free(msg->handle);
g_free(msg->folder);
g_free(msg->timestamp);
g_free(msg->sender);
GError *err = NULL;
DBusMessage *reply;
GObexApparam *apparam;
+ char handle[21];
if (dbus_message_get_args(message, NULL,
DBUS_TYPE_STRING, &target_file,
return g_dbus_create_error(message,
ERROR_INTERFACE ".InvalidArguments", NULL);
- transfer = obc_transfer_get("x-bt/message", msg->handle, target_file,
- &err);
+ if (snprintf(handle, sizeof(handle), "%u" PRIu64, msg->handle) < 0)
+ goto fail;
+
+ transfer = obc_transfer_get("x-bt/message", handle, target_file, &err);
if (transfer == NULL)
goto fail;
GError *err = NULL;
GObexApparam *apparam;
char contents[2];
+ char handle[21];
if (dbus_message_iter_get_arg_type(iter) != DBUS_TYPE_BOOLEAN) {
g_dbus_pending_property_error(id,
contents[0] = FILLER_BYTE;
contents[1] = '\0';
- transfer = obc_transfer_put("x-bt/messageStatus", msg->handle, NULL,
+ if (snprintf(handle, sizeof(handle), "%" PRIu64, msg->handle) < 0)
+ goto fail;
+
+ transfer = obc_transfer_put("x-bt/messageStatus", handle, NULL,
contents, sizeof(contents), &err);
if (transfer == NULL)
goto fail;
MAP_MSG_INTERFACE, "Type");
}
-static struct map_msg *map_msg_create(struct map_data *data, const char *handle,
+static struct map_msg *map_msg_create(struct map_data *data, uint64_t handle,
const char *folder, const char *type)
{
struct map_msg *msg;
msg = g_new0(struct map_msg, 1);
msg->data = data;
- msg->path = g_strdup_printf("%s/message%s",
+ msg->handle = handle;
+ msg->path = g_strdup_printf("%s/message%" PRIu64,
obc_session_get_path(data->session),
- handle);
+ msg->handle);
msg->folder = g_strdup(folder);
if (!g_dbus_register_interface(conn, msg->path, MAP_MSG_INTERFACE,
return NULL;
}
- msg->handle = g_strdup(handle);
- g_hash_table_insert(data->messages, msg->handle, msg);
+ g_hash_table_insert(data->messages, &msg->handle, msg);
if (type)
parse_type(msg, type);
struct map_msg *msg;
const char *key;
int i;
+ uint64_t handle;
if (strcasecmp("msg", element) != 0)
return;
break;
}
- msg = g_hash_table_lookup(data->messages, values[i]);
+ handle = strtoull(values[i], NULL, 10);
+
+ msg = g_hash_table_lookup(data->messages, &handle);
if (msg == NULL) {
- msg = map_msg_create(data, values[i], parser->request->folder,
+ msg = map_msg_create(data, handle, parser->request->folder,
NULL);
if (msg == NULL)
return;
static void map_handle_new_message(struct map_data *map,
struct map_event *event)
{
- struct map_msg *msg = g_hash_table_lookup(map->messages, event->handle);
+ struct map_msg *msg;
+ msg = g_hash_table_lookup(map->messages, &event->handle);
/* New message event can be used if a new message replaces an old one */
if (msg)
- g_hash_table_remove(map->messages, event->handle);
+ g_hash_table_remove(map->messages, &event->handle);
map_msg_create(map, event->handle, event->folder, event->msg_type);
}
struct map_event *event,
const char *status)
{
- struct map_msg *msg = g_hash_table_lookup(map->messages, event->handle);
+ struct map_msg *msg;
+ msg = g_hash_table_lookup(map->messages, &event->handle);
if (msg == NULL)
return;
if (!folder)
return;
- msg = g_hash_table_lookup(map->messages, event->handle);
+ msg = g_hash_table_lookup(map->messages, &event->handle);
if (!msg)
return;
DBG("Event report for %s:%d", obc_session_get_destination(map->session),
map->mas_instance_id);
- DBG("type=%x, handle=%s, folder=%s, old_folder=%s, msg_type=%s",
- event->type, event->handle, event->folder,
- event->old_folder, event->msg_type);
+ DBG("type=%x handle=%" PRIu64 " folder=%s old_folder=%s msg_type=%s",
+ event->type, event->handle, event->folder, event->old_folder,
+ event->msg_type);
switch (event->type) {
case MAP_ET_NEW_MESSAGE:
return -ENOMEM;
map->session = obc_session_ref(session);
- map->messages = g_hash_table_new_full(g_str_hash, g_str_equal, NULL,
+ map->messages = g_hash_table_new_full(g_int64_hash, g_int64_equal, NULL,
map_msg_remove);
parse_service_record(map);
diff --git a/obexd/client/mns.c b/obexd/client/mns.c
index ca44e5f..ee64ed6 100644
--- a/obexd/client/mns.c
+++ b/obexd/client/mns.c
static void parse_event_report_handle(struct map_event *event,
const char *value)
{
- event->handle = g_strdup(value);
+ event->handle = strtoull(value, NULL, 10);
}
static void parse_event_report_folder(struct map_event *event,
static void map_event_free(struct map_event *event)
{
- g_free(event->handle);
g_free(event->folder);
g_free(event->old_folder);
g_free(event->msg_type);