static uint8_t AJServices_CheckSessionAccepted(uint16_t port, uint32_t sessionId, char* joiner) { uint8_t session_accepted = FALSE; session_accepted |= (port == AJ_ABOUT_SERVICE_PORT); #ifdef NOTIFICATION_SERVICE_PRODUCER session_accepted |= AJNS_Producer_CheckSessionAccepted(port, sessionId, joiner); #endif #ifdef CONTROLPANEL_SERVICE session_accepted |= AJCPS_CheckSessionAccepted(port, sessionId, joiner); #endif return session_accepted; }
static AJ_Status SessionDispatcher(duk_context* ctx, AJ_Message* msg) { AJ_Status status; uint32_t sessionId; uint16_t port; char* joiner; uint8_t ldstate; status = AJ_UnmarshalArgs(msg, "qus", &port, &sessionId, &joiner); if (status != AJ_OK) { return status; } /* * Automatically accept sessions requests to the application port */ if (port == AJS_APP_PORT) { return AJS_HandleAcceptSession(ctx, msg, port, sessionId, joiner); } /* * See if this is the control panel port */ if (AJCPS_CheckSessionAccepted(port, sessionId, joiner)) { return AJ_BusReplyAcceptSession(msg, TRUE); } status = AJ_ResetArgs(msg); if (status != AJ_OK) { return status; } /* * JavaScript doesn't accept/reject session so the session is either for the console or perhaps * a service if the services bind their own ports. */ #if !defined(AJS_CONSOLE_LOCKDOWN) status = AJS_GetLockdownState(&ldstate); if (status == AJ_OK && ldstate == AJS_CONSOLE_UNLOCKED) { status = AJS_ConsoleMsgHandler(ctx, msg); } #endif if (status == AJ_ERR_NO_MATCH) { status = AJS_ServicesMsgHandler(msg); } if (status == AJ_ERR_NO_MATCH) { AJ_ErrPrintf(("SessionDispatcher rejecting attempt to join unbound port %d\n", port)); status = AJ_BusReplyAcceptSession(msg, FALSE); } return status; }