Re: [PATCH 3/5] Bluetooth: Add User Passkey entry to HCI Events

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

 



Hi Brian,

> Signed-off-by: Brian Gix <bgix@xxxxxxxxxxxxxx>
> ---
>  include/net/bluetooth/hci.h      |    5 +++
>  include/net/bluetooth/hci_core.h |    4 ++
>  net/bluetooth/hci_event.c        |   62 ++++++++++++++++++++++++++++++++++++++
>  3 files changed, 71 insertions(+), 0 deletions(-)
> 
> diff --git a/include/net/bluetooth/hci.h b/include/net/bluetooth/hci.h
> index ac107b5..d1af139 100644
> --- a/include/net/bluetooth/hci.h
> +++ b/include/net/bluetooth/hci.h
> @@ -1084,6 +1084,11 @@ struct hci_ev_user_confirm_req {
>  	__le32		passkey;
>  } __packed;
>  
> +#define HCI_EV_USER_PASSKEY_REQUEST	0x34
> +struct hci_ev_user_passkey_req {
> +	bdaddr_t	bdaddr;
> +} __packed;
> +
>  #define HCI_EV_REMOTE_OOB_DATA_REQUEST	0x35
>  struct hci_ev_remote_oob_data_request {
>  	bdaddr_t bdaddr;

this should go into a separate patch. And please get into the habit of
actually writing a commit message. Not just a commit subject.

> diff --git a/include/net/bluetooth/hci_core.h b/include/net/bluetooth/hci_core.h
> index a67ff88..0b692ea 100644
> --- a/include/net/bluetooth/hci_core.h
> +++ b/include/net/bluetooth/hci_core.h
> @@ -933,6 +933,10 @@ int mgmt_user_confirm_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
>  								u8 status);
>  int mgmt_user_confirm_neg_reply_complete(struct hci_dev *hdev,
>  						bdaddr_t *bdaddr, u8 status);
> +int mgmt_user_passkey_reply_complete(struct hci_dev *hdev, bdaddr_t *bdaddr,
> +								u8 status);
> +int mgmt_user_passkey_neg_reply_complete(struct hci_dev *hdev,
> +						bdaddr_t *bdaddr, u8 status);
>  int mgmt_auth_failed(struct hci_dev *hdev, bdaddr_t *bdaddr, u8 status);
>  int mgmt_set_local_name_complete(struct hci_dev *hdev, u8 *name, u8 status);
>  int mgmt_read_local_oob_data_reply_complete(struct hci_dev *hdev, u8 *hash,
> diff --git a/net/bluetooth/hci_event.c b/net/bluetooth/hci_event.c
> index 0d55d00..a425926 100644
> --- a/net/bluetooth/hci_event.c
> +++ b/net/bluetooth/hci_event.c
> @@ -927,6 +927,37 @@ static void hci_cc_user_confirm_neg_reply(struct hci_dev *hdev,
>  	hci_dev_unlock(hdev);
>  }
>  
> +static void hci_cc_user_passkey_reply(struct hci_dev *hdev, struct sk_buff *skb)
> +{
> +	struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
> +
> +	BT_DBG("%s status 0x%x", hdev->name, rp->status);
> +
> +	hci_dev_lock(hdev);
> +
> +	if (test_bit(HCI_MGMT, &hdev->flags))
> +		mgmt_user_passkey_reply_complete(hdev, &rp->bdaddr,
> +								rp->status);
> +
> +	hci_dev_unlock(hdev);
> +}
> +
> +static void hci_cc_user_passkey_neg_reply(struct hci_dev *hdev,
> +							struct sk_buff *skb)
> +{
> +	struct hci_rp_user_confirm_reply *rp = (void *) skb->data;
> +
> +	BT_DBG("%s status 0x%x", hdev->name, rp->status);
> +
> +	hci_dev_lock(hdev);
> +
> +	if (test_bit(HCI_MGMT, &hdev->flags))
> +		mgmt_user_passkey_neg_reply_complete(hdev, &rp->bdaddr,
> +								rp->status);
> +
> +	hci_dev_unlock(hdev);
> +}
> +
>  static void hci_cc_read_local_oob_data_reply(struct hci_dev *hdev,
>  							struct sk_buff *skb)
>  {
> @@ -2011,6 +2042,14 @@ static inline void hci_cmd_complete_evt(struct hci_dev *hdev, struct sk_buff *sk
>  		hci_cc_user_confirm_neg_reply(hdev, skb);
>  		break;
>  
> +	case HCI_OP_USER_PASSKEY_REPLY:
> +		hci_cc_user_passkey_reply(hdev, skb);
> +		break;
> +
> +	case HCI_OP_USER_PASSKEY_NEG_REPLY:
> +		hci_cc_user_passkey_neg_reply(hdev, skb);
> +		break;
> +
>  	case HCI_OP_LE_SET_SCAN_ENABLE:
>  		hci_cc_le_set_scan_enable(hdev, skb);
>  		break;
> @@ -2770,6 +2809,25 @@ unlock:
>  	hci_dev_unlock(hdev);
>  }
>  
> +static inline void hci_user_passkey_request_evt(struct hci_dev *hdev,
> +							struct sk_buff *skb)
> +{
> +	struct hci_ev_user_passkey_req *ev = (void *) skb->data;
> +
> +	BT_DBG("%s", hdev->name);
> +
> +	hci_dev_lock(hdev);
> +
> +	/* Passkey Request is a degenerate case of User Confirm */
> +	if (test_bit(HCI_MGMT, &hdev->flags))
> +		mgmt_user_confirm_request(hdev, &ev->bdaddr, 0, 0);
> +	else
> +		hci_send_cmd(hdev, HCI_OP_USER_PASSKEY_NEG_REPLY,
> +					sizeof(ev->bdaddr), &ev->bdaddr);

We might want a comment here that this needs fixing ;)

> +
> +	hci_dev_unlock(hdev);
> +}
> +
>  static inline void hci_simple_pair_complete_evt(struct hci_dev *hdev, struct sk_buff *skb)
>  {
>  	struct hci_ev_simple_pair_complete *ev = (void *) skb->data;
> @@ -3109,6 +3167,10 @@ void hci_event_packet(struct hci_dev *hdev, struct sk_buff *skb)
>  		hci_user_confirm_request_evt(hdev, skb);
>  		break;
>  
> +	case HCI_EV_USER_PASSKEY_REQUEST:
> +		hci_user_passkey_request_evt(hdev, skb);
> +		break;
> +
>  	case HCI_EV_SIMPLE_PAIR_COMPLETE:
>  		hci_simple_pair_complete_evt(hdev, skb);
>  		break;
> -- 
> 1.7.7.2
> 

Regards

Marcel


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