/* FoundAdvertisedName callback */ void AJ_CALL found_advertised_name(const void* context, const char* name, alljoyn_transportmask transport, const char* namePrefix) { QCC_UNUSED(context); printf("found_advertised_name(name=%s, prefix=%s, transport=0x%x)\n", name, namePrefix, (unsigned int)transport); /* * The access to global variable s_joinInitiated is serialized across multiple found_advertised_name callbacks * by accessing it only before calling alljoyn_busattachment_enableconcurrentcallbacks. */ if ((QCC_FALSE == s_joinInitiated) && (0 == strcmp(name, OBJECT_NAME))) { /* We found a remote bus that is advertising basic service's well-known name, so connect to it */ alljoyn_sessionopts opts = alljoyn_sessionopts_create(ALLJOYN_TRAFFIC_TYPE_MESSAGES, QCC_FALSE, ALLJOYN_PROXIMITY_ANY, ALLJOYN_TRANSPORT_ANY); if (NULL != opts) { QStatus status; s_joinInitiated = QCC_TRUE; /* alljoyn_busattachment_joinsession might block for a while, so allow other callbacks to run in parallel with it */ alljoyn_busattachment_enableconcurrentcallbacks(s_msgBus); status = alljoyn_busattachment_joinsession(s_msgBus, name, SERVICE_PORT, NULL, &s_sessionId, opts); if (ER_OK != status) { printf("alljoyn_busattachment_joinsession failed (status=%s)\n", QCC_StatusText(status)); } else { printf("alljoyn_busattachment_joinsession SUCCESS (Session id=%u)\n", (unsigned int)s_sessionId); } alljoyn_sessionopts_destroy(opts); s_joinComplete = QCC_TRUE; } } }
/* FoundAdvertisedName callback */ void AJ_CALL found_advertised_name(const void* context, const char* name, alljoyn_transportmask transport, const char* namePrefix) { printf("[Callback] found_advertised_name(name=%s, prefix=%s)\n", name, namePrefix); if (0 == strcmp(name, OBJECT_NAME)) { /* We found a remote bus that is advertising basic service's well-known name so connect to it */ alljoyn_sessionopts opts = alljoyn_sessionopts_create(ALLJOYN_TRAFFIC_TYPE_MESSAGES, QCC_FALSE, ALLJOYN_PROXIMITY_ANY, ALLJOYN_TRANSPORT_ANY); QStatus status; /* enable concurrent callbacks so joinsession can be called */ alljoyn_busattachment_enableconcurrentcallbacks(g_msgBus); status = alljoyn_busattachment_joinsession(g_msgBus, name, SERVICE_PORT, NULL, &s_sessionId, opts); if (ER_OK != status) { printf("alljoyn_busattachment_joinsession failed (status=%s)\n", QCC_StatusText(status)); } else { printf("alljoyn_busattachment_joinsession SUCCESS (Session id=%d)\n", s_sessionId); } alljoyn_sessionopts_destroy(opts); } s_joinComplete = QCC_TRUE; }