{
return OCCloudLoginout(host, DEFAULT_AUTH_LOGOUT, auth_session, response);
}
-
-OCStackResult OCCloudPublish(const char *host, const char *query,
- OCClientResponseHandler response, int numArg, ...)
-{
- char targetUri[MAX_URI_LENGTH * 2] = { 0, };
- snprintf(targetUri, MAX_URI_LENGTH * 2, "%s%s", host, query);
-
- // Gather all resources locally and do publish
- OCCallbackData cbData;
- memset(&cbData, 0, sizeof(OCCallbackData));
- cbData.cb = response;
- cbData.cd = NULL;
- cbData.context = (void *)DEFAULT_CONTEXT_VALUE;
-
- OCTagsPayload *tagsPayload = NULL;
- OCLinksPayload *linksPayload = NULL;
- OCStringLL *rt = NULL;
- OCStringLL *itf = NULL;
- OCStringLL *mt = NULL;
-
- OCRDPayload *rdPayload = OCRDPayloadCreate();
- if (!rdPayload)
- {
- goto no_memory;
- }
-
- const unsigned char *id = (unsigned char *)OCGetServerInstanceIDString();
- tagsPayload = OCCopyTagsResources(NULL, id,
- NULL, OC_DISCOVERABLE, 0, 0, NULL, NULL, OC_RD_PUBLISH_TTL);
- if (!tagsPayload)
- {
- goto no_memory;
- }
-
- va_list arguments;
- va_start(arguments, numArg);
-
- for (int j = 0; j < numArg; j++)
- {
- OCResourceHandle handle = va_arg(arguments, OCResourceHandle);
- if (handle)
- {
- rt = itf = mt = NULL;
- const char *uri = OCGetResourceUri(handle);
- uint8_t numElement;
- if (OC_STACK_OK == OCGetNumberOfResourceTypes(handle, &numElement))
- {
- OCStackResult res = createStringLL(numElement, handle, OCGetResourceTypeName, &rt);
- if (res != OC_STACK_OK || !rt)
- {
- goto no_memory;
- }
- }
-
- if (OC_STACK_OK == OCGetNumberOfResourceInterfaces(handle, &numElement))
- {
- OCStackResult res = createStringLL(numElement, handle, OCGetResourceInterfaceName, &itf);
- if (res != OC_STACK_OK || !itf)
- {
- goto no_memory;
- }
- }
-
- mt = (OCStringLL *)OICCalloc(1, sizeof(OCStringLL));
- if (!mt)
- {
- goto no_memory;
- }
- mt->value = OICStrdup("application/cbor");
- if (!mt->value)
- {
- goto no_memory;
- }
-
- if (!linksPayload)
- {
- linksPayload = OCCopyLinksResources(uri, rt, itf, NULL, 0, NULL,
- NULL, j, mt);;
- if (!linksPayload)
- {
- goto no_memory;
- }
- }
- else
- {
- OCLinksPayload *temp = linksPayload;
- while (temp->next)
- {
- temp = temp->next;
- }
- temp->next = OCCopyLinksResources(uri, rt, itf, NULL, 0, NULL,
- NULL, j, mt);
- if (!temp->next)
- {
- goto no_memory;
- }
- }
- OCFreeOCStringLL(rt);
- OCFreeOCStringLL(itf);
- OCFreeOCStringLL(mt);
- }
- }
- va_end(arguments);
-
- rdPayload->rdPublish = OCCopyCollectionResource(tagsPayload, linksPayload);
- if (!rdPayload->rdPublish)
- {
- goto no_memory;
- }
-
- return OCDoResource(NULL, OC_REST_POST, targetUri, NULL, (OCPayload *)rdPayload,
- CT_ADAPTER_TCP, OC_LOW_QOS, &cbData, NULL, 0);
-
-no_memory:
- va_end(arguments);
- if (rt)
- {
- OCFreeOCStringLL(rt);
- }
- if (itf)
- {
- OCFreeOCStringLL(itf);
- }
- if (mt)
- {
- OCFreeOCStringLL(mt);
- }
- if (tagsPayload)
- {
- OCFreeTagsResource(tagsPayload);
- }
- if (linksPayload)
- {
- OCFreeLinksResource(linksPayload);
- }
- OCRDPayloadDestroy(rdPayload);
- return OC_STACK_NO_MEMORY;
-}