diff --git a/obexd/plugins/filesystem.c b/obexd/plugins/filesystem.c
index 7458674..dcc03ff 100644
--- a/obexd/plugins/filesystem.c
+++ b/obexd/plugins/filesystem.c
#include "plugin.h"
#include "logging.h"
-#include "mimetype.h"
#include "obex.h"
+#include "mimetype.h"
#include "service.h"
#define EOL_CHARS "\n"
}
static gpointer filesystem_open(const char *name, int oflag, mode_t mode,
- size_t *size, int *err)
+ size_t *size, struct OBEX_session *os, int *err)
{
struct stat stats;
struct statvfs buf;
}
static gpointer capability_open(const char *name, int oflag, mode_t mode,
- size_t *size, int *err)
+ size_t *size, struct OBEX_session *os, int *err)
{
struct capability_object *object = NULL;
gchar *buf;
}
static gpointer folder_open(const char *name, int oflag, mode_t mode,
- size_t *size, int *err)
+ size_t *size, struct OBEX_session *os, int *err)
{
- struct obex_session *os;
struct stat fstat, dstat;
struct dirent *ep;
- DIR *dp;
+ const gchar *folder;
GString *object;
- gboolean root, pcsuite;
- int ret;
-
- os = obex_get_session(NULL);
+ DIR *dp;
+ gboolean root, pcsuite, symlinks;
+ gint ret;
- pcsuite = os->service->service & OBEX_PCSUITE ? TRUE : FALSE;
+ pcsuite = obex_get_service(os) & OBEX_PCSUITE ? TRUE : FALSE;
object = g_string_new(FL_VERSION);
object = g_string_append(object, pcsuite ? FL_TYPE_PCSUITE : FL_TYPE);
object = g_string_append(object, FL_BODY_BEGIN);
- root = g_str_equal(name, os->server->folder);
+ folder = obex_get_folder(os);
+ root = g_str_equal(name, folder);
dp = opendir(name);
if (dp == NULL) {
goto failed;
}
- if (root && os->server->symlinks)
+ symlinks = obex_get_symlinks(os);
+ if (root && symlinks)
ret = stat(name, &dstat);
else {
object = g_string_append(object, FL_PARENT_FOLDER_ELEMENT);
continue;
}
- fullname = g_build_filename(os->current_folder, ep->d_name, NULL);
+ fullname = g_build_filename(folder, ep->d_name, NULL);
- if (root && os->server->symlinks)
+ if (root && symlinks)
ret = stat(fullname, &fstat);
else
ret = lstat(fullname, &fstat);
diff --git a/obexd/src/mimetype.c b/obexd/src/mimetype.c
index e3e1f1b..02a7879 100644
--- a/obexd/src/mimetype.c
+++ b/obexd/src/mimetype.c
#include <openobex/obex_const.h>
#include "logging.h"
-#include "mimetype.h"
#include "obex.h"
+#include "mimetype.h"
static GSList *drivers = NULL;
diff --git a/obexd/src/mimetype.h b/obexd/src/mimetype.h
index d9f067f..8cecc94 100644
--- a/obexd/src/mimetype.h
+++ b/obexd/src/mimetype.h
const guint8 *target;
const char *mimetype;
gpointer (*open) (const char *name, int oflag, mode_t mode,
- size_t *size, int *err);
+ size_t *size, struct OBEX_session *os, int *err);
int (*close) (gpointer object);
ssize_t (*read) (gpointer object, void *buf, size_t count);
ssize_t (*write) (gpointer object, const void *buf, size_t count);
diff --git a/obexd/src/obex.c b/obexd/src/obex.c
index 9db3e71..0484523 100644
--- a/obexd/src/obex.c
+++ b/obexd/src/obex.c
gpointer object;
size_t size;
- object = os->driver->open(filename, O_RDONLY, 0, &size, &err);
+ object = os->driver->open(filename, O_RDONLY, 0, &size, os, &err);
if (object == NULL) {
error("open(%s): %s (%d)", filename, strerror(-err), -err);
goto fail;
path = g_build_filename(os->current_folder, os->name, NULL);
os->object = os->driver->open(path, O_WRONLY | O_CREAT | O_TRUNC, 0600,
os->size != OBJECT_SIZE_UNKNOWN ?
- (size_t *) &os->size : NULL, &err);
+ (size_t *) &os->size : NULL, os, &err);
if (os->object == NULL) {
error("open(%s): %s (%d)", path, strerror(-err), -err);
g_free(path);
return 0;
}
-struct obex_session *obex_get_session(gpointer object)
-{
- GSList *l;
-
- for (l = sessions; l; l = l->next) {
- struct obex_session *os = l->data;
-
- if (os->object == object)
- return os;
- }
-
- return NULL;
-}
-
const char *obex_get_name(struct OBEX_session *os)
{
return os->name;
return os->server->folder;
}
+guint16 obex_get_service(struct OBEX_session *os)
+{
+ return os->service->service;
+}
+
gboolean obex_get_symlinks(struct OBEX_session *os)
{
return os->server->symlinks;
diff --git a/obexd/src/obex.h b/obexd/src/obex.h
index d0e70e2..12f6117 100644
--- a/obexd/src/obex.h
+++ b/obexd/src/obex.h
void obex_connect_cb(GIOChannel *io, GError *err, gpointer user_data);
gint obex_session_start(GIOChannel *io, struct server *server);
-struct obex_session *obex_get_session(gpointer object);
int obex_stream_start(struct OBEX_session *os, const gchar *filename);
gint obex_prepare_put(struct obex_session *os);
const char *obex_get_name(struct OBEX_session *os);
const char *obex_get_folder(struct OBEX_session *os);
void obex_set_folder(struct OBEX_session *os, const char *folder);
const char *obex_get_root_folder(struct OBEX_session *os);
+guint16 obex_get_service(struct OBEX_session *os);
gboolean obex_get_symlinks(struct OBEX_session *os);
const char *obex_get_capability_path(struct OBEX_session *os);
gboolean obex_get_auto_accept(struct OBEX_session *os);