diff --git a/obexd/client/session.c b/obexd/client/session.c
index a682c83..23bcd23 100644
--- a/obexd/client/session.c
+++ b/obexd/client/session.c
#define FTP_INTERFACE "org.openobex.FileTransfer"
+#define DEFAULT_BUFFER_SIZE 4096
+
static guint64 counter = 0;
struct callback_data {
g_free(session->agent_name);
g_free(session->agent_path);
g_free(session->owner);
+ g_free(session->buffer);
g_free(session);
}
g_free(session->name);
session->name = NULL;
+ g_free(session->buffer);
+ session->buffer = NULL;
+
+ session->buffer_len = 0;
+ session->filled = 0;
+
if (session->transfer_path == NULL)
return;
gint bsize, bread, err = 0;
gboolean ret;
- bsize = sizeof(session->buffer) - session->filled;
+ if (session->buffer_len == 0) {
+ session->buffer_len = DEFAULT_BUFFER_SIZE;
+ session->buffer = g_new0(char, DEFAULT_BUFFER_SIZE);
+ }
+
+ bsize = session->buffer_len - session->filled;
+
ret = gw_obex_xfer_read(xfer, session->buffer + session->filled,
bsize, &bread, &err);
session->agent_path, session->transfer_path,
"Error getting object");
- unregister_transfer(session);
-
callback->func(callback->session, callback->data);
+ unregister_transfer(session);
+
if (session->fd > 0)
close(session->fd);
ssize_t len;
gint written;
+ if (session->buffer_len == 0) {
+ session->buffer_len = DEFAULT_BUFFER_SIZE;
+ session->buffer = g_new0(char, DEFAULT_BUFFER_SIZE);
+ }
+
len = read(session->fd, session->buffer + session->filled,
- sizeof(session->buffer) - session->filled);
+ session->buffer_len - session->filled);
if (len <= 0)
goto complete;
diff --git a/obexd/client/session.h b/obexd/client/session.h
index 16c3392..f0c113c 100644
--- a/obexd/client/session.h
+++ b/obexd/client/session.h
DBusMessage *msg;
GwObex *obex;
GwObexXfer *xfer;
- char buffer[4096];
+ char *buffer;
+ size_t buffer_len;
int filled;
ssize_t size;
size_t transferred;