Re: [PATCH obexd] MAP: Add Notification Registration support

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

 



Hi Sunil,

On Mon, Sep 17, 2012 at 5:41 PM, Sunil Kumar Behera
<sunil.behera@xxxxxxxxxxx> wrote:
> This feature allows the MCE to set the notification mode
> on the MSE side.
> ---
>  plugins/mas.c              |   50 ++++++++++++++++++++++++++++++++++++++++++--
>  plugins/messages-dummy.c   |    6 ++----
>  plugins/messages-tracker.c |    6 ++----
>  plugins/messages.h         |   17 +++++++--------
>  4 files changed, 60 insertions(+), 19 deletions(-)
>
> diff --git a/plugins/mas.c b/plugins/mas.c
> index 186d267..977e5a1 100644
> --- a/plugins/mas.c
> +++ b/plugins/mas.c
> @@ -119,6 +119,8 @@ struct mas_session {
>         GObexApparam *inparams;
>         GObexApparam *outparams;
>         gboolean ap_sent;
> +       uint8_t notification_status;
> +       char *remote_addr;
>  };
>
>  static const uint8_t MAS_TARGET[TARGET_SIZE] = {
> @@ -167,12 +169,14 @@ static void reset_request(struct mas_session *mas)
>  static void mas_clean(struct mas_session *mas)
>  {
>         reset_request(mas);
> +       g_free(mas->remote_addr);
>         g_free(mas);
>  }
>
>  static void *mas_connect(struct obex_session *os, int *err)
>  {
>         struct mas_session *mas;
> +       char *address;
>
>         DBG("");
>
> @@ -184,6 +188,9 @@ static void *mas_connect(struct obex_session *os, int *err)
>
>         manager_register_session(os);
>
> +       if (obex_getpeername(os, &address) == 0)
> +               mas->remote_addr = address;
> +
>         return mas;
>
>  failed:
> @@ -695,6 +702,45 @@ static void *message_set_status_open(const char *name, int oflag, mode_t mode,
>         return mas;
>  }
>
> +static void *notification_registration_open(const char *name, int oflag,
> +                                               mode_t mode, void *driver_data,
> +                                               size_t *size, int *err)
> +{
> +       struct mas_session *mas = driver_data;
> +       uint8_t status;
> +
> +       if (oflag == O_RDONLY) {
> +               *err = -EBADR;
> +               return NULL;
> +       }
> +
> +       if (!g_obex_apparam_get_uint8(mas->inparams, MAP_AP_NOTIFICATIONSTATUS,
> +                                                               &status)) {
> +               *err = -EBADR;
> +               return NULL;
> +       }
> +
> +       *err = 0;
> +       mas->notification_status = status;
> +       mas->finished = TRUE;
> +       return mas;
> +}
> +
> +static int notification_registration_close(void *obj)
> +{
> +       struct mas_session *mas = obj;
> +
> +       DBG("");
> +
> +       messages_set_notification_registration(mas->backend_data,
> +                                               mas->remote_addr,
> +                                               mas->notification_status, mas);
> +
> +       reset_request(mas);
> +
> +       return 0;
> +}
> +
>  static ssize_t any_get_next_header(void *object, void *buf, size_t mtu,
>                                                                 uint8_t *hi)
>  {
> @@ -820,8 +866,8 @@ static struct obex_mime_type_driver mime_notification_registration = {
>         .target = MAS_TARGET,
>         .target_size = TARGET_SIZE,
>         .mimetype = "x-bt/MAP-NotificationRegistration",
> -       .open = any_open,
> -       .close = any_close,
> +       .open = notification_registration_open,
> +       .close = notification_registration_close,
>         .read = any_read,
>         .write = any_write,
>  };
> diff --git a/plugins/messages-dummy.c b/plugins/messages-dummy.c
> index 4c66f51..ecbe894 100644
> --- a/plugins/messages-dummy.c
> +++ b/plugins/messages-dummy.c
> @@ -251,10 +251,8 @@ void messages_disconnect(void *s)
>         g_free(session);
>  }
>
> -int messages_set_notification_registration(void *session,
> -               void (*send_event)(void *session,
> -                       const struct messages_event *event, void *user_data),
> -               void *user_data)
> +int messages_set_notification_registration(void *session, char *address,
> +                                               uint8_t status, void *user_data)
>  {
>         return -ENOSYS;
>  }
> diff --git a/plugins/messages-tracker.c b/plugins/messages-tracker.c
> index 2c7541b..aa62870 100644
> --- a/plugins/messages-tracker.c
> +++ b/plugins/messages-tracker.c
> @@ -180,10 +180,8 @@ void messages_disconnect(void *s)
>         g_free(session);
>  }
>
> -int messages_set_notification_registration(void *session,
> -               void (*send_event)(void *session,
> -                       const struct messages_event *event, void *user_data),
> -               void *user_data)
> +int messages_set_notification_registration(void *session, char *address,
> +                                               uint8_t status, void *user_data)
>  {
>         return -ENOSYS;
>  }
> diff --git a/plugins/messages.h b/plugins/messages.h
> index 00a16b1..0fe5cc3 100644
> --- a/plugins/messages.h
> +++ b/plugins/messages.h
> @@ -169,18 +169,17 @@ void messages_disconnect(void *session);
>   * value is used to set the error code in OBEX response.
>   ******************************************************************************/
>
> -/* Registers for messaging events notifications.
> +/* Registers Message Client for receiving message event reports.
>   *
>   * session: Backend session.
> - * send_event: Function that will be called to indicate a new event.
> - *
> - * To unregister currently registered notifications, call this with send_event
> - * set to NULL.
> + * address: Remote device address that request notification registration.
> + * status: To indicate message notification registraton status
> + * user_data: User data if any to be sent.
>   */
> -int messages_set_notification_registration(void *session,
> -               void (*send_event)(void *session,
> -                       const struct messages_event *event, void *user_data),
> -               void *user_data);
> +
> +int messages_set_notification_registration(void *session, char *address,
> +                                               uint8_t status,
> +                                               void *user_data);
>
>  /* Changes current directory.
>   *
> --
> 1.7.9.5


The plan is to merge client with server so we don't have to call each
other daemon to connect the notification service.


-- 
Luiz Augusto von Dentz
--
To unsubscribe from this list: send the line "unsubscribe linux-bluetooth" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[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