diff --git a/obexd/src/obex.c b/obexd/src/obex.c
index 6d36dff..b3bba3f 100644
--- a/obexd/src/obex.c
+++ b/obexd/src/obex.c
.chkput = ftp_chkput,
};
-static void os_reset_session(struct obex_session *os)
+static void os_reset_session(struct obex_session *os, gboolean aborted)
{
+ if (os->fd > 0) {
+ close(os->fd);
+ os->fd = -1;
+ if (aborted && os->cmd == OBEX_CMD_PUT && os->current_folder) {
+ gchar *path;
+ path = g_build_filename(os->current_folder, os->name, NULL);
+ unlink(path);
+ g_free(path);
+ }
+ }
if (os->name) {
g_free(os->name);
os->name = NULL;
g_free(os->buf);
os->buf = NULL;
}
- if (os->fd > 0) {
- close(os->fd);
- os->fd = -1;
- }
os->offset = 0;
os->size = 0;
}
emit_transfer_progress(os->cid, os->size, os->offset);
break;
case OBEX_EV_ABORT:
- os_reset_session(os);
+ os_reset_session(os, TRUE);
OBEX_ObjectSetRsp(obj, OBEX_RSP_SUCCESS, OBEX_RSP_SUCCESS);
break;
case OBEX_EV_REQDONE:
if (os->target == NULL)
emit_transfer_completed(os->cid,
os->offset == os->size);
- os_reset_session(os);
+ os_reset_session(os, FALSE);
break;
default:
break;
}
break;
case OBEX_EV_REQHINT:
+ os->cmd = cmd;
switch (cmd) {
case OBEX_CMD_PUT:
os->checked = FALSE;
diff --git a/obexd/src/obex.h b/obexd/src/obex.h
index 7cb307b..ceef235 100644
--- a/obexd/src/obex.h
+++ b/obexd/src/obex.h
guint32 cid;
guint16 tx_mtu;
guint16 rx_mtu;
+ uint8_t cmd;
gchar *name;
gchar *type;
time_t time;