Diff between 7fb0439a637105a8fdf9ed7c900fa4234d5a67a2 and 556447e3b854ebf569bbb0d808806fe55e4f901a

Changed Files

File Additions Deletions Status
obexd/plugins/ftp.c +12 -7 modified
obexd/plugins/opp.c +12 -8 modified
obexd/plugins/pbap.c +13 -6 modified
obexd/plugins/syncevolution.c +8 -5 modified
obexd/src/obex-priv.h +1 -0 modified
obexd/src/obex.c +12 -9 modified
obexd/src/service.h +8 -8 modified

Full Patch

diff --git a/obexd/plugins/ftp.c b/obexd/plugins/ftp.c
index ccba5f2..1b4b272 100644
--- a/obexd/plugins/ftp.c
+++ b/obexd/plugins/ftp.c
@@ -186,14 +186,18 @@ static gint ftp_prepare_get(struct obex_session *os, gchar *file)
 	return obex_stream_start(os, file);
 }
 
-static int ftp_connect(struct obex_session *os)
+static gpointer ftp_connect(struct obex_session *os, int *err)
 {
 	manager_register_session(os);
 
-	return 0;
+	if (err)
+		*err = 0;
+
+	return NULL;
 }
 
-static int ftp_get(struct obex_session *os, obex_object_t *obj)
+static int ftp_get(struct obex_session *os, obex_object_t *obj,
+		gpointer user_data)
 {
 	const char *folder = obex_get_folder(os);
 	const char *type = obex_get_type(os);
@@ -247,7 +251,7 @@ static gint ftp_delete(struct obex_session *os)
 	return ret;
 }
 
-static gint ftp_chkput(struct obex_session *os)
+static gint ftp_chkput(struct obex_session *os, gpointer user_data)
 {
 
 	if (obex_get_size(os) == OBJECT_SIZE_DELETE)
@@ -256,7 +260,7 @@ static gint ftp_chkput(struct obex_session *os)
 	return obex_prepare_put(os);
 }
 
-static int ftp_put(struct obex_session *os)
+static int ftp_put(struct obex_session *os, gpointer user_data)
 {
 	const char *folder = obex_get_folder(os);
 	const char *name = obex_get_name(os);
@@ -274,7 +278,8 @@ static int ftp_put(struct obex_session *os)
 	return 0;
 }
 
-static int ftp_setpath(struct obex_session *os, obex_object_t *obj)
+static int ftp_setpath(struct obex_session *os, obex_object_t *obj,
+		gpointer user_data)
 {
 	const gchar *root_folder, *current_folder, *name;
 	guint8 *nonhdr;
@@ -372,7 +377,7 @@ done:
 	return err;
 }
 
-static void ftp_disconnect(struct obex_session *os)
+static void ftp_disconnect(struct obex_session *os, gpointer user_data)
 {
 	manager_unregister_session(os);
 }
diff --git a/obexd/plugins/opp.c b/obexd/plugins/opp.c
index 60ef1a2..9c1d959 100644
--- a/obexd/plugins/opp.c
+++ b/obexd/plugins/opp.c
@@ -93,19 +93,22 @@
   </attribute>									\
 </record>"
 
-static int opp_connect(struct obex_session *os)
+static gpointer opp_connect(struct obex_session *os, int *err)
 {
 	manager_register_transfer(os);
 
-	return 0;
+	if (err)
+		*err = 0;
+
+	return NULL;
 }
 
-static void opp_progress(struct obex_session *os)
+static void opp_progress(struct obex_session *os, gpointer user_data)
 {
 	manager_emit_transfer_progress(os);
 }
 
-static gint opp_chkput(struct obex_session *os)
+static gint opp_chkput(struct obex_session *os, gpointer user_data)
 {
 	gchar *new_folder, *new_name;
 	gint32 time;
@@ -137,7 +140,7 @@ skip_auth:
 	return obex_prepare_put(os);
 }
 
-static int opp_put(struct obex_session *os)
+static int opp_put(struct obex_session *os, gpointer user_data)
 {
 	const char *name = obex_get_name(os);
 	const char *folder = obex_get_folder(os);
@@ -151,7 +154,8 @@ static int opp_put(struct obex_session *os)
 	return 0;
 }
 
-static int opp_get(struct obex_session *os, obex_object_t *obj)
+static int opp_get(struct obex_session *os, obex_object_t *obj,
+		gpointer user_data)
 {
 	const char *type;
 
@@ -173,12 +177,12 @@ static int opp_get(struct obex_session *os, obex_object_t *obj)
 	return 0;
 }
 
-static void opp_disconnect(struct obex_session *os)
+static void opp_disconnect(struct obex_session *os, gpointer user_data)
 {
 	manager_unregister_transfer(os);
 }
 
-static void opp_reset(struct obex_session *os)
+static void opp_reset(struct obex_session *os, gpointer user_data)
 {
 	manager_emit_transfer_completed(os);
 }
diff --git a/obexd/plugins/pbap.c b/obexd/plugins/pbap.c
index 1866854..a37b738 100644
--- a/obexd/plugins/pbap.c
+++ b/obexd/plugins/pbap.c
@@ -144,14 +144,18 @@ static const guint8 PBAP_TARGET[TARGET_SIZE] = {
 			0x79, 0x61, 0x35, 0xF0,  0xF0, 0xC5, 0x11, 0xD8,
 			0x09, 0x66, 0x08, 0x00,  0x20, 0x0C, 0x9A, 0x66  };
 
-static int pbap_connect(struct obex_session *os)
+static gpointer pbap_connect(struct obex_session *os, int *err)
 {
 	manager_register_session(os);
 
-	return 0;
+	if (*err)
+		err = 0;
+
+	return NULL;
 }
 
-static int pbap_get(struct obex_session *os, obex_object_t *obj)
+static int pbap_get(struct obex_session *os, obex_object_t *obj,
+		gpointer user_data)
 {
 	const gchar *type = obex_get_type(os);
 	const gchar *folder = obex_get_folder(os);
@@ -187,7 +191,8 @@ static int pbap_get(struct obex_session *os, obex_object_t *obj)
 }
 
 
-static int pbap_setpath(struct obex_session *os, obex_object_t *obj)
+static int pbap_setpath(struct obex_session *os, obex_object_t *obj,
+		gpointer user_data)
 {
 	const gchar *current_folder, *name;
 	guint8 *nonhdr;
@@ -222,12 +227,14 @@ static int pbap_setpath(struct obex_session *os, obex_object_t *obj)
 	return 0;
 }
 
-static void pbap_disconnect(struct obex_session *os)
+static void pbap_disconnect(struct obex_session *os,
+		gpointer user_data)
 {
 	manager_unregister_session(os);
 }
 
-static gint pbap_chkput(struct obex_session *os)
+static gint pbap_chkput(struct obex_session *os,
+		gpointer user_data)
 {
 	/* Rejects all PUTs */
 	return -EINVAL;
diff --git a/obexd/plugins/syncevolution.c b/obexd/plugins/syncevolution.c
index c255ebf..a352ede 100644
--- a/obexd/plugins/syncevolution.c
+++ b/obexd/plugins/syncevolution.c
@@ -213,19 +213,22 @@ done:
 	dbus_message_unref(reply);
 }
 
-static int synce_connect(struct obex_session *os)
+static gpointer synce_connect(struct obex_session *os, int *err)
 {
 	manager_register_session(os);
 
-	return 0;
+	if (err)
+		*err = 0;
+
+	return NULL;
 }
 
-static int synce_put(struct obex_session *os)
+static int synce_put(struct obex_session *os, gpointer user_data)
 {
 	return 0;
 }
 
-static int synce_get(struct obex_session *os, obex_object_t *obj)
+static int synce_get(struct obex_session *os, obex_object_t *obj, gpointer user_data)
 {
 	return 0;
 }
@@ -246,7 +249,7 @@ static void close_cb(DBusPendingCall *call, void *user_data)
 	dbus_message_unref(reply);
 }
 
-static void synce_disconnect(struct obex_session *os)
+static void synce_disconnect(struct obex_session *os, gpointer user_data)
 {
 
 }
diff --git a/obexd/src/obex-priv.h b/obexd/src/obex-priv.h
index 7bc4dbd..28deef2 100644
--- a/obexd/src/obex-priv.h
+++ b/obexd/src/obex-priv.h
@@ -53,6 +53,7 @@ struct obex_session {
 	gpointer	object;
 	gboolean	aborted;
 	struct obex_service_driver *service;
+	gpointer	service_data;
 	struct server *server;
 	gboolean	checked;
 	obex_t		*obex;
diff --git a/obexd/src/obex.c b/obexd/src/obex.c
index 3092fc6..ab701e2 100644
--- a/obexd/src/obex.c
+++ b/obexd/src/obex.c
@@ -222,6 +222,7 @@ static void cmd_connect(struct obex_session *os,
 	const guint8 *target = NULL, *who = NULL;
 	guint target_size = 0, who_size = 0;
 	int err;
+	gpointer user_data;
 
 	if (OBEX_ObjectGetNonHdrData(obj, &buffer) != sizeof(*nonhdr)) {
 		OBEX_ObjectSetRsp(obj, OBEX_RSP_FORBIDDEN, OBEX_RSP_FORBIDDEN);
@@ -273,7 +274,7 @@ static void cmd_connect(struct obex_session *os,
 		return;
 	}
 
-	err = os->service->connect(os);
+	user_data = os->service->connect(os, &err);
 	if (err == 0 && os->service->target) {
 		hd.bs = os->service->target;
 		OBEX_ObjectAddHeader(obex, obj,
@@ -283,6 +284,8 @@ static void cmd_connect(struct obex_session *os,
 		OBEX_ObjectAddHeader(obex, obj,
 				OBEX_HDR_CONNECTION, hd, 4,
 				OBEX_FL_FIT_ONE_PACKET);
+
+		os->service_data = user_data;
 	}
 
 	os_set_response(obj, err);
@@ -388,7 +391,7 @@ static void cmd_get(struct obex_session *os, obex_t *obex, obex_object_t *obj)
 		}
 	}
 
-	err = os->service->get(os, obj);
+	err = os->service->get(os, obj, os->service_data);
 	if (err == 0) {
 		if (os->size != OBJECT_SIZE_UNKNOWN) {
 			hd.bq4 = os->size;
@@ -456,7 +459,7 @@ static void cmd_setpath(struct obex_session *os,
 		break;
 	}
 
-	err = os->service->setpath(os, obj);
+	err = os->service->setpath(os, obj, os->service_data);
 	os_set_response(obj, err);
 }
 
@@ -773,7 +776,7 @@ static gboolean check_put(obex_t *obex, obex_object_t *obj)
 		return FALSE;
 	}
 
-	ret = os->service->chkput(os);
+	ret = os->service->chkput(os, os->service_data);
 	switch (ret) {
 	case 0:
 		break;
@@ -822,7 +825,7 @@ static void cmd_put(struct obex_session *os, obex_t *obex, obex_object_t *obj)
 			return;
 	}
 
-	os->service->put(os);
+	os->service->put(os, os->service_data);
 }
 
 static void obex_event(obex_t *obex, obex_object_t *obj, gint mode,
@@ -837,12 +840,12 @@ static void obex_event(obex_t *obex, obex_object_t *obj, gint mode,
 	switch (evt) {
 	case OBEX_EV_PROGRESS:
 		if (os->service->progress)
-			os->service->progress(os);
+			os->service->progress(os, os->service_data);
 		break;
 	case OBEX_EV_ABORT:
 		os->aborted = TRUE;
 		if (os->service->reset)
-			os->service->reset(os);
+			os->service->reset(os, os->service_data);
 		os_reset_session(os);
 		OBEX_ObjectSetRsp(obj, OBEX_RSP_SUCCESS, OBEX_RSP_SUCCESS);
 		break;
@@ -857,7 +860,7 @@ static void obex_event(obex_t *obex, obex_object_t *obj, gint mode,
 		default:
 			os_session_mark_aborted(os);
 			if (os->service->reset)
-				os->service->reset(os);
+				os->service->reset(os, os->service_data);
 			os_reset_session(os);
 			break;
 		}
@@ -981,7 +984,7 @@ static void obex_handle_destroy(gpointer user_data)
 	os = OBEX_GetUserData(obex);
 
 	if (os->service && os->service->disconnect)
-		os->service->disconnect(os);
+		os->service->disconnect(os, os->service_data);
 
 	obex_session_free(os);
 
diff --git a/obexd/src/service.h b/obexd/src/service.h
index 615f359..1ff9603 100644
--- a/obexd/src/service.h
+++ b/obexd/src/service.h
@@ -30,14 +30,14 @@ struct obex_service_driver {
 	const guint8 *who;
 	guint who_size;
 	const gchar *record;
-	int (*connect) (struct obex_session *os);
-	void (*progress) (struct obex_session *os);
-	int (*get) (struct obex_session *os, obex_object_t *obj);
-	int (*put) (struct obex_session *os);
-	gint (*chkput) (struct obex_session *os);
-	int (*setpath) (struct obex_session *os, obex_object_t *obj);
-	void (*disconnect) (struct obex_session *os);
-	void (*reset) (struct obex_session *os);
+	gpointer (*connect) (struct obex_session *os, int *err);
+	void (*progress) (struct obex_session *os, gpointer user_data);
+	int (*get) (struct obex_session *os, obex_object_t *obj, gpointer user_data);
+	int (*put) (struct obex_session *os, gpointer user_data);
+	gint (*chkput) (struct obex_session *os, gpointer user_data);
+	int (*setpath) (struct obex_session *os, obex_object_t *obj, gpointer user_data);
+	void (*disconnect) (struct obex_session *os, gpointer user_data);
+	void (*reset) (struct obex_session *os, gpointer user_data);
 };
 
 int obex_service_driver_register(struct obex_service_driver *driver);