Exemple #1
0
static FskErr httpServerListenerAcceptNewConnection(FskThreadDataHandler handler, FskThreadDataSource source, void *refCon) {
	FskErr err = kFskErrNone;
	FskHTTPServerListener listener = (FskHTTPServerListener)handler->refCon;
	FskSocket skt;

	err = FskNetAcceptConnection((FskSocket)source, &skt, "HTTP Acceptor");
	if (err != kFskErrNone) return err;
	FskNetSocketMakeNonblocking(skt);
#if CLOSED_SSL
	if (listener->http->ssl) {
		void *ssl;
		err = FskSSLAttach(&ssl, skt);
		if (err != kFskErrNone) {
			FskNetSocketClose(skt);
			return err;
		}
		if (listener->http->certs != NULL)
			FskSSLLoadCerts(ssl, listener->http->certs);
		listener->handshaking = true;
		err = FskSSLHandshake(ssl, sHTTPServerGotSocket, listener, false, kFskHTTPSSLHandshakeTimeout);
		if (err != kFskErrNone) {
			FskSSLDispose(ssl);	/* skt has been attached to ssl so it should be closed all together */
			return err;
		}
		return err;
	}
	else
#endif
		return httpServerListenerStart(listener, skt);
}
Exemple #2
0
static FskErr sHTTPServerGotSocket(struct FskSocketRecord *skt, void *refCon) {
	FskHTTPServerListener listener = (FskHTTPServerListener)refCon;
	listener->handshaking = false;
	if (listener->http && FskNetSocketGetLastError(skt) == kFskErrNone)
		return httpServerListenerStart(listener, skt);
	else {
		FskHTTPServerListenerDispose(listener);
		return kFskErrOperationFailed;
	}
}
Exemple #3
0
static FskErr sHTTPServerGotSocket(struct FskSocketRecord *skt, void *refCon) {
	FskHTTPServerListener listener = (FskHTTPServerListener)refCon;
	listener->handshaking = false;
	FskErr err = skt != NULL ? FskNetSocketGetLastError(skt) : kFskErrOperationFailed;
	if (listener->http && err == kFskErrNone)
		return httpServerListenerStart(listener, skt);
	else {
		if (skt != NULL)
			FskNetSocketClose(skt);
		if (err != kFskErrSSLHandshakeFailed)
			FskHTTPServerListenerDispose(listener);
		return err;
	}
}