int AJ_Main() { AJ_Status status = AJ_OK; AJ_Initialize(); AJ_PrintXML(AppObjects); AJ_RegisterObjects(AppObjects, NULL); Do_Connect(); while (TRUE) { AJ_Message msg; status = AJ_UnmarshalMsg(&bus, &msg, UNMARSHAL_TIMEOUT); if (status == AJ_ERR_TIMEOUT) { AppDoWork(); continue; } if (status == AJ_OK) { printf("Message parsed. Id is %u, sender is %s , dest is %s \n", msg.msgId, msg.sender, msg.destination); status = AJ_BusHandleBusMessage(&msg); } AJ_CloseMsg(&msg); } return 0; }
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) { 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; 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; #ifdef SECURE_INTERFACE uint32_t suites[AJ_AUTH_SUITES_NUM]; size_t numsuites = 0; uint8_t clearkeys = FALSE; #endif #ifdef MAIN_ALLOWS_ARGS #if defined(SECURE_INTERFACE) || defined(SECURE_OBJECT) 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; } ac--; av++; } } #endif #else suites[numsuites++] = AUTH_SUITE_ECDHE_ECDSA; clearkeys = TRUE; #endif #ifdef SECURE_INTERFACE if (numsuites == 0) { /* Default security to ECDHE_NULL, if not explicit elsewhere */ suites[numsuites++] = AUTH_SUITE_ECDHE_NULL; } #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 (ANNOUNCE_BASED_DISCOVERY) status = AJ_StartClientByPeerDescription(&bus, NULL, CONNECT_TIMEOUT, FALSE, &pingServicePeer, testServicePort, &sessionId, g_peerServiceName, NULL); #elif defined (NGNS) status = AJ_StartClientByInterface(&bus, NULL, CONNECT_TIMEOUT, FALSE, testInterfaceNames, &sessionId, g_peerServiceName, NULL); #else status = AJ_StartClientByName(&bus, NULL, CONNECT_TIMEOUT, FALSE, testServiceName, testServicePort, &sessionId, NULL, g_peerServiceName); #endif if (status == AJ_OK) { AJ_AlwaysPrintf(("StartClient returned %d, sessionId=%u, serviceName=%s\n", status, sessionId, g_peerServiceName)); AJ_AlwaysPrintf(("Connected to Daemon:%s\n", AJ_GetUniqueName(&bus))); connected = TRUE; #if defined(SECURE_INTERFACE) || defined(SECURE_OBJECT) AJ_BusEnableSecurity(&bus, suites, numsuites); AJ_BusSetAuthListenerCallback(&bus, AuthListenerCallback); if (clearkeys) { AJ_ClearCredentials(AJ_GENERIC_MASTER_SECRET | AJ_CRED_TYPE_GENERIC); AJ_ClearCredentials(AJ_GENERIC_ECDSA_MANIFEST | AJ_CRED_TYPE_GENERIC); AJ_ClearCredentials(AJ_GENERIC_ECDSA_KEYS | AJ_CRED_TYPE_GENERIC); } status = AJ_BusAuthenticatePeer(&bus, g_peerServiceName, AuthCallback, &authStatus); if (status != AJ_OK) { AJ_AlwaysPrintf(("AJ_BusAuthenticatePeer returned %d\n", status)); } #else authStatus = AJ_OK; #endif } else { AJ_AlwaysPrintf(("StartClient returned %d\n", status)); break; } } AJ_AlwaysPrintf(("Auth status %d and AllJoyn status %d\n", authStatus, status)); if (status == AJ_ERR_RESOURCES) { AJ_InfoPrintf(("Peer is busy, disconnecting and retrying auth...\n")); AJ_Disconnect(&bus); connected = FALSE; continue; } 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, g_peerServiceName); 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_AlwaysPrintf(("Link timeout set to %d\n", timeout)); } else { AJ_AlwaysPrintf(("SetLinkTimeout failed %d\n", disposition)); } SendPing(&bus, sessionId, g_peerServiceName, 1); } break; case AJ_REPLY_ID(AJ_METHOD_BUS_PING): { uint32_t disposition; status = AJ_UnmarshalArgs(&msg, "u", &disposition); if (disposition == AJ_PING_SUCCESS) { AJ_AlwaysPrintf(("Bus Ping reply received\n")); } else { AJ_AlwaysPrintf(("Bus Ping failed, disconnecting: %d\n", disposition)); status = AJ_ERR_LINK_DEAD; } } break; case AJ_REPLY_ID(PRX_MY_PING): { AJ_Arg arg; AJ_UnmarshalArg(&msg, &arg); AJ_AlwaysPrintf(("Got ping reply\n")); AJ_InfoPrintf(("INFO Got ping reply\n")); status = SendGetProp(&bus, sessionId, g_peerServiceName); } 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_AlwaysPrintf(("Get prop reply %d\n", g_iterCount)); if (status == AJ_OK) { g_iterCount = g_iterCount + 1; status = SendSetProp(&bus, sessionId, g_peerServiceName, g_iterCount); } } } break; case AJ_REPLY_ID(PRX_SET_PROP): AJ_AlwaysPrintf(("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_AlwaysPrintf(("Session lost. ID = %u, reason = %u\n", 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_WRITE) || (status == AJ_ERR_LINK_DEAD)) { AJ_AlwaysPrintf(("AllJoyn disconnect\n")); AJ_AlwaysPrintf(("Disconnected from Daemon:%s\n", AJ_GetUniqueName(&bus))); AJ_Disconnect(&bus); break; } } AJ_AlwaysPrintf(("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() { AJ_Status status; AJ_BusAttachment bus; int i; AJ_Initialize(); AJ_PrintXML(AppObjects); AJ_RegisterObjects(AppObjects, NULL); Do_Connect(&bus); if (authenticate) { AJ_BusSetAuthListenerCallback(&bus, AuthListenerCallback); } else { authStatus = AJ_OK; } i = 0; while (commands[i] != NULL) { AJ_AlwaysPrintf(("%s\n", commands[i])); i++; } i = 0; while (TRUE) { // check for serial input and dispatch if needed. char buf[1024]; AJ_Message msg; // read a line if (commands[i] != NULL) { char*command; strcpy(buf, commands[i]); AJ_AlwaysPrintf((">~~~%s\n", buf)); command = aj_strtok(buf, " \r\n"); i++; if (0 == strcmp("startservice", command)) { uint16_t port = 0; const char* name; AJ_SessionOpts opts; char* token = aj_strtok(NULL, " \r\n"); if (token) { name = token; } else { name = ServiceName; } token = aj_strtok(NULL, " \r\n"); if (token) { port = (uint16_t)atoi(token); } if (port == 0) { port = ServicePort; } token = aj_strtok(NULL, " \r\n"); if (token) { opts.isMultipoint = (0 == strcmp("true", token)); } else { opts.isMultipoint = 0; } token = aj_strtok(NULL, " \r\n"); if (token) { opts.traffic = atoi(token); } else { opts.traffic = 0x1; } token = aj_strtok(NULL, " \r\n"); if (token) { opts.proximity = atoi(token); } else { opts.proximity = 0xFF; } token = aj_strtok(NULL, " \r\n"); if (token) { opts.transports = atoi(token); } else { opts.transports = 0xFFFF; } status = AJ_StartService(&bus, NULL, CONNECT_TIMEOUT, TRUE, port, name, AJ_NAME_REQ_DO_NOT_QUEUE, &opts); AJ_BusAddSignalRule(&bus, "Chat", InterfaceName, AJ_BUS_SIGNAL_ALLOW); } else if (0 == strcmp("find", command)) { char* namePrefix = aj_strtok(NULL, " \r\n"); if (!namePrefix) { AJ_AlwaysPrintf(("Usage: find <name_prefix>\n")); continue; } status = AJ_BusFindAdvertisedName(&bus, namePrefix, AJ_BUS_START_FINDING); } else if (0 == strcmp("cancelfind", command)) { char* namePrefix = aj_strtok(NULL, " \r\n"); if (!namePrefix) { AJ_AlwaysPrintf(("Usage: cancelfind <name_prefix>\n")); continue; } status = AJ_BusFindAdvertisedName(&bus, namePrefix, AJ_BUS_STOP_FINDING); } else if (0 == strcmp("find2", command)) { char* namePrefix = aj_strtok(NULL, " \r\n"); uint16_t transport = 0; char* token = aj_strtok(NULL, " \r\n"); if (token) { transport = (uint16_t)atoi(token); } if (!namePrefix || !transport) { AJ_AlwaysPrintf(("Usage: find2 <name_prefix> <transport>\n")); continue; } status = AJ_BusFindAdvertisedNameByTransport(&bus, namePrefix, transport, AJ_BUS_START_FINDING); } else if (0 == strcmp("cancelfind2", command)) { char* namePrefix = aj_strtok(NULL, " \r\n"); uint16_t transport = 0; char* token = aj_strtok(NULL, " \r\n"); if (token) { transport = (uint16_t)atoi(token); } if (!namePrefix || !transport) { AJ_AlwaysPrintf(("Usage: cancelfind2 <name_prefix> <transport>\n")); continue; } status = AJ_BusFindAdvertisedNameByTransport(&bus, namePrefix, transport, AJ_BUS_STOP_FINDING); } else if (0 == strcmp("requestname", command)) { char* name = aj_strtok(NULL, " \r\n"); if (!name) { AJ_AlwaysPrintf(("Usage: requestname <name>\n")); continue; } status = AJ_BusRequestName(&bus, name, AJ_NAME_REQ_DO_NOT_QUEUE); } else if (0 == strcmp("releasename", command)) { char* name = aj_strtok(NULL, " \r\n"); if (!name) { AJ_AlwaysPrintf(("Usage: releasename <name>\n")); continue; } status = AJ_BusReleaseName(&bus, name); } else if (0 == strcmp("advertise", command)) { uint16_t transport = 0xFFFF; char* token = NULL; char* name = aj_strtok(NULL, " \r\n"); if (!name) { AJ_AlwaysPrintf(("Usage: advertise <name> [transports]\n")); continue; } token = aj_strtok(NULL, " \r\n"); if (token) { transport = (uint16_t)atoi(token); } status = AJ_BusAdvertiseName(&bus, name, transport, AJ_BUS_START_ADVERTISING, 0); } else if (0 == strcmp("canceladvertise", command)) { uint16_t transport = 0xFFFF; char* token = NULL; char* name = aj_strtok(NULL, " \r\n"); if (!name) { AJ_AlwaysPrintf(("Usage: canceladvertise <name> [transports]\n")); continue; } token = aj_strtok(NULL, " \r\n"); if (token) { transport = (uint16_t)atoi(token); } status = AJ_BusAdvertiseName(&bus, name, transport, AJ_BUS_STOP_ADVERTISING, 0); } else if (0 == strcmp("bind", command)) { AJ_SessionOpts opts; uint16_t port = 0; char* token = aj_strtok(NULL, " \r\n"); if (token) { port = (uint16_t)atoi(token); } if (port == 0) { AJ_AlwaysPrintf(("Usage: bind <port> [isMultipoint] [traffic] [proximity] [transports]\n")); continue; } token = aj_strtok(NULL, " \r\n"); if (token) { opts.isMultipoint = (0 == strcmp("true", token)); } else { opts.isMultipoint = 0; } token = aj_strtok(NULL, " \r\n"); if (token) { opts.traffic = atoi(token); } else { opts.traffic = 0x1; } token = aj_strtok(NULL, " \r\n"); if (token) { opts.proximity = atoi(token); } else { opts.proximity = 0xFF; } token = aj_strtok(NULL, " \r\n"); if (token) { opts.transports = atoi(token); } else { opts.transports = 0xFFFF; } status = AJ_BusBindSessionPort(&bus, port, &opts, 0); } else if (0 == strcmp("unbind", command)) { uint16_t port = 0; char* token = aj_strtok(NULL, " \r\n"); if (token) { port = (uint16_t) atoi(token); } if (port == 0) { AJ_AlwaysPrintf(("Usage: unbind <port>\n")); continue; } status = AJ_BusUnbindSession(&bus, port); } else if (0 == strcmp("join", command)) { AJ_SessionOpts opts; uint16_t port = 0; char* name = aj_strtok(NULL, " \r\n"); char* token = aj_strtok(NULL, " \r\n"); if (token) { port = (uint16_t)atoi(token); } else { port = 0; } if (!name || (port == 0)) { AJ_AlwaysPrintf(("Usage: join <name> <port> [isMultipoint] [traffic] [proximity] [transports]\n")); continue; } token = aj_strtok(NULL, " \r\n"); if (token) { opts.isMultipoint = (0 == strcmp("true", token)); } else { opts.isMultipoint = 0; } token = aj_strtok(NULL, " \r\n"); if (token) { opts.traffic = (uint8_t)atoi(token); } else { opts.traffic = 0x1; } token = aj_strtok(NULL, " \r\n"); if (token) { opts.proximity = (uint8_t)atoi(token); } else { opts.proximity = 0xFF; } token = aj_strtok(NULL, " \r\n"); if (token) { opts.transports = (uint16_t)atoi(token); } else { opts.transports = 0xFFFF; } status = AJ_BusJoinSession(&bus, name, port, &opts); } else if (0 == strcmp("leave", command)) { uint32_t sessionId = (uint32_t)atoi(aj_strtok(NULL, "\r\n")); if (sessionId == 0) { AJ_AlwaysPrintf(("Usage: leave <sessionId>\n")); continue; } status = AJ_BusLeaveSession(&bus, sessionId); } else if (0 == strcmp("addmatch", command)) { char* ruleString = aj_strtok(NULL, "\r\n"); if (!ruleString) { AJ_AlwaysPrintf(("Usage: addmatch <rule>\n")); continue; } status = AJ_BusSetSignalRule(&bus, ruleString, AJ_BUS_SIGNAL_ALLOW); } else if (0 == strcmp("removematch", command)) { char* ruleString = aj_strtok(NULL, "\r\n"); if (!ruleString) { AJ_AlwaysPrintf(("Usage: removematch <rule>\n")); continue; } status = AJ_BusSetSignalRule(&bus, ruleString, AJ_BUS_SIGNAL_DENY); } else if (0 == strcmp("sendttl", command)) { int32_t ttl = 0; char* token = aj_strtok(NULL, " \r\n"); if (token) { ttl = atoi(token); } if (ttl < 0) { AJ_AlwaysPrintf(("Usage: sendttl <ttl>\n")); continue; } sendTTL = ttl; } else if (0 == strcmp("schat", command)) { char* chatMsg = aj_strtok(NULL, "\r\n"); if (!chatMsg) { AJ_AlwaysPrintf(("Usage: schat <msg>\n")); continue; } status = AppSendChatSignal(&bus, 0, chatMsg, AJ_FLAG_SESSIONLESS, sendTTL); } else if (0 == strcmp("chat", command)) { char* sessionIdString = aj_strtok(NULL, " \r\n"); char*chatMsg; uint32_t session = g_sessionId; if (sessionIdString != NULL) { if (sessionIdString[0] != '#') { session = (long)atoi(sessionIdString); } } chatMsg = aj_strtok(NULL, "\r\n"); status = AppSendChatSignal(&bus, session, chatMsg, 0, sendTTL); } else if (0 == strcmp("cancelsessionless", command)) { uint32_t serialId = 0; char* token = aj_strtok(NULL, " \r\n"); if (token) { serialId = (uint32_t)atoi(token); } if (serialId == 0) { AJ_AlwaysPrintf(("Invalid serial number\n")); AJ_AlwaysPrintf(("Usage: cancelsessionless <serialNum>\n")); continue; } status = AJ_BusCancelSessionless(&bus, serialId); } else if (0 == strcmp("exit", command)) { break; } else if (0 == strcmp("help", command)) { //AJ_AlwaysPrintf(("debug <module_name> <level> - Set debug level for a module\n")); AJ_AlwaysPrintf(("startservice [name] [port] [isMultipoint] [traffic] [proximity] [transports] - Startservice\n")); AJ_AlwaysPrintf(("requestname <name> - Request a well-known name\n")); AJ_AlwaysPrintf(("releasename <name> - Release a well-known name\n")); AJ_AlwaysPrintf(("bind <port> [isMultipoint] [traffic] [proximity] [transports] - Bind a session port\n")); AJ_AlwaysPrintf(("unbind <port> - Unbind a session port\n")); AJ_AlwaysPrintf(("advertise <name> [transports] - Advertise a name\n")); AJ_AlwaysPrintf(("canceladvertise <name> [transports] - Cancel an advertisement\n")); AJ_AlwaysPrintf(("find <name_prefix> - Discover names that begin with prefix\n")); AJ_AlwaysPrintf(("find2 <name_prefix> <transport> - Discover names that begin with prefix by specific transports\n")); AJ_AlwaysPrintf(("cancelfind <name_prefix> - Cancel discovering names that begins with prefix\n")); AJ_AlwaysPrintf(("cancelfind2 <name_prefix> <transport> - Cancel discovering names that begins with prefix by specific transports\n")); AJ_AlwaysPrintf(("join <name> <port> [isMultipoint] [traffic] [proximity] [transports] - Join a session\n")); AJ_AlwaysPrintf(("leave <sessionId> - Leave a session\n")); AJ_AlwaysPrintf(("chat <sessionId> <msg> - Send a message over a given session\n")); AJ_AlwaysPrintf(("schat <msg> - Send a sessionless message\n")); AJ_AlwaysPrintf(("cancelsessionless <serialNum> - Cancel a sessionless message\n")); AJ_AlwaysPrintf(("addmatch <rule> - Add a DBUS rule\n")); AJ_AlwaysPrintf(("removematch <rule> - Remove a DBUS rule\n")); AJ_AlwaysPrintf(("sendttl <ttl> - Set default ttl (in ms) for all chat messages (0 = infinite)\n")); AJ_AlwaysPrintf(("exit - Exit this program\n")); AJ_AlwaysPrintf(("\n")); continue; } else if (0 == strcmp("wait", command)) { char* token = aj_strtok(NULL, " \n\r"); if (token) { AJ_AlwaysPrintf(("Sleeping...\n")); AJ_Sleep((uint16_t)atoi(token)); AJ_AlwaysPrintf(("Done\n")); } } else { AJ_AlwaysPrintf(("Unknown command: %s\n", command)); 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, &g_sessionId, &joiner); status = AJ_BusReplyAcceptSession(&msg, TRUE); if (status == AJ_OK) { AJ_InfoPrintf(("Accepted session session_id=%u joiner=%s\n", g_sessionId, joiner)); } else { AJ_InfoPrintf(("AJ_BusReplyAcceptSession: error %d\n", status)); } } break; case AJ_REPLY_ID(AJ_METHOD_JOIN_SESSION): { uint32_t replyCode; if (msg.hdr->msgType == AJ_MSG_ERROR) { status = AJ_ERR_FAILURE; } else { status = AJ_UnmarshalArgs(&msg, "uu", &replyCode, &g_sessionId); if (replyCode == AJ_JOINSESSION_REPLY_SUCCESS) { AJ_InfoPrintf(("Joined session session_id=%u\n", g_sessionId)); AJ_BusAddSignalRule(&bus, "Chat", InterfaceName, AJ_BUS_SIGNAL_ALLOW); } else { AJ_InfoPrintf(("Joined session failed\n")); } } } break; case APP_CHAT_SIGNAL: status = AppHandleChatSignal(&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_InfoPrintf(("Session lost. ID = %u, reason = %u", id, reason)); } break; case AJ_SIGNAL_FOUND_ADV_NAME: { char* name; char* namePrefix; uint16_t transport; AJ_UnmarshalArgs(&msg, "sqs", &name, &transport, &namePrefix); AJ_AlwaysPrintf(("FoundAdvertisedName name=%s, namePrefix=%s\n", name, namePrefix)); } 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_WRITE) || (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; /* * Sleep a little while before trying to reconnect */ AJ_Sleep(10 * 1000); Do_Connect(&bus); } } return 0; }
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; }