Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
164 changes: 82 additions & 82 deletions cdb2api/cdb2api.c
Original file line number Diff line number Diff line change
Expand Up @@ -230,6 +230,16 @@ static int _MACHINE_ID; /* ONE-TIME */
static char *_ARGV0; /* ONE-TIME */
#define DB_TZNAME_DEFAULT "America/New_York"

static pthread_mutex_t cdb2_event_mutex = PTHREAD_MUTEX_INITIALIZER;
static cdb2_event cdb2_gbl_events;
static int cdb2_gbl_event_version;
static cdb2_event *cdb2_next_callback(cdb2_hndl_tp *, cdb2_event_type, cdb2_event *);
static void *cdb2_invoke_callback(cdb2_hndl_tp *, cdb2_event *, int, ...);
static int refresh_gbl_events_on_hndl(cdb2_hndl_tp *);

static pthread_once_t init_once = PTHREAD_ONCE_INIT;
static int log_calls = 0; /* ONE-TIME */

static pthread_mutex_t cdb2_ssl_sess_lock = PTHREAD_MUTEX_INITIALIZER;

static cdb2_ssl_sess *cdb2_get_ssl_sessions(cdb2_hndl_tp *hndl);
Expand All @@ -239,24 +249,8 @@ static int cdb2_add_ssl_session(cdb2_hndl_tp *hndl);

static pthread_mutex_t cdb2_cfg_lock = PTHREAD_MUTEX_INITIALIZER;

pthread_mutex_t cdb2_sockpool_mutex = PTHREAD_MUTEX_INITIALIZER;
#define MAX_SOCKPOOL_FDS 8

#include <netdb.h>

static pthread_once_t init_once = PTHREAD_ONCE_INIT;
static int log_calls = 0; /* ONE-TIME */

static void reset_sockpool(void);

static pthread_mutex_t cdb2_event_mutex = PTHREAD_MUTEX_INITIALIZER;
static cdb2_event cdb2_gbl_events;
static int cdb2_gbl_event_version;
static cdb2_event *cdb2_next_callback(cdb2_hndl_tp *, cdb2_event_type,
cdb2_event *);
static void *cdb2_invoke_callback(cdb2_hndl_tp *, cdb2_event *, int, ...);
static int refresh_gbl_events_on_hndl(cdb2_hndl_tp *);

#define PROCESS_EVENT_CTRL_BEFORE(h, e, rc, callbackrc, ovwrrc) \
do { \
if (e->ctrls & CDB2_OVERWRITE_RETURN_VALUE) { \
Expand Down Expand Up @@ -310,6 +304,37 @@ void cdb2_set_install_libs(void (*ptr)(void)) { cdb2_install = ptr; }
void cdb2_set_uninstall_libs(void (*ptr)(void)) { cdb2_uninstall = ptr; }
#endif

pthread_mutex_t cdb2_sockpool_mutex = PTHREAD_MUTEX_INITIALIZER;
#define MAX_SOCKPOOL_FDS 8

#include <netdb.h>

static char *cdb2_type_str(int type)
{
switch (type) {
case CDB2_INTEGER:
return "CDB2_INTEGER";
case CDB2_REAL:
return "CDB2_REAL";
case CDB2_CSTRING:
return "CDB2_CSTRING";
case CDB2_BLOB:
return "CDB2_BLOB";
case CDB2_DATETIME:
return "CDB2_DATETIME";
case CDB2_INTERVALYM:
return "CDB2_INTERVALYM";
case CDB2_INTERVALDS:
return "CDB2_INTERVALDS";
case CDB2_DATETIMEUS:
return "CDB2_DATETIMEUS";
case CDB2_INTERVALDSUS:
return "CDB2_INTERVALDSUS";
default:
return "???";
}
}

#define debugprint(fmt, args...) \
do { \
if (hndl && hndl->debug_trace) \
Expand Down Expand Up @@ -1104,14 +1129,6 @@ static int cdb2_do_tcpconnect(struct in_addr in, int port, int myport,
static void cdb2_init_context_msgs(cdb2_hndl_tp *hndl);
static int cdb2_free_context_msgs(cdb2_hndl_tp *hndl);

/* Make it equal to FSQL header. */
struct newsqlheader {
int type;
int compression;
int state; /* query state */
int length;
};

static cdb2_ssl_sess cdb2_ssl_sess_cache;

static int cdb2_tcpconnecth_to(cdb2_hndl_tp *hndl, const char *host, int port,
Expand Down Expand Up @@ -1148,6 +1165,14 @@ static int cdb2_tcpconnecth_to(cdb2_hndl_tp *hndl, const char *host, int port,
return rc;
}

/* Make it equal to FSQL header. */
struct newsqlheader {
int type;
int compression;
int state; /* query state */
int length;
};

void cdb2_set_min_retries(int min_retries)
{
if (min_retries > 0) {
Expand Down Expand Up @@ -2023,6 +2048,28 @@ static int sockpool_get_from_pool(void)
return fd;
}

static void get_host_and_port_from_fd(int fd, char *buf, size_t n, int *port)
{
int rc;
struct sockaddr_in addr;
socklen_t addr_size = sizeof(struct sockaddr_in);

if (!get_hostname_from_sockpool_fd)
return;

if (fd == -1)
return;

rc = getpeername(fd, (struct sockaddr *)&addr, &addr_size);
if (rc == 0) {
if (port != NULL)
*port = addr.sin_port;
/* Request a short host name. Set buf to empty on error. */
if (getnameinfo((struct sockaddr *)&addr, addr_size, buf, n, NULL, 0, NI_NOFQDN))
buf[0] = '\0';
}
}

/* The sockpool mutex must be locked at this point */
static int sockpool_place_fd_in_pool(int fd)
{
Expand Down Expand Up @@ -2507,27 +2554,6 @@ static int cdb2portmux_route(cdb2_hndl_tp *hndl, const char *remote_host,
return fd;
}

static void get_host_and_port_from_fd(int fd, char *buf, size_t n, int *port)
{
int rc;
struct sockaddr_in addr;
socklen_t addr_size = sizeof(struct sockaddr_in);

if (!get_hostname_from_sockpool_fd)
return;

if (fd == -1)
return;

rc = getpeername(fd, (struct sockaddr *)&addr, &addr_size);
if (rc == 0) {
*port = addr.sin_port;
/* Request a short host name. Set buf to empty on error. */
if (getnameinfo((struct sockaddr *)&addr, addr_size, buf, n, NULL, 0, NI_NOFQDN))
buf[0] = '\0';
}
}

static int newsql_connect_via_fd(cdb2_hndl_tp *hndl)
{
int rc = 0;
Expand Down Expand Up @@ -3856,6 +3882,17 @@ int cdb2_get_effects(cdb2_hndl_tp *hndl, cdb2_effects_tp *effects)
return rc;
}

/*
Clear ack flag so cdb2_close will not consume event
*/
int cdb2_clear_ack(cdb2_hndl_tp *hndl)
{
if (hndl && hndl->ack) {
hndl->ack = 0;
}
return 0;
}

static void free_query_list(struct query_list *head)
{
struct cdb2_query *q, *tmp;
Expand Down Expand Up @@ -5476,32 +5513,6 @@ static int cdb2_run_statement_typed_int(cdb2_hndl_tp *hndl, const char *sql, int
PRINT_AND_RETURN(-1);
}

static char *cdb2_type_str(int type)
{
switch (type) {
case CDB2_INTEGER:
return "CDB2_INTEGER";
case CDB2_REAL:
return "CDB2_REAL";
case CDB2_CSTRING:
return "CDB2_CSTRING";
case CDB2_BLOB:
return "CDB2_BLOB";
case CDB2_DATETIME:
return "CDB2_DATETIME";
case CDB2_INTERVALYM:
return "CDB2_INTERVALYM";
case CDB2_INTERVALDS:
return "CDB2_INTERVALDS";
case CDB2_DATETIMEUS:
return "CDB2_DATETIMEUS";
case CDB2_INTERVALDSUS:
return "CDB2_INTERVALDSUS";
default:
return "???";
}
}

int cdb2_run_statement_typed(cdb2_hndl_tp *hndl, const char *sql, int ntypes,
int *types)
{
Expand Down Expand Up @@ -7478,17 +7489,6 @@ int cdb2_clear_contexts(cdb2_hndl_tp *hndl)
return cdb2_free_context_msgs(hndl);
}

/*
Clear ack flag so cdb2_close will not consume event
*/
int cdb2_clear_ack(cdb2_hndl_tp* hndl)
{
if (hndl) {
hndl->ack = 0;
}
return 0;
}

cdb2_event *cdb2_register_event(cdb2_hndl_tp *hndl, cdb2_event_type types,
cdb2_event_ctrl ctrls, cdb2_event_callback cb,
void *user_arg, int nargs, ...)
Expand Down