Ejemplo n.º 1
0
FskErr KprCoAPClientSendRequest(KprCoAPClient self, KprCoAPMessage message)
{
	FskErr err = kFskErrNone;
	const char *host = message->host;
	UInt16 port = message->port;
	KprCoAPClientResolver dest = self->resolvers;

	while (dest) {
		if (port == dest->port && FskStrCompareCaseInsensitive(host, dest->host) == 0) break;

		dest = dest->next;
	}

	if (dest) {
		if (KprCoAPClientResolverIsResolved(dest)) {
			err = KprCoAPClientStartRequest(self, dest->ipaddr, port, message);
		} else {
			err = KprCoAPClientResolverQueueMessage(dest, message);
		}
	} else {
		bailIfError(KprCoAPClientResolverNew(&dest, self, host, port, message));
		FskListAppend(&self->resolvers, dest);
	}

bail:
	return err;
}
Ejemplo n.º 2
0
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;
		}
	}
}