CUBRID Engine  latest
connection_sr.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 /*
21  * connection_sr.h - Client/Server Connection List Management
22  */
23 
24 #ifndef _CONNECTION_SR_H_
25 #define _CONNECTION_SR_H_
26 
27 #ident "$Id$"
28 
29 #include "connection_defs.h"
30 #include "connection_support.h"
31 #include "critical_section.h"
32 #include "error_manager.h"
33 #include "porting.h"
34 #include "thread_compat.hpp"
35 
36 #include <assert.h>
37 #if !defined(WINDOWS)
38 #include <pthread.h>
39 #endif /* not WINDOWS */
40 
41 #define IP_BYTE_COUNT 5
42 
43 typedef struct ip_info IP_INFO;
44 struct ip_info
45 {
46  unsigned char *address_list;
47  int num_list;
48 };
49 
52 
54 
55 #define CSS_RWLOCK_ACTIVE_CONN_ANCHOR (&css_Rwlock_active_conn_anchor)
56 #define CSS_RWLOCK_ACTIVE_CONN_ANCHOR_NAME "CSS_RWLOCK_ACTIVE_CONN_ANCHOR"
57 
58 #define START_EXCLUSIVE_ACCESS_ACTIVE_CONN_ANCHOR(r) \
59  do \
60  { \
61  (r) = rwlock_write_lock (CSS_RWLOCK_ACTIVE_CONN_ANCHOR); \
62  assert ((r) == NO_ERROR); \
63  } \
64  while (0)
65 
66 #define END_EXCLUSIVE_ACCESS_ACTIVE_CONN_ANCHOR(r) \
67  do \
68  { \
69  (r) = rwlock_write_unlock (CSS_RWLOCK_ACTIVE_CONN_ANCHOR); \
70  assert ((r) == NO_ERROR); \
71  } \
72  while (0)
73 
74 #define START_SHARED_ACCESS_ACTIVE_CONN_ANCHOR(r) \
75  do \
76  { \
77  (r) = rwlock_read_lock (CSS_RWLOCK_ACTIVE_CONN_ANCHOR); \
78  assert ((r) == NO_ERROR); \
79  } \
80  while (0)
81 
82 #define END_SHARED_ACCESS_ACTIVE_CONN_ANCHOR(r) \
83  do \
84  { \
85  (r) = rwlock_read_unlock (CSS_RWLOCK_ACTIVE_CONN_ANCHOR); \
86  assert ((r) == NO_ERROR); \
87  } \
88  while (0)
89 
91 
92 #define CSS_RWLOCK_FREE_CONN_ANCHOR (&css_Rwlock_free_conn_anchor)
93 #define CSS_RWLOCK_FREE_CONN_ANCHOR_NAME "CSS_RWLOCK_FREE_CONN_ANCHOR"
94 
95 #define START_EXCLUSIVE_ACCESS_FREE_CONN_ANCHOR(r) \
96  do \
97  { \
98  (r) = rwlock_write_lock (CSS_RWLOCK_FREE_CONN_ANCHOR); \
99  assert ((r) == NO_ERROR); \
100  } \
101  while (0)
102 
103 #define END_EXCLUSIVE_ACCESS_FREE_CONN_ANCHOR(r) \
104  do \
105  { \
106  (r) = rwlock_write_unlock (CSS_RWLOCK_FREE_CONN_ANCHOR); \
107  assert ((r) == NO_ERROR); \
108  } \
109  while (0)
110 
111 #define START_SHARED_ACCESS_FREE_CONN_ANCHOR(r) \
112  do \
113  { \
114  (r) = rwlock_read_lock (CSS_RWLOCK_FREE_CONN_ANCHOR); \
115  assert ((r) == NO_ERROR); \
116  } \
117  while (0)
118 
119 #define END_SHARED_ACCESS_FREE_CONN_ANCHOR(r) \
120  do \
121  { \
122  (r) = rwlock_read_unlock (CSS_RWLOCK_FREE_CONN_ANCHOR); \
123  assert ((r) == NO_ERROR); \
124  } \
125  while (0)
126 
127 extern int css_Num_access_user;
128 
129 typedef void *CSS_THREAD_ARG;
130 typedef int (*CSS_THREAD_FN) (THREAD_ENTRY * thrd, CSS_THREAD_ARG);
131 
135 
136 #define CSS_LOG(msg_arg, ...) \
137  if (prm_get_bool_value (PRM_ID_CONNECTION_LOGGING)) _er_log_debug (ARG_FILE_LINE, msg_arg "\n", __VA_ARGS__)
138 #define CSS_LOG_STACK(msg_arg, ...) \
139  if (prm_get_bool_value (PRM_ID_CONNECTION_LOGGING)) er_print_callstack (ARG_FILE_LINE, msg_arg "\n", __VA_ARGS__)
140 
141 extern int css_initialize_conn (CSS_CONN_ENTRY * conn, SOCKET fd);
142 extern void css_shutdown_conn (CSS_CONN_ENTRY * conn);
143 extern int css_init_conn_list (void);
144 extern void css_final_conn_list (void);
145 
146 extern CSS_CONN_ENTRY *css_make_conn (SOCKET fd);
148 extern void css_dealloc_conn_rmutex (CSS_CONN_ENTRY * conn);
149 
150 extern int css_get_num_free_conn (void);
151 
152 extern int css_increment_num_conn (BOOT_CLIENT_TYPE client_type);
153 extern void css_decrement_num_conn (BOOT_CLIENT_TYPE client_type);
154 
155 extern void css_free_conn (CSS_CONN_ENTRY * conn);
157 extern void css_print_conn_list (void);
158 extern void css_print_free_conn_list (void);
159 extern CSS_CONN_ENTRY *css_connect_to_master_server (int master_port_id, const char *server_name, int name_length);
160 extern void css_register_handler_routines (css_error_code (*connect_handler) (CSS_CONN_ENTRY * conn),
161  CSS_THREAD_FN request_handler, CSS_THREAD_FN connection_error_handler);
162 
163 extern CSS_CONN_ENTRY *css_find_conn_by_tran_index (int tran_index);
166 extern void css_shutdown_conn_by_tran_index (int tran_index);
167 
168 extern int css_send_abort_request (CSS_CONN_ENTRY * conn, unsigned short request_id);
169 extern int css_read_header (CSS_CONN_ENTRY * conn, const NET_HEADER * local_header);
170 extern int css_receive_request (CSS_CONN_ENTRY * conn, unsigned short *rid, int *request, int *buffer_size);
171 extern int css_read_and_queue (CSS_CONN_ENTRY * conn, int *type);
172 extern int css_receive_data (CSS_CONN_ENTRY * conn, unsigned short req_id, char **buffer, int *buffer_size,
173  int timeout);
174 
175 extern unsigned int css_return_eid_from_conn (CSS_CONN_ENTRY * conn, unsigned short rid);
176 
177 extern int css_return_queued_data (CSS_CONN_ENTRY * conn, unsigned short rid, char **buffer, int *bufsize, int *rc);
178 
179 extern int css_return_queued_error (CSS_CONN_ENTRY * conn, unsigned short request_id, char **buffer, int *buffer_size,
180  int *rc);
181 extern int css_return_queued_request (CSS_CONN_ENTRY * conn, unsigned short *rid, int *request, int *buffer_size);
183 extern int css_queue_user_data_buffer (CSS_CONN_ENTRY * conn, unsigned short request_id, int size, char *buffer);
184 extern unsigned short css_get_request_id (CSS_CONN_ENTRY * conn);
185 extern int css_set_accessible_ip_info (void);
186 extern int css_free_accessible_ip_info (void);
187 extern int css_free_ip_info (IP_INFO * ip_info);
188 extern int css_read_ip_info (IP_INFO ** out_ip_info, char *filename);
189 extern int css_check_ip (IP_INFO * ip_info, unsigned char *address);
190 
191 extern void css_set_user_access_status (const char *db_user, const char *host, const char *program_name);
192 extern void css_get_user_access_status (int num_user, LAST_ACCESS_STATUS ** access_status_array);
193 extern void css_free_user_access_status (void);
194 
195 #endif /* _CONNECTION_SR_H_ */
int css_free_accessible_ip_info(void)
SYNC_RWLOCK css_Rwlock_free_conn_anchor
css_error_code
CSS_THREAD_FN css_Connection_error_handler
unsigned short css_get_request_id(CSS_CONN_ENTRY *conn)
void css_shutdown_conn(CSS_CONN_ENTRY *conn)
CSS_THREAD_FN css_Request_handler
void css_remove_all_unexpected_packets(CSS_CONN_ENTRY *conn)
int SOCKET
Definition: porting.h:482
CSS_CONN_ENTRY * css_find_conn_by_tran_index(int tran_index)
int(* CSS_THREAD_FN)(THREAD_ENTRY *thrd, CSS_THREAD_ARG)
enum db_client_type BOOT_CLIENT_TYPE
void css_print_conn_entry_info(CSS_CONN_ENTRY *p)
int css_increment_num_conn(BOOT_CLIENT_TYPE client_type)
void css_print_conn_list(void)
CSS_CONN_ENTRY * css_connect_to_master_server(int master_port_id, const char *server_name, int name_length)
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_receive_data(CSS_CONN_ENTRY *conn, unsigned short req_id, char **buffer, int *buffer_size, int timeout)
int css_read_ip_info(IP_INFO **out_ip_info, char *filename)
void css_insert_into_active_conn_list(CSS_CONN_ENTRY *conn)
unsigned int css_return_eid_from_conn(CSS_CONN_ENTRY *conn, unsigned short rid)
int css_queue_user_data_buffer(CSS_CONN_ENTRY *conn, unsigned short request_id, int size, char *buffer)
CSS_CONN_ENTRY * css_make_conn(SOCKET fd)
void THREAD_ENTRY
int css_initialize_conn(CSS_CONN_ENTRY *conn, SOCKET fd)
void css_decrement_num_conn(BOOT_CLIENT_TYPE client_type)
int css_set_accessible_ip_info(void)
SYNC_RWLOCK css_Rwlock_active_conn_anchor
void css_final_conn_list(void)
void css_free_conn(CSS_CONN_ENTRY *conn)
int css_init_conn_list(void)
void * CSS_THREAD_ARG
int css_get_session_ids_for_active_connections(SESSION_ID **ids, int *count)
void css_get_user_access_status(int num_user, LAST_ACCESS_STATUS **access_status_array)
int css_receive_request(CSS_CONN_ENTRY *conn, unsigned short *rid, int *request, int *buffer_size)
void css_print_free_conn_list(void)
void css_dealloc_conn_rmutex(CSS_CONN_ENTRY *conn)
CSS_CONN_ENTRY * css_Conn_array
int css_read_header(CSS_CONN_ENTRY *conn, const NET_HEADER *local_header)
void css_set_user_access_status(const char *db_user, const char *host, const char *program_name)
int css_get_num_free_conn(void)
css_error_code(* css_Connect_handler)(CSS_CONN_ENTRY *)
int css_return_queued_error(CSS_CONN_ENTRY *conn, unsigned short request_id, char **buffer, int *buffer_size, int *rc)
CSS_CONN_ENTRY * css_find_conn_from_fd(SOCKET fd)
int count(int &result, const cub_regex_object &reg, const std::string &src, const int position, const INTL_CODESET codeset)
unsigned char * address_list
Definition: connection_sr.h:46
void css_shutdown_conn_by_tran_index(int tran_index)
static int rc
Definition: serial.c:50
int css_check_ip(IP_INFO *ip_info, unsigned char *address)
int num_list
Definition: broker_shm.h:204
int css_return_queued_data(CSS_CONN_ENTRY *conn, unsigned short rid, char **buffer, int *bufsize, int *rc)
int css_free_ip_info(IP_INFO *ip_info)
unsigned int SESSION_ID
Definition: dbtype_def.h:480
CSS_CONN_ENTRY * css_Active_conn_anchor
void css_free_user_access_status(void)
const char * program_name
Definition: cas.c:147
int css_Num_access_user
static char * host
int css_return_queued_request(CSS_CONN_ENTRY *conn, unsigned short *rid, int *request, int *buffer_size)
int css_send_abort_request(CSS_CONN_ENTRY *conn, unsigned short request_id)
const char ** p
Definition: dynamic_load.c:945
int css_read_and_queue(CSS_CONN_ENTRY *conn, int *type)