diff --git a/obexd/client/session.c b/obexd/client/session.c
index e9993c8..8523a86 100644
--- a/obexd/client/session.c
+++ b/obexd/client/session.c
GError **err)
{
struct obc_transfer *transfer;
- struct obc_transfer_params *params = NULL;
if (session->obex == NULL) {
g_set_error(err, OBEX_IO_ERROR, -ENOTCONN,
return 0;
}
- if (apparam != NULL) {
- params = g_new0(struct obc_transfer_params, 1);
- params->data = g_new(guint8, apparam_size);
- memcpy(params->data, apparam, apparam_size);
- params->size = apparam_size;
- }
-
- transfer = obc_transfer_get(targetfile, name, type, params, err);
- if (transfer == NULL) {
- if (params != NULL) {
- g_free(params->data);
- g_free(params);
- }
+ transfer = obc_transfer_get(targetfile, name, type, apparam,
+ apparam_size, err);
+ if (transfer == NULL)
return 0;
- }
return session_request(session, transfer, func, user_data, err);
}
return 0;
}
- transfer = obc_transfer_put(filename, name, NULL, NULL, 0, NULL, err);
+ transfer = obc_transfer_put(filename, name, NULL, NULL, 0, NULL, 0,
+ err);
if (transfer == NULL)
return 0;
return 0;
}
- transfer = obc_transfer_put(NULL, name, NULL, contents, size, NULL,
+ transfer = obc_transfer_put(NULL, name, NULL, contents, size, NULL, 0,
err);
if (transfer == NULL)
return 0;
diff --git a/obexd/client/transfer.c b/obexd/client/transfer.c
index 245ccff..2277a95 100644
--- a/obexd/client/transfer.c
+++ b/obexd/client/transfer.c
void *data;
};
+struct obc_transfer_params {
+ void *data;
+ size_t size;
+};
+
struct obc_transfer {
GObex *obex;
guint8 op;
static struct obc_transfer *obc_transfer_create(guint8 op,
const char *filename,
const char *name,
- const char *type)
+ const char *type,
+ const void *params,
+ size_t psize)
{
struct obc_transfer *transfer;
transfer->name = g_strdup(name);
transfer->type = g_strdup(type);
+ if (params != NULL) {
+ transfer->params = g_new0(struct obc_transfer_params, 1);
+ transfer->params->data = g_memdup(params, psize);
+ transfer->params->size = psize;
+ }
+
return transfer;
}
struct obc_transfer *obc_transfer_get(const char *filename,
const char *name,
const char *type,
- struct obc_transfer_params *params,
+ const void *params, size_t psize,
GError **err)
{
struct obc_transfer *transfer;
int perr;
- transfer = obc_transfer_create(G_OBEX_OP_GET, filename, name, type);
+ transfer = obc_transfer_create(G_OBEX_OP_GET, filename, name, type,
+ params, psize);
perr = transfer_open(transfer, O_WRONLY | O_CREAT | O_TRUNC, 0600, err);
if (perr < 0) {
return NULL;
}
- transfer->params = params;
-
return transfer;
}
struct obc_transfer *obc_transfer_put(const char *filename,
const char *name,
const char *type,
- const char *contents,
- size_t size,
- struct obc_transfer_params *params,
+ const void *contents, size_t csize,
+ const void *params, size_t psize,
GError **err)
{
struct obc_transfer *transfer;
struct stat st;
int perr;
- transfer = obc_transfer_create(G_OBEX_OP_PUT, filename, name, type);
+ transfer = obc_transfer_create(G_OBEX_OP_PUT, filename, name, type,
+ params, psize);
if (contents != NULL) {
ssize_t w;
if (!transfer_open(transfer, O_RDWR, 0, err))
goto fail;
- w = write(transfer->fd, contents, size);
+ w = write(transfer->fd, contents, csize);
if (w < 0) {
error("write(): %s(%d)", strerror(errno), errno);
perr = -errno;
goto fail;
- } else if ((size_t) w != size) {
+ } else if ((size_t) w != csize) {
error("Unable to write all contents to file");
perr = -EFAULT;
goto fail;
}
transfer->size = st.st_size;
- transfer->params = params;
return transfer;
diff --git a/obexd/client/transfer.h b/obexd/client/transfer.h
index 073b279..aebba7f 100644
--- a/obexd/client/transfer.h
+++ b/obexd/client/transfer.h
*
*/
-struct obc_transfer_params {
- void *data;
- size_t size;
-};
-
struct obc_transfer;
typedef void (*transfer_callback_t) (struct obc_transfer *transfer,
struct obc_transfer *obc_transfer_get(const char *filename,
const char *name,
const char *type,
- struct obc_transfer_params *params,
+ const void *params, size_t psize,
GError **err);
struct obc_transfer *obc_transfer_put(const char *filename,
const char *name,
const char *type,
- const char *contents,
- size_t size,
- struct obc_transfer_params *params,
+ const void *contents, size_t csize,
+ const void *params, size_t psize,
GError **err);
gboolean obc_transfer_register(struct obc_transfer *transfer,