CUBRID Engine  latest
cas_network.c
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  * cas_network.c -
22  */
23 
24 #ident "$Id$"
25 
26 #include <stdio.h>
27 #include <stdlib.h>
28 #include <string.h>
29 #include <fcntl.h>
30 #include <errno.h>
31 #include <assert.h>
32 
33 #if defined(WINDOWS)
34 #include <winsock2.h>
35 #include <windows.h>
36 #include <io.h>
37 #else /* WINDOWS */
38 #include <sys/time.h>
39 #include <unistd.h>
40 #include <sys/socket.h>
41 #include <netinet/in.h>
42 #include <sys/un.h>
43 #include <poll.h>
44 #endif /* WINDOWS */
45 
46 #include "porting.h"
47 #include "cas_common.h"
48 #include "cas_network.h"
49 #include "cas.h"
50 #include "broker_env_def.h"
51 #include "cas_execute.h"
52 #include "error_code.h"
53 #include "broker_util.h"
54 
55 #if defined(WINDOWS)
56 #include "broker_wsa_init.h"
57 #endif /* WINDOWS */
58 
59 #define SELECT_MASK fd_set
60 
61 static int write_buffer (SOCKET sock_fd, const char *buf, int size);
62 static int read_buffer (SOCKET sock_fd, char *buf, int size);
63 
64 static void set_net_timeout_flag (void);
65 static void unset_net_timeout_flag (void);
66 
67 #if defined(WINDOWS)
68 static int get_host_ip (unsigned char *ip_addr);
69 #endif /* WINDOWS */
70 
71 static bool net_timeout_flag = false;
72 
73 static char net_error_flag;
75 
76 extern bool ssl_client;
77 extern int cas_ssl_write (int sock_fd, const char *buf, int size);
78 extern int cas_ssl_read (int sock_fd, char *buf, int size);
79 extern bool is_ssl_data_ready (int sock_fd);
80 
81 #define READ_FROM_NET(sd, buf, size) ssl_client ? cas_ssl_read (sd, buf, size) : \
82  READ_FROM_SOCKET(sd, buf, size)
83 #define WRITE_TO_NET(sd, buf, size) ssl_client ? cas_ssl_write (sd, buf, size) : \
84  WRITE_TO_SOCKET(sd, buf, size)
85 
86 SOCKET
87 #if defined(WINDOWS)
88 net_init_env (int *new_port)
89 #else /* WINDOWS */
90 net_init_env (char *port_name)
91 #endif /* WINDOWS */
92 {
93  int one = 1;
95  int sock_addr_len;
96 #if defined(WINDOWS)
97  struct sockaddr_in sock_addr;
98  int n;
99 #else /* WINDOWS */
100  struct sockaddr_un sock_addr;
101 #endif /* WINDOWS */
102 
103 #if defined(WINDOWS)
104  /* WSA startup */
105  if (wsa_initialize ())
106  {
107  return INVALID_SOCKET;
108  }
109 #endif /* WINDOWS */
110 
111  /* get a Unix stream socket */
112 #if defined(WINDOWS)
113  sock_fd = socket (AF_INET, SOCK_STREAM, 0);
114 #else /* WINDOWS */
115  sock_fd = socket (AF_UNIX, SOCK_STREAM, 0);
116 #endif /* WINDOWS */
117  if (IS_INVALID_SOCKET (sock_fd))
118  {
119  return INVALID_SOCKET;
120  }
121  if ((setsockopt (sock_fd, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof (one))) < 0)
122  {
123  CLOSE_SOCKET (sock_fd);
124  return INVALID_SOCKET;
125  }
126 
127 #if defined(WINDOWS)
128  memset (&sock_addr, 0, sizeof (struct sockaddr_in));
129  sock_addr.sin_family = AF_INET;
130  sock_addr.sin_port = htons ((unsigned short) (*new_port));
131  sock_addr_len = sizeof (struct sockaddr_in);
132  n = INADDR_ANY;
133  memcpy (&sock_addr.sin_addr, &n, sizeof (int));
134 #else /* WINDOWS */
135 
136  memset (&sock_addr, 0, sizeof (struct sockaddr_un));
137  sock_addr.sun_family = AF_UNIX;
138  snprintf (sock_addr.sun_path, sizeof (sock_addr.sun_path), "%s", port_name);
139  sock_addr_len = strlen (sock_addr.sun_path) + sizeof (sock_addr.sun_family) + 1;
140 #endif /* WINDOWS */
141 
142  if (bind (sock_fd, (struct sockaddr *) &sock_addr, sock_addr_len) < 0)
143  {
144  CLOSE_SOCKET (sock_fd);
145  return INVALID_SOCKET;
146  }
147 
148 #if defined(WINDOWS)
149  if (getsockname (sock_fd, (struct sockaddr *) &sock_addr, &sock_addr_len) < 0)
150  {
151  CLOSE_SOCKET (sock_fd);
152  return INVALID_SOCKET;
153  }
154  *new_port = ntohs (sock_addr.sin_port);
155 #endif /* WINDOWS */
156 
157  if (listen (sock_fd, 3) < 0)
158  {
159  CLOSE_SOCKET (sock_fd);
160  return INVALID_SOCKET;
161  }
162 
163  return (sock_fd);
164 }
165 
166 #ifndef LIBCAS_FOR_JSP
167 #if defined(WINDOWS)
168 SOCKET
170 #else /* WINDOWS */
171 SOCKET
173 #endif /* !WINDOWS */
174 {
175  int fd, len;
176 
177 #if defined(WINDOWS)
178  char *broker_port;
179  int port = 0;
180  int one = 1;
181  unsigned char ip_addr[4];
182  struct sockaddr_in shard_sock_addr;
183 
184  /* WSA startup */
185  if (wsa_initialize ())
186  {
187  return (INVALID_SOCKET);
188  }
189 
190  if (get_host_ip (ip_addr) < 0)
191  {
192  return (INVALID_SOCKET);
193  }
194 
195  fd = socket (AF_INET, SOCK_STREAM, 0);
196  if (IS_INVALID_SOCKET (fd))
197  {
198  return (INVALID_SOCKET);
199  }
200  if ((setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, (char *) &one, sizeof (one))) < 0)
201  {
202  return (INVALID_SOCKET);
203  }
204 
205  if ((broker_port = getenv (PORT_NUMBER_ENV_STR)) == NULL)
206  {
207  return (INVALID_SOCKET);
208  }
209 
210  port = atoi (broker_port) + 2;
211  port = proxy_id * 2 + port;
212 
213  SHARD_ERR ("<CAS> connect to socket:[%d].\n", port);
214 
215  memset (&shard_sock_addr, 0, sizeof (struct sockaddr_in));
216  shard_sock_addr.sin_family = AF_INET;
217  shard_sock_addr.sin_port = htons ((unsigned short) port);
218  len = sizeof (struct sockaddr_in);
219  memcpy (&shard_sock_addr.sin_addr, ip_addr, 4);
220 
221 #else /* WINDOWS */
222  struct sockaddr_un shard_sock_addr;
223  char port_name[BROKER_PATH_MAX];
224 
226 
227  if (port_name == NULL)
228  {
229  return (INVALID_SOCKET);
230  }
231  /* FOR DEBUG */
232  SHARD_ERR ("<CAS> connect to unixdoamin:[%s].\n", port_name);
233 
234  if ((fd = socket (AF_UNIX, SOCK_STREAM, 0)) < 0)
235  return (INVALID_SOCKET);
236 
237  memset (&shard_sock_addr, 0, sizeof (shard_sock_addr));
238  shard_sock_addr.sun_family = AF_UNIX;
239  strncpy_bufsize (shard_sock_addr.sun_path, port_name);
240 #ifdef _SOCKADDR_LEN /* 4.3BSD Reno and later */
241  len = sizeof (shard_sock_addr.sun_len) + sizeof (shard_sock_addr.sun_family) + strlen (shard_sock_addr.sun_path) + 1;
242  shard_sock_addr.sun_len = len;
243 #else /* vanilla 4.3BSD */
244  len = strlen (shard_sock_addr.sun_path) + sizeof (shard_sock_addr.sun_family) + 1;
245 #endif
246 #endif /* !WINDOWS */
247 
248  if (connect (fd, (struct sockaddr *) &shard_sock_addr, len) < 0)
249  {
250  CLOSE_SOCKET (fd);
251  return (INVALID_SOCKET);
252  }
253 
254  net_error_flag = 0;
255  return (fd);
256 }
257 #endif /* LIBCAS_FOR_JSP */
258 
259 SOCKET
261 {
262 #if defined(WINDOWS) || defined(SOLARIS)
263  int clt_sock_addr_len;
264 #elif defined(UNIXWARE7)
265  size_t clt_sock_addr_len;
266 #else /* UNIXWARE7 */
267  socklen_t clt_sock_addr_len;
268 #endif /* UNIXWARE7 */
269  SOCKET clt_sock_fd;
270  struct sockaddr_in clt_sock_addr;
271 
272  clt_sock_addr_len = sizeof (clt_sock_addr);
273  clt_sock_fd = accept (srv_sock_fd, (struct sockaddr *) &clt_sock_addr, &clt_sock_addr_len);
274 
275  if (IS_INVALID_SOCKET (clt_sock_fd))
276  return INVALID_SOCKET;
277 
278  net_error_flag = 0;
279  return clt_sock_fd;
280 }
281 
282 int
283 net_write_stream (SOCKET sock_fd, const char *buf, int size)
284 {
285  while (size > 0)
286  {
287  int write_len;
288 
289  write_len = write_buffer (sock_fd, buf, size);
290 
291  if (write_len <= 0)
292  {
293 #ifdef _DEBUG
294  printf ("write error\n");
295 #endif
296  return -1;
297  }
298  buf += write_len;
299  size -= write_len;
300  }
301  return 0;
302 }
303 
304 int
305 net_read_stream (SOCKET sock_fd, char *buf, int size)
306 {
307  while (size > 0)
308  {
309  int read_len;
310 
311  read_len = read_buffer (sock_fd, buf, size);
312 
313  if (read_len <= 0)
314  {
315 #ifdef _DEBUG
316  if (!is_net_timed_out ())
317  printf ("read error %d\n", read_len);
318 #endif
319  return -1;
320  }
321  buf += read_len;
322  size -= read_len;
323  }
324 
325  return 0;
326 }
327 
328 int
330 {
331  int retval = 0;
332 
333  if (cas_info_size > 0)
334  {
335  retval = net_read_stream (sock_fd, header->buf, MSG_HEADER_SIZE);
336  *(header->msg_body_size_ptr) = ntohl (*(header->msg_body_size_ptr));
337  }
338  else
339  {
340  retval = net_read_stream (sock_fd, (char *) header->msg_body_size_ptr, 4);
341  }
342 
343  return retval;
344 }
345 
346 int
348 {
349  int retval = 0;
350 
351  *(header->msg_body_size_ptr) = htonl (*(header->msg_body_size_ptr));
352  retval = net_write_stream (sock_fd, header->buf, MSG_HEADER_SIZE);
353 
354  return 0;
355 }
356 
357 void
359 {
360  header->msg_body_size_ptr = (int *) (header->buf);
361  header->info_ptr = (char *) (header->buf + MSG_HEADER_MSG_SIZE);
362 
363  *(header->msg_body_size_ptr) = 0;
368 
369  /* BROKER_RECONNECT_DOWN_SERVER does not supported. so CAS_INFO_FLAG_MASK_NEW_SESSION_ID flag must be disabled. */
371 }
372 
373 
374 int
376 {
377  value = htonl (value);
378 
379  return (write_buffer (sock_fd, (const char *) (&value), 4));
380 }
381 
382 int
384 {
385  if (net_read_stream (sock_fd, (char *) value, 4) < 0)
386  return (-1);
387 
388  *value = ntohl (*value);
389  return 0;
390 }
391 
392 int
393 net_decode_str (char *msg, int msg_size, char *func_code, void ***ret_argv)
394 {
395  int remain_size = msg_size;
396  char *cur_p = msg;
397  char *argp;
398  int i_val;
399  void **argv = NULL;
400  int argc = 0;
401 
402  *ret_argv = (void **) NULL;
403 
404  if (remain_size < 1)
405  return CAS_ER_COMMUNICATION;
406 
407  *func_code = *cur_p;
408  cur_p += 1;
409  remain_size -= 1;
410 
411  while (remain_size > 0)
412  {
413  if (remain_size < 4)
414  {
415  FREE_MEM (argv);
416  return CAS_ER_COMMUNICATION;
417  }
418  argp = cur_p;
419  memcpy ((char *) &i_val, cur_p, 4);
420  i_val = ntohl (i_val);
421  remain_size -= 4;
422  cur_p += 4;
423 
424  if (remain_size < i_val)
425  {
426  FREE_MEM (argv);
427  return CAS_ER_COMMUNICATION;
428  }
429 
430  argc++;
431  argv = (void **) REALLOC (argv, sizeof (void *) * argc);
432  if (argv == NULL)
433  return CAS_ER_NO_MORE_MEMORY;
434 
435  argv[argc - 1] = argp;
436 
437  cur_p += i_val;
438  remain_size -= i_val;
439  }
440 
441  *ret_argv = argv;
442  return argc;
443 }
444 
445 int
446 net_read_to_file (SOCKET sock_fd, int file_size, char *filename)
447 {
448  int out_fd;
449  char read_buf[1024];
450  int read_len;
451 
452  out_fd = open (filename, O_CREAT | O_TRUNC | O_WRONLY, 0666);
453 #if defined(WINDOWS)
454  if (out_fd >= 0)
455  setmode (out_fd, O_BINARY);
456 #endif /* WINDOWS */
457 
458  while (file_size > 0)
459  {
460  read_len = read_buffer (sock_fd, read_buf, (int) MIN (SSIZEOF (read_buf), file_size));
461  if (read_len <= 0 || read_len > MIN (SSIZEOF (read_buf), file_size))
462  {
464  }
465  if (out_fd >= 0)
466  {
467  write (out_fd, read_buf, read_len);
468  }
469  file_size -= read_len;
470  }
471 
472  if (out_fd < 0)
473  {
475  }
476 
477  close (out_fd);
478  return 0;
479 }
480 
481 int
482 net_write_from_file (SOCKET sock_fd, int file_size, char *filename)
483 {
484  int in_fd;
485  char read_buf[1024];
486  int read_len;
487 
488  in_fd = open (filename, O_RDONLY);
489  if (in_fd < 0)
490  {
491  return -1;
492  }
493 
494 #if defined(WINDOWS)
495  setmode (in_fd, O_BINARY);
496 #endif /* WINDOWS */
497 
498  while (file_size > 0)
499  {
500  read_len = read (in_fd, read_buf, (int) MIN (file_size, SSIZEOF (read_buf)));
501  if (read_len < 0)
502  {
503  close (in_fd);
504  return -1;
505  }
506  if (net_write_stream (sock_fd, read_buf, read_len) < 0)
507  {
508  close (in_fd);
509  return -1;
510  }
511  file_size -= read_len;
512  }
513 
514  close (in_fd);
515  return 0;
516 }
517 
518 void
519 net_timeout_set (int timeout_sec)
520 {
521  net_timeout = timeout_sec;
522 }
523 
524 extern SOCKET new_req_sock_fd;
525 
526 static int
527 read_buffer (SOCKET sock_fd, char *buf, int size)
528 {
529  int read_len = -1;
530  bool ssl_data_ready = false;
531 #if defined(ASYNC_MODE)
532  struct pollfd po[2] = { {0, 0, 0}, {0, 0, 0} };
533  int timeout, po_size, n;
534 #endif /* ASYNC_MODE */
535 
537  if (net_error_flag)
538  {
539  return -1;
540  }
541 
542 #if defined(ASYNC_MODE)
543  timeout = net_timeout < 0 ? -1 : net_timeout * 1000;
544 
545  po[0].fd = sock_fd;
546  po[0].events = POLLIN;
547  po_size = 1;
548 
549  if (cas_shard_flag == OFF)
550  {
551  if (!IS_INVALID_SOCKET (new_req_sock_fd))
552  {
553  po[1].fd = new_req_sock_fd;
554  po[1].events = POLLIN;
555  po_size = 2;
556  }
557  }
558 
559 retry_poll:
560  if (ssl_client && is_ssl_data_ready (sock_fd))
561  {
562  po[0].revents = POLLIN;
563  n = 1;
564  }
565  else
566  {
567  n = poll (po, po_size, timeout);
568  }
569  if (n < 0)
570  {
571  if (errno == EINTR)
572  {
573  goto retry_poll;
574  }
575  else
576  {
577  net_error_flag = 1;
578  return -1;
579  }
580  }
581  else if (n == 0)
582  {
583  /* TIMEOUT */
585  return -1;
586  }
587  else
588  {
589  if (cas_shard_flag == OFF && !IS_INVALID_SOCKET (new_req_sock_fd) && (po[1].revents & POLLIN))
590  {
591  /* CHANGE CLIENT */
592  return -1;
593  }
594  if (po[0].revents & POLLERR || po[0].revents & POLLHUP)
595  {
596  read_len = -1;
597  }
598  else if (po[0].revents & POLLIN)
599  {
600 #endif /* ASYNC_MODE */
601  /* RECEIVE NEW REQUEST */
602  read_len = READ_FROM_NET (sock_fd, buf, size);
603 #if defined(ASYNC_MODE)
604  }
605  }
606 #endif /* ASYNC_MODE */
607 
608  if (read_len <= 0)
609  {
610  net_error_flag = 1;
611  }
612  return read_len;
613 }
614 
615 static int
616 write_buffer (SOCKET sock_fd, const char *buf, int size)
617 {
618  int write_len = -1;
619 #ifdef ASYNC_MODE
620  struct pollfd po[1] = { {0, 0, 0} };
621  int timeout, n;
622 
623  timeout = net_timeout < 0 ? -1 : net_timeout * 1000;
624 #endif /* ASYNC_MODE */
625 
626  if (net_error_flag || IS_INVALID_SOCKET (sock_fd))
627  {
628  return -1;
629  }
630 
631 #ifdef ASYNC_MODE
632  po[0].fd = sock_fd;
633  po[0].events = POLLOUT;
634 
635 retry_poll:
636  n = poll (po, 1, timeout);
637  if (n < 0)
638  {
639  if (errno == EINTR)
640  {
641  goto retry_poll;
642  }
643  else
644  {
645  net_error_flag = 1;
646  return -1;
647  }
648  }
649  else if (n == 0)
650  {
651  /* TIMEOUT */
652  net_error_flag = 1;
653  return -1;
654  }
655  else
656  {
657  if (po[0].revents & POLLERR || po[0].revents & POLLHUP)
658  {
659  write_len = -1;
660  }
661  else if (po[0].revents & POLLOUT)
662  {
663 #endif /* ASYNC_MODE */
664  write_len = WRITE_TO_NET (sock_fd, buf, size);
665 #if defined(ASYNC_MODE)
666  }
667  }
668 #endif /* ASYNC_MODE */
669 
670  if (write_len <= 0)
671  {
672  net_error_flag = 1;
673  }
674  return write_len;
675 }
676 
677 #if defined(WINDOWS)
678 static int
679 get_host_ip (unsigned char *ip_addr)
680 {
681  char hostname[CUB_MAXHOSTNAMELEN];
682  struct hostent *hp;
683 
684  if (gethostname (hostname, sizeof (hostname)) < 0)
685  {
686  return -1;
687  }
688  if ((hp = gethostbyname (hostname)) == NULL)
689  {
690  return -1;
691  }
692  memcpy (ip_addr, hp->h_addr_list[0], 4);
693 
694  return 0;
695 }
696 #endif /* WINDOWS */
697 
698 bool
700 {
701  return net_timeout_flag;
702 }
703 
704 static void
706 {
707  net_timeout_flag = true;
708 }
709 
710 static void
712 {
713  net_timeout_flag = false;
714 }
715 
716 void
717 net_write_error (SOCKET sock, int version, char *driver_info, char *cas_info, int cas_info_size, int indicator,
718  int code, char *msg)
719 {
720  size_t len = NET_SIZE_INT;
721  size_t err_msg_len = 0;
722  char err_msg[ERR_MSG_LENGTH];
723 
724  assert (code != NO_ERROR);
725 
726  if (version >= CAS_MAKE_VER (8, 3, 0))
727  {
728  len += NET_SIZE_INT;
729  }
730 
731  err_msg_len = net_error_append_shard_info (err_msg, msg, ERR_MSG_LENGTH);
732  if (err_msg_len > 0)
733  {
734  len += err_msg_len + 1;
735  }
736  net_write_int (sock, (int) len);
737 
738  if (cas_info_size > 0)
739  {
740  net_write_stream (sock, cas_info, cas_info_size);
741  }
742 
743  if (version >= CAS_MAKE_VER (8, 3, 0))
744  {
745  net_write_int (sock, indicator);
746  }
747 
749  && code != NO_ERROR)
750  {
751  if (indicator == CAS_ERROR_INDICATOR || code == CAS_ER_NOT_AUTHORIZED_CLIENT)
752  {
753  code = CAS_CONV_ERROR_TO_OLD (code);
754  }
755  }
756 
757  net_write_int (sock, code);
758  if (err_msg_len > 0)
759  {
760  net_write_stream (sock, err_msg, (int) err_msg_len + 1);
761  }
762 }
int net_write_from_file(SOCKET sock_fd, int file_size, char *filename)
Definition: cas_network.c:482
#define ERR_MSG_LENGTH
Definition: cas.h:42
#define MSG_HEADER_SIZE
Definition: cas_protocol.h:114
#define NO_ERROR
Definition: error_code.h:46
static SOCKET srv_sock_fd
Definition: cas.c:335
bool is_ssl_data_ready(int sock_fd)
Definition: cas_ssl.c:301
int SOCKET
Definition: porting.h:482
static int read_buffer(SOCKET sock_fd, char *buf, int size)
Definition: cas_network.c:527
#define CAS_CONV_ERROR_TO_OLD(V)
Definition: cas_protocol.h:301
SOCKET net_connect_proxy(void)
Definition: cas_network.c:172
int argc
Definition: dynamic_load.c:951
unsigned int htonl(unsigned int from)
#define BROKER_PATH_MAX
Definition: broker_config.h:91
static int write_buffer(SOCKET sock_fd, const char *buf, int size)
Definition: cas_network.c:616
static int sock_addr_len
Definition: broker.c:302
#define SHARD_ERR(f, a...)
int wsa_initialize()
#define READ_FROM_NET(sd, buf, size)
Definition: cas_network.c:81
int net_write_header(SOCKET sock_fd, MSG_HEADER *header)
Definition: cas_network.c:347
#define CAS_MAKE_VER(MAJOR, MINOR, PATCH)
Definition: cas_protocol.h:304
int net_read_header(SOCKET sock_fd, MSG_HEADER *header)
Definition: cas_network.c:329
char broker_name[BROKER_NAME_LEN]
Definition: broker_shm.h:588
static void set_net_timeout_flag(void)
Definition: cas_network.c:705
#define INVALID_SOCKET
Definition: porting.h:483
static char net_error_flag
Definition: cas_network.c:73
#define NET_DEFAULT_TIMEOUT
Definition: cas_network.h:34
#define PORT_NUMBER_ENV_STR
static void unset_net_timeout_flag(void)
Definition: cas_network.c:711
#define CAS_INFO_RESERVED_DEFAULT
Definition: cas_protocol.h:110
int cas_info_size
Definition: cas.c:183
void init_msg_header(MSG_HEADER *header)
Definition: cas_network.c:358
int cas_ssl_read(int sock_fd, char *buf, int size)
Definition: cas_ssl.c:202
int cas_shard_flag
Definition: cas.c:143
#define DOES_CLIENT_MATCH_THE_PROTOCOL(CLIENT, MATCH)
Definition: cas_protocol.h:289
#define assert(x)
int net_write_int(SOCKET sock_fd, int value)
Definition: cas_network.c:375
int proxy_id
Definition: shard_proxy.c:45
int * msg_body_size_ptr
Definition: cas_network.h:270
SOCKET net_connect_client(SOCKET srv_sock_fd)
Definition: cas_network.c:260
#define IS_INVALID_SOCKET(socket)
Definition: porting.h:484
#define CAS_INFO_FLAG_MASK_NEW_SESSION_ID
Definition: cas_protocol.h:107
#define CAS_ERROR_INDICATOR
Definition: cas.h:39
#define NULL
Definition: freelistheap.h:34
#define strncpy_bufsize(buf, str)
Definition: porting.h:340
unsigned short htons(unsigned short from)
#define FREE_MEM(PTR)
Definition: cas_common.h:58
int net_read_int(SOCKET sock_fd, int *value)
Definition: cas_network.c:383
int net_read_to_file(SOCKET sock_fd, int file_size, char *filename)
Definition: cas_network.c:446
static T_SHM_APPL_SERVER * shm_appl
Definition: broker.c:311
#define MSG_HEADER_MSG_SIZE
Definition: cas_protocol.h:113
int net_write_stream(SOCKET sock_fd, const char *buf, int size)
Definition: cas_network.c:283
static int broker_port
static int net_timeout
Definition: cas_network.c:74
unsigned short ntohs(unsigned short from)
const char ** argv
Definition: dynamic_load.c:952
#define strlen(s1)
Definition: intl_support.c:43
int net_decode_str(char *msg, int msg_size, char *func_code, void ***ret_argv)
Definition: cas_network.c:393
void ut_get_proxy_port_name(char *port_name, char *broker_name, int proxy_id, int len)
Definition: broker_util.c:556
T_APPL_SERVER_INFO * as_info
Definition: cas.c:153
#define ERROR_INFO_SET(ERR_CODE, ERR_INDICATOR)
Definition: cas_execute.h:49
static bool net_timeout_flag
Definition: cas_network.c:71
#define CLOSE_SOCKET(X)
Definition: cas_common.h:85
static SOCKET sock_fd
Definition: broker.c:300
char buf[MSG_HEADER_SIZE]
Definition: cas_network.h:272
bool cas_di_understand_renewed_error_code(const char *driver_info)
Definition: cas_meta.c:203
SOCKET net_init_env(char *port_name)
Definition: cas_network.c:90
void net_timeout_set(int timeout_sec)
Definition: cas_network.c:519
int net_read_stream(SOCKET sock_fd, char *buf, int size)
Definition: cas_network.c:305
#define NET_SIZE_INT
Definition: cas_network.h:43
unsigned int ntohl(unsigned int from)
#define WRITE_TO_NET(sd, buf, size)
Definition: cas_network.c:83
SOCKET new_req_sock_fd
Definition: cas.c:174
bool ssl_client
Definition: cas_ssl.c:81
bool is_net_timed_out(void)
Definition: cas_network.c:699
#define CUB_MAXHOSTNAMELEN
Definition: porting.h:379
int cas_ssl_write(int sock_fd, const char *buf, int size)
Definition: cas_ssl.c:234
static int get_host_ip(unsigned char *ip_addr)
Definition: broker_shm.c:742
void net_write_error(SOCKET sock, int version, char *driver_info, char *cas_info, int cas_info_size, int indicator, int code, char *msg)
Definition: cas_network.c:717
size_t net_error_append_shard_info(char *err_buf, const char *err_msg, int buf_size)
Definition: cas_net_buf.c:795
#define REALLOC(PTR, SIZE)
Definition: cas_common.h:54
char * info_ptr
Definition: cas_network.h:271