Esempio n. 1
0
static FskErr KprSocketListenerNew(KprSocket owner, int ip, int port, KprSocketListener *it)
{
	KprSocketListener self = NULL;
	FskErr err;
	FskSocket skt = NULL;

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

	bailIfError(FskNetSocketNewTCP(&skt, true, "KprSocketListener"));

	FskNetSocketReuseAddress(skt);
	FskNetSocketMakeNonblocking(skt);

	bailIfError(FskNetSocketBind(skt, ip, port));
	bailIfError(FskNetSocketGetLocalAddress(skt, NULL, &port));

	self->owner = owner;
	self->ip = ip;
	self->port = port;
	self->socket = skt;
	skt = NULL;

	FskListAppend(&owner->listeners, self);
	if (it) *it = self;

bail:
	FskNetSocketClose(skt);

	if (err) {
		KprSocketListenerDispose(self);
	}

	return err;
}
Esempio n. 2
0
FskHTTPServerListener FskHTTPServerListenerNew(FskHTTPServer http, int port, char *interfaceName) {
	FskHTTPServerListener	listener;
	FskErr			err;
	FskSocket		skt;
	FskNetInterfaceRecord *ifc = NULL;

	FskInstrumentedTypePrintfDebug(&gFskHTTPServerTypeInstrumentation, "httpServerListenerNew - interfaceName: %s\n", interfaceName);
	err = FskMemPtrNewClear(sizeof(FskHTTPServerListenerRecord), (FskMemPtr*)&listener);
	BAIL_IF_ERR(err);
	listener->http = http;
	listener->port = port;
	listener->ifcName = FskStrDoCopy(interfaceName);
	err = FskNetSocketNewTCP(&skt, true, "HTTP Server");
	if (err) {
		FskInstrumentedItemSendMessage(listener->http, kFskHTTPInstrMsgErrString, "listener socket create failed.");
		FskInstrumentedTypePrintfDebug(&gFskHTTPServerTypeInstrumentation, "httpServerListenerNew -  creating socket failed: %d\n", err);
        BAIL(kFskErrNoMoreSockets);
	}
	FskNetSocketReuseAddress(skt);
	ifc = FskNetInterfaceFindByName(listener->ifcName);
	if ((NULL == ifc) ||
		(kFskErrNone != (err = FskNetSocketBind(skt, ifc->ip, listener->port)))) {
		FskNetSocketClose(skt);
		FskInstrumentedTypePrintfDebug(&gFskHTTPServerTypeInstrumentation, "httpServerListenerNew - bind failed: %d port: %d\n", err, listener->port);
		listener->http->stats.connectionsAborted++;
		if (listener->http->callbacks)
			err = doCallCondition(listener->http->callbacks->serverCondition, listener->http, kFskHTTPConditionNoSocket, listener->http->refCon);
		goto bail;
	}

	listener->skt = skt;	
	FskNetSocketMakeNonblocking(skt);
	FskListAppend((FskList*)&listener->http->listeners, listener);
	FskInstrumentedTypePrintfDebug(&gFskHTTPServerTypeInstrumentation, "httpServerListenerNew -  about to listen\n");

	FskNetSocketListen(skt);
	FskThreadAddDataHandler(&listener->dataHandler, (FskThreadDataSource)skt, (FskThreadDataReadyCallback)httpServerListenerAcceptNewConnection, true, false, listener);

	FskInstrumentedItemSendMessage(listener->http, kFskHTTPInstrMsgNowListening, listener);
bail:
	FskNetInterfaceDescriptionDispose(ifc);
	if (err) {
		FskInstrumentedItemSendMessage(listener->http, kFskHTTPInstrMsgFailedListener, listener);
		FskMemPtrDisposeAt((void**)&listener);
	}
	return listener;
}
Esempio n. 3
0
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;
}