35 #include <sys/types.h> 43 #include <sys/ioctl.h> 45 #include <sys/socket.h> 46 #include <netinet/in.h> 50 #include <sys/select.h> 54 #include <sys/filio.h> 58 #if defined(SOLARIS) || defined(LINUX) 86 #define TRACE(string, arg) \ 88 er_log_debug(ARG_FILE_LINE, string, arg); \ 92 #define TRACE(string, arg) 120 #define NUM_NORMAL_CLIENTS (prm_get_integer_value(PRM_ID_CSS_MAX_CLIENTS)) 122 #define RMUTEX_NAME_CONN_ENTRY "CONN_ENTRY" 152 #define CSS_CONN_IDX(conn_arg) ((conn_arg) - css_Conn_array) 154 #define CSS_FREE_CONN_MSG "Free count = %d, head = %d" 155 #define CSS_FREE_CONN_ARGS css_Num_free_conn, CSS_CONN_IDX (css_Free_conn_anchor) 157 #define CSS_ACTIVE_CONN_MSG "Active count = %d, head = %d" 158 #define CSS_ACTIVE_CONN_ARGS css_Num_active_conn, CSS_CONN_IDX (css_Active_conn_anchor) 162 int connect_type,
const char *server_name,
int server_name_length,
int port);
167 static unsigned int css_make_eid (
unsigned short entry_id,
unsigned short rid);
182 int size,
int rc,
int transid,
int invalidate_snapshot,
int db_error);
185 char *
buffer,
int buffer_size,
int rc,
int transid,
int invalidate_snapshot,
193 unsigned short request_id,
char **
buffer,
int *buffer_size,
203 int *
rc,
int waitsec);
228 static bool overflow =
false;
229 int next_client_id,
rv,
i;
269 return next_client_id;
287 conn->init_pending_request ();
298 conn->stop_talk =
false;
299 conn->ignore_repl_delay =
false;
301 conn->version_string =
NULL;
303 conn->free_queue_list =
NULL;
304 conn->free_queue_count = 0;
306 conn->free_wait_queue_list =
NULL;
307 conn->free_wait_queue_count = 0;
309 conn->free_net_header_list =
NULL;
310 conn->free_net_header_count = 0;
313 #if defined(SERVER_MODE) 314 conn->session_p =
NULL;
374 conn->stop_talk =
false;
377 if (conn->version_string)
392 if (conn->free_queue_list !=
NULL)
394 assert (conn->free_queue_count > 0);
398 if (conn->free_wait_queue_list !=
NULL)
400 assert (conn->free_wait_queue_count > 0);
404 if (conn->free_net_header_list !=
NULL)
406 assert (conn->free_net_header_count > 0);
410 #if defined(SERVER_MODE) 413 session_state_decrease_ref_count (
NULL, conn->session_p);
414 conn->session_p =
NULL;
437 if (css_Conn_array !=
NULL)
462 if (css_Conn_array ==
NULL)
473 conn = &css_Conn_array[
i];
491 if (i < css_Num_max_conn - 1)
493 conn->
next = &css_Conn_array[i + 1];
502 css_Active_conn_anchor =
NULL;
503 css_Free_conn_anchor = &css_Conn_array[0];
512 if (css_Conn_array !=
NULL)
530 if (css_Active_conn_anchor !=
NULL)
532 for (conn = css_Active_conn_anchor; conn !=
NULL; conn =
next)
542 css_Active_conn_anchor =
NULL;
548 if (css_Conn_array !=
NULL)
552 conn = &css_Conn_array[
i];
554 #if defined(SERVER_MODE) 581 if (css_Free_conn_anchor !=
NULL)
584 css_Free_conn_anchor = css_Free_conn_anchor->
next;
624 css_Active_conn_anchor = conn;
660 css_Free_conn_anchor = conn;
691 switch (conn_rule_info->
rule)
760 switch (conn_rule_info->
rule)
881 for (p = css_Active_conn_anchor; p !=
NULL; p =
next)
889 css_Active_conn_anchor =
next;
931 "CONN_ENTRY: %p, next(%p), idx(%d),fd(%lld),request_id(%d),transaction_id(%d),client_id(%d)\n",
932 conn, conn->
next, conn->idx, (
long long) conn->
fd, conn->
request_id, conn->get_tran_index (),
946 if (css_Active_conn_anchor !=
NULL)
952 for (conn = css_Active_conn_anchor, i = 0; conn !=
NULL; conn =
next, i++)
974 if (css_Free_conn_anchor !=
NULL)
980 for (conn = css_Free_conn_anchor, i = 0; conn !=
NULL; conn =
next, i++)
1028 if (connection_error_handler)
1047 const char *host_name,
int connect_type,
const char *server_name,
int server_name_length,
int port)
1084 int response, response_buff;
1086 int connection_protocol;
1087 #if !defined(WINDOWS) 1089 int datagram_fd, socket_fd;
1117 if (
css_common_connect (conn, &rid, hname, connection_protocol, server_name, name_length, master_port_id) ==
NULL)
1122 if (
css_readn (conn->
fd, (
char *) &response_buff, sizeof (
int), -1) !=
sizeof (
int))
1127 response =
ntohl (response_buff);
1128 TRACE (
"css_connect_to_master_server received %d as response from master\n", response);
1146 server_port_id = -1;
1153 response =
htonl (server_port_id);
1154 css_net_send (conn, (
char *) &response,
sizeof (
int), -1);
1159 #if defined(WINDOWS) 1166 pname = std::filesystem::temp_directory_path ();
1167 pname +=
"/cubrid_tcp_setup_server" + std::to_string (getpid ());
1168 (void) unlink (pname.c_str ());
1172 (void) unlink (pname.c_str ());
1178 (void) unlink (pname.c_str ());
1185 (void) unlink (pname.c_str ());
1191 (void) unlink (pname.c_str ());
1215 if (css_Active_conn_anchor !=
NULL)
1219 for (conn = css_Active_conn_anchor; conn !=
NULL; conn =
next)
1222 if (conn->get_tran_index () == tran_index)
1245 if (css_Active_conn_anchor !=
NULL)
1249 for (conn = css_Active_conn_anchor; conn !=
NULL; conn =
next)
1283 if (css_Active_conn_anchor ==
NULL)
1285 *session_ids =
NULL;
1294 if (sessions_p ==
NULL)
1302 for (conn = css_Active_conn_anchor; conn !=
NULL; conn =
next)
1310 *session_ids = sessions_p;
1314 if (sessions_p !=
NULL)
1319 *session_ids =
NULL;
1341 if (css_Active_conn_anchor !=
NULL)
1345 for (conn = css_Active_conn_anchor; conn !=
NULL; conn = conn->
next)
1347 if (conn->get_tran_index () == tran_index)
1369 unsigned short old_rid;
1370 unsigned short request_id;
1391 return (request_id);
1421 unsigned short flags = 0;
1482 unsigned short flags = 0;
1486 if (conn->stop_talk ==
true)
1543 if (conn->stop_talk ==
true)
1576 r = (
int *) malloc (
sizeof (
int));
1613 return ((top << 16) | rid);
1630 p = conn->free_queue_list;
1636 conn->free_queue_list = p->
next;
1638 conn->free_queue_count--;
1639 assert (0 <= conn->free_queue_count);
1657 entry->
next = conn->free_queue_list;
1658 conn->free_queue_list = entry;
1660 conn->free_queue_count++;
1661 assert (0 < conn->free_queue_count);
1676 while (conn->free_queue_list !=
NULL)
1678 p = conn->free_queue_list;
1679 conn->free_queue_list = p->
next;
1682 conn->free_queue_count--;
1685 conn->free_queue_list =
NULL;
1686 assert (conn->free_queue_count == 0);
1701 p = conn->free_wait_queue_list;
1707 conn->free_wait_queue_list = p->
next;
1709 conn->free_wait_queue_count--;
1710 assert (0 <= conn->free_wait_queue_count);
1728 entry->
next = conn->free_wait_queue_list;
1729 conn->free_wait_queue_list = entry;
1731 conn->free_wait_queue_count++;
1732 assert (0 < conn->free_wait_queue_count);
1747 while (conn->free_wait_queue_list !=
NULL)
1749 p = conn->free_wait_queue_list;
1750 conn->free_wait_queue_list = p->
next;
1753 conn->free_wait_queue_count--;
1756 conn->free_wait_queue_list =
NULL;
1757 assert (conn->free_wait_queue_count == 0);
1774 p = (
NET_HEADER *) conn->free_net_header_list;
1780 conn->free_net_header_list = (
char *) (*(UINTPTR *)
p);
1782 conn->free_net_header_count--;
1783 assert (0 <= conn->free_net_header_count);
1799 *(UINTPTR *) entry = (UINTPTR) conn->free_net_header_list;
1800 conn->free_net_header_list = (
char *) entry;
1802 conn->free_net_header_count++;
1803 assert (0 < conn->free_net_header_count);
1818 while (conn->free_net_header_list !=
NULL)
1820 p = conn->free_net_header_list;
1822 conn->free_net_header_list = (
char *) (*(UINTPTR *)
p);
1823 conn->free_net_header_count--;
1828 conn->free_net_header_list =
NULL;
1829 assert (conn->free_net_header_count == 0);
1845 int size,
int rc,
int transid,
int invalidate_snapshot,
int db_error)
1849 if (conn->free_queue_list !=
NULL)
1910 int rc,
int transid,
int invalidate_snapshot,
int db_error)
1915 p =
css_make_queue_entry (conn, request_id, buffer, buffer_size, rc, transid, invalidate_snapshot, db_error);
2013 if (conn->free_wait_queue_list !=
NULL)
2075 int *buffer_size,
int *
rc)
2156 unsigned short flags = 0;
2158 int transaction_id, db_error, invalidate_snapshot;
2169 if (conn->stop_talk)
2176 conn->set_tran_index (transaction_id);
2209 CSS_TRACE2 (
"Asked to queue an unknown packet id = %d.\n", type);
2220 next = p->next_wait_thrd;
2221 p->next_wait_thrd =
NULL;
2310 if (*wake_thrd !=
NULL)
2313 while (last->next_wait_thrd !=
NULL)
2315 last = last->next_wait_thrd;
2322 if (buffer_entry !=
NULL)
2325 if (size > buffer_entry->
size)
2327 size = buffer_entry->
size;
2329 buffer = buffer_entry->
buffer;
2340 buffer = (
char *) malloc (size);
2349 if (data_wait !=
NULL)
2352 thrd->next_wait_thrd =
NULL;
2359 last->next_wait_thrd = thrd;
2372 if (data_wait ==
NULL)
2383 *data_wait->
rc =
rc;
2399 if (data_wait ==
NULL)
2409 if (data_wait !=
NULL)
2412 *data_wait->
size = 0;
2413 *data_wait->
rc =
rc;
2432 buffer = (
char *) malloc (size);
2476 assert (!conn->stop_talk);
2484 if (conn->free_net_header_list !=
NULL)
2499 memcpy ((
char *) p, (
char *) header,
sizeof (
NET_HEADER));
2635 if (*bufferp !=
NULL)
2657 char **
buffer,
int *bufsize,
int *
rc,
int waitsec)
2685 *buffer = buffer_entry->
buffer;
2686 *bufsize = MIN (data_entry->
size, buffer_entry->
size);
2687 if (*buffer != data_entry->
buffer || *bufsize != data_entry->
size)
2689 memcpy (*buffer, data_entry->
buffer, *bufsize);
2699 *buffer = data_entry->
buffer;
2700 *bufsize = data_entry->
size;
2705 *rc = data_entry->
rc;
2759 struct timespec abstime;
2761 abstime.tv_sec = (int) time (
NULL) + waitsec;
2762 abstime.tv_nsec = 0;
2789 if (*buffer ==
NULL || *bufsize < 0)
2859 *buffer_size = p->
size;
3017 for (access = css_Access_status_anchor; access !=
NULL; access = access->
next)
3019 if (strcmp (access->
db_user, db_user) == 0)
3039 css_Access_status_anchor = access;
3041 strncpy (access->
db_user, db_user, sizeof (access->
db_user) - 1);
3047 strncpy (access->
host, host, sizeof (access->
host) - 1);
3067 for (access = css_Access_status_anchor; (access !=
NULL && i < num_user); access = access->
next, i++)
3069 access_status_array[
i] = access;
3088 while (css_Access_status_anchor !=
NULL)
3091 css_Access_status_anchor = access->
next;
struct css_wait_queue_entry * next
#define rmutex_finalize(a)
void css_shutdown_conn(CSS_CONN_ENTRY *conn)
CSS_QUEUE_ENTRY * entry_ptr
static void css_remove_unexpected_packets(CSS_CONN_ENTRY *conn, unsigned short request_id)
void css_remove_all_unexpected_packets(CSS_CONN_ENTRY *conn)
CSS_CONN_ENTRY * css_find_conn_by_tran_index(int tran_index)
CSS_QUEUE_ENTRY * buffer_queue
cubthread::entry * thread_get_thread_entry_info(void)
static int css_find_queue_entry_by_key(void *data, void *user)
#define END_SHARED_ACCESS_ACTIVE_CONN_ANCHOR(r)
static void css_queue_data_packet(CSS_CONN_ENTRY *conn, unsigned short request_id, const NET_HEADER *header, THREAD_ENTRY **wait_thrd)
static CSS_WAIT_QUEUE_ENTRY * css_find_and_remove_wait_queue_entry(CSS_LIST *list, unsigned int key)
#define ERR_CSS_ERROR_DURING_SERVER_CONNECT
bool css_tcp_listen_server_datagram(SOCKET sockfd, SOCKET *newfd)
static NET_HEADER * css_claim_net_header_entry(CSS_CONN_ENTRY *conn)
#define START_EXCLUSIVE_ACCESS_ACTIVE_CONN_ANCHOR(r)
void css_print_free_conn_list(void)
int(* CSS_THREAD_FN)(THREAD_ENTRY *thrd, CSS_THREAD_ARG)
static void css_free_net_header_list(CSS_CONN_ENTRY *conn)
void css_shutdown_conn_by_tran_index(int tran_index)
#define ER_CSS_PTHREAD_COND_TIMEDOUT
const int css_Conn_rules_size
#define rmutex_unlock(a, b)
CSS_CONN_ENTRY * css_make_conn(SOCKET fd)
enum db_client_type BOOT_CLIENT_TYPE
unsigned int htonl(unsigned int from)
static unsigned int css_make_eid(unsigned short entry_id, unsigned short rid)
int css_return_queued_request(CSS_CONN_ENTRY *conn, unsigned short *rid, int *request, int *buffer_size)
#define csect_enter(a, b, c)
static LAST_ACCESS_STATUS * css_Access_status_anchor
#define pthread_mutex_unlock(a)
CSS_CONN_RULE_INFO css_Conn_rules[]
int css_Server_inhibit_connection_socket
static int css_remove_and_free_queue_entry(void *data, void *arg)
int css_Server_use_new_connection_protocol
void css_final_conn_list(void)
CSS_THREAD_FN css_Connection_error_handler
int css_return_queued_error(CSS_CONN_ENTRY *conn, unsigned short request_id, char **buffer, int *buffer_size, int *rc)
int css_increment_num_conn(BOOT_CLIENT_TYPE client_type)
unsigned int css_return_eid_from_conn(CSS_CONN_ENTRY *conn, unsigned short rid)
CSS_THREAD_FN css_Request_handler
#define NET_HEADER_FLAG_INVALIDATE_SNAPSHOT
static pthread_mutex_t css_Client_id_lock
void css_print_conn_list(void)
void thread_wakeup_already_had_mutex(cubthread::entry *thread_p, thread_resume_suspend_status resume_reason)
char db_user[DB_MAX_USER_LENGTH]
static css_error_code css_queue_packet(CSS_CONN_ENTRY *conn, int type, unsigned short request_id, const NET_HEADER *header, int size)
int css_queue_user_data_buffer(CSS_CONN_ENTRY *conn, unsigned short request_id, int size, char *buffer)
#define ER_CSS_PTHREAD_MUTEX_LOCK
static void css_free_queue_entry(CSS_CONN_ENTRY *conn, CSS_QUEUE_ENTRY *entry)
#define CSS_ACTIVE_CONN_ARGS
#define CSS_RWLOCK_ACTIVE_CONN_ANCHOR_NAME
static CSS_QUEUE_ENTRY * css_find_and_remove_queue_entry(CSS_LIST *list, unsigned int key)
void thread_suspend_wakeup_and_unlock_entry(cubthread::entry *thread_p, thread_resume_suspend_status suspended_reason)
static int css_Num_active_conn
#define START_SHARED_ACCESS_FREE_CONN_ANCHOR(r)
int css_initialize_list(CSS_LIST *list, int free_count)
void css_free_conn(CSS_CONN_ENTRY *conn)
struct css_wait_queue_entry CSS_WAIT_QUEUE_ENTRY
#define START_EXCLUSIVE_ACCESS_FREE_CONN_ANCHOR(r)
bool css_tcp_setup_server_datagram(const char *pathname, SOCKET *sockfd)
static int find_wait_queue_entry_by_key(void *data, void *user)
void css_decrement_num_conn(BOOT_CLIENT_TYPE client_type)
void css_read_remaining_bytes(SOCKET fd, int len)
static int css_return_queued_data_timeout(CSS_CONN_ENTRY *conn, unsigned short rid, char **buffer, int *bufsize, int *rc, int waitsec)
#define CSS_RWLOCK_ACTIVE_CONN_ANCHOR
static void css_retire_queue_entry(CSS_CONN_ENTRY *conn, CSS_QUEUE_ENTRY *entry)
#define END_EXCLUSIVE_ACCESS_FREE_CONN_ANCHOR(r)
char host[CUB_MAXHOSTNAMELEN]
static bool css_is_valid_request_id(CSS_CONN_ENTRY *conn, unsigned short request_id)
static bool css_is_request_aborted(CSS_CONN_ENTRY *conn, unsigned short request_id)
int css_receive_request(CSS_CONN_ENTRY *conn, unsigned short *rid, int *request, int *buffer_size)
static void clear_wait_queue_entry_and_free_buffer(THREAD_ENTRY *thrdp, CSS_CONN_ENTRY *conn, unsigned short rid, char **bufferp)
void css_insert_into_active_conn_list(CSS_CONN_ENTRY *conn)
int css_net_send(CSS_CONN_ENTRY *conn, const char *buff, int len, int timeout)
#define CSS_CONN_IDX(conn_arg)
#define TRACE(string, arg)
int css_get_session_ids_for_active_connections(SESSION_ID **session_ids, int *count)
#define ERR_CSS_SERVER_ALREADY_EXISTS
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
LAST_ACCESS_STATUS * next
static void css_free_wait_queue_list(CSS_CONN_ENTRY *conn)
CSS_QUEUE_ENTRY * data_queue
int css_send_request(CSS_CONN_ENTRY *conn, int command, unsigned short *request_id, const char *arg_buffer, int arg_buffer_size)
void css_get_user_access_status(int num_user, LAST_ACCESS_STATUS **access_status_array)
css_error_code(* css_Connect_handler)(CSS_CONN_ENTRY *)
#define END_SHARED_ACCESS_FREE_CONN_ANCHOR(r)
SOCKET css_tcp_client_open(const char *host, int port)
unsigned short css_get_request_id(CSS_CONN_ENTRY *conn)
#define ER_OUT_OF_VIRTUAL_MEMORY
#define START_SHARED_ACCESS_ACTIVE_CONN_ANCHOR(r)
int css_init_conn_list(void)
unsigned short request_id
void css_register_handler_routines(css_error_code(*connect_handler)(CSS_CONN_ENTRY *conn), CSS_THREAD_FN request_handler, CSS_THREAD_FN connection_error_handler)
int css_traverse_list(CSS_LIST *list, int(*func)(void *, void *), void *arg)
static void css_free_wait_queue_entry(CSS_CONN_ENTRY *conn, CSS_WAIT_QUEUE_ENTRY *entry)
static CSS_CONN_ENTRY * css_common_connect(CSS_CONN_ENTRY *conn, unsigned short *rid, const char *host_name, int connect_type, const char *server_name, int server_name_length, int port)
#define IS_INVALID_SOCKET(socket)
#define DEFAULT_HEADER_DATA
int css_add_list(CSS_LIST *list, void *item)
int css_return_queued_data(CSS_CONN_ENTRY *conn, unsigned short rid, char **buffer, int *bufsize, int *rc)
static CSS_QUEUE_ENTRY * css_make_queue_entry(CSS_CONN_ENTRY *conn, unsigned int key, char *buffer, int size, int rc, int transid, int invalidate_snapshot, int db_error)
void css_shutdown_socket(SOCKET fd)
static css_error_code css_add_queue_entry(CSS_CONN_ENTRY *conn, CSS_LIST *list, unsigned short request_id, char *buffer, int buffer_size, int rc, int transid, int invalidate_snapshot, int db_error)
static void css_process_close_packet(CSS_CONN_ENTRY *conn)
static void css_dealloc_conn(CSS_CONN_ENTRY *conn)
static CSS_QUEUE_ENTRY * css_find_queue_entry(CSS_LIST *list, unsigned int key)
#define rmutex_lock(a, b)
static int css_increment_num_conn_internal(CSS_CONN_RULE_INFO *conn_rule_info)
static CSS_WAIT_QUEUE_ENTRY * css_claim_wait_queue_entry(CSS_CONN_ENTRY *conn)
#define CSS_RWLOCK_FREE_CONN_ANCHOR_NAME
unsigned short htons(unsigned short from)
static const int CSS_MAX_CLIENT_ID
struct queue_search_arg CSS_QUEUE_SEARCH_ARG
void thread_lock_entry(cubthread::entry *thread_p)
CSS_QUEUE_ENTRY * abort_queue
struct wait_queue_search_arg CSS_WAIT_QUEUE_SEARCH_ARG
static css_error_code css_queue_command_packet(CSS_CONN_ENTRY *conn, unsigned short request_id, const NET_HEADER *header, int size)
struct packet_header NET_HEADER
static CSS_WAIT_QUEUE_ENTRY * css_make_wait_queue_entry(CSS_CONN_ENTRY *conn, unsigned int key, char **buffer, int *size, int *rc)
CSS_CONN_ENTRY * css_connect_to_master_server(int master_port_id, const char *server_name, int name_length)
static void css_retire_wait_queue_entry(CSS_CONN_ENTRY *conn, CSS_WAIT_QUEUE_ENTRY *entry)
void er_set_with_oserror(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
int count(int &result, const cub_regex_object ®, const std::string &src, const int position, const INTL_CODESET codeset)
CSS_CONN_ENTRY * css_Active_conn_anchor
static void css_free_queue_entry_list(CSS_CONN_ENTRY *conn)
void css_init_conn_rules(void)
int css_receive_data(CSS_CONN_ENTRY *conn, unsigned short req_id, char **buffer, int *buffer_size, int timeout)
static void error(const char *msg)
#define ER_CSS_CLIENTS_EXCEEDED
void thread_unlock_entry(cubthread::entry *thread_p)
static void css_process_abort_packet(CSS_CONN_ENTRY *conn, unsigned short request_id)
#define CSS_LOG_STACK(msg_arg,...)
int css_readn(SOCKET fd, char *ptr, int nbytes, int timeout)
int css_get_max_conn(void)
void * css_remove_list_from_head(CSS_LIST *list)
THREAD_ENTRY * thrd_entry
#define rwlock_finalize(a)
unsigned short ntohs(unsigned short from)
static int css_Num_free_conn
void css_dealloc_conn_rmutex(CSS_CONN_ENTRY *conn)
#define csect_enter_as_reader(a, b, c)
#define free_and_init(ptr)
int css_read_header(CSS_CONN_ENTRY *conn, const NET_HEADER *local_header)
static int css_get_next_client_id(void)
void css_set_user_access_status(const char *db_user, const char *host, const char *program_name)
int css_get_num_free_conn(void)
#define ER_CSS_PTHREAD_MUTEX_UNLOCK
#define CSS_ACTIVE_CONN_MSG
CSS_QUEUE_ENTRY * error_queue
int thread_suspend_timeout_wakeup_and_unlock_entry(cubthread::entry *thread_p, struct timespec *time_p, thread_resume_suspend_status suspended_reason)
int css_net_recv(SOCKET fd, char *buffer, int *maxlen, int timeout)
int css_finalize_list(CSS_LIST *list)
#define CSS_RWLOCK_FREE_CONN_ANCHOR
static void css_retire_net_header_entry(CSS_CONN_ENTRY *conn, NET_HEADER *entry)
static int css_remove_and_free_wait_queue_entry(void *data, void *arg)
CSS_WAIT_QUEUE_ENTRY * entry_ptr
static CSS_CONN_ENTRY * css_Free_conn_anchor
#define NUM_MASTER_CHANNEL
static int css_Num_max_conn
int css_read_and_queue(CSS_CONN_ENTRY *conn, int *type)
int css_send_magic(CSS_CONN_ENTRY *conn)
#define pthread_mutex_lock(a)
CSS_CONN_ENTRY * css_find_conn_from_fd(SOCKET fd)
#define CSS_FREE_CONN_MSG
int css_net_read_header(SOCKET fd, char *buffer, int *maxlen, int timeout)
unsigned int ntohl(unsigned int from)
int css_send_data(CSS_CONN_ENTRY *conn, unsigned short rid, const char *buffer, int buffer_size)
#define CSS_FREE_CONN_ARGS
static void css_decrement_num_conn_internal(CSS_CONN_RULE_INFO *conn_rule_info)
CSS_QUEUE_ENTRY * request_queue
void css_free_user_access_status(void)
static pthread_mutex_t css_Conn_rule_lock
#define rmutex_initialize(a, b)
#define CSS_CR_NORMAL_ONLY_IDX
int css_send_abort_request(CSS_CONN_ENTRY *conn, unsigned short request_id)
const char * program_name
#define CUB_MAXHOSTNAMELEN
void css_print_conn_entry_info(CSS_CONN_ENTRY *conn)
#define RMUTEX_NAME_CONN_ENTRY
int css_open_server_connection_socket(void)
static CSS_WAIT_QUEUE_ENTRY * css_add_wait_queue_entry(CSS_CONN_ENTRY *conn, CSS_LIST *list, unsigned short request_id, char **buffer, int *buffer_size, int *rc)
static CSS_QUEUE_ENTRY * css_claim_queue_entry(CSS_CONN_ENTRY *conn)
CSS_CONN_ENTRY * css_Conn_array
#define ERR_CSS_REQUEST_ID_FAILURE
static int css_abort_request(CSS_CONN_ENTRY *conn, unsigned short rid)
int css_initialize_conn(CSS_CONN_ENTRY *conn, SOCKET fd)
#define END_EXCLUSIVE_ACCESS_ACTIVE_CONN_ANCHOR(r)
#define GETHOSTNAME(p, l)
SYNC_RWLOCK css_Rwlock_active_conn_anchor
#define rwlock_initialize(a, b)
SYNC_RWLOCK css_Rwlock_free_conn_anchor
static void css_queue_error_packet(CSS_CONN_ENTRY *conn, unsigned short request_id, const NET_HEADER *header)