CUBRID Engine  latest
cas_net_buf.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  * cas_net_buf.h -
22  */
23 
24 #ifndef _CAS_NET_BUF_H_
25 #define _CAS_NET_BUF_H_
26 
27 #ident "$Id$"
28 
29 #if defined(WINDOWS)
30 #include <winsock2.h>
31 #include <windows.h>
32 #else
33 #include <arpa/inet.h>
34 #endif
35 
36 #include "cas_protocol.h"
37 #include "cas_network.h"
38 #include "cas.h"
39 
40 #if !defined(CAS_FOR_ORACLE) && !defined(CAS_FOR_MYSQL)
41 #include "dbtype_def.h"
42 #endif /* !CAS_FOR_ORACLE && !CAS_FOR_MYSQL */
43 
44 #if (defined(SOLARIS) && !defined(SOLARIS_X86)) || defined(HPUX) || defined(AIX) || defined(PPC_LINUX)
45 #define BYTE_ORDER_BIG_ENDIAN
46 #elif defined(WINDOWS) || defined(LINUX) || defined(OSF1) || defined(ALPHA_LINUX) || defined(UNIXWARE7) || defined(SOLARIS_X86)
47 #ifdef BYTE_ORDER_BIG_ENDIAN
48 #error BYTE_ORDER_BIG_ENDIAN defined
49 #endif
50 #else
51 #error PLATFORM NOT DEFINED
52 #endif
53 
54 #ifdef BYTE_ORDER_BIG_ENDIAN
55 #define net_htoni64(X) (X)
56 #define net_htonf(X) (X)
57 #define net_htond(X) (X)
58 #define net_ntohi64(X) (X)
59 #define net_ntohf(X) (X)
60 #define net_ntohd(X) (X)
61 #else
62 #define net_ntohi64(X) net_htoni64(X)
63 #define net_ntohf(X) net_htonf(X)
64 #define net_ntohd(X) net_htond(X)
65 #endif
66 
67 #define NET_BUF_ERROR_MSG_SET(NET_BUF, ERR_INDICATOR, ERR_CODE, ERR_MSG) \
68  net_buf_error_msg_set(NET_BUF, ERR_INDICATOR, ERR_CODE, ERR_MSG, __FILE__, __LINE__)
69 
70 #define NET_BUF_KBYTE 1024
71 #define SHARD_NET_BUF_SIZE (512 * NET_BUF_KBYTE)
72 #define NET_BUF_SIZE (16 * NET_BUF_KBYTE)
73 #define NET_BUF_EXTRA_SIZE (64 * NET_BUF_KBYTE)
74 #define NET_BUF_ALLOC_SIZE (NET_BUF_SIZE + NET_BUF_EXTRA_SIZE)
75 #define SHARD_NET_BUF_ALLOC_SIZE (SHARD_NET_BUF_SIZE + NET_BUF_EXTRA_SIZE)
76 
77 #define NET_BUF_HEADER_MSG_SIZE (NET_SIZE_INT)
78 #define NET_BUF_HEADER_SIZE (NET_BUF_HEADER_MSG_SIZE + cas_info_size)
79 #define NET_BUF_CURR_SIZE(n) \
80  (((n)->alloc_size > 0) ? (NET_BUF_HEADER_SIZE + (n)->data_size) : 0)
81 #define NET_BUF_FREE_SIZE(n) \
82  ((n)->alloc_size - NET_BUF_CURR_SIZE(n))
83 #define NET_BUF_CURR_PTR(n) \
84  ((n)->data + NET_BUF_CURR_SIZE(n))
85 #define CHECK_NET_BUF_SIZE(n , size) \
86  (NET_BUF_CURR_SIZE(n) < (size) ? 1 : 0)
87 
88 #define NET_BUF_TYPE_SIZE(net_buf) (DOES_CLIENT_UNDERSTAND_THE_PROTOCOL \
89 ((net_buf)->client_version, PROTOCOL_V7) ? 2 * NET_SIZE_BYTE : NET_SIZE_BYTE)
90 
91 typedef struct t_net_buf T_NET_BUF;
92 struct t_net_buf
93 {
95  int data_size;
96  char *data;
97  int err_code;
101 };
102 
103 #if defined(CAS_FOR_ORACLE) || defined(CAS_FOR_MYSQL)
104 #define DB_BIGINT int64_t
105 #endif /* CAS_FOR_ORACLE || CAS_FOR_MYSQL */
106 extern void net_buf_init (T_NET_BUF * net_buf, T_BROKER_VERSION client_version);
107 extern void net_buf_clear (T_NET_BUF * net_buf);
108 extern void net_buf_destroy (T_NET_BUF * net_buf);
109 extern int net_buf_cp_post_send_file (T_NET_BUF * net_buf, int, char *str);
110 extern int net_buf_cp_byte (T_NET_BUF * net_buf, char ch);
111 extern int net_buf_cp_str (T_NET_BUF * net_buf, const char *buf, int size);
112 extern int net_buf_cp_int (T_NET_BUF * net_buf, int value, int *begin_offset);
113 extern void net_buf_overwrite_int (T_NET_BUF * net_buf, int offset, int value);
114 extern int net_buf_cp_bigint (T_NET_BUF * net_buf, DB_BIGINT value, int *begin_offset);
115 #if defined (ENABLE_UNUSED_FUNCTION)
116 extern void net_buf_overwrite_bigint (T_NET_BUF * net_buf, int offset, DB_BIGINT value);
117 #endif
118 extern int net_buf_cp_float (T_NET_BUF * net_buf, float value);
119 extern int net_buf_cp_double (T_NET_BUF * net_buf, double value);
120 extern int net_buf_cp_short (T_NET_BUF * net_buf, short value);
121 extern int net_buf_cp_object (T_NET_BUF * net_buf, T_OBJECT * oid);
122 extern int net_buf_cp_lob_handle (T_NET_BUF * net_buf, T_LOB_HANDLE * lob);
123 
124 extern void net_buf_error_msg_set (T_NET_BUF * net_buf, int errindicator, int errcode, char *errstr, const char *file,
125  int line);
126 
127 #ifndef BYTE_ORDER_BIG_ENDIAN
128 extern INT64 net_htoni64 (INT64 from);
129 extern float net_htonf (float from);
130 extern double net_htond (double from);
131 #endif
132 
133 extern void net_buf_column_info_set (T_NET_BUF * net_buf, char ut, short scale, int prec, char charset,
134  const char *name);
135 
136 extern void net_arg_get_size (int *size, void *arg);
137 #if defined(CAS_FOR_ORACLE) || defined(CAS_FOR_MYSQL)
138 extern void net_arg_get_bigint (int64_t * value, void *arg);
139 #else /* CAS_FOR_ORACLE || CAS_FOR_MYSQL */
140 extern void net_arg_get_bigint (DB_BIGINT * value, void *arg);
141 #endif /* !CAS_FOR_ORACLE && !CAS_FOR_MYSQL */
142 extern void net_arg_get_int (int *value, void *arg);
143 extern void net_arg_get_short (short *value, void *arg);
144 extern void net_arg_get_float (float *value, void *arg);
145 extern void net_arg_get_double (double *value, void *arg);
146 #define net_arg_get_char(value, arg) \
147  ((value)= *((char *) (arg) + NET_SIZE_INT));
148 extern void net_arg_get_str (char **value, int *size, void *arg);
149 extern void net_arg_get_date (short *year, short *mon, short *day, void *arg);
150 extern void net_arg_get_time (short *hh, short *mm, short *ss, void *arg);
151 extern void net_arg_get_timestamp (short *yr, short *mon, short *day, short *hh, short *mm, short *ss, void *arg);
152 extern void net_arg_get_timestamptz (short *yr, short *mon, short *day, short *hh, short *mm, short *ss, char **tz,
153  int *tz_size, void *arg);
154 extern void net_arg_get_datetime (short *yr, short *mon, short *day, short *hh, short *mm, short *ss, short *ms,
155  void *arg);
156 extern void net_arg_get_datetimetz (short *yr, short *mon, short *day, short *hh, short *mm, short *ss, short *ms,
157  char **tz, int *tz_size, void *arg);
158 extern void net_arg_get_object (T_OBJECT * obj, void *arg);
159 extern void net_arg_get_cache_time (void *ct, void *arg);
160 #if !defined(CAS_FOR_ORACLE) && !defined(CAS_FOR_MYSQL)
161 extern void net_arg_get_dbobject (DB_OBJECT ** obj, void *arg);
162 extern void net_arg_get_cci_object (int *pageid, short *slotid, short *volid, void *arg);
163 extern void net_arg_get_lob_handle (T_LOB_HANDLE * lob, void *arg);
164 extern void net_arg_get_lob_value (DB_VALUE * db_lob, void *arg);
165 #endif /* !CAS_FOR_ORACLE && !CAS_FOR_MYSQL */
166 
167 extern void net_arg_put_int (void *arg, int *value);
168 extern size_t net_error_append_shard_info (char *err_buf, const char *err_msg, int buf_size);
169 extern int net_buf_cp_cas_type_and_charset (T_NET_BUF * net_buf, unsigned char cas_type, unsigned char charset);
170 #endif /* _CAS_NET_BUF_H_ */
T_BROKER_VERSION client_version
Definition: cas_net_buf.h:100
int net_buf_cp_short(T_NET_BUF *net_buf, short value)
Definition: cas_net_buf.c:227
void net_arg_get_int(int *value, void *arg)
Definition: cas_net_buf.c:484
void net_arg_get_object(T_OBJECT *obj, void *arg)
Definition: cas_net_buf.c:670
void net_arg_get_datetime(short *yr, short *mon, short *day, short *hh, short *mm, short *ss, short *ms, void *arg)
Definition: cas_net_buf.c:625
size_t net_error_append_shard_info(char *err_buf, const char *err_msg, int buf_size)
Definition: cas_net_buf.c:795
void net_buf_init(T_NET_BUF *net_buf, T_BROKER_VERSION client_version)
Definition: cas_net_buf.c:54
int net_buf_cp_post_send_file(T_NET_BUF *net_buf, int, char *str)
Definition: cas_net_buf.c:83
int net_buf_cp_lob_handle(T_NET_BUF *net_buf, T_LOB_HANDLE *lob)
Definition: cas_net_buf.c:256
void net_arg_get_dbobject(DB_OBJECT **obj, void *arg)
Definition: cas_net_buf.c:704
void net_arg_get_double(double *value, void *arg)
Definition: cas_net_buf.c:517
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)
Definition: cas_net_buf.c:654
int post_file_size
Definition: cas_net_buf.h:98
int net_buf_cp_str(T_NET_BUF *net_buf, const char *buf, int size)
Definition: cas_net_buf.c:110
char * post_send_file
Definition: cas_net_buf.h:99
void net_buf_clear(T_NET_BUF *net_buf)
Definition: cas_net_buf.c:66
void net_arg_get_bigint(DB_BIGINT *value, void *arg)
Definition: cas_net_buf.c:472
void net_buf_overwrite_int(T_NET_BUF *net_buf, int offset, int value)
Definition: cas_net_buf.c:150
void net_arg_get_timestamptz(short *yr, short *mon, short *day, short *hh, short *mm, short *ss, char **tz, int *tz_size, void *arg)
Definition: cas_net_buf.c:608
void net_arg_get_short(short *value, void *arg)
Definition: cas_net_buf.c:495
void net_arg_get_time(short *hh, short *mm, short *ss, void *arg)
Definition: cas_net_buf.c:565
void net_arg_get_cci_object(int *pageid, short *slotid, short *volid, void *arg)
Definition: cas_net_buf.c:717
int net_buf_cp_object(T_NET_BUF *net_buf, T_OBJECT *oid)
Definition: cas_net_buf.c:241
int net_buf_cp_cas_type_and_charset(T_NET_BUF *net_buf, unsigned char cas_type, unsigned char charset)
Definition: cas_net_buf.c:846
int net_buf_cp_int(T_NET_BUF *net_buf, int value, int *begin_offset)
Definition: cas_net_buf.c:126
void net_arg_get_cache_time(void *ct, void *arg)
Definition: cas_net_buf.c:688
void net_buf_destroy(T_NET_BUF *net_buf)
Definition: cas_net_buf.c:75
char * data
Definition: cas_net_buf.h:96
void net_arg_get_lob_value(DB_VALUE *db_lob, void *arg)
Definition: cas_net_buf.c:762
Definition: cas.h:49
INT64 net_htoni64(INT64 from)
Definition: cas_net_buf.c:336
void net_buf_column_info_set(T_NET_BUF *net_buf, char ut, short scale, int prec, char charset, const char *name)
Definition: cas_net_buf.c:396
int data_size
Definition: cas_net_buf.h:95
void net_arg_get_timestamp(short *yr, short *mon, short *day, short *hh, short *mm, short *ss, void *arg)
Definition: cas_net_buf.c:582
void net_arg_get_lob_handle(T_LOB_HANDLE *lob, void *arg)
Definition: cas_net_buf.c:735
void net_arg_put_int(void *arg, int *value)
Definition: cas_net_buf.c:778
int64_t DB_BIGINT
Definition: dbtype_def.h:751
void net_arg_get_float(float *value, void *arg)
Definition: cas_net_buf.c:506
float net_htonf(float from)
Definition: cas_net_buf.c:357
int net_buf_cp_float(T_NET_BUF *net_buf, float value)
Definition: cas_net_buf.c:199
void net_arg_get_size(int *size, void *arg)
Definition: cas_net_buf.c:451
int net_buf_cp_bigint(T_NET_BUF *net_buf, DB_BIGINT value, int *begin_offset)
Definition: cas_net_buf.c:161
void net_buf_error_msg_set(T_NET_BUF *net_buf, int errindicator, int errcode, char *errstr, const char *file, int line)
Definition: cas_net_buf.c:277
int alloc_size
Definition: cas_net_buf.h:94
int T_BROKER_VERSION
Definition: cas_protocol.h:342
int net_buf_cp_double(T_NET_BUF *net_buf, double value)
Definition: cas_net_buf.c:213
void net_arg_get_date(short *year, short *mon, short *day, void *arg)
Definition: cas_net_buf.c:548
int net_buf_cp_byte(T_NET_BUF *net_buf, char ch)
Definition: cas_net_buf.c:97
void net_arg_get_str(char **value, int *size, void *arg)
Definition: cas_net_buf.c:528
double net_htond(double from)
Definition: cas_net_buf.c:374
int err_code
Definition: cas_net_buf.h:97