/** * Handle requests to an endpoint. */ void E133Device::EndpointRequest( const ola::plugin::e131::TransportHeader *transport_header, const ola::plugin::e131::E133Header *e133_header, const std::string &raw_request) { IPV4SocketAddress target = transport_header->Source(); uint16_t endpoint_id = e133_header->Endpoint(); OLA_INFO << "Got request for to endpoint " << endpoint_id << " from " << target; E133EndpointInterface *endpoint = NULL; if (endpoint_id) endpoint = m_endpoint_manager->GetEndpoint(endpoint_id); else endpoint = m_root_endpoint; if (!endpoint) { OLA_INFO << "Request to non-existent endpoint " << endpoint_id; SendStatusMessage(target, e133_header->Sequence(), endpoint_id, ola::e133::SC_E133_NONEXISTANT_ENDPOINT, "No such endpoint"); return; } // attempt to unpack as a request const ola::rdm::RDMRequest *request = ola::rdm::RDMRequest::InflateFromData( reinterpret_cast<const uint8_t*>(raw_request.data()), raw_request.size()); if (!request) { OLA_WARN << "Failed to unpack E1.33 RDM message, ignoring request."; // There is no way to return 'invalid request' so pretend this is a timeout // but give a descriptive error msg. SendStatusMessage(target, e133_header->Sequence(), endpoint_id, ola::e133::SC_E133_RDM_TIMEOUT, "Invalid RDM request"); return; } endpoint->SendRDMRequest( request, ola::NewSingleCallback(this, &E133Device::EndpointRequestComplete, target, e133_header->Sequence(), endpoint_id)); }
/** * Handle requests to an endpoint. */ void E133Device::EndpointRequest( uint16_t endpoint_id, const ola::plugin::e131::TransportHeader &transport_header, const ola::plugin::e131::E133Header &e133_header, const std::string &raw_request) { OLA_INFO << "Got request for to endpoint " << endpoint_id << " from " << transport_header.SourceIP(); E133EndpointInterface *endpoint = NULL; if (endpoint_id) endpoint = m_endpoint_manager->GetEndpoint(endpoint_id); else endpoint = m_root_endpoint; if (!endpoint) { OLA_INFO << "Request to endpoint " << endpoint_id << " but no Endpoint has been registered, this is a bug!"; return; } // attempt to unpack as a request const ola::rdm::RDMRequest *request = ola::rdm::RDMRequest::InflateFromData( reinterpret_cast<const uint8_t*>(raw_request.data()), raw_request.size()); if (!request) { OLA_WARN << "Failed to unpack E1.33 RDM message, ignoring request."; return; } endpoint->SendRDMRequest( request, ola::NewSingleCallback(this, &E133Device::EndpointRequestComplete, transport_header.SourceIP(), transport_header.SourcePort(), e133_header.Sequence(), endpoint_id)); }