int AJ_Main(void) { AJ_Status status = AJ_OK; uint8_t isUnmarshalingSuccessful = FALSE; AJSVC_ServiceStatus serviceStatus; AJ_Message msg; uint8_t forcedDisconnnect = FALSE; uint8_t rebootRequired = FALSE; uint8_t sent = FALSE; AJ_Initialize(); AJ_AboutSetIcon(aboutIconContent, aboutIconContentSize, aboutIconMimetype, aboutIconUrl); status = PropertyStore_Init(); if (status != AJ_OK) { goto Exit; } status = NotificationProducer_Init(); if (status != AJ_OK) { goto Exit; } SetBusAuthPwdCallback(MyBusAuthPwdCB); while (TRUE) { status = AJ_OK; serviceStatus = AJSVC_SERVICE_STATUS_NOT_HANDLED; if (!isBusConnected) { status = AJSVC_RoutingNodeConnect(&busAttachment, ROUTING_NODE_NAME, AJAPP_CONNECT_TIMEOUT, AJAPP_CONNECT_PAUSE, AJAPP_BUS_LINK_TIMEOUT, &isBusConnected); if (!isBusConnected) { // Failed to connect to Routing Node? continue; // Retry establishing connection to Routing Node } } status = AJApp_ConnectedHandler(&busAttachment); if (status == AJ_OK) { status = AJ_UnmarshalMsg(&busAttachment, &msg, AJAPP_UNMARSHAL_TIMEOUT); isUnmarshalingSuccessful = (status == AJ_OK); if (status == AJ_ERR_TIMEOUT) { if (AJ_ERR_LINK_TIMEOUT == AJ_BusLinkStateProc(&busAttachment)) { status = AJ_ERR_READ; // something's not right. force disconnect } else { // nothing on bus, do our own thing SendNotification(&busAttachment); sent = TRUE; } } if (isUnmarshalingSuccessful) { if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJApp_MessageProcessor(&busAttachment, &msg, &status); } if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { //Pass to the built-in bus message handlers status = AJ_BusHandleBusMessage(&msg); } AJ_NotifyLinkActive(); } //Unmarshaled messages must be closed to free resources AJ_CloseMsg(&msg); } if (sent) { AJ_Sleep(10000); // Give the notification message a chance to reach a peer Consumer before exiting. AJApp_DisconnectHandler(&busAttachment, TRUE); AJSVC_RoutingNodeDisconnect(&busAttachment, TRUE, AJAPP_SLEEP_TIME, AJAPP_SLEEP_TIME, NULL); break; } if (status == AJ_ERR_READ || status == AJ_ERR_RESTART || status == AJ_ERR_RESTART_APP) { if (isBusConnected) { forcedDisconnnect = (status != AJ_ERR_READ); rebootRequired = (status == AJ_ERR_RESTART_APP); AJApp_DisconnectHandler(&busAttachment, forcedDisconnnect); AJSVC_RoutingNodeDisconnect(&busAttachment, forcedDisconnnect, AJAPP_SLEEP_TIME, AJAPP_SLEEP_TIME, &isBusConnected); if (rebootRequired) { AJ_Reboot(); } } } } // while (TRUE) return 0; Exit: return (1); }
int AJ_Main(void) { AJ_Status status = AJ_OK; uint8_t isUnmarshalingSuccessful = FALSE; AJSVC_ServiceStatus serviceStatus; AJ_Message msg; uint8_t forcedDisconnnect = FALSE; uint8_t rebootRequired = FALSE; AJ_Initialize(); AJ_AboutSetIcon(aboutIconContent, aboutIconContentSize, aboutIconMimetype, aboutIconUrl); status = PropertyStore_Init(); if (status != AJ_OK) { goto Exit; } #ifdef SUSI status = SusiMethods_Init(); if (status != AJ_OK) { goto Exit; } #endif #ifdef EVENTS_AND_ACTIONS status = EventsAndActions_Init(propertyStoreDefaultLanguages); if (status != AJ_OK) { goto Exit; } #endif status = AJServices_Init(AJ_ABOUT_SERVICE_PORT, deviceManufactureName, deviceProductName); if (status != AJ_OK) { goto Exit; } SetBusAuthPwdCallback(MyBusAuthPwdCB); while (TRUE) { status = AJ_OK; serviceStatus = AJSVC_SERVICE_STATUS_NOT_HANDLED; if (!isBusConnected) { status = AJSVC_RoutingNodeConnect(&busAttachment, ROUTING_NODE_NAME, AJAPP_CONNECT_TIMEOUT, AJAPP_CONNECT_PAUSE, AJAPP_BUS_LINK_TIMEOUT, &isBusConnected); if (!isBusConnected) { // Failed to connect to Routing Node? continue; // Retry establishing connection to Routing Node. } /* Setup password based authentication listener for secured peer to peer connections */ AJ_BusSetPasswordCallback(&busAttachment, PasswordCallback); } status = AJApp_ConnectedHandler(&busAttachment, AJAPP_MAX_INIT_ATTEMPTS, AJAPP_SLEEP_TIME); if (status == AJ_OK) { status = AJ_UnmarshalMsg(&busAttachment, &msg, AJAPP_UNMARSHAL_TIMEOUT); isUnmarshalingSuccessful = (status == AJ_OK); if (status == AJ_ERR_TIMEOUT) { if (AJ_ERR_LINK_TIMEOUT == AJ_BusLinkStateProc(&busAttachment)) { status = AJ_ERR_READ; // something's not right. force disconnect } else { // nothing on bus, do our own thing #ifdef SUSI SusiMethods_DoWork(&busAttachment); #endif #ifdef EVENTS_AND_ACTIONS EventsAndActions_DoWork(&busAttachment); #endif AJApp_DoWork(&busAttachment); continue; } } if (isUnmarshalingSuccessful) { #ifdef SUSI if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = SusiMethodsMessageProcessor(&busAttachment, &msg, &status); } #endif #ifdef EVENTS_AND_ACTIONS if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = EventsAndActionsMessageProcessor(&busAttachment, &msg, &status); } #endif if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJApp_MessageProcessor(&busAttachment, &msg, &status); } if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { //Pass to the built-in bus message handlers status = AJ_BusHandleBusMessage(&msg); } AJ_NotifyLinkActive(); } //Unmarshaled messages must be closed to free resources AJ_CloseMsg(&msg); } if (status == AJ_ERR_READ || status == AJ_ERR_RESTART || status == AJ_ERR_RESTART_APP) { if (isBusConnected) { forcedDisconnnect = (status != AJ_ERR_READ); rebootRequired = (status == AJ_ERR_RESTART_APP); AJApp_DisconnectHandler(&busAttachment, forcedDisconnnect); AJSVC_RoutingNodeDisconnect(&busAttachment, forcedDisconnnect, AJAPP_SLEEP_TIME, AJAPP_SLEEP_TIME, &isBusConnected); if (rebootRequired) { AJ_Reboot(); } } } } // while (TRUE) #ifdef SUSI SusiMethods_Finish(&busAttachment); #endif return 0; Exit: return (1); }
int AJ_Main(void) { AJ_Status status = AJ_OK; uint8_t isUnmarshalingSuccessful = FALSE; AJSVC_ServiceStatus serviceStatus; AJ_Message msg; uint8_t forcedDisconnnect = FALSE; uint8_t rebootRequired = FALSE; // TestTimeConversion(); // return(0); memset(&g_ts_date, 0, sizeof(TS_Date)); memset(&g_ts_time, 0, sizeof(TS_Time)); AJ_Initialize(); AJ_AboutSetIcon(aboutIconContent, aboutIconContentSize, aboutIconMimetype, aboutIconUrl); status = PropertyStore_Init(); if (status != AJ_OK) { goto Exit; } AJ_RegisterDescriptionLanguages(SUPPORTED_LANGUAGES); status = TimeServer_Init(); if (status != AJ_OK) { goto Exit; } SetBusAuthPwdCallback(MyBusAuthPwdCB); while (TRUE) { status = AJ_OK; serviceStatus = AJSVC_SERVICE_STATUS_NOT_HANDLED; if (!isBusConnected) { status = AJSVC_RoutingNodeConnect(&busAttachment, ROUTING_NODE_NAME, AJAPP_CONNECT_TIMEOUT, AJAPP_CONNECT_PAUSE, AJAPP_BUS_LINK_TIMEOUT, &isBusConnected); if (!isBusConnected) { // Failed to connect to Routing Node. continue; // Retry establishing connection to Routing Node. } /* Setup password based authentication listener for secured peer to peer connections */ AJ_BusSetPasswordCallback(&busAttachment, PasswordCallback); } status = AJApp_ConnectedHandler(&busAttachment); if (status == AJ_OK) { status = AJ_UnmarshalMsg(&busAttachment, &msg, AJAPP_UNMARSHAL_TIMEOUT); isUnmarshalingSuccessful = (status == AJ_OK); if (status == AJ_ERR_TIMEOUT) { if (AJ_ERR_LINK_TIMEOUT == AJ_BusLinkStateProc(&busAttachment)) { status = AJ_ERR_READ; // something's not right. force disconnect } else { // nothing on bus, do our own thing AJTS_DoWork(&busAttachment); continue; } } if (isUnmarshalingSuccessful) { if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJApp_MessageProcessor(&busAttachment, &msg, &status); } if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { //Pass to the built-in bus message handlers status = AJ_BusHandleBusMessage(&msg); } AJ_NotifyLinkActive(); } //Unmarshaled messages must be closed to free resources AJ_CloseMsg(&msg); } if (status == AJ_ERR_READ || status == AJ_ERR_RESTART || status == AJ_ERR_RESTART_APP) { if (isBusConnected) { forcedDisconnnect = (status != AJ_ERR_READ); rebootRequired = (status == AJ_ERR_RESTART_APP); AJApp_DisconnectHandler(&busAttachment, forcedDisconnnect); AJSVC_RoutingNodeDisconnect(&busAttachment, forcedDisconnnect, AJAPP_SLEEP_TIME, AJAPP_SLEEP_TIME, &isBusConnected); if (rebootRequired) { AJ_Reboot(); } } } } // while (TRUE) return 0; Exit: return (1); }
int AJ_Main(void) { AJ_Status status = AJ_OK; uint8_t isUnmarshalingSuccessful = FALSE; AJSVC_ServiceStatus serviceStatus; AJ_Message msg; AJ_Initialize(); AJ_AboutSetIcon(aboutIconContent, aboutIconContentSize, aboutIconMimetype, aboutIconUrl); status = PropertyStore_Init(); if (status != AJ_OK) { goto Exit; } status = AJServices_Init(AJ_ABOUT_SERVICE_PORT, AppObjects, ProxyObjects, deviceManufactureName, deviceProductName); if (status != AJ_OK) { goto Exit; } AJ_RegisterObjects(AppObjects, ProxyObjects); SetBusAuthPwdCallback(MyBusAuthPwdCB); while (TRUE) { status = AJ_OK; serviceStatus = AJSVC_SERVICE_STATUS_NOT_HANDLED; if (!isBusConnected) { isBusConnected = AJRouter_Connect(&busAttachment, ROUTER_NAME); if (!isBusConnected) { // Failed to connect to router? continue; // Retry establishing connection to router. } } status = AJApp_ConnectedHandler(&busAttachment); #ifdef ONBOARDING_SERVICE if (!AJOBS_IsWiFiConnected()) { status = AJ_ERR_RESTART; } #endif if (status == AJ_OK) { status = AJ_UnmarshalMsg(&busAttachment, &msg, AJAPP_UNMARSHAL_TIMEOUT); isUnmarshalingSuccessful = (status == AJ_OK); if (status == AJ_ERR_TIMEOUT) { if (AJ_ERR_LINK_TIMEOUT == AJ_BusLinkStateProc(&busAttachment)) { status = AJ_ERR_READ; // something's not right. force disconnect } else { // nothing on bus, do our own thing AJApp_DoWork(&busAttachment); continue; } } if (isUnmarshalingSuccessful) { if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJApp_MessageProcessor(&busAttachment, &msg, &status); } if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { //Pass to the built-in bus message handlers status = AJ_BusHandleBusMessage(&msg); } AJ_NotifyLinkActive(); } //Unmarshaled messages must be closed to free resources AJ_CloseMsg(&msg); } if (status == AJ_ERR_READ || status == AJ_ERR_RESTART || status == AJ_ERR_RESTART_APP) { if (isBusConnected) { AJApp_DisconnectHandler(&busAttachment, status != AJ_ERR_READ); isBusConnected = !AJRouter_Disconnect(&busAttachment, status != AJ_ERR_READ); if (status == AJ_ERR_RESTART_APP) { AJ_Reboot(); } } } } // while (TRUE) return 0; Exit: return (1); }
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; }
int AJ_Main(void) { AJ_Status status = AJ_OK; uint8_t isUnmarshalingSuccessful = FALSE; AJSVC_ServiceStatus serviceStatus; AJ_Message msg; AJ_Initialize(); status = Consumer_Init(); if (status != AJ_OK) { goto Exit; } AJ_RegisterObjects(NULL, ProxyObjects); SetBusAuthPwdCallback(MyBusAuthPwdCB); while (TRUE) { status = AJ_OK; serviceStatus = AJSVC_SERVICE_STATUS_NOT_HANDLED; if (!isBusConnected) { isBusConnected = AJRouter_Connect(&busAttachment, ROUTER_NAME); if (!isBusConnected) { // Failed to connect to router? continue; // Retry establishing connection to router. } } status = AJApp_ConnectedHandler(&busAttachment); if (status == AJ_OK) { status = AJ_UnmarshalMsg(&busAttachment, &msg, AJAPP_UNMARSHAL_TIMEOUT); isUnmarshalingSuccessful = (status == AJ_OK); if (status == AJ_ERR_TIMEOUT) { if (AJ_ERR_LINK_TIMEOUT == AJ_BusLinkStateProc(&busAttachment)) { status = AJ_ERR_READ; // something's not right. force disconnect } } if (isUnmarshalingSuccessful) { if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { serviceStatus = AJApp_MessageProcessor(&busAttachment, &msg, &status); } if (serviceStatus == AJSVC_SERVICE_STATUS_NOT_HANDLED) { //Pass to the built-in bus message handlers status = AJ_BusHandleBusMessage(&msg); } AJ_NotifyLinkActive(); } //Unmarshaled messages must be closed to free resources AJ_CloseMsg(&msg); } if (status == AJ_ERR_READ || status == AJ_ERR_RESTART || status == AJ_ERR_RESTART_APP) { if (isBusConnected) { AJApp_DisconnectHandler(&busAttachment, status != AJ_ERR_READ); isBusConnected = !AJRouter_Disconnect(&busAttachment, status != AJ_ERR_READ); if (status == AJ_ERR_RESTART_APP) { AJ_Reboot(); } } } } // while (TRUE) return 0; Exit: return (1); }