From 7c028648e2fd0a95bd1e87db81c9f7c63251cef6 Mon Sep 17 00:00:00 2001 From: Vinicius Costa Gomes Date: Thu, 1 Apr 2010 20:09:34 -0300 Subject: [PATCH] obexd: drivers should know nothing about obex_session This removes all references from obex_session from the drivers. At most, they should only know about their respective services. --- obexd/plugins/filesystem.c | 10 ++++--- obexd/plugins/ftp.c | 8 ++--- obexd/plugins/opp.c | 4 +-- obexd/plugins/pbap.c | 2 +- obexd/plugins/syncevolution.c | 56 ++++++++++++++++------------------- obexd/src/mimetype.h | 1 - obexd/src/obex.c | 12 +++----- obexd/src/obex.h | 6 ++-- 8 files changed, 44 insertions(+), 55 deletions(-) diff --git a/obexd/plugins/filesystem.c b/obexd/plugins/filesystem.c index 168058bb8..cd09af298 100644 --- a/obexd/plugins/filesystem.c +++ b/obexd/plugins/filesystem.c @@ -132,10 +132,10 @@ static gchar *file_stat_line(gchar *filename, struct stat *fstat, static gpointer filesystem_open(const char *name, int oflag, mode_t mode, gpointer context, size_t *size, int *err) { - struct obex_session *os = context; struct stat stats; struct statvfs buf; - const char *root_folder, *folder; + const char *root_folder; + char *folder; gboolean root; int fd = open(name, oflag, mode); @@ -151,11 +151,13 @@ static gpointer filesystem_open(const char *name, int oflag, mode_t mode, goto failed; } - root_folder = obex_get_root_folder(os); + root_folder = obex_option_root_folder(); folder = g_path_get_dirname(name); root = g_strcmp0(folder, root_folder); - if (!root || obex_get_symlinks(os)) { + g_free(folder); + + if (!root || obex_option_symlinks()) { if (S_ISLNK(stats.st_mode)) { if (err) *err = -EPERM; diff --git a/obexd/plugins/ftp.c b/obexd/plugins/ftp.c index 7404738e8..bcd6951b2 100644 --- a/obexd/plugins/ftp.c +++ b/obexd/plugins/ftp.c @@ -162,13 +162,13 @@ static gint get_by_type(struct ftp_session *ftp, const gchar *type) const char *capability = obex_get_capability_path(os); if (type == NULL) - return obex_get_stream_start(os, ftp->folder, os); + return obex_get_stream_start(os, ftp->folder); if (g_str_equal(type, CAP_TYPE)) - return obex_get_stream_start(os, capability, os); + return obex_get_stream_start(os, capability); if (g_str_equal(type, LST_TYPE)) - return obex_get_stream_start(os, ftp->folder, os); + return obex_get_stream_start(os, ftp->folder); return -ENOENT; } @@ -242,7 +242,7 @@ static gint ftp_chkput(struct obex_session *os, gpointer user_data) path = g_build_filename(ftp->folder, name, NULL); - ret = obex_put_stream_start(os, path, os); + ret = obex_put_stream_start(os, path); g_free(path); diff --git a/obexd/plugins/opp.c b/obexd/plugins/opp.c index c99e68679..7637516e4 100644 --- a/obexd/plugins/opp.c +++ b/obexd/plugins/opp.c @@ -140,7 +140,7 @@ skip_auth: manager_emit_transfer_started(os); - ret = obex_put_stream_start(os, path, os); + ret = obex_put_stream_start(os, path); g_free(path); g_free(folder); @@ -177,7 +177,7 @@ static int opp_get(struct obex_session *os, obex_object_t *obj, return -EPERM; if (g_str_equal(type, VCARD_TYPE)) { - if (obex_get_stream_start(os, VCARD_FILE, NULL) < 0) + if (obex_get_stream_start(os, VCARD_FILE) < 0) return -ENOENT; } else diff --git a/obexd/plugins/pbap.c b/obexd/plugins/pbap.c index af6ae3933..cbf579974 100644 --- a/obexd/plugins/pbap.c +++ b/obexd/plugins/pbap.c @@ -441,7 +441,7 @@ static int pbap_get(struct obex_session *os, obex_object_t *obj, return -EBADR; pbap->params = params; - ret = obex_get_stream_start(os, path, pbap); + ret = obex_get_stream_start(os, path); g_free(path); diff --git a/obexd/plugins/syncevolution.c b/obexd/plugins/syncevolution.c index 7a76a49b5..a40497c44 100644 --- a/obexd/plugins/syncevolution.c +++ b/obexd/plugins/syncevolution.c @@ -97,6 +97,7 @@ struct synce_context { guint abort_watch; GString *buffer; int lasterr; + gchar *id; }; static void append_dict_entry(DBusMessageIter *dict, const char *key, @@ -215,11 +216,29 @@ done: static gpointer synce_connect(struct obex_session *os, int *err) { + DBusConnection *conn; + struct synce_context *context; + manager_register_session(os); + conn = obex_dbus_get_connection(); + if (!conn) + goto failed; + + context = g_new0(struct synce_context, 1); + context->dbus_conn = conn; + context->lasterr = -EAGAIN; + context->id = obex_get_id(os); + if (err) *err = 0; + return context; + +failed: + if (err) + *err = -EPERM; + return NULL; } @@ -234,7 +253,7 @@ static int synce_get(struct obex_session *os, obex_object_t *obj, if (stream) *stream = TRUE; - return obex_get_stream_start(os, NULL, os); + return obex_get_stream_start(os, NULL); } static void close_cb(DBusPendingCall *call, void *user_data) @@ -255,35 +274,18 @@ static void close_cb(DBusPendingCall *call, void *user_data) static void synce_disconnect(struct obex_session *os, gpointer user_data) { + struct synce_context *context = user_data; + g_free(context); } static gpointer synce_open(const char *name, int oflag, mode_t mode, gpointer user_data, size_t *size, int *err) { - struct obex_session *os = user_data; - DBusConnection *conn; - struct synce_context *context; - - conn = obex_dbus_get_connection(); - if (!conn) - goto failed; - - context = g_new0(struct synce_context, 1); - context->os = os; - context->dbus_conn = conn; - context->lasterr = -EAGAIN; - if (err) *err = 0; - return context; - -failed: - if (err) - *err = -EPERM; - - return NULL; + return user_data; } static int synce_close(gpointer object) @@ -330,9 +332,8 @@ done: static ssize_t synce_read(gpointer object, void *buf, size_t count, guint8 *hi) { struct synce_context *context = object; - struct obex_session *os = context->os; DBusConnection *conn; - gchar *id, transport[36], transport_description[24]; + gchar transport[36], transport_description[24]; const char *session; DBusMessage *msg; DBusMessageIter iter, dict; @@ -353,20 +354,13 @@ static ssize_t synce_read(gpointer object, void *buf, size_t count, guint8 *hi) if (!msg) goto failed; - id = obex_get_id(os); - if (id == NULL) { - dbus_message_unref(msg); - goto failed; - } - dbus_message_iter_init_append(msg, &iter); dbus_message_iter_open_container(&iter, DBUS_TYPE_ARRAY, DBUS_DICT_ENTRY_BEGIN_CHAR_AS_STRING DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_STRING_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict); - append_dict_entry(&dict, "id", DBUS_TYPE_STRING, id); - g_free(id); + append_dict_entry(&dict, "id", DBUS_TYPE_STRING, context->id); snprintf(transport, sizeof(transport), "%s.obexd", OPENOBEX_SERVICE); diff --git a/obexd/src/mimetype.h b/obexd/src/mimetype.h index 6b558e281..39ad51e2e 100644 --- a/obexd/src/mimetype.h +++ b/obexd/src/mimetype.h @@ -29,7 +29,6 @@ struct obex_mime_type_driver { const char *mimetype; const guint8 *who; guint who_size; - gpointer driver_data; gpointer (*open) (const char *name, int oflag, mode_t mode, gpointer driver_data, size_t *size, int *err); int (*close) (gpointer object); diff --git a/obexd/src/obex.c b/obexd/src/obex.c index 16cc840b2..1cd803ce0 100644 --- a/obexd/src/obex.c +++ b/obexd/src/obex.c @@ -638,21 +638,19 @@ static void cmd_setpath(struct obex_session *os, os_set_response(obj, err); } -int obex_get_stream_start(struct obex_session *os, - const gchar *filename, gpointer driver_data) +int obex_get_stream_start(struct obex_session *os, const gchar *filename) { gint err; gpointer object; size_t size; - object = os->driver->open(filename, O_RDONLY, 0, driver_data, + object = os->driver->open(filename, O_RDONLY, 0, os->service_data, &size, &err); if (object == NULL) { error("open(%s): %s (%d)", filename, strerror(-err), -err); goto fail; } - os->driver->driver_data = driver_data; os->object = object; os->offset = 0; os->size = size; @@ -669,14 +667,13 @@ fail: return err; } -int obex_put_stream_start(struct obex_session *os, - const gchar *filename, gpointer driver_data) +gint obex_put_stream_start(struct obex_session *os, const gchar *filename) { gint len; int err; os->object = os->driver->open(filename, O_WRONLY | O_CREAT | O_TRUNC, - 0600, driver_data, + 0600, os->service_data, os->size != OBJECT_SIZE_UNKNOWN ? (size_t *) &os->size : NULL, &err); if (os->object == NULL) { @@ -685,7 +682,6 @@ int obex_put_stream_start(struct obex_session *os, } os->path = filename; - os->driver->driver_data = driver_data; if (!os->buf) { debug("PUT request checked, no buffered data"); diff --git a/obexd/src/obex.h b/obexd/src/obex.h index 00336c70a..5b92808ce 100644 --- a/obexd/src/obex.h +++ b/obexd/src/obex.h @@ -42,10 +42,8 @@ struct obex_session; void obex_connect_cb(GIOChannel *io, GError *err, gpointer user_data); -int obex_get_stream_start(struct obex_session *os, - const gchar *filename, gpointer user_data); -int obex_put_stream_start(struct obex_session *os, - const gchar *filename, gpointer user_data); +int obex_get_stream_start(struct obex_session *os, const gchar *filename); +int obex_put_stream_start(struct obex_session *os, const gchar *filename); const char *obex_get_name(struct obex_session *os); ssize_t obex_get_size(struct obex_session *os); const char *obex_get_type(struct obex_session *os); -- 2.47.3