Re: [PATCH BlueZ v5] obex: Move size emit signal to plugins instead of obex.c

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

ti, 2024-07-23 kello 16:35 +0530, Amisha Jain kirjoitti:
> 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");
> +	}

This probably should check ret == 0, to be exactly equivalent to what
it was before.

> +
>  	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");
> +	}
> +

Similarly err == 0 here.

Based on looking at the code looks otherwise OK, but haven't tested
this myself in practice.

>  	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;

-- 
Pauli Virtanen





[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux