FskErr KprCoAPClientResolverNew(KprCoAPClientResolver *it, KprCoAPClient client, const char *host, UInt16 port, KprCoAPMessage message) { FskErr err = kFskErrNone; KprCoAPClientResolver self = NULL; bailIfError(KprMemPtrNewClear(sizeof(KprCoAPClientResolverRecord), &self)); self->host = FskStrDoCopy(host); bailIfNULL(self->host); bailIfError(KprCoAPMessageQueueAppend(&self->waiting, message)); self->client = client; self->port = port; bailIfError(FskNetHostnameResolveQTAsync((char *) host, 0, KprCoAPClientResolverResolved, self, &self->resolver)); bailIfError(self->err); self->constructed = true; *it = self; bail: if (err) { KprCoAPClientResolverDispose(self); } return err; }
FskErr KprCoAPClientDispose(KprCoAPClient self) { FskErr err = kFskErrNone; if (self) { KprCoAPClientResolver resolver; KprCoAPClientRequest request; KprCoAPEndpoint endpoint; resolver = self->resolvers; while (resolver) { KprCoAPClientResolver next = resolver->next; KprCoAPClientResolverDispose(resolver); resolver = next; } request = self->requests; while (request) { KprCoAPClientRequest next = request->next; KprCoAPClientRequestDispose(request); request = next; } endpoint = self->endpoints; while (endpoint) { KprCoAPEndpoint next = endpoint->next; KprCoAPEndpointDispose(endpoint); endpoint = next; } KprMemoryBlockDispose(self->recycleTokens); KprCoAPReceiverDispose(self->receiver); FskNetSocketClose(self->socket); KprMemPtrDispose(self); FskDebugStr("CoAP Client disposed: %p", self); } return err; }