Ejemplo n.º 1
0
FskErr KprCoAPClientStartRequest(KprCoAPClient self, UInt32 ipaddr, UInt16 port, KprCoAPMessage message)
{
	FskErr err = kFskErrNone;
	KprCoAPClientRequest request = NULL;
	KprCoAPEndpoint endpoint = NULL;
	KprMemoryBlock generatedToken = NULL;

	if (self->autoToken && message->token == NULL) {
		bailIfError(KprCoAPClientNextAutoToken(self, &generatedToken));
		message->token = KprRetain(generatedToken);
		KprMemoryBlockDispose(generatedToken);
	}

	bailIfError(KprCoAPClientGetEndpoint(self, ipaddr, port, &endpoint));

	bailIfError(KprCoAPClientRequestNew(&request, self, message, endpoint));
	FskListAppend(&self->requests, request);

	bailIfError(KprCoAPEndpointSendMessage(endpoint, message));

bail:
	if (err) {
		FskListRemove(&self->requests, request);
		KprCoAPClientRequestDispose(request);

		KprCoAPClientDisposeUnusedEndpoint(self);
	}
	return err;
}
Ejemplo n.º 2
0
FskErr KprCoAPServerSessionSendResponse(KprCoAPServerSession self, KprCoAPMessage response)
{
	FskErr err = kFskErrNone;
	KprCoAPServer server = self->server;

	if (!server) {
		return kFskErrBadState;
	}

	if (self->responded && !self->observeAccepted) {
		return kFskErrBadState;
	}

	if (self->confiramableRequest) {
		if (!self->emptyAckSent && !self->responded) {
			response->messageId = self->request->messageId;
			response->type = kKprCoAPMessageTypeAcknowledgement;
		}
	}

	if (!response->messageId) {
		response->messageId = KprCoAPServerGenerateMessageId(server);
	}

	if (self->observeAccepted) {
		bailIfError(KprCoAPMessageAppendUintOption(response, kKprCoAPMessageOptionObserve, self->observeId));
		self->observeId += 1;
	}

	bailIfError(KprCoAPEndpointSendMessage(self->endpoint, response));

	KprCoAPMessageRetain(response);
	KprCoAPMessageDispose(self->lastResponse);
	self->lastResponse = response;

	self->responded = true;

	if (!self->observeAccepted) {
		KprCoAPServerFinishSession(server, self);
	}

bail:
	return err;
}
Ejemplo n.º 3
0
FskErr KprCoAPServerSessionRunAgain(KprCoAPServerSession self)
{
	FskErr err = kFskErrNone;

	if (self->lastResponse) {
		if (self->confiramableRequest && self->emptyAckSent) {
			bailIfError(KprCoAPServerSessionSendAck(self));
		}

		bailIfError(KprCoAPEndpointSendMessage(self->endpoint, self->lastResponse));
	} else {
		if (self->confiramableRequest) {
			bailIfError(KprCoAPServerSessionSendAck(self));
		}
	}

bail:
	return err;
}
Ejemplo n.º 4
0
FskErr KprCoAPServerSessionSendAck(KprCoAPServerSession self)
{
	FskErr err = kFskErrNone;
	KprCoAPMessage response;
	KprCoAPServer server = self->server;

	if (!server || self->responded || self->emptyAckSent || !self->confiramableRequest) {
		return kFskErrBadState;
	}

	bailIfError(KprCoAPMessageNew(&response));
	response->type = kKprCoAPMessageTypeAcknowledgement;
	response->messageId = self->request->messageId;

	bailIfError(KprCoAPEndpointSendMessage(self->endpoint, response));

	self->emptyAckSent = true;

bail:
	KprCoAPMessageDispose(response);
	return err;
}
Ejemplo n.º 5
0
FskErr KprCoAPClientHandleResponse(KprCoAPClient self, KprCoAPMessage request, KprCoAPMessage response, KprCoAPEndpoint endpoint)
{
	KprCoAPMessage ack = NULL;
	FskErr err = kFskErrNone;

	if (request && response->type == kKprCoAPMessageTypeAcknowledgement) {
		bailIfError(self->callbacks.acknowledgementCallback(request, self->refcon));
	}

	if (response->code != kKprCoAPMessageCodeEmpty) {
		bailIfError(self->callbacks.responseCallback(request, response, self->refcon));
		if (response->type == kKprCoAPMessageTypeConfirmable) {
			bailIfError(KprCoAPMessageNew(&ack));

			ack->type = kKprCoAPMessageTypeAcknowledgement;
			ack->messageId = response->messageId;

			err = KprCoAPEndpointSendMessage(endpoint, ack);
		}
	}

bail:
	return err;
}
Ejemplo n.º 6
0
FskErr KprCoAPClientRequestSendMessage(KprCoAPClientRequest self, KprCoAPMessage message)
{
	return KprCoAPEndpointSendMessage(self->endpoint, message);
}