40 #include <sys/socket.h> 41 #include <netinet/in.h> 59 #define SELECT_MASK fd_set 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) 97 struct sockaddr_in sock_addr;
100 struct sockaddr_un sock_addr;
113 sock_fd = socket (AF_INET, SOCK_STREAM, 0);
115 sock_fd = socket (AF_UNIX, SOCK_STREAM, 0);
121 if ((setsockopt (sock_fd, SOL_SOCKET, SO_REUSEADDR, (
char *) &one,
sizeof (one))) < 0)
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);
133 memcpy (&sock_addr.sin_addr, &n, sizeof (
int));
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;
142 if (bind (sock_fd, (
struct sockaddr *) &sock_addr, sock_addr_len) < 0)
149 if (getsockname (sock_fd, (
struct sockaddr *) &sock_addr, &sock_addr_len) < 0)
154 *new_port =
ntohs (sock_addr.sin_port);
157 if (listen (sock_fd, 3) < 0)
166 #ifndef LIBCAS_FOR_JSP 181 unsigned char ip_addr[4];
182 struct sockaddr_in shard_sock_addr;
195 fd = socket (AF_INET, SOCK_STREAM, 0);
200 if ((setsockopt (fd, SOL_SOCKET, SO_REUSEADDR, (
char *) &one,
sizeof (one))) < 0)
210 port = atoi (broker_port) + 2;
211 port = proxy_id * 2 + port;
213 SHARD_ERR (
"<CAS> connect to socket:[%d].\n", port);
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);
222 struct sockaddr_un shard_sock_addr;
227 if (port_name ==
NULL)
232 SHARD_ERR (
"<CAS> connect to unixdoamin:[%s].\n", port_name);
234 if ((fd = socket (AF_UNIX, SOCK_STREAM, 0)) < 0)
237 memset (&shard_sock_addr, 0,
sizeof (shard_sock_addr));
238 shard_sock_addr.sun_family = AF_UNIX;
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;
244 len =
strlen (shard_sock_addr.sun_path) +
sizeof (shard_sock_addr.sun_family) + 1;
248 if (connect (fd, (
struct sockaddr *) &shard_sock_addr, len) < 0)
262 #if defined(WINDOWS) || defined(SOLARIS) 263 int clt_sock_addr_len;
264 #elif defined(UNIXWARE7) 265 size_t clt_sock_addr_len;
267 socklen_t clt_sock_addr_len;
270 struct sockaddr_in clt_sock_addr;
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);
294 printf (
"write error\n");
317 printf (
"read error %d\n", read_len);
377 value =
htonl (value);
379 return (
write_buffer (sock_fd, (
const char *) (&value), 4));
388 *value =
ntohl (*value);
395 int remain_size = msg_size;
402 *ret_argv = (
void **)
NULL;
411 while (remain_size > 0)
419 memcpy ((
char *) &i_val, cur_p, 4);
420 i_val =
ntohl (i_val);
424 if (remain_size < i_val)
431 argv = (
void **)
REALLOC (argv,
sizeof (
void *) *
argc);
435 argv[argc - 1] = argp;
438 remain_size -= i_val;
452 out_fd = open (filename, O_CREAT | O_TRUNC | O_WRONLY, 0666);
455 setmode (out_fd, O_BINARY);
458 while (file_size > 0)
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))
467 write (out_fd, read_buf, read_len);
469 file_size -= read_len;
488 in_fd = open (filename, O_RDONLY);
495 setmode (in_fd, O_BINARY);
498 while (file_size > 0)
500 read_len = read (in_fd, read_buf, (
int) MIN (file_size, SSIZEOF (read_buf)));
511 file_size -= read_len;
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;
542 #if defined(ASYNC_MODE) 546 po[0].events = POLLIN;
554 po[1].events = POLLIN;
562 po[0].revents = POLLIN;
567 n = poll (po, po_size, timeout);
594 if (po[0].revents & POLLERR || po[0].revents & POLLHUP)
598 else if (po[0].revents & POLLIN)
603 #if defined(ASYNC_MODE) 620 struct pollfd po[1] = { {0, 0, 0} };
633 po[0].events = POLLOUT;
636 n = poll (po, 1, timeout);
657 if (po[0].revents & POLLERR || po[0].revents & POLLHUP)
661 else if (po[0].revents & POLLOUT)
665 #if defined(ASYNC_MODE) 684 if (gethostname (hostname,
sizeof (hostname)) < 0)
688 if ((hp = gethostbyname (hostname)) ==
NULL)
692 memcpy (ip_addr, hp->h_addr_list[0], 4);
721 size_t err_msg_len = 0;
734 len += err_msg_len + 1;
738 if (cas_info_size > 0)
int net_write_from_file(SOCKET sock_fd, int file_size, char *filename)
static SOCKET srv_sock_fd
bool is_ssl_data_ready(int sock_fd)
static int read_buffer(SOCKET sock_fd, char *buf, int size)
#define CAS_CONV_ERROR_TO_OLD(V)
SOCKET net_connect_proxy(void)
unsigned int htonl(unsigned int from)
static int write_buffer(SOCKET sock_fd, const char *buf, int size)
#define SHARD_ERR(f, a...)
#define READ_FROM_NET(sd, buf, size)
int net_write_header(SOCKET sock_fd, MSG_HEADER *header)
#define CAS_MAKE_VER(MAJOR, MINOR, PATCH)
int net_read_header(SOCKET sock_fd, MSG_HEADER *header)
char broker_name[BROKER_NAME_LEN]
static void set_net_timeout_flag(void)
static char net_error_flag
#define NET_DEFAULT_TIMEOUT
#define PORT_NUMBER_ENV_STR
static void unset_net_timeout_flag(void)
#define CAS_INFO_RESERVED_DEFAULT
void init_msg_header(MSG_HEADER *header)
int cas_ssl_read(int sock_fd, char *buf, int size)
#define DOES_CLIENT_MATCH_THE_PROTOCOL(CLIENT, MATCH)
int net_write_int(SOCKET sock_fd, int value)
SOCKET net_connect_client(SOCKET srv_sock_fd)
#define IS_INVALID_SOCKET(socket)
#define CAS_INFO_FLAG_MASK_NEW_SESSION_ID
#define CAS_ERROR_INDICATOR
#define strncpy_bufsize(buf, str)
unsigned short htons(unsigned short from)
int net_read_int(SOCKET sock_fd, int *value)
int net_read_to_file(SOCKET sock_fd, int file_size, char *filename)
static T_SHM_APPL_SERVER * shm_appl
#define MSG_HEADER_MSG_SIZE
int net_write_stream(SOCKET sock_fd, const char *buf, int size)
unsigned short ntohs(unsigned short from)
int net_decode_str(char *msg, int msg_size, char *func_code, void ***ret_argv)
void ut_get_proxy_port_name(char *port_name, char *broker_name, int proxy_id, int len)
T_APPL_SERVER_INFO * as_info
#define ERROR_INFO_SET(ERR_CODE, ERR_INDICATOR)
static bool net_timeout_flag
SOCKET net_init_env(char *port_name)
void net_timeout_set(int timeout_sec)
int net_read_stream(SOCKET sock_fd, char *buf, int size)
unsigned int ntohl(unsigned int from)
#define WRITE_TO_NET(sd, buf, size)
bool is_net_timed_out(void)
#define CUB_MAXHOSTNAMELEN
int cas_ssl_write(int sock_fd, const char *buf, int size)
static int get_host_ip(unsigned char *ip_addr)
void net_write_error(SOCKET sock, int version, char *driver_info, char *cas_info, int cas_info_size, int indicator, int code, char *msg)
size_t net_error_append_shard_info(char *err_buf, const char *err_msg, int buf_size)
#define REALLOC(PTR, SIZE)