Diff between a17573b01f4dff47ba766238a9f88b23be0c1aca and 6a40f1133fbfed26317f3d422c996d0225377a19

Changed Files

File Additions Deletions Status
obexd/client/main.c +22 -9 modified
obexd/client/session.c +10 -1 modified
obexd/client/session.h +2 -1 modified

Full Patch

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
@@ -97,7 +97,8 @@ done:
 }
 
 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;
@@ -117,6 +118,11 @@ static int parse_device_dict(DBusMessageIter *iter,
 				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);
@@ -132,11 +138,12 @@ static DBusMessage *send_files(DBusConnection *connection,
 	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);
@@ -180,7 +187,8 @@ static DBusMessage *send_files(DBusConnection *connection,
 	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);
@@ -238,11 +246,12 @@ static DBusMessage *pull_business_card(DBusConnection *connection,
 	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);
@@ -256,7 +265,7 @@ static DBusMessage *pull_business_card(DBusConnection *connection,
 	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;
 
@@ -280,11 +289,12 @@ static DBusMessage *create_session(DBusConnection *connection,
 	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);
@@ -298,7 +308,8 @@ static DBusMessage *create_session(DBusConnection *connection,
 	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);
@@ -368,11 +379,12 @@ static DBusMessage *get_capabilities(DBusConnection *connection,
 	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);
@@ -389,7 +401,8 @@ static DBusMessage *get_capabilities(DBusConnection *connection,
 	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
@@ -286,6 +286,8 @@ static void search_callback(uint8_t type, uint16_t status,
 	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);
@@ -380,7 +382,8 @@ static sdp_session_t *service_connect(const bdaddr_t *src, const bdaddr_t *dst,
 
 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;
@@ -395,6 +398,7 @@ int session_create(const char *source,
 
 	session->refcount = 1;
 	session->sock = -1;
+	session->channel = channel;
 
 	session->conn = dbus_bus_get(DBUS_BUS_SESSION, NULL);
 	if (session->conn == NULL) {
@@ -618,6 +622,9 @@ static void append_entry(DBusMessageIter *dict,
 	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;
@@ -855,6 +862,8 @@ static DBusMessage *session_get_properties(DBusConnection *connection,
 	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
@@ -65,7 +65,8 @@ typedef void (*session_callback_t) (struct session_data *session,
 
 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,