//-------------------------------------------------------------------------------------------------- static void MsgRecvHandler ( le_msg_MessageRef_t msgRef, ///< Reference to the received message. void* opaqueContextPtr ///< contextPtr passed to le_msg_SetServiceRecvHandler() ) //-------------------------------------------------------------------------------------------------- { Context_t* contextPtr = opaqueContextPtr; LE_ASSERT(contextPtr != NULL); LE_TEST(contextPtr->strPtr == ContextStr); LE_TEST(strcmp(contextPtr->strPtr, ContextStr) == 0); le_msg_SessionRef_t sessionRef = le_msg_GetSession(msgRef); LE_ASSERT(sessionRef != NULL); burger_Message_t* msgPtr = le_msg_GetPayloadPtr(msgRef); LE_ASSERT(msgPtr != NULL); LE_INFO("Received '%x'", msgPtr->payload); switch (msgPtr->payload) { case 0xBEEFBEEF: LE_TEST(le_msg_NeedsResponse(msgRef) == false); le_msg_ReleaseMsg(msgRef); break; case 0xDEADBEEF: LE_TEST(le_msg_NeedsResponse(msgRef) == true); contextPtr->requestCount++; LE_INFO("Received transaction request (%d/%d).", contextPtr->requestCount, contextPtr->maxRequestCount); // Construct and send response. msgPtr->payload = 0xBEEFDEAD; le_msg_Respond(msgRef); // If we have received the magic number of requests, tell the client to // terminate the test by sending 0xDEADDEAD to the client. if (contextPtr->requestCount >= contextPtr->maxRequestCount) { LE_INFO("Maximum number of request-response transactions reached."); msgRef = le_msg_CreateMsg(sessionRef); msgPtr = le_msg_GetPayloadPtr(msgRef); msgPtr->payload = 0xDEADDEAD; le_msg_Send(msgRef); } break; default: LE_FATAL("Unexpected message payload (%x)", msgPtr->payload); } }
//-------------------------------------------------------------------------------------------------- void TriggerCallbackTestRespond ( ServerCmdRef_t _cmdRef ) { LE_ASSERT(_cmdRef != NULL); // Get the message related data le_msg_MessageRef_t _msgRef = (le_msg_MessageRef_t)_cmdRef; _Message_t* _msgPtr = le_msg_GetPayloadPtr(_msgRef); __attribute__((unused)) uint8_t* _msgBufPtr = _msgPtr->buffer; // Ensure the passed in msgRef is for the correct message LE_ASSERT(_msgPtr->id == _MSGID_TriggerCallbackTest); // Ensure that this Respond function has not already been called LE_FATAL_IF( !le_msg_NeedsResponse(_msgRef), "Response has already been sent"); // Pack any "out" parameters // Return the response LE_DEBUG("Sending response to client session %p", le_msg_GetSession(_msgRef)); le_msg_Respond(_msgRef); }
//-------------------------------------------------------------------------------------------------- void allParametersRespond ( ServerCmdRef_t _cmdRef, uint32_t b, size_t outputNumElements, uint32_t* outputPtr, char* response, char* more ) { LE_ASSERT(_cmdRef != NULL); // Get the message related data le_msg_MessageRef_t _msgRef = (le_msg_MessageRef_t)_cmdRef; _Message_t* _msgPtr = le_msg_GetPayloadPtr(_msgRef); __attribute__((unused)) uint8_t* _msgBufPtr = _msgPtr->buffer; // Ensure the passed in msgRef is for the correct message LE_ASSERT(_msgPtr->id == _MSGID_allParameters); // Ensure that this Respond function has not already been called LE_FATAL_IF( !le_msg_NeedsResponse(_msgRef), "Response has already been sent"); // Pack any "out" parameters _msgBufPtr = PackData( _msgBufPtr, &b, sizeof(uint32_t) ); _msgBufPtr = PackData( _msgBufPtr, &outputNumElements, sizeof(size_t) ); _msgBufPtr = PackData( _msgBufPtr, outputPtr, outputNumElements*sizeof(uint32_t) ); _msgBufPtr = PackString( _msgBufPtr, response ); _msgBufPtr = PackString( _msgBufPtr, more ); // Return the response LE_DEBUG("Sending response to client session %p", le_msg_GetSession(_msgRef)); le_msg_Respond(_msgRef); }