AJ_Status AJ_PeerAuthenticate(AJ_BusAttachment* bus, const char* peerName, AJ_PeerAuthenticateCallback callback, void* cbContext) { AJ_Message msg; char guidStr[33]; AJ_GUID localGuid; uint32_t version = REQUIRED_AUTH_VERSION; /* * Check there isn't an authentication in progress */ if (authContext.callback || authContext.peerGuid) { /* * The existing authentication may have timed-out */ if (AJ_GetElapsedTime(&authContext.timer, TRUE) < MAX_AUTH_TIME) { return AJ_ERR_RESOURCES; } /* * Report the failed authentication */ PeerAuthComplete(AJ_ERR_TIMEOUT); } authContext.callback = callback; authContext.cbContext = cbContext; authContext.peerName = peerName; AJ_InitTimer(&authContext.timer); /* * Kick off autnetication with an ExchangeGUIDS method call */ AJ_MarshalMethodCall(bus, &msg, AJ_METHOD_EXCHANGE_GUIDS, peerName, 0, AJ_NO_FLAGS, CALL_TIMEOUT); AJ_GetLocalGUID(&localGuid); AJ_GUID_ToString(&localGuid, guidStr, sizeof(guidStr)); AJ_MarshalArgs(&msg, "su", guidStr, version); return AJ_DeliverMsg(&msg); }
AJ_Status AppHandleCat(AJ_Message* msg) { AJ_Status status = AJ_OK; AJ_Message reply; char* partA; char* partB; char* totalString; AJ_AlwaysPrintf(("%s:%d:%s %d\n", __FILE__, __LINE__, __FUNCTION__, 0)); AJ_UnmarshalArgs(msg, "ss", &partA, &partB); totalString = (char*) AJ_Malloc(strlen(partA) + strlen(partB) + 1); if (!totalString) { return AJ_ERR_RESOURCES; } strcpy(totalString, partA); strcpy(totalString + strlen(partA), partB); AJ_MarshalReplyMsg(msg, &reply); AJ_MarshalArgs(&reply, "s", totalString); status = AJ_DeliverMsg(&reply); AJ_Free(totalString); return status; }
AJ_Status AJNS_Consumer_SendDismissRequest(AJ_BusAttachment* busAttachment, uint16_t version, int32_t notificationId, const char* appId, const char* senderName, uint32_t sessionId) { AJ_Status status = AJ_OK; if ((status == AJ_OK) && (sessionId != 0)) { AJ_Message dismissMsg; status = AJ_MarshalMethodCall(busAttachment, &dismissMsg, NOTIFICATION_PRODUCER_DISMISS_PROXY, senderName, sessionId, AJ_NO_FLAGS, AJ_CALL_TIMEOUT); if (status != AJ_OK) { AJ_ErrPrintf(("Could not marshal method call\n")); return status; } status = AJ_MarshalArgs(&dismissMsg, "i", notificationId); if (status != AJ_OK) { AJ_ErrPrintf(("Could not marshal arguments\n")); return status; } status = AJ_DeliverMsg(&dismissMsg); if (status != AJ_OK) { AJ_ErrPrintf(("Could not deliver message\n")); return status; } AJ_CloseMsg(&dismissMsg); } return status; }
void CPS_IdleConnectedHandler(AJ_BusAttachment*bus) { if (runningTestNum == lastTestRun || CPSsessionId == 0) { return; } if (runningTestNum == numTests) { runningTestNum = 0; AJ_InfoPrintf(("Finished running all the tests\n")); exit(0); } AJ_Status status; AJ_Message msg; status = AJ_MarshalMethodCall(&busAttachment, &msg, testsToRun[runningTestNum].msgId, announceSender, CPSsessionId, 0, CPSC_CONNECT_TIMEOUT); uint16_t numParam; for (numParam = 0; numParam < testsToRun[runningTestNum].numParams; numParam++) { if (status == AJ_OK) { status = AJ_MarshalArgs(&msg, "q", testsToRun[runningTestNum].param[numParam]); } } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); lastTestRun = runningTestNum; } AJ_InfoPrintf(("MakeMethodCall() test number %i resulted in a status of %s.\n", lastTestRun + 1, AJ_StatusText(status))); }
AJ_Status AddPropertyForGetAll(AJ_Message* reply, char* key, const char* sig, BaseWidget* widget, uint16_t language, MarshalWidgetFptr functionPtr) { AJ_Status status; AJ_Arg dictArg; status = AJ_MarshalContainer(reply, &dictArg, AJ_ARG_DICT_ENTRY); if (status != AJ_OK) { return status; } status = AJ_MarshalArgs(reply, "s", key); if (status != AJ_OK) { return status; } status = AJ_MarshalVariant(reply, sig); if (status != AJ_OK) { return status; } status = functionPtr(widget, reply, language); if (status != AJ_OK) { return status; } return AJ_MarshalCloseContainer(reply, &dictArg); }
AJ_Status marshalHttpControlUrl(HttpControl* httpControl, AJ_Message* reply, uint16_t language) { if (httpControl->getUrl == 0 && httpControl->url == 0) { return AJ_ERR_UNEXPECTED; } return AJ_MarshalArgs(reply, PROPERTY_TYPE_URL_SIG, httpControl->getUrl ? httpControl->getUrl() : httpControl->url); }
/* * Handles a property GET request so marshals the property value to return */ static AJ_Status PropGetHandler(AJ_Message* replyMsg, uint32_t propId, void* context) { if (propId == APP_INT_VAL_PROP) { return AJ_MarshalArgs(replyMsg, "i", propVal); } else { return AJ_ERR_UNEXPECTED; } }
AJ_Status AJCFG_PropGetHandler(AJ_Message* replyMsg, uint32_t propId, void* context) { if (propId == CONFIG_VERSION_PROP) { return AJ_MarshalArgs(replyMsg, "q", AJSVC_ConfigVersion); } else { return AJ_ERR_UNEXPECTED; } }
AJ_Status AJ_BusReplyAcceptSession(AJ_Message* msg, uint32_t accept) { AJ_Message reply; AJ_InfoPrintf(("AJ_BusReplyAcceptSession(msg=0x%p, accept=%d.)\n", msg, accept)); AJ_MarshalReplyMsg(msg, &reply); AJ_MarshalArgs(&reply, "b", accept); return AJ_DeliverMsg(&reply); }
static AJ_Status GetName(AJ_Message* replyMsg, uint32_t propId, void* context) { AJ_Status status = AJ_ERR_UNEXPECTED; if (propId == BASIC_SIGNAL_SERVICE_NAME_ID) { status = AJ_MarshalArgs(replyMsg, "s", propertyName); } return status; }
static AJ_Status HandleGetMachineId(AJ_Message* msg, AJ_Message* reply) { char guidStr[33]; AJ_GUID localGuid; AJ_InfoPrintf(("HandleGetMachineId(msg=0x%p, reply=0x%p)\n", msg, reply)); AJ_MarshalReplyMsg(msg, reply); AJ_GetLocalGUID(&localGuid); AJ_GUID_ToString(&localGuid, guidStr, sizeof(guidStr)); return AJ_MarshalArgs(reply, "s", guidStr); }
static AJ_Status SendSignal() { AJ_Message msg; AJ_AlwaysPrintf(("Emitting Name Changed Signal. New value for property 'name' is '%s'.\n", propertyName)); /* For the signal to transmit outside of the current process the session ID must be 0. */ AJ_MarshalSignal(&busAttachment, &msg, BASIC_SIGNAL_SERVICE_SIGNAL, NULL, 0, AJ_FLAG_GLOBAL_BROADCAST, 0); AJ_MarshalArgs(&msg, "s", propertyName); return AJ_DeliverMsg(&msg); }
AJ_Status AJNS_Producer_PropGetHandler(AJ_Message* replyMsg, uint32_t propId, void* context) { AJ_Status status = AJ_ERR_UNEXPECTED; switch (propId) { case GET_EMERGENCY_NOTIFICATION_VERSION_PROPERTY: case GET_WARNING_NOTIFICATION_VERSION_PROPERTY: case GET_INFO_NOTIFICATION_VERSION_PROPERTY: status = AJ_MarshalArgs(replyMsg, "q", AJNS_NotificationVersion); break; case GET_NOTIFICATION_PRODUCER_VERSION_PROPERTY: status = AJ_MarshalArgs(replyMsg, "q", AJNS_NotificationProducerVersion); break; case GET_NOTIFICATION_DISMISSER_VERSION_PROPERTY: status = AJ_MarshalArgs(replyMsg, "q", AJNS_NotificationDismisserVersion); break; } return status; }
static AJ_Status GenSessionKey(AJ_Message* msg) { AJ_Message call; if (authContext.sasl.mechanism) { authContext.sasl.mechanism->Final(authContext.peerGuid); } authContext.sasl.state = AJ_SASL_IDLE; AJ_MarshalMethodCall(msg->bus, &call, AJ_METHOD_GEN_SESSION_KEY, msg->sender, 0, AJ_NO_FLAGS, CALL_TIMEOUT); /* * Marshal local peer GUID, remote peer GUID, and local peer's GUID */ { char guidStr[33]; AJ_GUID localGuid; AJ_GetLocalGUID(&localGuid); AJ_GUID_ToString(&localGuid, guidStr, sizeof(guidStr)); AJ_MarshalArgs(&call, "s", guidStr); AJ_GUID_ToString(authContext.peerGuid, guidStr, sizeof(guidStr)); AJ_RandHex(authContext.nonce, sizeof(authContext.nonce), NONCE_LEN); AJ_MarshalArgs(&call, "ss", guidStr, authContext.nonce); } return AJ_DeliverMsg(&call); }
AJ_Status StartComplexOptionalParam(AJ_Message* reply, AJ_Arg* arg, uint16_t key, const char* sig) { AJ_Status status; status = AJ_MarshalContainer(reply, arg, AJ_ARG_DICT_ENTRY); if (status != AJ_OK) { return status; } status = AJ_MarshalArgs(reply, "q", key); if (status != AJ_OK) { return status; } return AJ_MarshalVariant(reply, sig); }
AJ_Status AJ_BusPing(AJ_BusAttachment* bus, const char* name, uint32_t timeout) { AJ_Status status; AJ_Message msg; AJ_InfoPrintf(("AJ_BusPing(bus=0x%p, name=%s, timeout=%d)\n", bus, name, timeout)); status = AJ_MarshalMethodCall(bus, &msg, AJ_METHOD_BUS_PING, AJ_BusDestination, 0, 0, AJ_METHOD_TIMEOUT); if (status == AJ_OK) { AJ_MarshalArgs(&msg, "su", name, timeout); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } return status; }
AJ_Status AJ_BusUnbindSession(AJ_BusAttachment* bus, uint16_t port) { AJ_Status status; AJ_Message msg; AJ_InfoPrintf(("AJ_BusUnbindSession(bus=0x%p, port=%d.)\n", bus, port)); status = AJ_MarshalMethodCall(bus, &msg, AJ_METHOD_UNBIND_SESSION, AJ_BusDestination, 0, 0, AJ_METHOD_TIMEOUT); if (status == AJ_OK) { AJ_MarshalArgs(&msg, "q", port); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } return status; }
AJ_Status AJ_BusCancelSessionless(AJ_BusAttachment* bus, uint32_t serialNum) { AJ_Status status; AJ_Message msg; AJ_InfoPrintf(("AJ_BusCancelSessionless(bus=0x%p, serialNum=%d.)\n", bus, serialNum)); status = AJ_MarshalMethodCall(bus, &msg, AJ_METHOD_CANCEL_SESSIONLESS, AJ_BusDestination, 0, 0, AJ_METHOD_TIMEOUT); if (status == AJ_OK) { AJ_MarshalArgs(&msg, "u", serialNum); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } return status; }
AJ_Status AJ_BusRemoveSessionMember(AJ_BusAttachment* bus, uint32_t sessionId, const char* member) { AJ_Status status; AJ_Message msg; AJ_InfoPrintf(("AJ_BusRemoveSessionMember(bus=0x%p, sessionId=%d, member=%s.)\n", bus, sessionId, member)); status = AJ_MarshalMethodCall(bus, &msg, AJ_METHOD_REMOVE_SESSION_MEMBER, AJ_BusDestination, 0, 0, AJ_METHOD_TIMEOUT); if (status == AJ_OK) { AJ_MarshalArgs(&msg, "us", sessionId, member); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } return status; }
AJ_Status AJ_BusLeaveSession(AJ_BusAttachment* bus, uint32_t sessionId) { AJ_Status status; AJ_Message msg; AJ_InfoPrintf(("AJ_BusLeaveSession(bus=0x%p, sessionId=%d.)\n", bus, sessionId)); status = AJ_MarshalMethodCall(bus, &msg, AJ_METHOD_LEAVE_SESSION, AJ_BusDestination, 0, 0, AJ_METHOD_TIMEOUT); if (status == AJ_OK) { status = AJ_MarshalArgs(&msg, "u", sessionId); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } return status; }
AJ_Status AppSendChatSignal(AJ_BusAttachment* bus, uint32_t sessionId, const char* chatString, uint8_t flags, uint32_t ttl) { AJ_Status status = AJ_OK; AJ_Message msg; status = AJ_MarshalSignal(bus, &msg, APP_CHAT_SIGNAL, NULL, sessionId, flags, ttl); if (status == AJ_OK) { status = AJ_MarshalArgs(&msg, "s", chatString); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } AJ_AlwaysPrintf(("TX chat: %s\n", chatString)); return status; }
AJ_Status AJ_BusReleaseName(AJ_BusAttachment* bus, const char* name) { AJ_Status status; AJ_Message msg; AJ_InfoPrintf(("AJ_BusReleaseName(bus=0x%p, name=\"%s\")\n", bus, name)); status = AJ_MarshalMethodCall(bus, &msg, AJ_METHOD_RELEASE_NAME, AJ_BusDestination, 0, 0, AJ_METHOD_TIMEOUT); if (status == AJ_OK) { status = AJ_MarshalArgs(&msg, "s", name); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } return status; }
static AJ_Status MarshalAppId(AJ_Message* msg, const char* appId) { AJ_Status status; uint8_t binAppId[UUID_LENGTH]; uint32_t sz = strlen(appId); if (sz > UUID_LENGTH * 2) { // Crop application id that is too long sz = UUID_LENGTH * 2; } status = AJ_HexToRaw(appId, sz, binAppId, UUID_LENGTH); if (status != AJ_OK) { return status; } status = AJ_MarshalArgs(msg, "{sv}", "AppId", APP_ID_SIGNATURE, binAppId, sz / 2); return status; }
AJ_Status AJ_BusFindAdvertisedNameByTransport(AJ_BusAttachment* bus, const char* namePrefix, uint16_t transport, uint8_t op) { AJ_Status status; AJ_Message msg; uint32_t msgId = (op == AJ_BUS_START_FINDING) ? AJ_METHOD_FIND_NAME_BY_TRANSPORT : AJ_METHOD_CANCEL_FIND_NAME_BY_TRANSPORT; AJ_InfoPrintf(("AJ_BusFindAdvertiseNameByTransport(bus=0x%p, namePrefix=\"%s\", transport=%d., op=%d.)\n", bus, namePrefix, transport, op)); status = AJ_MarshalMethodCall(bus, &msg, msgId, AJ_BusDestination, 0, 0, AJ_METHOD_TIMEOUT); if (status == AJ_OK) { status = AJ_MarshalArgs(&msg, "sq", namePrefix, transport); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } return status; }
AJ_Status AJ_BusRequestName(AJ_BusAttachment* bus, const char* name, uint32_t flags) { AJ_Status status; AJ_Message msg; AJ_InfoPrintf(("AJ_BusRequestName(bus=0x%p, name=\"%s\", flags=0x%x)\n", bus, name, flags)); status = AJ_MarshalMethodCall(bus, &msg, AJ_METHOD_REQUEST_NAME, AJ_BusDestination, 0, 0, AJ_METHOD_TIMEOUT); if (status == AJ_OK) { status = AJ_MarshalArgs(&msg, "su", name, flags); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } return status; }
AJ_Status AJ_BusAdvertiseName(AJ_BusAttachment* bus, const char* name, uint16_t transportMask, uint8_t op, uint8_t flags) { AJ_Status status; AJ_Message msg; uint32_t msgId = (op == AJ_BUS_START_ADVERTISING) ? AJ_METHOD_ADVERTISE_NAME : AJ_METHOD_CANCEL_ADVERTISE; AJ_InfoPrintf(("AJ_BusAdvertiseName(bus=0x%p, name=\"%s\", transportMask=0x%x, op=%d.)\n", bus, name, transportMask, op)); status = AJ_MarshalMethodCall(bus, &msg, msgId, AJ_BusDestination, 0, flags, AJ_METHOD_TIMEOUT); if (status == AJ_OK) { status = AJ_MarshalArgs(&msg, "sq", name, transportMask); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } return status; }
AJ_Status AJ_SetIdleTimeouts(AJ_BusAttachment* bus, uint32_t idleTo, uint32_t probeTo) { AJ_Status status; AJ_Message msg; // AJ_InfoPrintf(("AJ_SetIdleTimeouts(bus=0x%p, idleTo=%d, probeTo=%d)\n", bus, idleTo, probeTo)); status = AJ_MarshalMethodCall(bus, &msg, AJ_METHOD_BUS_SET_IDLE_TIMEOUTS, AJ_BusDestination, 0, 0, AJ_METHOD_TIMEOUT); if (status == AJ_OK) { status = AJ_MarshalArgs(&msg, "uu", idleTo, probeTo); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } return status; }
AJ_Status AddHints(AJ_Message* reply, const uint16_t hints[], uint16_t numHints) { AJ_Status status; AJ_Arg arrayArg; uint16_t cnt; status = AJ_MarshalContainer(reply, &arrayArg, AJ_ARG_ARRAY); if (status != AJ_OK) { return status; } for (cnt = 0; cnt < numHints; cnt++) status = AJ_MarshalArgs(reply, "q", hints[cnt]); if (status != AJ_OK) { return status; } return AJ_MarshalCloseContainer(reply, &arrayArg); }
static void DoCat() { AJ_Status status; AJ_Message msg; /* * Set the object path so we can make a method call */ (void)AJ_SetProxyObjectPath(proxyObjects, BASIC_CLIENT_CAT, serviceObjPath); status = AJ_MarshalMethodCall(&bus, &msg, BASIC_CLIENT_CAT, serviceName, sessionId, 0, METHOD_TIMEOUT); if (status == AJ_OK) { status = AJ_MarshalArgs(&msg, "ss", "Hello ", "World!"); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } AJ_InfoPrintf(("MakeMethodCall() resulted in a status of 0x%04x.\n", status)); }
AJ_Status SendSetProp(AJ_BusAttachment* bus, uint32_t sessionId, const char* serviceName, int val) { AJ_Status status; AJ_Message msg; status = AJ_MarshalMethodCall(bus, &msg, PRX_SET_PROP, serviceName, sessionId, 0, METHOD_TIMEOUT); if (status == AJ_OK) { status = AJ_MarshalPropertyArgs(&msg, PRX_SET_INT); } if (status == AJ_OK) { status = AJ_MarshalArgs(&msg, "i", val); } if (status == AJ_OK) { status = AJ_DeliverMsg(&msg); } else { AJ_AlwaysPrintf(("SendSetProp %s\n", AJ_StatusText(status))); } return status; }