static uint8_t AJRouter_Connect(AJ_BusAttachment* busAttachment, const char* routerName) { AJ_Status status; const char* busUniqueName; while (TRUE) { AJ_InfoPrintf(("Attempting to connect to bus '%s'\n", routerName)); status = AJ_FindBusAndConnect(busAttachment, routerName, AJAPP_CONNECT_TIMEOUT); if (status != AJ_OK) { AJ_InfoPrintf(("Failed to connect to bus sleeping for %d seconds\n", AJAPP_CONNECT_PAUSE / 1000)); AJ_Sleep(AJAPP_CONNECT_PAUSE); continue; } busUniqueName = AJ_GetUniqueName(busAttachment); if (busUniqueName == NULL) { AJ_ErrPrintf(("Failed to GetUniqueName() from newly connected bus, retrying\n")); continue; } AJ_InfoPrintf(("Connected to router with BusUniqueName=%s\n", busUniqueName)); break; } /* Setup password based authentication listener for secured peer to peer connections */ AJ_BusSetPasswordCallback(busAttachment, PasswordCallback); /* Configure timeout for the link to the Router bus */ AJ_SetBusLinkTimeout(busAttachment, 60); // 60 seconds return TRUE; }
AJ_Status AJServices_ConnectedHandler(AJ_BusAttachment* busAttachment) { AJ_BusSetPasswordCallback(busAttachment, PasswordCallback); /* Configure timeout for the link to the Router bus */ AJ_SetBusLinkTimeout(busAttachment, 60); // 60 seconds AJ_Status status = AJ_OK; status = AJ_About_ConnectedHandler(busAttachment); if (status != AJ_OK) { goto ErrorExit; } #ifdef CONFIG_SERVICE status = AJCFG_ConnectedHandler(busAttachment); if (status != AJ_OK) { goto ErrorExit; } #endif #ifdef ONBOARDING_SERVICE status = AJOBS_ConnectedHandler(busAttachment); if (status != AJ_OK) { goto ErrorExit; } #endif #ifdef NOTIFICATION_SERVICE_PRODUCER status = AJNS_Producer_ConnectedHandler(busAttachment); if (status != AJ_OK) { goto ErrorExit; } #endif #ifdef CONTROLPANEL_SERVICE status = AJCPS_ConnectedHandler(busAttachment); if (status != AJ_OK) { goto ErrorExit; } #endif #ifdef NOTIFICATION_SERVICE_CONSUMER status = AJNS_Consumer_ConnectedHandler(busAttachment); if (status != AJ_OK) { goto ErrorExit; } #endif return status; ErrorExit: AJ_AlwaysPrintf(("Service ConnectedHandler returned an error %s\n", (AJ_StatusText(status)))); return status; }
AJ_Status AJS_ServicesInit(AJ_BusAttachment* aj) { AJ_Status status = AJ_OK; AJ_BusSetPasswordCallback(aj, AJS_PasswordCallback); status = AJCFG_Start(AJS_FactoryReset, Restart, SetPasscode, IsValueValid); if (status != AJ_OK) { goto Exit; } status = AJNS_Producer_Start(); if (status != AJ_OK) { goto Exit; } Exit: return status; }
AJ_Status AJ_RunAllJoynService(AJ_BusAttachment* bus, AllJoynConfiguration* config) { uint8_t connected = FALSE; AJ_Status status = AJ_OK; while (TRUE) { AJ_Time start = { 0, 0 }; AJ_Message msg; uint32_t now; // get the next timeout //Timer* timer = GetNextTimeout(); uint32_t next; // wait forever uint32_t timeout = (uint32_t) -1; if (!connected) { status = AJ_StartService2( bus, config->daemonName, config->connect_timeout, config->connected, config->session_port, config->service_name, config->flags, config->opts); if (status != AJ_OK) { continue; } AJ_InfoPrintf(("StartService returned AJ_OK\n")); AJ_InfoPrintf(("Connected to Daemon:%s\n", AJ_GetUniqueName(bus))); connected = TRUE; /* Register a callback for providing bus authentication password */ AJ_BusSetPasswordCallback(bus, config->password_callback); /* Configure timeout for the link to the daemon bus */ AJ_SetBusLinkTimeout(bus, config->link_timeout); if (config->connection_handler != NULL) { (config->connection_handler)(connected); } } // absolute time in milliseconds now = AJ_GetElapsedTime(&start, FALSE); next = RunExpiredTimers(now); if (next != (uint32_t) -1) { // if no timers running, wait forever timeout = next; } status = AJ_UnmarshalMsg(bus, &msg, min(500, timeout)); if (AJ_ERR_TIMEOUT == status && AJ_ERR_LINK_TIMEOUT == AJ_BusLinkStateProc(bus)) { status = AJ_ERR_READ; } if (status == AJ_ERR_TIMEOUT) { // go back around and handle the expired timers continue; } if (status == AJ_OK) { uint8_t handled = FALSE; const MessageHandlerEntry* message_entry = config->message_handlers; const PropHandlerEntry* prop_entry = config->prop_handlers; // check the user's handlers first. ANY message that AllJoyn can handle is override-able. while (handled != TRUE && message_entry->msgid != 0) { if (message_entry->msgid == msg.msgId) { if (msg.hdr->msgType == AJ_MSG_METHOD_CALL) { // build a method reply AJ_Message reply; status = AJ_MarshalReplyMsg(&msg, &reply); if (status == AJ_OK) { status = (message_entry->handler)(&msg, &reply); } if (status == AJ_OK) { status = AJ_DeliverMsg(&reply); } } else { // call the handler! status = (message_entry->handler)(&msg, NULL); } handled = TRUE; } ++message_entry; } // we need to check whether this is a property getter or setter. // these are stored in an array because multiple getters and setters can exist if running more than one bus object while (handled != TRUE && prop_entry->msgid != 0) { if (prop_entry->msgid == msg.msgId) { // extract the method from the ID; GetProperty or SetProperty uint32_t method = prop_entry->msgid & 0x000000FF; if (method == AJ_PROP_GET) { status = AJ_BusPropGet(&msg, prop_entry->callback, prop_entry->context); } else if (method == AJ_PROP_SET) { status = AJ_BusPropSet(&msg, prop_entry->callback, prop_entry->context); } else { // this should never happen!!! AJ_ASSERT(!"Invalid property method"); } handled = TRUE; } ++prop_entry; } // handler not found! if (handled == FALSE) { if (msg.msgId == AJ_METHOD_ACCEPT_SESSION) { uint8_t accepted = (config->acceptor)(&msg); status = AJ_BusReplyAcceptSession(&msg, accepted); } else { status = AJ_BusHandleBusMessage(&msg); } } // Any received packets indicates the link is active, so call to reinforce the bus link state AJ_NotifyLinkActive(); } /* * Unarshaled messages must be closed to free resources */ AJ_CloseMsg(&msg); if (status == AJ_ERR_READ) { AJ_InfoPrintf(("AllJoyn disconnect\n")); AJ_InfoPrintf(("Disconnected from Daemon:%s\n", AJ_GetUniqueName(bus))); AJ_Disconnect(bus); connected = FALSE; if (config->connection_handler != NULL) { (config->connection_handler)(connected); } /* * Sleep a little while before trying to reconnect */ AJ_Sleep(10 * 1000); } } // this will never actually return! return AJ_OK; }
int AJ_Main(void) { AJ_Status status = AJ_OK; AJ_BusAttachment bus; uint8_t connected = FALSE; uint32_t sessionId = 0; /* One time initialization before calling any other AllJoyn APIs. */ AJ_Initialize(); /* This is for debug purposes and is optional. */ AJ_PrintXML(AppObjects); AJ_RegisterObjects(AppObjects, NULL); while (TRUE) { AJ_Message msg; if (!connected) { status = AJ_StartService(&bus, NULL, CONNECT_TIMEOUT, FALSE, ServicePort, ServiceName, AJ_NAME_REQ_DO_NOT_QUEUE, NULL); if (status != AJ_OK) { continue; } AJ_InfoPrintf(("StartService returned %d, session_id=%u\n", status, sessionId)); connected = TRUE; AJ_BusSetPasswordCallback(&bus, PasswordCallback); } status = AJ_UnmarshalMsg(&bus, &msg, UNMARSHAL_TIMEOUT); if (AJ_ERR_TIMEOUT == status) { continue; } if (AJ_OK == status) { switch (msg.msgId) { case AJ_METHOD_ACCEPT_SESSION: { uint16_t port; char* joiner; AJ_UnmarshalArgs(&msg, "qus", &port, &sessionId, &joiner); status = AJ_BusReplyAcceptSession(&msg, TRUE); AJ_InfoPrintf(("Accepted session session_id=%u joiner=%s\n", sessionId, joiner)); } break; case BASIC_SERVICE_PING: status = AppHandlePing(&msg); break; case AJ_SIGNAL_SESSION_LOST_WITH_REASON: /* Force a disconnect. */ { uint32_t id, reason; AJ_UnmarshalArgs(&msg, "uu", &id, &reason); AJ_AlwaysPrintf(("Session lost. ID = %u, reason = %u", id, reason)); } status = AJ_ERR_SESSION_LOST; break; default: /* Pass to the built-in handlers. */ status = AJ_BusHandleBusMessage(&msg); break; } } /* Messages MUST be discarded to free resources. */ AJ_CloseMsg(&msg); if (status == AJ_ERR_READ) { AJ_Printf("AllJoyn disconnect.\n"); AJ_Disconnect(&bus); connected = FALSE; /* Sleep a little while before trying to reconnect. */ AJ_Sleep(SLEEP_TIME); } } AJ_Printf("Secure service exiting with status 0x%04x.\n", status); return status; }
int AJ_Main(void) { int done = FALSE; AJ_Status status = AJ_OK; AJ_BusAttachment bus; uint8_t connected = FALSE; uint32_t sessionId = 0; AJ_Status authStatus = AJ_ERR_NULL; /* * One time initialization before calling any other AllJoyn APIs */ AJ_Initialize(); AJ_PrintXML(ProxyObjects); AJ_RegisterObjects(NULL, ProxyObjects); while (!done) { AJ_Message msg; if (!connected) { status = AJ_StartClientByName(&bus, NULL, CONNECT_TIMEOUT, FALSE, ServiceName, ServicePort, &sessionId, NULL, fullServiceName); if (status == AJ_OK) { AJ_InfoPrintf(("StartClient returned %d, sessionId=%u\n", status, sessionId)); connected = TRUE; if (authenticate) { AJ_BusSetPasswordCallback(&bus, PasswordCallback); authStatus = AJ_BusAuthenticatePeer(&bus, fullServiceName, AuthCallback, &authStatus); } else { authStatus = AJ_OK; } } else { AJ_InfoPrintf(("StartClient returned %d\n", status)); break; } } if (authStatus != AJ_ERR_NULL) { if (authStatus != AJ_OK) { AJ_Disconnect(&bus); break; } authStatus = AJ_ERR_NULL; SendPing(&bus, sessionId); } status = AJ_UnmarshalMsg(&bus, &msg, UNMARSHAL_TIMEOUT); if (AJ_ERR_TIMEOUT == status) { AppDoWork(); continue; } if (AJ_OK == status) { switch (msg.msgId) { case AJ_REPLY_ID(PRX_PING): { AJ_Arg arg; if (AJ_OK == AJ_UnmarshalArg(&msg, &arg)) { AJ_AlwaysPrintf(("%s.Ping (path=%s) returned \"%s\".\n", InterfaceName, ServicePath, arg.val.v_string)); if (strcmp(arg.val.v_string, pingString) == 0) { AJ_InfoPrintf(("Ping was successful.\n")); } else { AJ_InfoPrintf(("Ping returned different string.\n")); } } else { AJ_ErrPrintf(("Bad ping response.\n")); } done = TRUE; } break; case AJ_SIGNAL_SESSION_LOST_WITH_REASON: /* * Force a disconnect */ { uint32_t id, reason; AJ_UnmarshalArgs(&msg, "uu", &id, &reason); AJ_AlwaysPrintf(("Session lost. ID = %u, reason = %u", id, reason)); } status = AJ_ERR_SESSION_LOST; break; default: /* * Pass to the built-in handlers */ status = AJ_BusHandleBusMessage(&msg); break; } } /* * Messages must be closed to free resources */ AJ_CloseMsg(&msg); if (status == AJ_ERR_READ) { AJ_AlwaysPrintf(("AllJoyn disconnect.\n")); AJ_Disconnect(&bus); exit(0); } } AJ_AlwaysPrintf(("SecureClient EXIT %d.\n", status)); return status; }
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() { AJ_Status status = AJ_OK; AJ_BusAttachment bus; uint8_t connected = FALSE; uint32_t sessionId = 0; /* * One time initialization before calling any other AllJoyn APIs */ AJ_Initialize(); AJ_PrintXML(AppObjects); AJ_RegisterObjects(AppObjects, NULL); SetBusAuthPwdCallback(MyBusAuthPwdCB); while (TRUE) { AJ_Message msg; if (!connected) { status = AJ_StartService(&bus, NULL, CONNECT_TIMEOUT, FALSE, ServicePort, ServiceName, AJ_NAME_REQ_DO_NOT_QUEUE, NULL); if (status != AJ_OK) { continue; } AJ_InfoPrintf(("StartService returned AJ_OK\n")); AJ_InfoPrintf(("Connected to Daemon:%s\n", AJ_GetUniqueName(&bus))); connected = TRUE; #ifdef SECURE_OBJECT status = AJ_SetObjectFlags("/org/alljoyn/alljoyn_test", AJ_OBJ_FLAG_SECURE, 0); if (status != AJ_OK) { AJ_ErrPrintf(("Error calling AJ_SetObjectFlags.. [%s] \n", AJ_StatusText(status))); return -1; } #endif #if defined(SECURE_INTERFACE) || defined(SECURE_OBJECT) /* Register a callback for providing bus authentication password */ AJ_BusSetPasswordCallback(&bus, PasswordCallback); AJ_BusEnableSecurity(&bus, suites, numsuites); AJ_BusSetAuthListenerCallback(&bus, AuthListenerCallback); #endif /* Configure timeout for the link to the daemon bus */ AJ_SetBusLinkTimeout(&bus, 60); // 60 seconds } status = AJ_UnmarshalMsg(&bus, &msg, UNMARSHAL_TIMEOUT); if (AJ_ERR_TIMEOUT == status && AJ_ERR_LINK_TIMEOUT == AJ_BusLinkStateProc(&bus)) { status = AJ_ERR_READ; } if (status != AJ_OK) { if (status == AJ_ERR_TIMEOUT) { AppDoWork(); continue; } } if (status == AJ_OK) { switch (msg.msgId) { case AJ_REPLY_ID(AJ_METHOD_ADD_MATCH): if (msg.hdr->msgType == AJ_MSG_ERROR) { AJ_InfoPrintf(("Failed to add match\n")); status = AJ_ERR_FAILURE; } else { status = AJ_OK; } break; case AJ_METHOD_ACCEPT_SESSION: { uint16_t port; char* joiner; AJ_UnmarshalArgs(&msg, "qus", &port, &sessionId, &joiner); if (port == ServicePort) { status = AJ_BusReplyAcceptSession(&msg, TRUE); AJ_InfoPrintf(("Accepted session session_id=%u joiner=%s\n", sessionId, joiner)); } else { status = AJ_BusReplyAcceptSession(&msg, FALSE); AJ_InfoPrintf(("Accepted rejected session_id=%u joiner=%s\n", sessionId, joiner)); } } break; case APP_MY_PING: status = AppHandlePing(&msg); break; case APP_GET_PROP: status = AJ_BusPropGet(&msg, PropGetHandler, NULL); break; case APP_SET_PROP: status = AJ_BusPropSet(&msg, PropSetHandler, NULL); if (status == AJ_OK) { AJ_InfoPrintf(("Property successfully set to %d.\n", propVal)); } else { AJ_InfoPrintf(("Property set attempt unsuccessful. Status = 0x%04x.\n", status)); } break; case AJ_SIGNAL_SESSION_LOST_WITH_REASON: { uint32_t id, reason; AJ_UnmarshalArgs(&msg, "uu", &id, &reason); AJ_InfoPrintf(("Session lost. ID = %u, reason = %u", id, reason)); if (CancelAdvertiseName) { status = AJ_BusAdvertiseName(&bus, ServiceName, AJ_TRANSPORT_ANY, AJ_BUS_START_ADVERTISING, 0); } status = AJ_ERR_SESSION_LOST; } break; case AJ_SIGNAL_SESSION_JOINED: if (CancelAdvertiseName) { status = AJ_BusAdvertiseName(&bus, ServiceName, AJ_TRANSPORT_ANY, AJ_BUS_STOP_ADVERTISING, 0); } break; case AJ_REPLY_ID(AJ_METHOD_CANCEL_ADVERTISE): case AJ_REPLY_ID(AJ_METHOD_ADVERTISE_NAME): if (msg.hdr->msgType == AJ_MSG_ERROR) { status = AJ_ERR_FAILURE; } break; case APP_MY_SIGNAL: AJ_InfoPrintf(("Received my_signal\n")); status = AJ_OK; if (ReflectSignal) { AJ_Message out; AJ_MarshalSignal(&bus, &out, APP_MY_SIGNAL, msg.destination, msg.sessionId, 0, 0); AJ_MarshalArgs(&out, "a{ys}", 0, NULL); AJ_DeliverMsg(&out); AJ_CloseMsg(&out); } break; default: /* * Pass to the built-in bus message handlers */ status = AJ_BusHandleBusMessage(&msg); break; } // Any received packets indicates the link is active, so call to reinforce the bus link state AJ_NotifyLinkActive(); } /* * Unarshaled messages must be closed to free resources */ AJ_CloseMsg(&msg); if ((status == AJ_ERR_READ) || (status == AJ_ERR_LINK_DEAD)) { AJ_InfoPrintf(("AllJoyn disconnect\n")); AJ_InfoPrintf(("Disconnected from Daemon:%s\n", AJ_GetUniqueName(&bus))); AJ_Disconnect(&bus); connected = FALSE; /* * Sleep a little while before trying to reconnect */ AJ_Sleep(10 * 1000); } } AJ_WarnPrintf(("svclite EXIT %d\n", status)); return status; }
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; AJ_BusAttachment bus; uint8_t connected = FALSE; uint32_t sessionId = 0; AJ_Status authStatus = AJ_ERR_NULL; /* * One time initialization before calling any other AllJoyn APIs */ AJ_Initialize(); AJ_PrintXML(ProxyObjects); AJ_RegisterObjects(NULL, ProxyObjects); while (TRUE) { AJ_Message msg; if (!connected) { status = AJ_StartClient(&bus, NULL, CONNECT_TIMEOUT, ServiceName, ServicePort, &sessionId, NULL); if (status == AJ_OK) { AJ_Printf("StartClient returned %d, sessionId=%u\n", status, sessionId); AJ_Printf("Connected to Daemon:%s\n", AJ_GetUniqueName(&bus)); connected = TRUE; if (authPeer) { AJ_BusSetPasswordCallback(&bus, PasswordCallback); status = AJ_BusAuthenticatePeer(&bus, ServiceName, AuthCallback, &authStatus); if (status != AJ_OK) { AJ_Printf("AJ_BusAuthenticatePeer returned %d\n", status); } } else { authStatus = AJ_OK; } } else { AJ_Printf("StartClient returned %d\n", status); break; } } if (authStatus != AJ_ERR_NULL) { if (authStatus != AJ_OK) { AJ_Disconnect(&bus); break; } authStatus = AJ_ERR_NULL; } status = AJ_UnmarshalMsg(&bus, &msg, UNMARSHAL_TIMEOUT); if (status == AJ_ERR_TIMEOUT) { status = AppDoWork(&bus, sessionId); continue; } if (status == AJ_OK) { switch (msg.msgId) { case PRX_MY_SIGNAL: AJ_Printf("Received my_signal\n"); status = AJ_OK; break; case AJ_SIGNAL_SESSION_LOST: /* * Force a disconnect */ status = AJ_ERR_READ; break; default: /* * Pass to the built-in handlers */ status = AJ_BusHandleBusMessage(&msg); break; } } /* * Messages must be closed to free resources */ AJ_CloseMsg(&msg); if (status == AJ_ERR_READ) { AJ_Printf("AllJoyn disconnect\n"); AJ_Printf("Disconnected from Daemon:%s\n", AJ_GetUniqueName(&bus)); AJ_Disconnect(&bus); connected = FALSE; } } AJ_Printf("clientlite EXIT %d\n", status); return status; }
int AJ_Main() #endif { AJ_Status status = AJ_OK; AJ_BusAttachment bus; uint8_t connected = FALSE; uint32_t sessionId = 0; AJ_Status authStatus = AJ_ERR_NULL; /* * Buffer to hold the peer's full service name or unique name. */ #if defined (NGNS) || defined (ANNOUNCE_BASED_DISCOVERY) char peerServiceName[AJ_MAX_NAME_SIZE + 1]; #else char peerServiceName[AJ_MAX_SERVICE_NAME_SIZE]; #endif #ifdef SECURE_INTERFACE uint32_t suites[16]; size_t numsuites = 0; uint8_t clearkeys = FALSE; uint8_t enablepwd = FALSE; X509CertificateChain* node; #endif #ifdef MAIN_ALLOWS_ARGS #ifdef SECURE_INTERFACE ac--; av++; /* * Enable authentication mechanism by command line */ if (ac) { if (0 == strncmp(*av, "-ek", 3)) { clearkeys = TRUE; ac--; av++; } else if (0 == strncmp(*av, "-e", 2)) { ac--; av++; } if (!ac) { AJ_AlwaysPrintf(("-e(k) requires an auth mechanism.\n")); return 1; } while (ac) { if (0 == strncmp(*av, "ECDHE_ECDSA", 11)) { suites[numsuites++] = AUTH_SUITE_ECDHE_ECDSA; } else if (0 == strncmp(*av, "ECDHE_PSK", 9)) { suites[numsuites++] = AUTH_SUITE_ECDHE_PSK; } else if (0 == strncmp(*av, "ECDHE_NULL", 10)) { suites[numsuites++] = AUTH_SUITE_ECDHE_NULL; } else if (0 == strncmp(*av, "PIN", 3)) { enablepwd = TRUE; } ac--; av++; } } #endif #endif /* * One time initialization before calling any other AllJoyn APIs */ AJ_Initialize(); AJ_PrintXML(ProxyObjects); AJ_RegisterObjects(NULL, ProxyObjects); while (TRUE) { AJ_Message msg; if (!connected) { #if defined (NGNS) || defined (ANNOUNCE_BASED_DISCOVERY) status = AJ_StartClientByInterface(&bus, NULL, CONNECT_TIMEOUT, FALSE, testInterfaceNames, &sessionId, peerServiceName, NULL); #else status = AJ_StartClientByName(&bus, NULL, CONNECT_TIMEOUT, FALSE, testServiceName, testServicePort, &sessionId, NULL, peerServiceName); #endif if (status == AJ_OK) { AJ_AlwaysPrintf(("StartClient returned %d, sessionId=%u, serviceName=%s\n", status, sessionId, peerServiceName)); AJ_AlwaysPrintf(("Connected to Daemon:%s\n", AJ_GetUniqueName(&bus))); connected = TRUE; #ifdef SECURE_INTERFACE if (enablepwd) { AJ_BusSetPasswordCallback(&bus, PasswordCallback); } AJ_BusEnableSecurity(&bus, suites, numsuites); AJ_BusSetAuthListenerCallback(&bus, AuthListenerCallback); if (clearkeys) { status = AJ_ClearCredentials(); AJ_ASSERT(AJ_OK == status); } status = AJ_BusAuthenticatePeer(&bus, peerServiceName, AuthCallback, &authStatus); if (status != AJ_OK) { AJ_AlwaysPrintf(("AJ_BusAuthenticatePeer returned %d\n", status)); } #else authStatus = AJ_OK; #endif AJ_BusAddSignalRule(&bus, "my_signal", testInterfaceName, AJ_BUS_SIGNAL_ALLOW); } else { AJ_AlwaysPrintf(("StartClient returned %d\n", status)); break; } } if (authStatus != AJ_ERR_NULL) { if (authStatus != AJ_OK) { AJ_Disconnect(&bus); break; } authStatus = AJ_ERR_NULL; } status = AJ_UnmarshalMsg(&bus, &msg, UNMARSHAL_TIMEOUT); if (status == AJ_ERR_TIMEOUT) { status = AppDoWork(&bus, sessionId, peerServiceName); continue; } if (status == AJ_OK) { switch (msg.msgId) { case PRX_MY_SIGNAL: AJ_AlwaysPrintf(("Received my_signal\n")); status = AJ_OK; break; case AJ_SIGNAL_SESSION_LOST_WITH_REASON: /* * Force a disconnect */ { uint32_t id, reason; AJ_UnmarshalArgs(&msg, "uu", &id, &reason); AJ_AlwaysPrintf(("Session lost. ID = %u, reason = %u", id, reason)); } status = AJ_ERR_SESSION_LOST; break; default: /* * Pass to the built-in handlers */ status = AJ_BusHandleBusMessage(&msg); break; } } /* * Messages must be closed to free resources */ AJ_CloseMsg(&msg); if ((status == AJ_ERR_SESSION_LOST) || (status == AJ_ERR_READ) || (status == AJ_ERR_LINK_DEAD)) { AJ_AlwaysPrintf(("AllJoyn disconnect\n")); AJ_AlwaysPrintf(("Disconnected from Daemon:%s\n", AJ_GetUniqueName(&bus))); AJ_Disconnect(&bus); connected = FALSE; } } AJ_AlwaysPrintf(("clientlite EXIT %d\n", status)); // Clean up certificate chain while (chain) { node = chain; chain = chain->next; AJ_Free(node->certificate.der.data); AJ_Free(node); } return status; }
int AJ_Main(void) { AJ_Status status = AJ_OK; AJ_BusAttachment bus; uint8_t connected = FALSE; uint32_t sessionId = 0; AJ_Status authStatus = AJ_ERR_NULL; /* * One time initialization before calling any other AllJoyn APIs */ AJ_Initialize(); AJ_PrintXML(ProxyObjects); AJ_RegisterObjects(NULL, ProxyObjects); while (TRUE) { AJ_Message msg; if (!connected) { status = AJ_StartClient(&bus, NULL, CONNECT_TIMEOUT, FALSE, ServiceName, ServicePort, &sessionId, NULL); if (status == AJ_OK) { AJ_Printf("StartClient returned %d, sessionId=%u\n", status, sessionId); AJ_Printf("Connected to Daemon:%s\n", AJ_GetUniqueName(&bus)); connected = TRUE; #ifdef SECURE_INTERFACE AJ_BusSetPasswordCallback(&bus, PasswordCallback); status = AJ_BusAuthenticatePeer(&bus, ServiceName, AuthCallback, &authStatus); if (status != AJ_OK) { AJ_Printf("AJ_BusAuthenticatePeer returned %d\n", status); } #else authStatus = AJ_OK; #endif } else { AJ_Printf("StartClient returned %d\n", status); break; } } if (authStatus != AJ_ERR_NULL) { if (authStatus != AJ_OK) { AJ_Disconnect(&bus); break; } authStatus = AJ_ERR_NULL; AJ_BusSetLinkTimeout(&bus, sessionId, 10 * 1000); } status = AJ_UnmarshalMsg(&bus, &msg, UNMARSHAL_TIMEOUT); if (status != AJ_OK) { if (status == AJ_ERR_TIMEOUT) { AppDoWork(&bus, sessionId); continue; } } else { switch (msg.msgId) { case AJ_REPLY_ID(AJ_METHOD_SET_LINK_TIMEOUT): { uint32_t disposition; uint32_t timeout; status = AJ_UnmarshalArgs(&msg, "uu", &disposition, &timeout); if (disposition == AJ_SETLINKTIMEOUT_SUCCESS) { AJ_Printf("Link timeout set to %d\n", timeout); } else { AJ_Printf("SetLinkTimeout failed %d\n", disposition); } SendPing(&bus, sessionId, 1); } break; case AJ_REPLY_ID(PRX_MY_PING): { AJ_Arg arg; AJ_UnmarshalArg(&msg, &arg); status = SendGetProp(&bus, sessionId); } break; case AJ_REPLY_ID(PRX_GET_PROP): { const char* sig; status = AJ_UnmarshalVariant(&msg, &sig); if (status == AJ_OK) { status = AJ_UnmarshalArgs(&msg, sig, &g_iterCount); AJ_Printf("Get prop reply %d\n", g_iterCount); if (status == AJ_OK) { g_iterCount = g_iterCount + 1; status = SendSetProp(&bus, sessionId, g_iterCount); } } } break; case AJ_REPLY_ID(PRX_SET_PROP): AJ_Printf("Set prop reply\n"); break; case AJ_SIGNAL_SESSION_LOST_WITH_REASON: /* * Force a disconnect */ { uint32_t id, reason; AJ_UnmarshalArgs(&msg, "uu", &id, &reason); AJ_Printf("Session lost. ID = %u, reason = %u", id, reason); } status = AJ_ERR_SESSION_LOST; break; default: /* * Pass to the built-in handlers */ status = AJ_BusHandleBusMessage(&msg); break; } } /* * Messages must be closed to free resources */ AJ_CloseMsg(&msg); if ((status == AJ_ERR_SESSION_LOST) || (status == AJ_ERR_READ) || (status == AJ_ERR_LINK_DEAD)) { AJ_Printf("AllJoyn disconnect\n"); AJ_Printf("Disconnected from Daemon:%s\n", AJ_GetUniqueName(&bus)); AJ_Disconnect(&bus); return status; } } AJ_Printf("clientlite EXIT %d\n", status); return status; }
int AJ_Main(void) { AJ_Status status = AJ_OK; AJ_BusAttachment bus; uint8_t connected = FALSE; uint32_t sessionId = 0; /* * One time initialization before calling any other AllJoyn APIs */ AJ_Initialize(); AJ_PrintXML(AppObjects); AJ_RegisterObjects(AppObjects, NULL); while (TRUE) { AJ_Message msg; if (!connected) { status = AJ_StartService(&bus, DaemonServiceName, CONNECT_TIMEOUT, FALSE, ServicePort, ServiceName, AJ_NAME_REQ_DO_NOT_QUEUE, NULL); if (status != AJ_OK) { continue; } AJ_InfoPrintf(("StartService returned AJ_OK; running %s:%u\n", ServiceName, ServicePort)); connected = TRUE; AJ_BusSetPasswordCallback(&bus, PasswordCallback); } status = AJ_UnmarshalMsg(&bus, &msg, UNMARSHAL_TIMEOUT); if (status != AJ_OK) { if (status == AJ_ERR_TIMEOUT) { AppDoWork(); continue; } } if (status == AJ_OK) { switch (msg.msgId) { case AJ_METHOD_ACCEPT_SESSION: { AJ_InfoPrintf(("Accepting...\n")); uint16_t port; char* joiner; AJ_UnmarshalArgs(&msg, "qus", &port, &sessionId, &joiner); status = AJ_BusReplyAcceptSession(&msg, TRUE); if (status == AJ_OK) { AJ_InfoPrintf(("Accepted session session_id=%u joiner=%s\n", sessionId, joiner)); } else { AJ_InfoPrintf(("AJ_BusReplyAcceptSession: error %d\n", status)); } } break; case APP_FLASH: status = AppHandleFlash(&msg); break; case APP_ON: AppHandleOnOff(&msg, TRUE); break; case APP_OFF: AppHandleOnOff(&msg, FALSE); break; case AJ_SIGNAL_SESSION_LOST_WITH_REASON: /* * Force a disconnect */ status = AJ_ERR_READ; break; default: /* * Pass to the built-in bus message handlers */ status = AJ_BusHandleBusMessage(&msg); break; } } /* * Unarshaled messages must be closed to free resources */ AJ_CloseMsg(&msg); if (status == AJ_ERR_READ) { AJ_AlwaysPrintf(("AllJoyn disconnect\n")); AJ_Disconnect(&bus); connected = FALSE; /* * Sleep a little while before trying to reconnect */ AJ_Sleep(10 * 1000); } } AJ_AlwaysPrintf(("svclite EXIT %d\n", status)); return status; }
int AJ_Main() { // you're connected now, so print out the data: AJ_AlwaysPrintf(("You're connected to the network\n")); AJ_Initialize(); AJ_PrintXML(AppObjects); AJ_RegisterObjects(AppObjects, NULL); while (TRUE) { AJ_Message msg; if (!connected) { status = AJ_StartService(&bus, NULL, CONNECT_TIMEOUT, FALSE, ServicePort, ServiceName, AJ_NAME_REQ_DO_NOT_QUEUE, NULL); if (status == AJ_OK) { AJ_AlwaysPrintf(("StartService returned %d\n", status)); connected = TRUE; if (authenticate) { AJ_BusSetPasswordCallback(&bus, PasswordCallback); } else { authStatus = AJ_OK; } } else { AJ_AlwaysPrintf(("StartClient returned %d\n", status)); continue; } } status = AJ_UnmarshalMsg(&bus, &msg, UNMARSHAL_TIMEOUT); if (status != AJ_OK) { if (status == AJ_ERR_TIMEOUT) { AppDoWork(); continue; } } if (status == AJ_OK) { switch (msg.msgId) { case AJ_METHOD_ACCEPT_SESSION: { uint16_t port; char* joiner; AJ_AlwaysPrintf(("Accepting...\n")); AJ_UnmarshalArgs(&msg, "qus", &port, &sessionId, &joiner); status = AJ_BusReplyAcceptSession(&msg, TRUE); if (status == AJ_OK) { AJ_AlwaysPrintf(("Accepted session session_id=%u joiner=%s\n", sessionId, joiner)); } else { AJ_AlwaysPrintf(("AJ_BusReplyAcceptSession: error %d\n", status)); } } break; case APP_MY_CAT: status = AppHandleCat(&msg); break; case AJ_SIGNAL_SESSION_LOST_WITH_REASON: /* * don't force a disconnect, be ready to accept another session */ { uint32_t id, reason; AJ_UnmarshalArgs(&msg, "uu", &id, &reason); AJ_AlwaysPrintf(("Session lost. ID = %u, reason = %d", id, reason)); } break; default: /* * Pass to the built-in handlers */ status = AJ_BusHandleBusMessage(&msg); break; } } /* * Messages must be closed to free resources */ AJ_CloseMsg(&msg); if ((status == AJ_ERR_READ) || (status == AJ_ERR_LINK_DEAD)) { AJ_AlwaysPrintf(("AllJoyn disconnect\n")); AJ_Disconnect(&bus); connected = FALSE; /* * Sleep a little while before trying to reconnect */ AJ_Sleep(10 * 1000); } } return 0; }