Bluetooth: Add support for deferring RFCOMM connection setup
In order to decide if listening RFCOMM sockets should be accept()ed the BD_ADDR of the remote device needs to be known. This patch adds a socket option which defines a timeout for deferring the actual connection setup. The connection setup is done after reading from the socket for the first time. Until then writing to the socket returns ENOTCONN. Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
This commit is contained in:
@@ -185,6 +185,7 @@ struct rfcomm_dlc {
|
||||
u8 out;
|
||||
|
||||
u32 link_mode;
|
||||
u32 defer_setup;
|
||||
|
||||
uint mtu;
|
||||
uint cfc;
|
||||
@@ -202,10 +203,11 @@ struct rfcomm_dlc {
|
||||
#define RFCOMM_RX_THROTTLED 0
|
||||
#define RFCOMM_TX_THROTTLED 1
|
||||
#define RFCOMM_TIMED_OUT 2
|
||||
#define RFCOMM_MSC_PENDING 3
|
||||
#define RFCOMM_MSC_PENDING 3
|
||||
#define RFCOMM_AUTH_PENDING 4
|
||||
#define RFCOMM_AUTH_ACCEPT 5
|
||||
#define RFCOMM_AUTH_REJECT 6
|
||||
#define RFCOMM_DEFER_SETUP 7
|
||||
|
||||
/* Scheduling flags and events */
|
||||
#define RFCOMM_SCHED_STATE 0
|
||||
@@ -239,6 +241,7 @@ int rfcomm_dlc_close(struct rfcomm_dlc *d, int reason);
|
||||
int rfcomm_dlc_send(struct rfcomm_dlc *d, struct sk_buff *skb);
|
||||
int rfcomm_dlc_set_modem_status(struct rfcomm_dlc *d, u8 v24_sig);
|
||||
int rfcomm_dlc_get_modem_status(struct rfcomm_dlc *d, u8 *v24_sig);
|
||||
void rfcomm_dlc_accept(struct rfcomm_dlc *d);
|
||||
|
||||
#define rfcomm_dlc_lock(d) spin_lock(&d->lock)
|
||||
#define rfcomm_dlc_unlock(d) spin_unlock(&d->lock)
|
||||
@@ -333,7 +336,6 @@ struct rfcomm_dev_req {
|
||||
bdaddr_t src;
|
||||
bdaddr_t dst;
|
||||
u8 channel;
|
||||
|
||||
};
|
||||
|
||||
struct rfcomm_dev_info {
|
||||
|
Reference in New Issue
Block a user