in nmxact/nmble/conn.go [265:333]
func (c *Conn) eventListen(bl *Listener) error {
// Terminates on:
// * BLE listener error (also triggered by txvr being stopped).
// * Receive of disconnect event.
//
// On terminate, this Goroutine shuts the connection object down.
c.wg.Add(1)
go func() {
defer c.wg.Done()
defer c.rxvr.RemoveListener("connect", bl)
defer close(c.dropChan)
for {
select {
case err, ok := <-bl.ErrChan:
if ok {
c.enqueueShutdown(err)
}
return
case bm, ok := <-bl.MsgChan:
if ok {
switch msg := bm.(type) {
case *BleMtuChangeEvt:
if msg.Status != 0 {
err := StatusError(MSG_OP_EVT,
MSG_TYPE_MTU_CHANGE_EVT,
msg.Status)
log.Debugf(err.Error())
} else {
log.Debugf("BLE ATT MTU updated; from=%d to=%d",
c.attMtu, msg.Mtu)
c.attMtu = msg.Mtu
}
case *BleEncChangeEvt:
var err error
if msg.Status != 0 {
err = StatusError(MSG_OP_EVT,
MSG_TYPE_ENC_CHANGE_EVT,
msg.Status)
log.Debugf(err.Error())
} else {
log.Debugf("Connection encrypted; conn_handle=%d",
msg.ConnHandle)
c.updateDescriptor()
}
// Unblock any initiate-security procedures.
c.encBlocker.Unblock(err)
case *BlePasskeyEvt:
c.smIoChan <- SmIoDemand{
Action: msg.Action,
Numcmp: msg.Numcmp,
}
case *BleDisconnectEvt:
c.enqueueShutdown(c.newDisconnectError(msg.Reason))
return
default:
}
}
}
}
}()
return nil
}