diff --git a/obexd/plugins/filesystem.c b/obexd/plugins/filesystem.c
index 168058b..cd09af2 100644
--- a/obexd/plugins/filesystem.c
+++ b/obexd/plugins/filesystem.c
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);
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 7404738..bcd6951 100644
--- a/obexd/plugins/ftp.c
+++ b/obexd/plugins/ftp.c
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;
}
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 c99e686..7637516 100644
--- a/obexd/plugins/opp.c
+++ b/obexd/plugins/opp.c
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);
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 af6ae39..cbf5799 100644
--- a/obexd/plugins/pbap.c
+++ b/obexd/plugins/pbap.c
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 7a76a49..a40497c 100644
--- a/obexd/plugins/syncevolution.c
+++ b/obexd/plugins/syncevolution.c
guint abort_watch;
GString *buffer;
int lasterr;
+ gchar *id;
};
static void append_dict_entry(DBusMessageIter *dict, const char *key,
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;
}
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)
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)
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;
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 6b558e2..39ad51e 100644
--- a/obexd/src/mimetype.h
+++ b/obexd/src/mimetype.h
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 16cc840..1cd803c 100644
--- a/obexd/src/obex.c
+++ b/obexd/src/obex.c
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;
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) {
}
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 00336c7..5b92808 100644
--- a/obexd/src/obex.h
+++ b/obexd/src/obex.h
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);