Diff between 7f1fec29d50dce3d26928b7b0c4514b59ca15601 and 19e380ec7442f149b5481a65bc87f39fff451c94

Changed Files

File Additions Deletions Status
obexd/plugins/ftp.c +2 -0 modified
obexd/plugins/pbap.c +1 -0 modified
obexd/src/obex.c +4 -3 modified
obexd/src/service.c +4 -2 modified
obexd/src/service.h +2 -1 modified

Full Patch

diff --git a/obexd/plugins/ftp.c b/obexd/plugins/ftp.c
index ce5ee23..7b768d1 100644
--- a/obexd/plugins/ftp.c
+++ b/obexd/plugins/ftp.c
@@ -470,6 +470,7 @@ struct obex_service_driver pcsuite = {
 	.channel = PCSUITE_CHANNEL,
 	.record = PCSUITE_RECORD,
 	.target = FTP_TARGET,
+	.target_size = TARGET_SIZE,
 	.connect = ftp_connect,
 	.get = ftp_get,
 	.put = ftp_put,
@@ -484,6 +485,7 @@ struct obex_service_driver ftp = {
 	.channel = FTP_CHANNEL,
 	.record = FTP_RECORD,
 	.target = FTP_TARGET,
+	.target_size = TARGET_SIZE,
 	.connect = ftp_connect,
 	.get = ftp_get,
 	.put = ftp_put,
diff --git a/obexd/plugins/pbap.c b/obexd/plugins/pbap.c
index 340fb06..be8a287 100644
--- a/obexd/plugins/pbap.c
+++ b/obexd/plugins/pbap.c
@@ -564,6 +564,7 @@ struct obex_service_driver pbap = {
 	.channel = PBAP_CHANNEL,
 	.record = PBAP_RECORD,
 	.target = PBAP_TARGET,
+	.target_size = TARGET_SIZE,
 	.connect = pbap_connect,
 	.get = pbap_get,
 	.setpath = pbap_setpath,
diff --git a/obexd/src/obex.c b/obexd/src/obex.c
index 8d85aa3..57a2ba1 100644
--- a/obexd/src/obex.c
+++ b/obexd/src/obex.c
@@ -200,10 +200,11 @@ static void cmd_connect(struct obex_session *os,
 	os->cid = ++cid;
 
 	while (OBEX_ObjectGetNextHeader(obex, obj, &hi, &hd, &hlen)) {
-		if (hi != OBEX_HDR_TARGET || hlen != TARGET_SIZE)
+		if (hi != OBEX_HDR_TARGET)
 			continue;
 
-		os->service = obex_service_driver_find(os->server->drivers, hd.bs);
+		os->service = obex_service_driver_find(os->server->drivers,
+								hd.bs, hlen);
 		break;
 	}
 
@@ -890,7 +891,7 @@ gint obex_session_start(GIOChannel *io, struct server *server)
 
 	os = g_new0(struct obex_session, 1);
 
-	os->service = obex_service_driver_find(server->drivers, NULL);
+	os->service = obex_service_driver_find(server->drivers, NULL, 0);
 
 	os->current_folder = g_strdup(server->folder);
 	os->server = server;
diff --git a/obexd/src/service.c b/obexd/src/service.c
index 2a5494d..3020acc 100644
--- a/obexd/src/service.c
+++ b/obexd/src/service.c
@@ -38,7 +38,8 @@
 
 static GSList *drivers = NULL;
 
-struct obex_service_driver *obex_service_driver_find(GSList *list, const guint8 *target)
+struct obex_service_driver *obex_service_driver_find(GSList *list,
+					const guint8 *target, guint target_size)
 {
 	GSList *l;
 
@@ -49,7 +50,8 @@ struct obex_service_driver *obex_service_driver_find(GSList *list, const guint8 
 			return driver;
 
 		if (driver->target && target &&
-				memcmp(driver->target, target, TARGET_SIZE) == 0)
+				driver->target_size == target_size &&
+				memcmp(driver->target, target, target_size) == 0)
 			return driver;
 	}
 
diff --git a/obexd/src/service.h b/obexd/src/service.h
index 966256c..df12e91 100644
--- a/obexd/src/service.h
+++ b/obexd/src/service.h
@@ -26,6 +26,7 @@ struct obex_service_driver {
 	guint16 service;
 	guint8 channel;
 	const guint8 *target;
+	guint target_size;
 	const gchar *record;
 	void (*connect) (obex_t *obex, obex_object_t *obj);
 	void (*progress) (obex_t *obex, obex_object_t *obj);
@@ -41,4 +42,4 @@ int obex_service_driver_register(struct obex_service_driver *driver);
 void obex_service_driver_unregister(struct obex_service_driver *driver);
 GSList *obex_service_driver_list(guint16 services);
 struct obex_service_driver *obex_service_driver_find(GSList *drivers,
-						const guint8 *uuid);
+					const guint8 *target, guint target_size);