File cas_net_buf.h¶
File List > broker > cas_net_buf.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_net_buf.h -
*/
#ifndef _CAS_NET_BUF_H_
#define _CAS_NET_BUF_H_
#ident "$Id$"
#if defined(WINDOWS)
#include <winsock2.h>
#include <windows.h>
#else
#include <arpa/inet.h>
#endif
#include "cas_protocol.h"
#include "dbtype_def.h"
#include "cas_common_vars.h"
#define NET_SIZE_BYTE ((int) sizeof(char))
#define NET_SIZE_SHORT ((int) sizeof(short))
#define NET_SIZE_INT ((int) sizeof(int))
#define NET_SIZE_FLOAT ((int) sizeof(float))
#define NET_SIZE_DOUBLE ((int) sizeof(double))
#define NET_SIZE_INT64 ((int) sizeof(INT64))
#define NET_SIZE_BIGINT NET_SIZE_INT64
#define NET_SIZE_DATE (NET_SIZE_SHORT + NET_SIZE_SHORT + NET_SIZE_SHORT)
#define NET_SIZE_TIME (NET_SIZE_SHORT + NET_SIZE_SHORT + NET_SIZE_SHORT)
#define NET_SIZE_OBJECT (NET_SIZE_INT + NET_SIZE_SHORT + NET_SIZE_SHORT)
#define NET_SIZE_TIMESTAMP (NET_SIZE_SHORT * 6)
#define NET_SIZE_DATETIME (NET_SIZE_SHORT * 7)
#if (defined(SOLARIS) && !defined(SOLARIS_X86)) || defined(HPUX) || defined(AIX) || defined(PPC_LINUX)
#define BYTE_ORDER_BIG_ENDIAN
#elif defined(WINDOWS) || defined(LINUX) || defined(OSF1) || defined(ALPHA_LINUX) || defined(UNIXWARE7) || defined(SOLARIS_X86)
#ifdef BYTE_ORDER_BIG_ENDIAN
#error BYTE_ORDER_BIG_ENDIAN defined
#endif
#else
#error PLATFORM NOT DEFINED
#endif
#ifdef BYTE_ORDER_BIG_ENDIAN
#define net_htoni64(X) (X)
#define net_htonf(X) (X)
#define net_htond(X) (X)
#define net_ntohi64(X) (X)
#define net_ntohf(X) (X)
#define net_ntohd(X) (X)
#else
#define net_ntohi64(X) net_htoni64(X)
#define net_ntohf(X) net_htonf(X)
#define net_ntohd(X) net_htond(X)
#endif
#define NET_BUF_ERROR_MSG_SET(NET_BUF, ERR_INDICATOR, ERR_CODE, ERR_MSG) \
net_buf_error_msg_set(NET_BUF, ERR_INDICATOR, ERR_CODE, ERR_MSG, __FILE__, __LINE__)
#define NET_BUF_KBYTE 1024
#define SHARD_NET_BUF_SIZE (512 * NET_BUF_KBYTE)
#define NET_BUF_SIZE (get_net_buf_size ())
#define NET_BUF_EXTRA_SIZE (64 * NET_BUF_KBYTE)
#define NET_BUF_ALLOC_SIZE (NET_BUF_SIZE + NET_BUF_EXTRA_SIZE)
#define SHARD_NET_BUF_ALLOC_SIZE (SHARD_NET_BUF_SIZE + NET_BUF_EXTRA_SIZE)
#define NET_BUF_HEADER_MSG_SIZE (NET_SIZE_INT)
#define NET_BUF_HEADER_SIZE (NET_BUF_HEADER_MSG_SIZE + cas_info_size)
#define NET_BUF_CURR_SIZE(n) \
(((n)->alloc_size > 0) ? (NET_BUF_HEADER_SIZE + (n)->data_size) : 0)
#define NET_BUF_FREE_SIZE(n) \
((n)->alloc_size - NET_BUF_CURR_SIZE(n))
#define NET_BUF_CURR_PTR(n) \
((n)->data + NET_BUF_CURR_SIZE(n))
#define CHECK_NET_BUF_SIZE(n , size) \
(NET_BUF_CURR_SIZE(n) < (size) ? 1 : 0)
#define NET_BUF_TYPE_SIZE(net_buf) (DOES_CLIENT_UNDERSTAND_THE_PROTOCOL \
((net_buf)->client_version, PROTOCOL_V7) ? 2 * NET_SIZE_BYTE : NET_SIZE_BYTE)
#define INT_DEFAULE_NET_BUF_SIZE (16 * NET_BUF_KBYTE)
#define MAX_SHARD_INFO_LENGTH (30)
typedef struct t_net_buf T_NET_BUF;
struct t_net_buf
{
int alloc_size;
int data_size;
char *data;
int err_code;
int post_file_size;
char *post_send_file;
T_BROKER_VERSION client_version;
};
extern void net_buf_init (T_NET_BUF * net_buf, T_BROKER_VERSION client_version);
extern void net_buf_clear (T_NET_BUF * net_buf);
extern void net_buf_destroy (T_NET_BUF * net_buf);
extern int net_buf_cp_post_send_file (T_NET_BUF * net_buf, int, char *str);
extern int net_buf_cp_byte (T_NET_BUF * net_buf, char ch);
extern int net_buf_cp_str (T_NET_BUF * net_buf, const char *buf, int size);
extern int net_buf_cp_int (T_NET_BUF * net_buf, int value, int *begin_offset);
extern void net_buf_overwrite_int (T_NET_BUF * net_buf, int offset, int value);
extern int net_buf_cp_bigint (T_NET_BUF * net_buf, DB_BIGINT value, int *begin_offset);
#if defined (ENABLE_UNUSED_FUNCTION)
extern void net_buf_overwrite_bigint (T_NET_BUF * net_buf, int offset, DB_BIGINT value);
#endif
extern int net_buf_cp_float (T_NET_BUF * net_buf, float value);
extern int net_buf_cp_double (T_NET_BUF * net_buf, double value);
extern int net_buf_cp_short (T_NET_BUF * net_buf, short value);
extern int net_buf_cp_object (T_NET_BUF * net_buf, T_OBJECT * oid);
extern int net_buf_cp_lob_handle (T_NET_BUF * net_buf, T_LOB_HANDLE * lob);
extern void net_buf_error_msg_set (T_NET_BUF * net_buf, int errindicator, int errcode, char *errstr, const char *file,
int line);
#ifndef BYTE_ORDER_BIG_ENDIAN
extern INT64 net_htoni64 (INT64 from);
extern float net_htonf (float from);
extern double net_htond (double from);
#endif
extern void net_buf_column_info_set (T_NET_BUF * net_buf, char ut, short scale, int prec, char charset,
const char *name);
extern void net_arg_get_size (int *size, void *arg);
extern void net_arg_get_bigint (DB_BIGINT * value, void *arg);
extern void net_arg_get_int (int *value, void *arg);
extern void net_arg_get_short (short *value, void *arg);
extern void net_arg_get_float (float *value, void *arg);
extern void net_arg_get_double (double *value, void *arg);
#define net_arg_get_char(value, arg) \
((value)= *((char *) (arg) + NET_SIZE_INT));
extern void net_arg_get_str (char **value, int *size, void *arg);
extern void net_arg_get_date (short *year, short *mon, short *day, void *arg);
extern void net_arg_get_time (short *hh, short *mm, short *ss, void *arg);
extern void net_arg_get_timestamp (short *yr, short *mon, short *day, short *hh, short *mm, short *ss, void *arg);
extern void net_arg_get_timestamptz (short *yr, short *mon, short *day, short *hh, short *mm, short *ss, char **tz,
int *tz_size, void *arg);
extern void net_arg_get_datetime (short *yr, short *mon, short *day, short *hh, short *mm, short *ss, short *ms,
void *arg);
extern void net_arg_get_datetimetz (short *yr, short *mon, short *day, short *hh, short *mm, short *ss, short *ms,
char **tz, int *tz_size, void *arg);
extern void net_arg_get_object (T_OBJECT * obj, void *arg);
extern void net_arg_get_cache_time (void *ct, void *arg);
extern void net_arg_get_dbobject (DB_OBJECT ** obj, void *arg);
extern void net_arg_get_cci_object (int *pageid, short *slotid, short *volid, void *arg);
extern void net_arg_get_lob_handle (T_LOB_HANDLE * lob, void *arg);
extern void net_arg_get_lob_value (DB_VALUE * db_lob, void *arg);
extern void net_arg_put_int (void *arg, int *value);
extern size_t net_error_append_shard_info (char *err_buf, const char *err_msg, int buf_size);
extern int net_buf_cp_cas_type_and_charset (T_NET_BUF * net_buf, unsigned char cas_type, unsigned char charset);
extern int get_net_buf_size (void);
extern void set_net_buf_size (void);
#endif /* _CAS_NET_BUF_H_ */