void KprZeroconfDiscoverServerCallback(KprZeroconfBrowser self, KprZeroconfServiceInfo service, Boolean alive) { #define kKPRZeroconfKinomaDiscoverURL "xkpr://%s/discover" #define kKPRZeroconfKinomaDiscoverJSON "{\"id\":\"%s\",\"uuid\":\"%s\",\"url\":\"http://%s:%lu/\",\"protocol\":\"zeroconf\"}" #define kKPRZeroconfKinomaForgetURL "xkpr://%s/forget" #define kKPRZeroconfKinomaForgetJSON "{\"id\":\"%s\",\"uuid\":\"%s\",\"protocol\":\"zeroconf\"}" FskErr err = kFskErrNone; char id[256]; char url[1024]; char json[2048]; UInt32 size; KprMessage message = NULL; char* authority = NULL; bailIfError(KprZeroconfServiceNewAuthority(service->type, &authority)); if (alive) { snprintf(url, sizeof(url), kKPRZeroconfKinomaDiscoverURL, self->authority); snprintf(json, sizeof(json), kKPRZeroconfKinomaDiscoverJSON, authority, service->name, service->ip, service->port); } else { snprintf(url, sizeof(url), kKPRZeroconfKinomaForgetURL, self->authority); snprintf(json, sizeof(json), kKPRZeroconfKinomaForgetJSON, authority, service->name); } size = FskStrLen(json); bailIfError(KprMessageNew(&message, url)); bailIfError(KprMessageSetRequestBody(message, json, size)); FskStrNumToStr(size, id, sizeof(id)); bailIfError(KprMessageSetRequestHeader(message, kFskStrContentLength, id)); bailIfError(KprMessageSetRequestHeader(message, kFskStrContentType, "application/json")); KprMessageInvoke(message, NULL, NULL, NULL); FskMemPtrDispose(authority); return; bail: KprMessageDispose(message); FskMemPtrDispose(authority); }
void KPRLibrarySniffPodcast(xsMachine *the) { KprMessage message; KprFunctionTarget target; xsThrowIfFskErr(KprMessageNew(&message, xsToString(xsArg(1)))); xsThrowIfFskErr(KprMessageSetRequestHeader(message, "Range", "bytes=0-4095")); xsThrowIfFskErr(KprFunctionTargetNew(&target, the, &xsArg(2))); xsThrowIfFskErr(KprMessageInvoke(message, KPRLibrarySniffPodcastComplete, KprFunctionTargetDispose, target)); }
FskErr KprLibrarySessionRedirect(KprLibrarySession session) { FskErr err = kFskErrNone; KprMessage message; bailIfError(KprMessageNew(&message, session->url)); KprMessageInvoke(message, KprLibrarySessionRedirectCallback, NULL, session->request); err = kFskErrNeedMoreTime; bail: return err; }
void KprNetworkInterfaceRemove(int ip) { char ipString[16]; char buffer[64]; KprMessage message = NULL; FskNetIPandPortToString(ip, 0, ipString); FskDebugStr("ADD INTERFACE %s", ipString); sprintf(buffer, "xkpr:///network/interface/remove?ip=%s", ipString); KprMessageNew(&message, buffer); if (message) KprMessageNotify(message); }
void KPR_Message(xsMachine* the) { xsStringValue url = NULL; KprMessage self = NULL; xsTry { xsThrowIfFskErr(KprMessageURL(xsGetContext(the), xsToString(xsArg(0)), &url)); xsThrowIfFskErr(KprMessageNew(&self, url)); xsSetHostData(xsThis, self); FskInstrumentedItemSendMessageDebug(self, kprInstrumentedMessageConstruct, self); self->usage++; // host FskMemPtrDispose(url); } xsCatch { FskMemPtrDispose(url); xsThrow(xsException); } }