[ Web Proxy ]
URL:
Viewing: https://raw.githubusercontent.com/jcfain/esp32_https_server/bodyparser/src/HTTPSServer.cpp [Back]  [Original]

#include "HTTPSServer.hpp"

namespace httpsserver {


HTTPSServer::HTTPSServer(SSLCert * cert, const uint16_t port, const uint8_t maxConnections, const in_addr_t bindAddress):
	HTTPServer(port, maxConnections, bindAddress),
	_cert(cert) {

	// Configure runtime data
	_sslctx = NULL;
}

HTTPSServer::~HTTPSServer() {

}

/**
 * This method starts the server and begins to listen on the port
 */
uint8_t HTTPSServer::setupSocket() {
	if (!isRunning()) {
		if (!setupSSLCTX()) {
			Serial.println("setupSSLCTX failed");
			return 0;
		}

		if (!setupCert()) {
			Serial.println("setupCert failed");
			SSL_CTX_free(_sslctx);
			_sslctx = NULL;
			return 0;
		}

		if (HTTPServer::setupSocket()) {
			return 1;
		} else {
			Serial.println("setupSockets failed");
			SSL_CTX_free(_sslctx);
			_sslctx = NULL;
			return 0;
		}
	} else {
		return 1;
	}
}

void HTTPSServer::teardownSocket() {

	HTTPServer::teardownSocket();

	// Tear down the SSL context
	SSL_CTX_free(_sslctx);
	_sslctx = NULL;
}

int HTTPSServer::createConnection(int idx) {
	HTTPSConnection * newConnection = new HTTPSConnection(this);
	_connections[idx] = newConnection;
	return newConnection->initialize(_socket, _sslctx, &_defaultHeaders);
}

/**
 * This method configures the ssl context that is used for the server
 */
uint8_t HTTPSServer::setupSSLCTX() {
	_sslctx = SSL_CTX_new(TLSv1_2_server_method());
	if (_sslctx) {
		// Set SSL Timeout to 5 minutes
		SSL_CTX_set_timeout(_sslctx, 300);
		return 1;
	} else {
		_sslctx = NULL;
		return 0;
	}
}

/**
 * This method configures the certificate and private key for the given
 * ssl context
 */
uint8_t HTTPSServer::setupCert() {
	// Configure the certificate first
	uint8_t ret = SSL_CTX_use_certificate_ASN1(
		_sslctx,
		_cert->getCertLength(),
		_cert->getCertData()
	);

	// Then set the private key accordingly
	if (ret) {
		ret = SSL_CTX_use_RSAPrivateKey_ASN1(
			_sslctx,
			_cert->getPKData(),
			_cert->getPKLength()
		);
	}

	return ret;
}

} /* namespace httpsserver */

Web Proxy Viewer  |  New URL  |  Original Page