File cas_network.h¶
File List > broker > cas_network.h
Go to the documentation of this file
/*
* Copyright 2008 Search Solution Corporation
* Copyright 2016 CUBRID Corporation
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*
*/
/*
* cas_network.h -
*/
#ifndef _CAS_NETWORK_H_
#define _CAS_NETWORK_H_
#ident "$Id$"
#include <string.h>
#include "cas_net_buf.h"
#define NET_MIN_TIMEOUT 2
#define NET_DEFAULT_TIMEOUT 60
#define MYSQL_CONNECT_TIMEOUT (5*60*60) /* 5 hour. MySQL timeout = 8 hour */
#ifndef MIN
#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
#endif
#define NET_ARG_GET_SIZE(SIZE, ARG) \
do { \
int tmp_i; \
memcpy(&tmp_i, (char*) (ARG), NET_SIZE_INT); \
SIZE = ntohl(tmp_i); \
} while (0)
#define NET_ARG_GET_BIGINT(VALUE, ARG) \
do { \
DB_BIGINT tmp_i; \
memcpy(&tmp_i, (char*) (ARG) + NET_SIZE_INT, NET_SIZE_BIGINT); \
VALUE = ntohi64(tmp_i); \
} while (0)
#define NET_ARG_GET_INT(VALUE, ARG) \
do { \
int tmp_i; \
memcpy(&tmp_i, (char*) (ARG) + NET_SIZE_INT, NET_SIZE_INT); \
VALUE = ntohl(tmp_i); \
} while (0)
#define NET_ARG_GET_SHORT(VALUE, ARG) \
do { \
short tmp_s; \
memcpy(&tmp_s, (char*) (ARG) + NET_SIZE_INT, NET_SIZE_SHORT); \
VALUE = ntohs(tmp_s); \
} while (0)
#define NET_ARG_GET_FLOAT(VALUE, ARG) \
do { \
float tmp_f; \
memcpy(&tmp_f, (char*) (ARG) + NET_SIZE_INT, NET_SIZE_FLOAT); \
VALUE = net_ntohf(tmp_f); \
} while (0)
#define NET_ARG_GET_DOUBLE(VALUE, ARG) \
do { \
double tmp_d; \
memcpy(&tmp_d, (char*) (ARG) + NET_SIZE_INT, NET_SIZE_DOUBLE); \
VALUE = net_ntohd(tmp_d); \
} while (0)
#define NET_ARG_GET_CHAR(VALUE, ARG) \
do { \
VALUE = (*((char*) (ARG) + NET_SIZE_INT)); \
} while (0)
#define NET_ARG_GET_STR(VALUE, SIZE, ARG) \
do { \
int _size; \
char *cur_p = (char*) ARG; \
memcpy(&_size, cur_p, NET_SIZE_INT); \
_size = ntohl(_size); \
cur_p += NET_SIZE_INT; \
if (_size <= 0) { \
VALUE = NULL; \
SIZE = 0; \
} else { \
VALUE = ((char*) cur_p); \
SIZE = _size; \
} \
} while (0)
#define NET_ARG_GET_DATE(YEAR, MON, DAY, ARG) \
do { \
char *cur_p = (char*) ARG; \
short tmp_s; \
int pos = NET_SIZE_INT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
YEAR = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
MON = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
DAY = ntohs(tmp_s); \
} while (0)
#define NET_ARG_GET_TIME(HH, MM, SS, ARG) \
do { \
char *cur_p = (char*) ARG; \
short tmp_s; \
int pos = NET_SIZE_INT + NET_SIZE_SHORT * 3; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
HH = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
MM = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
SS = ntohs(tmp_s); \
} while (0)
#define NET_ARG_GET_TIMESTAMP(YR, MON, DAY, HH, MM, SS, ARG) \
do { \
char *cur_p = (char*) ARG; \
short tmp_s; \
int pos = NET_SIZE_INT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
YR = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
MON = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
DAY = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
HH = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
MM = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
SS = ntohs(tmp_s); \
} while (0)
#define NET_ARG_GET_DATETIME(YR, MON, DAY, HH, MM, SS, MS, ARG) \
do { \
char *cur_p = (char*) ARG; \
short tmp_s; \
int pos = NET_SIZE_INT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
YR = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
MON = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
DAY = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
HH = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
MM = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
SS = ntohs(tmp_s); \
pos += NET_SIZE_SHORT; \
memcpy(&tmp_s, cur_p + pos, NET_SIZE_SHORT); \
MS = ntohs(tmp_s); \
} while (0)
#define NET_ARG_GET_OBJECT(VALUE, ARG) \
do { \
char *cur_p = (char*) ARG; \
int pageid; \
short slotid, volid; \
DB_IDENTIFIER tmp_oid; \
DB_OBJECT *tmp_obj; \
int pos = NET_SIZE_INT; \
memcpy(&pageid, cur_p + pos, NET_SIZE_INT);\
pageid = ntohl(pageid); \
pos += NET_SIZE_INT; \
memcpy(&slotid, cur_p + pos, NET_SIZE_SHORT);\
slotid = ntohs(slotid); \
pos += NET_SIZE_SHORT; \
memcpy(&volid, cur_p + pos, NET_SIZE_SHORT);\
volid = ntohs(volid); \
pos += NET_SIZE_SHORT; \
tmp_oid.pageid = pageid; \
tmp_oid.slotid = slotid; \
tmp_oid.volid = volid; \
tmp_obj = db_object(&tmp_oid); \
VALUE = tmp_obj; \
} while (0)
#define NET_ARG_GET_CCI_OBJECT(PAGEID, SLOTID, VOLID, ARG) \
do { \
char *_macro_tmp_p = (char*) ARG; \
int _tmp_pageid; \
short _tmp_slotid, _tmp_volid; \
int pos = NET_SIZE_INT; \
memcpy(&_tmp_pageid, _macro_tmp_p + pos, NET_SIZE_INT); \
PAGEID = ntohl(_tmp_pageid); \
pos += NET_SIZE_INT; \
memcpy(&_tmp_slotid, _macro_tmp_p + pos, NET_SIZE_SHORT); \
SLOTID = ntohs(_tmp_slotid); \
pos += NET_SIZE_SHORT; \
memcpy(&_tmp_volid, _macro_tmp_p + pos, NET_SIZE_SHORT); \
VOLID = ntohs(_tmp_volid); \
} while (0)
#define NET_ARG_GET_CACHE_TIME(CT, ARG) \
do { \
char *cur_p = (char*) ARG; \
int sec, usec; \
int pos = NET_SIZE_INT; \
memcpy(&sec, cur_p + pos, NET_SIZE_INT); \
pos += NET_SIZE_INT; \
memcpy(&usec, cur_p + pos, NET_SIZE_INT); \
(CT)->sec = ntohl(sec); \
(CT)->usec = ntohl(usec); \
} while (0)
extern SOCKET
#if defined(WINDOWS)
net_init_env (int *new_port);
#else
net_init_env (char *port_name);
#endif
typedef struct
{
int *msg_body_size_ptr;
char *info_ptr;
char buf[MSG_HEADER_SIZE];
} MSG_HEADER;
#if defined(WINDOWS)
extern SOCKET net_connect_proxy (int proxy_id);
#else /* WINDOWS */
extern SOCKET net_connect_proxy (void);
#endif /* !WINDOWS */
extern SOCKET net_connect_client (SOCKET srv_sock_fd);
extern int net_read_stream (SOCKET sock_fd, char *buf, int size);
extern int net_write_stream (SOCKET sock_fd, const char *buf, int size);
extern int net_write_int (SOCKET sock_fd, int value);
extern int net_read_int (SOCKET sock_fd, int *value);
extern int net_decode_str (char *msg, int msg_size, char *func_code, void ***ret_argv);
extern int net_read_to_file (SOCKET sock_fd, int file_size, char *filename);
extern int net_write_from_file (SOCKET sock_fd, int file_size, char *filename);
extern void net_timeout_set (int timeout_sec);
extern void init_msg_header (MSG_HEADER * header);
extern int net_read_header (SOCKET sock_fd, MSG_HEADER * header);
extern int net_write_header (SOCKET sock_fd, MSG_HEADER * header);
extern bool is_net_timed_out (void);
extern void net_write_error (SOCKET sock, int version, char *driver_info, char *cas_info, int cas_info_size,
int indicator, int code, const char *msg);
#endif /* _CAS_NETWORK_H_ */