APDU * Layer7_Individual::Request_Response (APDU * r) { APDU *a; CArray *c; l4->Send (r->ToPacket ()); pth_event_t t = pth_event (PTH_EVENT_RTIME, pth_time (6, 100)); while (pth_event_status (t) != PTH_STATUS_OCCURRED) { c = l4->Get (t); if (c) { if (c->len () == 0) { delete c; pth_event_free (t, PTH_FREE_THIS); return 0; } a = APDU::fromPacket (*c, this->t); delete c; if (a->isResponse (r)) { pth_event_free (t, PTH_FREE_THIS); return a; } delete a; pth_event_free (t, PTH_FREE_THIS); return 0; } } pth_event_free (t, PTH_FREE_THIS); return 0; }
Array < eibaddr_t > Layer7_Broadcast::A_IndividualAddress_Read (unsigned timeout) { Array < eibaddr_t > addrs; A_IndividualAddress_Read_PDU r; APDU *a; l4->Send (r.ToPacket ()); pth_event_t t = pth_event (PTH_EVENT_RTIME, pth_time (timeout, 0)); while (pth_event_status (t) != PTH_STATUS_OCCURRED) { BroadcastComm *c = l4->Get (t); if (c) { a = APDU::fromPacket (c->data); if (a->isResponse (&r)) { addrs.resize (addrs () + 1); addrs[addrs () - 1] = c->src; } delete a; delete c; } } pth_event_free (t, PTH_FREE_THIS); return addrs; }