diff options
Diffstat (limited to 'obexd')
-rw-r--r-- | obexd/plugins/ftp.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/obexd/plugins/ftp.c b/obexd/plugins/ftp.c index 773861ddf..4c3546795 100644 --- a/obexd/plugins/ftp.c +++ b/obexd/plugins/ftp.c @@ -59,6 +59,7 @@ static const uint8_t FTP_TARGET[TARGET_SIZE] = { struct ftp_session { struct obex_session *os; + struct obex_transfer *transfer; char *folder; }; @@ -116,6 +117,8 @@ void *ftp_connect(struct obex_session *os, int *err) if (err) *err = 0; + ftp->transfer = manager_register_transfer(os); + DBG("session %p created", ftp); return ftp; @@ -136,6 +139,10 @@ int ftp_get(struct obex_session *os, void *user_data) if (ret < 0) return ret; + /* Only track progress of file transfer */ + if (type == NULL) + manager_emit_transfer_started(ftp->transfer); + return 0; } @@ -181,6 +188,9 @@ int ftp_chkput(struct obex_session *os, void *user_data) ret = obex_put_stream_start(os, path); + if (ret == 0) + manager_emit_transfer_started(ftp->transfer); + g_free(path); return ret; @@ -471,16 +481,26 @@ void ftp_disconnect(struct obex_session *os, void *user_data) manager_unregister_session(os); + manager_unregister_transfer(ftp->transfer); + g_free(ftp->folder); g_free(ftp); } +static void ftp_progress(struct obex_session *os, void *user_data) +{ + struct ftp_session *ftp = user_data; + + manager_emit_transfer_progress(ftp->transfer); +} + static struct obex_service_driver ftp = { .name = "File Transfer server", .service = OBEX_FTP, .target = FTP_TARGET, .target_size = TARGET_SIZE, .connect = ftp_connect, + .progress = ftp_progress, .get = ftp_get, .put = ftp_put, .chkput = ftp_chkput, |