mirror of
https://github.com/sogou/workflow.git
synced 2026-02-08 01:33:17 +08:00
SSL_CTX_up_ref() only on openSSL 1.1 or above. (#1535)
This commit is contained in:
@@ -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)
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
|
||||
@@ -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;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user