diff --git a/obexd/client/main.c b/obexd/client/main.c
index 985690d..e903a75 100644
--- a/obexd/client/main.c
+++ b/obexd/client/main.c
}
static int parse_device_dict(DBusMessageIter *iter,
- const char **source, const char **dest, const char **target)
+ const char **source, const char **dest, const char **target,
+ uint8_t *channel)
{
while (dbus_message_iter_get_arg_type(iter) == DBUS_TYPE_DICT_ENTRY) {
DBusMessageIter entry, value;
dbus_message_iter_get_basic(&value, dest);
else if (g_str_equal(key, "Target") == TRUE)
dbus_message_iter_get_basic(&value, target);
+ break;
+ case DBUS_TYPE_BYTE:
+ if (g_str_equal(key, "Channel") == TRUE)
+ dbus_message_iter_get_basic(&value, channel);
+ break;
}
dbus_message_iter_next(iter);
GPtrArray *files;
struct send_data *data;
const char *agent, *source = NULL, *dest = NULL, *target = NULL;
+ uint8_t channel = 0;
dbus_message_iter_init(message, &iter);
dbus_message_iter_recurse(&iter, &array);
- parse_device_dict(&array, &source, &dest, &target);
+ parse_device_dict(&array, &source, &dest, &target, &channel);
if (dest == NULL)
return g_dbus_create_error(message,
"org.openobex.Error.InvalidArguments", NULL);
data->agent = g_strdup(agent);
data->files = files;
- if (session_create(NULL, dest, "OPP", create_callback, data) == 0)
+ if (session_create(NULL, dest, "OPP", channel, create_callback,
+ data) == 0)
return NULL;
g_ptr_array_free(data->files, TRUE);
DBusMessageIter iter, dict;
struct send_data *data;
const char *source = NULL, *dest = NULL, *target = NULL;
+ uint8_t channel = 0;
dbus_message_iter_init(message, &iter);
dbus_message_iter_recurse(&iter, &dict);
- parse_device_dict(&dict, &source, &dest, &target);
+ parse_device_dict(&dict, &source, &dest, &target, &channel);
if (dest == NULL)
return g_dbus_create_error(message,
"org.openobex.Error.InvalidArguments", NULL);
data->message = dbus_message_ref(message);
data->sender = g_strdup(dbus_message_get_sender(message));
- if (session_create(source, dest, "OPP",
+ if (session_create(source, dest, "OPP", channel,
pull_session_callback, data) == 0)
return NULL;
DBusMessageIter iter, dict;
struct send_data *data;
const char *source = NULL, *dest = NULL, *target = NULL;
+ uint8_t channel = 0;
dbus_message_iter_init(message, &iter);
dbus_message_iter_recurse(&iter, &dict);
- parse_device_dict(&dict, &source, &dest, &target);
+ parse_device_dict(&dict, &source, &dest, &target, &channel);
if (dest == NULL || target == NULL)
return g_dbus_create_error(message,
"org.openobex.Error.InvalidArguments", NULL);
data->message = dbus_message_ref(message);
data->sender = g_strdup(dbus_message_get_sender(message));
- if (session_create(source, dest, target, create_callback, data) == 0)
+ if (session_create(source, dest, target, channel, create_callback,
+ data) == 0)
return NULL;
dbus_message_unref(data->message);
DBusMessageIter iter, dict;
struct send_data *data;
const char *source = NULL, *dest = NULL, *target = NULL;
+ uint8_t channel = 0;
dbus_message_iter_init(message, &iter);
dbus_message_iter_recurse(&iter, &dict);
- parse_device_dict(&dict, &source, &dest, &target);
+ parse_device_dict(&dict, &source, &dest, &target, &channel);
if (dest == NULL)
return g_dbus_create_error(message,
"org.openobex.Error.InvalidArguments", NULL);
if (!target)
target = "OPP";
- if (session_create(source, dest, target, capability_session_callback, data) == 0)
+ if (session_create(source, dest, target, channel, capability_session_callback,
+ data) == 0)
return NULL;
dbus_message_unref(data->message);
diff --git a/obexd/client/session.c b/obexd/client/session.c
index 1ee4229..b87585d 100644
--- a/obexd/client/session.c
+++ b/obexd/client/session.c
if (channel == 0)
goto failed;
+ callback->session->channel = channel;
+
if (rfcomm_connect(&callback->session->src, &callback->session->dst,
channel, rfcomm_callback, callback) == 0) {
sdp_close(callback->sdp);
int session_create(const char *source,
const char *destination, const char *target,
- session_callback_t function, void *user_data)
+ uint8_t channel, session_callback_t function,
+ void *user_data)
{
struct session_data *session;
struct callback_data *callback;
session->refcount = 1;
session->sock = -1;
+ session->channel = channel;
session->conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
if (session->conn == NULL) {
case DBUS_TYPE_STRING:
signature = DBUS_TYPE_STRING_AS_STRING;
break;
+ case DBUS_TYPE_BYTE:
+ signature = DBUS_TYPE_BYTE_AS_STRING;
+ break;
case DBUS_TYPE_UINT64:
signature = DBUS_TYPE_UINT64_AS_STRING;
break;
ba2str(&session->dst, addr);
append_entry(&dict, "Destination", DBUS_TYPE_STRING, &paddr);
+ append_entry(&dict, "Channel", DBUS_TYPE_BYTE, &session->channel);
+
if (session->agent_path)
append_entry(&dict, "AgentPath", DBUS_TYPE_STRING, &session->agent_path);
diff --git a/obexd/client/session.h b/obexd/client/session.h
index e391c73..b9e9d3f 100644
--- a/obexd/client/session.h
+++ b/obexd/client/session.h
int session_create(const char *source,
const char *destination, const char *target,
- session_callback_t function, void *user_data);
+ uint8_t channel, session_callback_t function,
+ void *user_data);
int session_set_agent(struct session_data *session, const char *name,
const char *path);
int session_send(struct session_data *session, const char *filename,