XS-libunievent
view release on metacpan or search on metacpan
libunievent/src/panda/unievent/ssl/SslFilter.cc view on Meta::CPAN
WriteRequest* orig;
bool final;
SslWriteRequest (WriteRequest* req = nullptr) : WriteRequest(), orig(req), final() {}
};
using SslWriteRequestSP = iptr<SslWriteRequest>;
SslFilter::SslFilter (Stream* stream, const SslContext &context, const SslFilterSP& server_filter)
: StreamFilter(stream, TYPE, PRIORITY), state(State::initial), profile(Profile::UNKNOWN), server_filter(server_filter)
{
panda_log_ctor();
if (stream->listening() && !SSL_CTX_check_private_key(context)) throw Error("SSL certificate&key needed to listen()");
#ifdef RENEGOTIATION_DISABLED
SSL_CTX_set_options(context, SSL_OP_NO_RENEGOTIATION);
#endif
init(context);
}
SslFilter::SslFilter (Stream* stream, const SSL_METHOD* method) : SslFilter(stream, ssl_ctx_from_method(method)) {
}
SslFilter::~SslFilter () {
libunievent/src/panda/unievent/ssl/SslFilter.cc view on Meta::CPAN
write_bio = BIO_new(SslBio::method());
if (!write_bio) throw Error(make_ssl_error_code(SSL_ERROR_SSL));
SslBio::set_handle(read_bio, handle);
SslBio::set_handle(write_bio, handle);
SSL_set_bio(raw_ssl, read_bio, write_bio);
ssl = raw_ssl;
}
void SslFilter::listen () {
if (!SSL_check_private_key(ssl)) throw Error("SSL certificate&key needed to listen()");
NextFilter::listen();
}
void SslFilter::reset () {
if (state == State::initial) return;
_ESSL("reset, state: %d, connecting: %d", (int)state, handle->connecting());
StreamFilterSP hold = this;
(void)hold;
source_request = nullptr;
libunievent/tests/lib/test.cc view on Meta::CPAN
static SslContext ctx = nullptr;
if (ctx) {
return ctx;
}
auto raw = SSL_CTX_new(SSLv23_server_method());
if (!raw) throw Error(make_ssl_error_code(SSL_ERROR_SSL));
ctx = SslContext::attach(raw);
SSL_CTX_use_certificate_file(ctx, "tests/cert/ca.pem", SSL_FILETYPE_PEM);
SSL_CTX_use_PrivateKey_file(ctx, "tests/cert/ca.key", SSL_FILETYPE_PEM);
if (!SSL_CTX_check_private_key(ctx)) throw panda::exception("bad ctx");
return ctx;
}
TcpSP make_basic_server (const LoopSP& loop, const SockAddr& sa) {
TcpSP server = new Tcp(loop);
server->bind(sa);
server->listen(1);
return server;
}
libunievent/tests/tcp/ssl.cc view on Meta::CPAN
err = SSL_CTX_load_verify_locations(ctx, ca.c_str(), nullptr);
assert(err);
err = SSL_CTX_use_certificate_file(ctx, cert.c_str(), SSL_FILETYPE_PEM);
assert(err);
err = SSL_CTX_use_PrivateKey_file(ctx, key.c_str(), SSL_FILETYPE_PEM);
assert(err);
SSL_CTX_check_private_key(ctx);
assert(err);
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER, nullptr);
SSL_CTX_set_verify_depth(ctx, 4);
return r;
}
static SslContext get_server_context(string ca_name) {
auto ctx = SSL_CTX_new(SSLv23_server_method());
libunievent/tests/tcp/ssl.cc view on Meta::CPAN
string cert = path + "/" + ca_name + ".pem";
string key = path + "/" + ca_name + ".key";
int err;
err = SSL_CTX_use_certificate_file(ctx, cert.c_str(), SSL_FILETYPE_PEM);
assert(err);
err = SSL_CTX_use_PrivateKey_file(ctx, key.c_str(), SSL_FILETYPE_PEM);
assert(err);
err = SSL_CTX_check_private_key(ctx);
assert(err);
err = SSL_CTX_load_verify_locations(ctx, cert.c_str(), nullptr);
assert(err);
SSL_CTX_set_verify(ctx, SSL_VERIFY_PEER | SSL_VERIFY_FAIL_IF_NO_PEER_CERT, nullptr);
SSL_CTX_set_verify_depth(ctx, 4);
return r;
}
( run in 0.404 second using v1.01-cache-2.11-cpan-4d50c553e7e )