Diff between c929ba22160230fa41b33ca00f13d2ee95d0ed55 and 84786d598b5352b509351daa7aeddf130bf21e3e

Changed Files

File Additions Deletions Status
obexd/plugins/ftp.c +22 -40 modified
obexd/plugins/opp.c +12 -12 modified
obexd/plugins/pbap.c +15 -23 modified
obexd/plugins/syncevolution.c +13 -12 modified
obexd/src/obex.c +38 -15 modified
obexd/src/service.h +4 -6 modified

Full Patch

diff --git a/obexd/plugins/ftp.c b/obexd/plugins/ftp.c
index 0bd5a5e..21c369d 100644
--- a/obexd/plugins/ftp.c
+++ b/obexd/plugins/ftp.c
@@ -186,14 +186,14 @@ static gint ftp_prepare_get(struct OBEX_session *os, gchar *file)
 	return obex_stream_start(os, file);
 }
 
-static obex_rsp_t ftp_connect(struct OBEX_session *os)
+static int ftp_connect(struct OBEX_session *os)
 {
 	manager_register_session(os);
 
-	return OBEX_RSP_SUCCESS;
+	return 0;
 }
 
-static obex_rsp_t ftp_get(struct OBEX_session *os, obex_object_t *obj)
+static int ftp_get(struct OBEX_session *os, obex_object_t *obj)
 {
 	const char *folder = obex_get_folder(os);
 	const char *type = obex_get_type(os);
@@ -221,16 +221,10 @@ static obex_rsp_t ftp_get(struct OBEX_session *os, obex_object_t *obj)
 			goto fail;
 	}
 
-	return OBEX_RSP_SUCCESS;
+	return 0;
 
 fail:
-	switch (err) {
-	case -ENOENT:
-		return OBEX_RSP_NOT_FOUND;
-
-	default:
-		return OBEX_RSP_FORBIDDEN;
-	}
+	return err;
 }
 
 static gint ftp_delete(struct OBEX_session *os)
@@ -262,47 +256,36 @@ static gint ftp_chkput(struct OBEX_session *os)
 	return obex_prepare_put(os);
 }
 
-static obex_rsp_t ftp_put(struct OBEX_session *os)
+static int ftp_put(struct OBEX_session *os)
 {
 	const char *folder = obex_get_folder(os);
 	const char *name = obex_get_name(os);
 	ssize_t size = obex_get_size(os);
-	int ret = 0;
 
 	if (folder == NULL)
-		return OBEX_RSP_FORBIDDEN;
+		return -EPERM;
 
 	if (name == NULL)
-		return OBEX_RSP_BAD_REQUEST;
+		return -EBADR;
 
 	if (size == OBJECT_SIZE_DELETE)
-		ret = ftp_delete(os);
-
-	switch (ret) {
-	case 0:
-		return OBEX_RSP_SUCCESS;
-	case -ENOENT:
-		return OBEX_RSP_NOT_FOUND;
-	case -ENOTEMPTY:
-		return OBEX_RSP_PRECONDITION_FAILED;
-	default:
-		return OBEX_RSP_FORBIDDEN;
-	}
+		return ftp_delete(os);
+
+	return 0;
 }
 
-static obex_rsp_t ftp_setpath(struct OBEX_session *os, obex_object_t *obj)
+static int ftp_setpath(struct OBEX_session *os, obex_object_t *obj)
 {
 	const gchar *root_folder, *current_folder, *name;
 	guint8 *nonhdr;
 	gchar *fullname;
 	struct stat dstat;
 	gboolean root;
-	obex_rsp_t rsp = OBEX_RSP_SUCCESS;
 	int err;
 
 	if (OBEX_ObjectGetNonHdrData(obj, &nonhdr) != 2) {
 		error("Set path failed: flag and constants not found!");
-		return OBEX_RSP_PRECONDITION_FAILED;
+		return -EBADMSG;
 	}
 
 	name = obex_get_name(os);
@@ -315,7 +298,7 @@ static obex_rsp_t ftp_setpath(struct OBEX_session *os, obex_object_t *obj)
 		debug("Set to parent path");
 
 		if (root)
-			return OBEX_RSP_FORBIDDEN;
+			return -EPERM;
 
 		fullname = g_path_get_dirname(current_folder);
 		obex_set_folder(os, fullname);
@@ -323,24 +306,24 @@ static obex_rsp_t ftp_setpath(struct OBEX_session *os, obex_object_t *obj)
 
 		debug("Set to parent path: %s", current_folder);
 
-		return OBEX_RSP_SUCCESS;
+		return 0;
 	}
 
 	if (!name) {
 		debug("Set path failed: name missing!");
-		return OBEX_RSP_BAD_REQUEST;
+		return -EINVAL;
 	}
 
 	if (strlen(name) == 0) {
 		debug("Set to root");
 		obex_set_folder(os, root_folder);
-		return OBEX_RSP_SUCCESS;
+		return 0;
 	}
 
 	/* Check and set to name path */
 	if (strstr(name, "/") || strcmp(name, "..") == 0) {
 		error("Set path failed: name incorrect!");
-		return OBEX_RSP_FORBIDDEN;
+		return -EPERM;
 	}
 
 	fullname = g_build_filename(current_folder, name, NULL);
@@ -359,7 +342,6 @@ static obex_rsp_t ftp_setpath(struct OBEX_session *os, obex_object_t *obj)
 		if (err == ENOENT)
 			goto not_found;
 
-		rsp = OBEX_RSP_FORBIDDEN;
 		goto done;
 	}
 
@@ -369,17 +351,17 @@ static obex_rsp_t ftp_setpath(struct OBEX_session *os, obex_object_t *obj)
 		goto done;
 	}
 
-	rsp = OBEX_RSP_FORBIDDEN;
+	err = -EPERM;
 	goto done;
 
 not_found:
 	if (nonhdr[0] != 0) {
-		rsp = OBEX_RSP_NOT_FOUND;
+		err = -ENOENT;
 		goto done;
 	}
 
 	if (mkdir(fullname, 0755) <  0) {
-		rsp = OBEX_RSP_FORBIDDEN;
+		err = -EPERM;
 		goto done;
 	}
 
@@ -387,7 +369,7 @@ not_found:
 
 done:
 	g_free(fullname);
-	return rsp;
+	return err;
 }
 
 static void ftp_disconnect(struct OBEX_session *os)
diff --git a/obexd/plugins/opp.c b/obexd/plugins/opp.c
index 3325d08..c7ddf80 100644
--- a/obexd/plugins/opp.c
+++ b/obexd/plugins/opp.c
@@ -93,11 +93,11 @@
   </attribute>									\
 </record>"
 
-static obex_rsp_t opp_connect(struct OBEX_session *os)
+static int opp_connect(struct OBEX_session *os)
 {
 	manager_register_transfer(os);
 
-	return OBEX_RSP_SUCCESS;
+	return 0;
 }
 
 static void opp_progress(struct OBEX_session *os)
@@ -137,40 +137,40 @@ skip_auth:
 	return obex_prepare_put(os);
 }
 
-static obex_rsp_t opp_put(struct OBEX_session *os)
+static int opp_put(struct OBEX_session *os)
 {
 	const char *name = obex_get_name(os);
 	const char *folder = obex_get_folder(os);
 
 	if (folder == NULL)
-		return OBEX_RSP_FORBIDDEN;
+		return -EPERM;
 
 	if (name == NULL)
-		return OBEX_RSP_BAD_REQUEST;
+		return -EBADR;
 
-	return OBEX_RSP_SUCCESS;
+	return 0;
 }
 
-static obex_rsp_t opp_get(struct OBEX_session *os, obex_object_t *obj)
+static int opp_get(struct OBEX_session *os, obex_object_t *obj)
 {
 	const char *type;
 
 	if (obex_get_name(os) == NULL)
-		return OBEX_RSP_FORBIDDEN;
+		return -EPERM;
 
 	type = obex_get_type(os);
 
 	if (type == NULL)
-		return OBEX_RSP_FORBIDDEN;
+		return -EPERM;
 
 	if (g_str_equal(type, VCARD_TYPE)) {
 		if (obex_stream_start(os, VCARD_FILE) < 0)
-			return OBEX_RSP_NOT_FOUND;
+			return -ENOENT;
 
 	} else
-		return OBEX_RSP_FORBIDDEN;
+		return -EPERM;
 
-	return OBEX_RSP_SUCCESS;
+	return 0;
 }
 
 static void opp_disconnect(struct OBEX_session *os)
diff --git a/obexd/plugins/pbap.c b/obexd/plugins/pbap.c
index 9a8d8f5..91c1712 100644
--- a/obexd/plugins/pbap.c
+++ b/obexd/plugins/pbap.c
@@ -144,14 +144,14 @@ static const guint8 PBAP_TARGET[TARGET_SIZE] = {
 			0x79, 0x61, 0x35, 0xF0,  0xF0, 0xC5, 0x11, 0xD8,
 			0x09, 0x66, 0x08, 0x00,  0x20, 0x0C, 0x9A, 0x66  };
 
-static obex_rsp_t pbap_connect(struct OBEX_session *os)
+static int pbap_connect(struct OBEX_session *os)
 {
 	manager_register_session(os);
 
-	return OBEX_RSP_SUCCESS;
+	return 0;
 }
 
-static obex_rsp_t pbap_get(struct OBEX_session *os, obex_object_t *obj)
+static int pbap_get(struct OBEX_session *os, obex_object_t *obj)
 {
 	const gchar *type = obex_get_type(os);
 	const gchar *folder = obex_get_folder(os);
@@ -160,7 +160,7 @@ static obex_rsp_t pbap_get(struct OBEX_session *os, obex_object_t *obj)
 	gint ret;
 
 	if (type == NULL)
-		return OBEX_RSP_BAD_REQUEST;
+		return -EBADR;
 
 	if (strcmp(type, PHONEBOOK_TYPE) == 0)
 		/* Always contains the absolute path */
@@ -178,20 +178,12 @@ static obex_rsp_t pbap_get(struct OBEX_session *os, obex_object_t *obj)
 		/* Always relative */
 		path = g_build_filename(folder, name, NULL);
 	else
-		return OBEX_RSP_BAD_REQUEST;
+		return -EBADR;
 
 	ret = obex_stream_start(os, path);
 	g_free(path);
 
-	switch (ret) {
-	case 0:
-		return OBEX_RSP_SUCCESS;
-	case -ENOENT:
-		return OBEX_RSP_NOT_FOUND;
-	default:
-		return OBEX_RSP_FORBIDDEN;
-
-	}
+	return ret;
 }
 
 static gboolean pbap_is_valid_folder(struct obex_session *session)
@@ -216,7 +208,7 @@ static gboolean pbap_is_valid_folder(struct obex_session *session)
 	return FALSE;
 }
 
-static obex_rsp_t pbap_setpath(struct OBEX_session *os, obex_object_t *obj)
+static int pbap_setpath(struct OBEX_session *os, obex_object_t *obj)
 {
 	const gchar *current_folder, *name;
 	guint8 *nonhdr;
@@ -224,7 +216,7 @@ static obex_rsp_t pbap_setpath(struct OBEX_session *os, obex_object_t *obj)
 
 	if (OBEX_ObjectGetNonHdrData(obj, &nonhdr) != 2) {
 		error("Set path failed: flag and constants not found!");
-		return OBEX_RSP_PRECONDITION_FAILED;
+		return -EBADMSG;
 	}
 
 	current_folder = obex_get_folder(os);
@@ -236,7 +228,7 @@ static obex_rsp_t pbap_setpath(struct OBEX_session *os, obex_object_t *obj)
 
 		if (current_folder == NULL) {
 			/* we are already in top level folder */
-			return OBEX_RSP_FORBIDDEN;
+			return -EPERM;
 		}
 
 		fullname = g_path_get_dirname(current_folder);
@@ -250,12 +242,12 @@ static obex_rsp_t pbap_setpath(struct OBEX_session *os, obex_object_t *obj)
 
 		debug("Set to parent path: %s", current_folder);
 
-		return OBEX_RSP_SUCCESS;
+		return 0;
 	}
 
 	if (!name) {
 		error("Set path failed: name missing!");
-		return OBEX_RSP_BAD_REQUEST;
+		return -EBADR;
 	}
 
 	if (strlen(name) == 0) {
@@ -263,17 +255,17 @@ static obex_rsp_t pbap_setpath(struct OBEX_session *os, obex_object_t *obj)
 
 		obex_set_folder(os, NULL);
 
-		return OBEX_RSP_SUCCESS;
+		return 0;
 	}
 
 	/* Check and set to name path */
 	if (strstr(name, "/")) {
 		error("Set path failed: name incorrect!");
-		return OBEX_RSP_FORBIDDEN;
+		return -EPERM;
 	}
 
 	if (pbap_is_valid_folder(os) == FALSE)
-		return OBEX_RSP_NOT_FOUND;
+		return -ENOENT;
 
 	if (current_folder == NULL)
 		fullname = g_build_filename("", name, NULL);
@@ -284,7 +276,7 @@ static obex_rsp_t pbap_setpath(struct OBEX_session *os, obex_object_t *obj)
 
 	obex_set_folder(os, fullname);
 
-	return OBEX_RSP_SUCCESS;
+	return 0;
 }
 
 static void pbap_disconnect(struct OBEX_session *os)
diff --git a/obexd/plugins/syncevolution.c b/obexd/plugins/syncevolution.c
index 60cd15d..8abd287 100644
--- a/obexd/plugins/syncevolution.c
+++ b/obexd/plugins/syncevolution.c
@@ -28,6 +28,7 @@
 
 #include <string.h>
 #include <stdio.h>
+#include <errno.h>
 #include <glib.h>
 #include <dbus/dbus.h>
 
@@ -253,7 +254,7 @@ static void process_cb(DBusPendingCall *call, void *user_data)
 	dbus_message_unref(reply);
 }
 
-static obex_rsp_t synce_connect(struct OBEX_session *os)
+static int synce_connect(struct OBEX_session *os)
 {
 	DBusConnection *conn;
 	GError *err = NULL;
@@ -338,13 +339,13 @@ static obex_rsp_t synce_connect(struct OBEX_session *os)
 	/* FIXME: broken */
 	OBEX_SuspendRequest(obex, obj);
 #endif
-	return OBEX_RSP_SUCCESS;
+	return 0;
 
 failed:
-	return OBEX_RSP_FORBIDDEN;
+	return -EPERM;
 }
 
-static obex_rsp_t synce_put(struct OBEX_session *os)
+static int synce_put(struct OBEX_session *os)
 {
 	struct synce_context *context;
 	DBusMessage *msg;
@@ -354,15 +355,15 @@ static obex_rsp_t synce_put(struct OBEX_session *os)
 
 	context = find_context(os);
 	if (!context)
-		return OBEX_RSP_SERVICE_UNAVAILABLE;
+		return -EFAULT;
 
 	if (!context->conn_obj)
-		return OBEX_RSP_SERVICE_UNAVAILABLE;
+		return -EFAULT;
 
 	msg = dbus_message_new_method_call(SYNCE_BUS_NAME, context->conn_obj,
 					SYNCE_CONN_INTERFACE, "Process");
 	if (!msg)
-		return OBEX_RSP_SERVICE_UNAVAILABLE;
+		return -EFAULT;
 
 	dbus_message_iter_init_append(msg, &iter);
 	dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY,
@@ -381,7 +382,7 @@ static obex_rsp_t synce_put(struct OBEX_session *os)
 								&call, -1)) {
 		error("D-Bus call to %s failed.", SYNCE_CONN_INTERFACE);
 		dbus_message_unref(msg);
-		return OBEX_RSP_FORBIDDEN;
+		return -EPERM;
 	}
 
 	dbus_pending_call_set_notify(call, process_cb, os, NULL);
@@ -389,18 +390,18 @@ static obex_rsp_t synce_put(struct OBEX_session *os)
 	dbus_message_unref(msg);
 	dbus_pending_call_unref(call);
 
-	return OBEX_RSP_SUCCESS;
+	return 0;
 }
 
-static obex_rsp_t synce_get(struct OBEX_session *os, obex_object_t *obj)
+static int synce_get(struct OBEX_session *os, obex_object_t *obj)
 {
 	struct synce_context *context;
 
 	context = find_context(os);
 	if (!context)
-		return OBEX_RSP_FORBIDDEN;
+		return -EPERM;
 
-	return OBEX_RSP_SUCCESS;
+	return 0;
 }
 
 static void close_cb(DBusPendingCall *call, void *user_data)
diff --git a/obexd/src/obex.c b/obexd/src/obex.c
index 3e4dea3..54ae5af 100644
--- a/obexd/src/obex.c
+++ b/obexd/src/obex.c
@@ -64,16 +64,39 @@ typedef struct {
 	guint16 mtu;
 } __attribute__ ((packed)) obex_connect_hdr_t;
 
-static void os_set_response(obex_object_t *obj, obex_rsp_t lastrsp)
+static void os_set_response(obex_object_t *obj, int err)
 {
 	guint8 rsp;
+	guint8 lastrsp;
 
-	switch (lastrsp) {
-	case OBEX_RSP_SUCCESS:
+	switch (err) {
+	case 0:
 		rsp = OBEX_RSP_CONTINUE;
+		lastrsp = OBEX_RSP_SUCCESS;
+		break;
+	case -EPERM:
+		rsp = OBEX_RSP_FORBIDDEN;
+		lastrsp = OBEX_RSP_FORBIDDEN;
+		break;
+	case -ENOENT:
+		rsp = OBEX_RSP_NOT_FOUND;
+		lastrsp = OBEX_RSP_NOT_FOUND;
+		break;
+	case -EBADR:
+		rsp = OBEX_RSP_BAD_REQUEST;
+		lastrsp = OBEX_RSP_BAD_REQUEST;
+		break;
+	case -EFAULT:
+		rsp = OBEX_RSP_SERVICE_UNAVAILABLE;
+		lastrsp = OBEX_RSP_SERVICE_UNAVAILABLE;
+		break;
+	case -EINVAL:
+		rsp = OBEX_RSP_NOT_IMPLEMENTED;
+		lastrsp = OBEX_RSP_NOT_IMPLEMENTED;
 		break;
 	default:
-		rsp = lastrsp;
+		rsp = OBEX_RSP_INTERNAL_SERVER_ERROR;
+		lastrsp = OBEX_RSP_INTERNAL_SERVER_ERROR;
 	}
 
 	OBEX_ObjectSetRsp(obj, rsp, lastrsp);
@@ -197,7 +220,7 @@ static void cmd_connect(struct obex_session *os,
 	guint8 hi;
 	const guint8 *target = NULL, *who = NULL;
 	guint target_size = 0, who_size = 0;
-	obex_rsp_t rsp;
+	int err;
 
 	if (OBEX_ObjectGetNonHdrData(obj, &buffer) != sizeof(*nonhdr)) {
 		OBEX_ObjectSetRsp(obj, OBEX_RSP_FORBIDDEN, OBEX_RSP_FORBIDDEN);
@@ -249,8 +272,8 @@ static void cmd_connect(struct obex_session *os,
 		return;
 	}
 
-	rsp = os->service->connect(os);
-	if (rsp == OBEX_RSP_SUCCESS && os->service->target) {
+	err = os->service->connect(os);
+	if (err == 0 && os->service->target) {
 		hd.bs = os->service->target;
 		OBEX_ObjectAddHeader(obex, obj,
 				OBEX_HDR_WHO, hd, 16,
@@ -261,7 +284,7 @@ static void cmd_connect(struct obex_session *os,
 				OBEX_FL_FIT_ONE_PACKET);
 	}
 
-	os_set_response(obj, rsp);
+	os_set_response(obj, err);
 }
 
 static gboolean chk_cid(obex_t *obex, obex_object_t *obj, guint32 cid)
@@ -299,7 +322,7 @@ static void cmd_get(struct obex_session *os, obex_t *obex, obex_object_t *obj)
 	obex_headerdata_t hd;
 	guint hlen;
 	guint8 hi;
-	guint rsp;
+	int err;
 
 	if (!os->service) {
 		OBEX_ObjectSetRsp(obj, OBEX_RSP_FORBIDDEN, OBEX_RSP_FORBIDDEN);
@@ -364,8 +387,8 @@ static void cmd_get(struct obex_session *os, obex_t *obex, obex_object_t *obj)
 		}
 	}
 
-	rsp = os->service->get(os, obj);
-	if (rsp == OBEX_RSP_SUCCESS) {
+	err = os->service->get(os, obj);
+	if (err == 0) {
 		if (os->size != OBJECT_SIZE_UNKNOWN) {
 			hd.bq4 = os->size;
 			OBEX_ObjectAddHeader(obex, obj,
@@ -382,7 +405,7 @@ static void cmd_get(struct obex_session *os, obex_t *obex, obex_object_t *obj)
 					hd, 0, OBEX_FL_STREAM_START);
 	}
 
-	os_set_response(obj, rsp);
+	os_set_response(obj, err);
 }
 
 static void cmd_setpath(struct obex_session *os,
@@ -390,7 +413,7 @@ static void cmd_setpath(struct obex_session *os,
 {
 	obex_headerdata_t hd;
 	guint32 hlen;
-	obex_rsp_t rsp;
+	int err;
 	guint8 hi;
 
 	if (!os->service) {
@@ -432,8 +455,8 @@ static void cmd_setpath(struct obex_session *os,
 		break;
 	}
 
-	rsp = os->service->setpath(os, obj);
-	os_set_response(obj, rsp);
+	err = os->service->setpath(os, obj);
+	os_set_response(obj, err);
 }
 
 int obex_stream_start(struct OBEX_session *os, const gchar *filename)
diff --git a/obexd/src/service.h b/obexd/src/service.h
index b6fc289..6080d1c 100644
--- a/obexd/src/service.h
+++ b/obexd/src/service.h
@@ -21,8 +21,6 @@
  *
  */
 
-typedef guint8		obex_rsp_t;
-
 struct obex_service_driver {
 	const char *name;
 	guint16 service;
@@ -32,12 +30,12 @@ struct obex_service_driver {
 	const guint8 *who;
 	guint who_size;
 	const gchar *record;
-	obex_rsp_t (*connect) (struct OBEX_session *os);
+	int (*connect) (struct OBEX_session *os);
 	void (*progress) (struct OBEX_session *os);
-	obex_rsp_t (*get) (struct OBEX_session *os, obex_object_t *obj);
-	obex_rsp_t (*put) (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);
-	obex_rsp_t (*setpath) (struct OBEX_session *os, obex_object_t *obj);
+	int (*setpath) (struct OBEX_session *os, obex_object_t *obj);
 	void (*disconnect) (struct OBEX_session *os);
 	void (*reset) (struct OBEX_session *os);
 };