FskErr KprSocketNew(KprSocketProto proto, KprSocketFlags flags, KprSocketCallbaks *callbacks, void *refcon, KprSocket *it) { FskErr err = kFskErrNone; KprSocket self = NULL; bailIfError(FskMemPtrNewClear(sizeof(KprSocketRecord), &self)); switch (proto) { case kKprSocketProtoTCP: { break; } case kKprSocketProtoUDP: { bailIfError(FskNetSocketNewUDP(&self->socket, "KprSocketUDP")); self->mode = kKprSocketModeUDP; KprSocketSetupDataReader(self); break; } default: bailIfError(kFskErrParameterError); break; } self->proto = proto; self->secure = (Boolean)(flags & kKprSocketFlagsSecure); self->callbacks = *callbacks; self->refcon = refcon; *it = self; FskListAppend(&gSockets, self); bail: if (err) { KprSocketDispose(self); } return err; }
FskErr KprCoAPClientNew(KprCoAPClient *it, KprCoAPClientCallbacks *callbacks, void *refcon) { FskErr err = kFskErrNone; KprCoAPClient self = NULL; FskSocket socket = NULL; KprCoAPReceiver receiver = NULL; KprCoAPReceiverCallbacks receiverCallback = { KprCoAPClient_receiveCallback, KprCoAPClient_errorCallback, }; bailIfError(KprMemPtrNewClear(sizeof(KprCoAPClientRecord), &self)); bailIfError(FskNetSocketNewUDP(&socket, "KprCoAPClient")); bailIfError(FskNetSocketBind(socket, -1, 0)); bailIfError(KprCoAPReceiverNew(&receiver, socket, &receiverCallback, self)); self->socket = socket; self->receiver = receiver; self->messageId = FskRandom(); self->autoToken = false; self->nextTokenBytes = 1; self->callbacks = *callbacks; self->refcon = refcon; *it = self; FskDebugStr("CoAP Client created: %p", self); bail: if (err) { FskNetSocketClose(socket); KprCoAPReceiverDispose(receiver); KprCoAPClientDispose(self); } return err; }