Ejemplo n.º 1
0
FskErr KprCoAPClientRequestHandleResponse(KprCoAPClientRequest self, KprCoAPMessage response)
{
	FskErr err = kFskErrNone;

	if (!KprCoAPEndpointHandleMessage(self->endpoint, response)) goto bail;

	switch (response->type) {
		case kKprCoAPMessageTypeAcknowledgement:
			self->ackReceived = true;
			if (response->code != kKprCoAPMessageCodeEmpty) {
				self->responseReceived = true;
			}
			break;

		case kKprCoAPMessageTypeReset:
			KprCoAPClientEndRequest(self->client, self, kKprCoAPClientRequestEndReasonReset);
			return kFskErrNone;

		default:
			self->responseReceived = true;
			break;
	}

	if (self->observeRequested && !self->observeAccepted) {
		KprCoAPMessageOptionRecord *option = KprCoAPMessageFindOption(response, kKprCoAPMessageOptionObserve);
		self->observeAccepted = (option != NULL && option->value.uint > kKprCoAPMessageObserveDeregister);
	}

	bailIfError(KprCoAPClientHandleResponse(self->client, self->message, response, self->endpoint));

bail:
	return err;
}
Ejemplo n.º 2
0
FskErr KprCoAPServerSessionNew(KprCoAPServer server, KprCoAPMessage request, KprCoAPEndpoint endpoint, KprCoAPServerSession *it)
{
	FskErr err = kFskErrNone;
	KprCoAPServerSession self = NULL;
	KprCoAPMessageOptionRecord *option;

	bailIfError(KprMemPtrNewClear(sizeof(KprCoAPServerSessionRecord), &self));
	bailIfError(KprRetainableNew(&self->retainable));

	self->server = server;
	self->sessionId = KprCoAPServerNextSessionId(server);
	self->endpoint = KprRetain(endpoint);
	self->request = KprRetain(request);
	self->autoAck = true;
	self->confiramableRequest = KprCoAPMessageIsConfirmable(request);

	KprCoAPEndpointGetExpireTime(endpoint, &self->expireAt);

	option = KprCoAPMessageFindOption(request, kKprCoAPMessageOptionObserve);
	self->observeRequested = (option != NULL && option->value.uint == kKprCoAPMessageObserveRegister);

	bailIfError(KprCoAPMessageBuildUri(self->request));

	*it = self;

bail:
	if (err) {
		KprCoAPServerSessionDispose(self);
	}
	return err;
}
Ejemplo n.º 3
0
FskErr KprCoAPClientRequestNew(KprCoAPClientRequest *it, KprCoAPClient client, KprCoAPMessage message, KprCoAPEndpoint endpoint)
{
	FskErr err = kFskErrNone;
	KprCoAPClientRequest self = NULL;
	KprCoAPMessageOptionRecord *option;

	bailIfError(KprMemPtrNewClear(sizeof(KprCoAPClientRequestRecord), &self));

	self->client = client;
	self->message= KprRetain(message);
	self->endpoint = KprRetain(endpoint);

	option = KprCoAPMessageFindOption(message, kKprCoAPMessageOptionObserve);
	self->observeRequested = (option != NULL && option->value.uint == kKprCoAPMessageObserveRegister);

	*it = self;
	FskDebugStr("CoAP ClientRequest created: %x", (int) self);

bail:
	if (err) {
		KprCoAPClientRequestDispose(self);
	}
	return err;
}