From 84786d598b5352b509351daa7aeddf130bf21e3e Mon Sep 17 00:00:00 2001 From: Vinicius Costa Gomes Date: Tue, 2 Mar 2010 21:03:54 -0300 Subject: [PATCH] obexd: Remove all the uses of obex_rsp_t --- obexd/plugins/ftp.c | 62 +++++++++++++---------------------- obexd/plugins/opp.c | 24 +++++++------- obexd/plugins/pbap.c | 38 +++++++++------------ obexd/plugins/syncevolution.c | 25 +++++++------- obexd/src/obex.c | 53 +++++++++++++++++++++--------- obexd/src/service.h | 10 +++--- 6 files changed, 104 insertions(+), 108 deletions(-) diff --git a/obexd/plugins/ftp.c b/obexd/plugins/ftp.c index 0bd5a5ec1..21c369d0e 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 3325d0820..c7ddf8082 100644 --- a/obexd/plugins/opp.c +++ b/obexd/plugins/opp.c @@ -93,11 +93,11 @@ \ " -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 9a8d8f5c4..91c171295 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 60cd15d8b..8abd2879a 100644 --- a/obexd/plugins/syncevolution.c +++ b/obexd/plugins/syncevolution.c @@ -28,6 +28,7 @@ #include #include +#include #include #include @@ -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 3e4dea35d..54ae5af2c 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 b6fc28936..6080d1ca1 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); }; -- 2.47.3