in nmxact/nmble/ble_act.go [254:310]
func discSvcUuid(x *BleXport, bl *Listener, r *BleDiscSvcUuidReq) (
*BleDiscSvc, error) {
const rspType = MSG_TYPE_DISC_SVC_UUID
const evtType = MSG_TYPE_DISC_SVC_EVT
j, err := json.Marshal(r)
if err != nil {
return nil, err
}
if err := x.Tx(j); err != nil {
return nil, err
}
bhdTmoChan := bl.AfterTimeout(x.RspTimeout())
var svc *BleDiscSvc
for {
select {
case err := <-bl.ErrChan:
return nil, err
case bm := <-bl.MsgChan:
switch msg := bm.(type) {
case *BleDiscSvcUuidRsp:
bl.Acked = true
if msg.Status != 0 {
return nil, StatusError(MSG_OP_RSP, rspType, msg.Status)
}
case *BleDiscSvcEvt:
switch msg.Status {
case 0:
svc = &msg.Svc
case ERR_CODE_EDONE:
if svc == nil {
return nil, nmxutil.FmtBleHostError(
msg.Status,
"Peer doesn't support required service: %s",
r.Uuid.String())
}
return svc, nil
default:
return nil, StatusError(MSG_OP_EVT, evtType, msg.Status)
}
default:
}
case _, ok := <-bhdTmoChan:
if ok {
x.Restart("Blehostd timeout: " + MsgTypeToString(rspType))
}
bhdTmoChan = nil
}
}
}