示例#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);
}
示例#2
0
static void
time_callback(FskTimeCallBack callback, const FskTime time, void *param)
{
	FskSSL *fssl = param;
	FskSocket skt;
	void *refCon;

	FskTimeCallbackDispose(callback);
	fssl->timer = NULL;
	skt = fssl->skt;
	refCon = fssl->callbackData;
	if (fssl->skt == NULL)		/* check if some error has occurred and dispose everything here in that case as there's no chance to do after this point */
		FskSSLDispose(fssl);
	(*fssl->socketCallback)(skt, refCon);
	/* nothing should be here! */
}
示例#3
0
static FskErr KprSocketStartTSL(KprSocket self)
{
	FskErr err;
	void *ssl = NULL;

	if (self->sslState != kKprSocketSSLStateInsecure) return kFskErrBadState;

	bailIfError(FskSSLAttach(&ssl, self->socket));

	if (self->server && self->server->certs != NULL)
		FskSSLLoadCerts(ssl, self->server->certs);

	self->sslState = kKprSocketSSLStateHandshaking;
	err = FskSSLHandshake(ssl, KprSocketSSLHandshakeFinished, self, (self->server == NULL), 0);

bail:
	if (err != kFskErrNone) {
		FskSSLDispose(ssl);
	}
	return err;
}