AJSVC_ServiceStatus AJS_CP_MessageHandler(AJ_BusAttachment* busAttachment, AJ_Message* msg, AJ_Status* status) { if (objectList && (LST_INDEX(msg->msgId) == AJCPS_OBJECT_LIST_INDEX)) { return AJCPS_MessageProcessor(busAttachment, msg, status); } else { return AJSVC_SERVICE_STATUS_NOT_HANDLED; } }
AJSVC_ServiceStatus AJServices_MessageProcessor(AJ_BusAttachment* busAttachment, AJ_Message* msg, AJ_Status* status) { AJSVC_ServiceStatus serviceStatus = AJSVC_SERVICE_STATUS_NOT_HANDLED; if (msg->msgId == AJ_METHOD_ACCEPT_SESSION) { // Process all incoming request to join a session and pass request for acceptance by all services uint16_t port; char* joiner; uint32_t sessionId = 0; AJ_UnmarshalArgs(msg, "qus", &port, &sessionId, &joiner); uint8_t session_accepted = FALSE; session_accepted |= AJServices_CheckSessionAccepted(port, sessionId, joiner); *status = AJ_BusReplyAcceptSession(msg, session_accepted); AJ_AlwaysPrintf(("%s session session_id=%u joiner=%s for port %u\n", (session_accepted ? "Accepted" : "Rejected"), sessionId, joiner, port)); serviceStatus = AJSVC_SERVICE_STATUS_HANDLED; } else if (msg->msgId == AJ_REPLY_ID(AJ_METHOD_JOIN_SESSION)) { // Process all incoming replies to join a session and pass session state change to all services uint32_t replyCode = 0; uint32_t sessionId = 0; uint8_t sessionJoined = FALSE; uint32_t joinSessionReplySerialNum = msg->replySerial; if (msg->hdr->msgType == AJ_MSG_ERROR) { AJ_AlwaysPrintf(("JoinSessionReply: AJ_METHOD_JOIN_SESSION: AJ_ERR_FAILURE\n")); *status = AJ_ERR_FAILURE; } else { *status = AJ_UnmarshalArgs(msg, "uu", &replyCode, &sessionId); if (*status != AJ_OK) { AJ_AlwaysPrintf(("JoinSessionReply: failed to unmarshal\n")); } else { if (replyCode == AJ_JOINSESSION_REPLY_SUCCESS) { AJ_AlwaysPrintf(("JoinSessionReply: AJ_JOINSESSION_REPLY_SUCCESS with sessionId=%u and replySerial=%u\n", sessionId, joinSessionReplySerialNum)); sessionJoined = TRUE; } else { AJ_AlwaysPrintf(("JoinSessionReply: AJ_ERR_FAILURE\n")); *status = AJ_ERR_FAILURE; } } } if (sessionJoined) { serviceStatus = AJServices_SessionJoinedHandler(busAttachment, sessionId, joinSessionReplySerialNum); } else { serviceStatus = AJServices_SessionRejectedHandler(busAttachment, sessionId, joinSessionReplySerialNum, replyCode); } if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { AJ_ResetArgs(msg); } } else if (msg->msgId == AJ_SIGNAL_SESSION_LOST || msg->msgId == AJ_SIGNAL_SESSION_LOST_WITH_REASON) { // Process all incoming LeaveSession replies and lost session signals and pass session state change to all services uint32_t sessionId = 0; uint32_t reason = 0; if (msg->msgId == AJ_SIGNAL_SESSION_LOST_WITH_REASON) { *status = AJ_UnmarshalArgs(msg, "uu", &sessionId, &reason); } else { *status = AJ_UnmarshalArgs(msg, "u", &sessionId); } if (*status != AJ_OK) { AJ_AlwaysPrintf(("JoinSessionReply: failed to marshal\n")); } else { AJ_AlwaysPrintf(("Session lost: sessionId = %u, reason = %u\n", sessionId, reason)); serviceStatus = AJServices_SessionLostHandler(busAttachment, sessionId, reason); if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { AJ_ResetArgs(msg); } } } else { if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJApp_MessageProcessor(busAttachment, msg, status); } if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJ_About_MessageProcessor(busAttachment, msg, status); } #ifdef CONFIG_SERVICE if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJCFG_MessageProcessor(busAttachment, msg, status); } #endif #ifdef ONBOARDING_SERVICE if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJOBS_MessageProcessor(busAttachment, msg, status); } #endif #ifdef NOTIFICATION_SERVICE_PRODUCER if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJNS_Producer_MessageProcessor(busAttachment, msg, status); } #endif #ifdef NOTIFICATION_SERVICE_CONSUMER if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJNS_Consumer_MessageProcessor(busAttachment, msg, status); } #endif #ifdef CONTROLPANEL_SERVICE if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJCPS_MessageProcessor(busAttachment, msg, status); } #endif } return serviceStatus; }