static void KprCoAPClientResolverResolved(FskResolver rr) { FskErr err = kFskErrNone; KprCoAPClientResolver self = (KprCoAPClientResolver)rr->ref; KprCoAPMessageQueue entry; self->resolver = NULL; bailIfError(rr->err); self->ipaddr = rr->resolvedIP; FskTimeGetNow(&self->resolvedAt); entry = self->waiting; while (entry) { KprCoAPMessageQueue next = entry->next; KprCoAPMessage message = entry->message; bailIfError(KprCoAPClientStartRequest(self->client, self->ipaddr, self->port, message)); entry = next; } bail: if (err) { if (self->constructed) { KprCoAPClientReportError(self->client, err, "dns resolve error"); } else { self->err = err; } } }
static void KprCoAPClient_retryCallback(KprCoAPEndpoint endpoint, KprCoAPMessage request, UInt32 retryCount, void *refcon) { FskErr err = kFskErrNone; KprCoAPClient self = (KprCoAPClient) refcon; err = self->callbacks.retryCallback(request, retryCount, self->refcon); if (err != kFskErrNone) { KprCoAPClientReportError(self, err, "retry callback error"); } }
static void KprCoAPClient_receiveCallback(KprCoAPMessage message, UInt32 remoteAddr, UInt16 remotePort, void *refcon) { KprCoAPClient self = (KprCoAPClient) refcon; FskErr err; err = KprCoAPClientDispatchResponse(self, remoteAddr, remotePort, message); if (err) { KprCoAPClientReportError(self, err, "response handling"); } }
static void KprCoAPClient_deliveryErrorCallback(KprCoAPEndpoint endpoint, KprCoAPMessage message, KprCoAPEndpointDeliveryFailure failure, void *refcon) { FskErr err = kFskErrNone; KprCoAPClient self = (KprCoAPClient) refcon; char *reason; KprCoAPClientRequest request; switch (failure) { case kKprCoAPEndpointDeliveryFailureMaxRetry: reason = "max retry"; break; case kKprCoAPEndpointDeliveryFailureReset: reason = "reset by peer"; break; default: reason = "unknown"; break; } err = self->callbacks.deliveryFailureCallback(message, reason, self->refcon); if (err != kFskErrNone) { KprCoAPClientReportError(self, err, "retry delivery error"); } request = self->requests; while (request) { if (request->message == message) { KprCoAPClientEndRequest(self, request, reason); break; } request = request->next; } }
static void KprCoAPClient_errorCallback(FskErr err, const char *reason, void *refcon) { KprCoAPClient self = (KprCoAPClient) refcon; KprCoAPClientReportError(self, err, reason); }