SSL_CTX_up_ref() only on openSSL 1.1 or above. (#1535)

This commit is contained in:
xiehan
2024-04-23 16:45:30 +08:00
committed by GitHub
parent a5a6d1e5b6
commit 4cb0995e1f
4 changed files with 44 additions and 24 deletions

View File

@@ -21,7 +21,6 @@
#include <errno.h>
#include <stdlib.h>
#include <pthread.h>
#include <openssl/ssl.h>
#include "CommScheduler.h"
#define PTHREAD_COND_TIMEDWAIT(cond, mutex, abstime) \
@@ -85,13 +84,9 @@ int CommSchedTarget::init(const struct sockaddr *addr, socklen_t addrlen,
void CommSchedTarget::deinit()
{
SSL_CTX *ssl_ctx = this->get_ssl_ctx();
pthread_cond_destroy(&this->cond);
pthread_mutex_destroy(&this->mutex);
this->CommTarget::deinit();
if (ssl_ctx)
SSL_CTX_free(ssl_ctx);
}
CommTarget *CommSchedTarget::acquire(int wait_timeout)

View File

@@ -61,11 +61,8 @@ public:
int ret = this->init(addr, addrlen, connect_timeout, response_timeout,
max_connections);
if (ret >= 0 && ssl_ctx)
{
SSL_CTX_up_ref(ssl_ctx);
if (ret >= 0)
this->set_ssl(ssl_ctx, ssl_connect_timeout);
}
return ret;
}

View File

@@ -141,7 +141,7 @@ public:
CommSchedObject *request_object;
CommSchedGroup *group;
std::mutex mutex;
std::vector<CommSchedTarget *> targets;
std::vector<RouteManager::RouteTarget *> targets;
struct list_head breaker_list;
uint64_t key;
int nleft;
@@ -160,28 +160,29 @@ public:
int init(const struct RouteParams *params);
void deinit();
void notify_unavailable(CommSchedTarget *target);
void notify_available(CommSchedTarget *target);
void notify_unavailable(RouteManager::RouteTarget *target);
void notify_available(RouteManager::RouteTarget *target);
void check_breaker();
private:
void free_list();
CommSchedTarget *create_target(const struct RouteParams *params,
const struct addrinfo *addrinfo);
RouteManager::RouteTarget *create_target(const struct RouteParams *params,
const struct addrinfo *addrinfo);
int add_group_targets(const struct RouteParams *params);
};
struct __breaker_node
{
CommSchedTarget *target;
RouteManager::RouteTarget *target;
int64_t timeout;
struct list_head breaker_list;
};
CommSchedTarget *RouteResultEntry::create_target(const struct RouteParams *params,
const struct addrinfo *addr)
RouteManager::RouteTarget *
RouteResultEntry::create_target(const struct RouteParams *params,
const struct addrinfo *addr)
{
CommSchedTarget *target;
RouteManager::RouteTarget *target;
switch (params->transport_type)
{
@@ -221,7 +222,7 @@ CommSchedTarget *RouteResultEntry::create_target(const struct RouteParams *param
int RouteResultEntry::init(const struct RouteParams *params)
{
const struct addrinfo *addr = params->addrinfo;
CommSchedTarget *target;
RouteManager::RouteTarget *target;
if (addr == NULL)//0
{
@@ -262,8 +263,8 @@ int RouteResultEntry::init(const struct RouteParams *params)
int RouteResultEntry::add_group_targets(const struct RouteParams *params)
{
RouteManager::RouteTarget *target;
const struct addrinfo *addr;
CommSchedTarget *target;
for (addr = params->addrinfo; addr; addr = addr->ai_next)
{
@@ -322,7 +323,7 @@ void RouteResultEntry::deinit()
}
}
void RouteResultEntry::notify_unavailable(CommSchedTarget *target)
void RouteResultEntry::notify_unavailable(RouteManager::RouteTarget *target)
{
if (this->targets.size() <= 1)
return;
@@ -348,7 +349,7 @@ void RouteResultEntry::notify_unavailable(CommSchedTarget *target)
this->nleft--;
}
void RouteResultEntry::notify_available(CommSchedTarget *target)
void RouteResultEntry::notify_available(RouteManager::RouteTarget *target)
{
if (this->targets.size() <= 1 || this->nbreak == 0)
return;
@@ -574,12 +575,12 @@ int RouteManager::get(enum TransportType type,
void RouteManager::notify_unavailable(void *cookie, CommTarget *target)
{
if (cookie && target)
((RouteResultEntry *)cookie)->notify_unavailable((CommSchedTarget *)target);
((RouteResultEntry *)cookie)->notify_unavailable((RouteTarget *)target);
}
void RouteManager::notify_available(void *cookie, CommTarget *target)
{
if (cookie && target)
((RouteResultEntry *)cookie)->notify_available((CommSchedTarget *)target);
((RouteResultEntry *)cookie)->notify_available((RouteTarget *)target);
}

View File

@@ -24,6 +24,7 @@
#include <netdb.h>
#include <string>
#include <mutex>
#include <openssl/ssl.h>
#include "rbtree.h"
#include "WFConnection.h"
#include "EndpointParams.h"
@@ -45,6 +46,32 @@ public:
class RouteTarget : public CommSchedTarget
{
#if OPENSSL_VERSION_NUMBER >= 0x10100000L
public:
int init(const struct sockaddr *addr, socklen_t addrlen, SSL_CTX *ssl_ctx,
int connect_timeout, int ssl_connect_timeout, int response_timeout,
size_t max_connections)
{
int ret = this->CommSchedTarget::init(addr, addrlen, ssl_ctx,
connect_timeout, ssl_connect_timeout,
response_timeout, max_connections);
if (ret >= 0 && ssl_ctx)
SSL_CTX_up_ref(ssl_ctx);
return ret;
}
void deinit()
{
SSL_CTX *ssl_ctx = this->get_ssl_ctx();
this->CommSchedTarget::deinit();
if (ssl_ctx)
SSL_CTX_free(ssl_ctx);
}
#endif
public:
int state;