Hi Team,
Please review the below the change.
Do comment for any concerns.
Thanks,
Amisha
On 7/3/2024 3:01 PM, Amisha Jain wrote:
Instead of emitting the property "Size" from obex_put_stream_start(),
Call the function manager_emit_transfer_property() from plugins/*.c
wherever plugin has transfer object present.
Remove the code from obex.c which is generic for all profiles.
This change resolves the type mismatch issue when calling the
manager_emit_transfer_property from obex.c. We are passing
'os->service_data' of plugin session type but the
manager_emit_transfer_property() expects the 'obex_transfer'
type, therefore size is not set properly and might cause
crash/disconnection.
---
obexd/plugins/ftp.c | 5 +++++
obexd/plugins/opp.c | 5 +++++
obexd/src/obex.c | 3 ---
3 files changed, 10 insertions(+), 3 deletions(-)
diff --git a/obexd/plugins/ftp.c b/obexd/plugins/ftp.c
index 874fe2b8b..127bb9aaf 100644
--- a/obexd/plugins/ftp.c
+++ b/obexd/plugins/ftp.c
@@ -175,6 +175,11 @@ int ftp_chkput(struct obex_session *os, void *user_data)
ret = obex_put_stream_start(os, path);
+ if (obex_get_size(os) != OBJECT_SIZE_DELETE &&
+ obex_get_size(os) != OBJECT_SIZE_UNKNOWN) {
+ manager_emit_transfer_property(ftp->transfer, "Size");
+ }
+
if (ret == 0)
manager_emit_transfer_started(ftp->transfer);
diff --git a/obexd/plugins/opp.c b/obexd/plugins/opp.c
index 777f5f8ed..74b2f805b 100644
--- a/obexd/plugins/opp.c
+++ b/obexd/plugins/opp.c
@@ -87,6 +87,11 @@ skip_auth:
err = obex_put_stream_start(os, path);
+ if (obex_get_size(os) != OBJECT_SIZE_DELETE &&
+ obex_get_size(os) != OBJECT_SIZE_UNKNOWN) {
+ manager_emit_transfer_property(user_data, "Size");
+ }
+
g_free(path);
if (err < 0)
diff --git a/obexd/src/obex.c b/obexd/src/obex.c
index 98d6245a4..370bfac9e 100644
--- a/obexd/src/obex.c
+++ b/obexd/src/obex.c
@@ -716,9 +716,6 @@ int obex_put_stream_start(struct obex_session *os, const char *filename)
return err;
}
- if (os->size != OBJECT_SIZE_DELETE && os->size != OBJECT_SIZE_UNKNOWN)
- manager_emit_transfer_property(os->service_data, "Size");
-
os->path = g_strdup(filename);
return 0;