コード例 #1
0
ファイル: burgerServer.c プロジェクト: H-H-bin/legato-af
//--------------------------------------------------------------------------------------------------
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);
    }
}
コード例 #2
0
ファイル: server.c プロジェクト: mbarazzouq/legato-af
//--------------------------------------------------------------------------------------------------
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);
}
コード例 #3
0
ファイル: server.c プロジェクト: mbarazzouq/legato-af
//--------------------------------------------------------------------------------------------------
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);
}