3 * @brief the connection management component
4 * @brief transmit data between client and realserver
5 * @brief and calls protocol module to decide realserver
6 * @brief also modify realserver data
8 * L7VSD: Linux Virtual Server for Layer7 Load Balancing
9 * Copyright (C) 2005 NTT COMWARE Corporation.
11 * This program is free software; you can redistribute it and/or
12 * modify it under the terms of the GNU Lesser General Public
13 * License as published by the Free Software Foundation; either
14 * version 2.1 of the License, or (at your option) any later version.
16 * This program is distributed in the hope that it will be useful,
17 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
19 * Lesser General Public License for more details.
21 * You should have received a copy of the GNU Lesser General Public
22 * License along with this library; if not, write to the Free Software
23 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
26 **********************************************************************/
28 #include <sys/types.h>
29 #include <sys/socket.h>
30 #include <sys/select.h>
32 #include <netinet/in.h>
33 #include <netinet/tcp.h>
34 #include <arpa/inet.h>
42 #include "logger_wrapper.h"
43 #include "l7vs_config.h"
44 #include "l7vs_iomuxlist.h"
45 #include "l7vs_lsock.h"
46 #include "l7vs_conn.h"
47 #include "l7vs_service.h"
49 #include "l7vs_module.h"
50 #include "l7vs_sched.h"
52 static int l7vs_conn_cl_callback(struct l7vs_iomux*);
53 static int l7vs_conn_client_receiving(struct l7vs_iomux*);
54 static int l7vs_conn_is_rs_connected(struct l7vs_iomux*, struct l7vs_conn*, struct l7vs_service**, struct l7vs_dest**);
55 static int l7vs_conn_connection_establish(struct l7vs_iomux*, struct l7vs_conn*, struct l7vs_service*, struct l7vs_dest*);
56 static int l7vs_conn_block(struct l7vs_iomux*, struct l7vs_iomux*);
57 static int l7vs_conn_busy(struct l7vs_iomux*);
58 static int l7vs_conn_sending(struct l7vs_iomux*, struct l7vs_iomux*);
59 static int l7vs_conn_sent_next_state(struct l7vs_iomux*, struct l7vs_iomux*);
60 static int l7vs_conn_rs_callback(struct l7vs_iomux* );
61 static int l7vs_conn_realserver_receiving(struct l7vs_iomux*);
62 static int l7vs_conn_realserver_modify_data(struct l7vs_iomux*);
63 static int l7vs_conn_recv(struct l7vs_iomux*, int);
64 static int l7vs_conn_preread(struct l7vs_iomux*, int);
65 static int l7vs_conn_send(struct l7vs_iomux*, int);
66 static int l7vs_conn_change_connect_rs(struct l7vs_conn*, struct l7vs_dest*);
67 static int l7vs_conn_QoS_control( struct l7vs_conn *conn, int direction );
68 static void l7vs_conn_QoS_recvsize_register( struct l7vs_conn *conn, const size_t in_recvsize, int direction );
69 static void l7vs_conn_dump_data(char* str_data, const char* data, const size_t len);
70 static int l7vs_conn_read_bufsize = 20480; //! conn read buffer size
71 static int throughput_interval = BPS_DEFAULT_INTERVAL; //! throughput interval
76 /*-------- DEBUG LOG --------*/
77 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
78 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,353,
79 "in_function: int lvs_conn_init() ");
81 /*------ DEBUG LOG END ------*/
83 int ret = parameter_is_int_exist( PARAM_COMP_CONN, "read_bufsize" );
85 int bufsize = parameter_get_int_value( PARAM_COMP_CONN, "read_bufsize" );
86 if (bufsize >= L7VS_CONN_READ_BUFSIZE_MIN && bufsize <= L7VS_CONN_READ_BUFSIZE_MAX)
87 l7vs_conn_read_bufsize = bufsize;
88 // LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_NETWORK,5,
89 // "l7vsd uses read_bufsize = %d ",bufsize);
90 else if (bufsize > L7VS_CONN_READ_BUFSIZE_MAX) {
91 l7vs_conn_read_bufsize = L7VS_CONN_READ_BUFSIZE_MAX;
92 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_NETWORK,1,
93 "Your read_bufsize is over maximum size. l7vsd uses maximum read_bufsize = %d instead ",L7VS_CONN_READ_BUFSIZE_MAX);
96 l7vs_conn_read_bufsize = L7VS_CONN_READ_BUFSIZE_MIN;
97 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_NETWORK,2,
98 "Your read_bufsize is under minimum size. l7vsd uses minimum read_bufsize = %d instead ",L7VS_CONN_READ_BUFSIZE_MIN);
102 LOGGER_PUT_LOG_WARN(LOG_CAT_L7VSD_NETWORK,3,
103 "read_bufsize is not specified. l7vsd uses default read_bufsize = %d ",l7vs_conn_read_bufsize);
106 if ( parameter_is_int_exist( PARAM_COMP_L7VSD, "calc_throughput_interval" ) ) {
107 throughput_interval = parameter_get_int_value( PARAM_COMP_L7VSD, "calc_throughput_interval" );
110 /*-------- DEBUG LOG --------*/
111 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
112 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,345,
113 "out_function: int lvs_conn_init() ");
115 /*------ DEBUG LOG END ------*/
122 * @param[out] str_data dump string
123 * @param[in] data source data
124 * @param[in] len source data length
127 void l7vs_conn_dump_data(char* str_data, const char* data, const size_t len)
134 snprintf(str_data, DEBUG_STR_LEN, "(nil)");
138 const char* table[] = {
139 "00 ", "01 ", "02 ", "03 ", "04 ", "05 ", "06 ", "07 ", "08 ", "09 ", "0a ", "0b ", "0c ", "0d ", "0e ", "0f ",
140 "10 ", "11 ", "12 ", "13 ", "14 ", "15 ", "16 ", "17 ", "18 ", "19 ", "1a ", "1b ", "1c ", "1d ", "1e ", "1f ",
141 "20 ", "21 ", "22 ", "23 ", "24 ", "25 ", "26 ", "27 ", "28 ", "29 ", "2a ", "2b ", "2c ", "2d ", "2e ", "2f ",
142 "30 ", "31 ", "32 ", "33 ", "34 ", "35 ", "36 ", "37 ", "38 ", "39 ", "3a ", "3b ", "3c ", "3d ", "3e ", "3f ",
143 "40 ", "41 ", "42 ", "43 ", "44 ", "45 ", "46 ", "47 ", "48 ", "49 ", "4a ", "4b ", "4c ", "4d ", "4e ", "4f ",
144 "50 ", "51 ", "52 ", "53 ", "54 ", "55 ", "56 ", "57 ", "58 ", "59 ", "5a ", "5b ", "5c ", "5d ", "5e ", "5f ",
145 "60 ", "61 ", "62 ", "63 ", "64 ", "65 ", "66 ", "67 ", "68 ", "69 ", "6a ", "6b ", "6c ", "6d ", "6e ", "6f ",
146 "70 ", "71 ", "72 ", "73 ", "74 ", "75 ", "76 ", "77 ", "78 ", "79 ", "7a ", "7b ", "7c ", "7d ", "7e ", "7f ",
147 "80 ", "81 ", "82 ", "83 ", "84 ", "85 ", "86 ", "87 ", "88 ", "89 ", "8a ", "8b ", "8c ", "8d ", "8e ", "8f ",
148 "90 ", "91 ", "92 ", "93 ", "94 ", "95 ", "96 ", "97 ", "98 ", "99 ", "9a ", "9b ", "9c ", "9d ", "9e ", "9f ",
149 "a0 ", "a1 ", "a2 ", "a3 ", "a4 ", "a5 ", "a6 ", "a7 ", "a8 ", "a9 ", "aa ", "ab ", "ac ", "ad ", "ae ", "af ",
150 "b0 ", "b1 ", "b2 ", "b3 ", "b4 ", "b5 ", "b6 ", "b7 ", "b8 ", "b9 ", "ba ", "bb ", "bc ", "bd ", "be ", "bf ",
151 "c0 ", "c1 ", "c2 ", "c3 ", "c4 ", "c5 ", "c6 ", "c7 ", "c8 ", "c9 ", "ca ", "cb ", "cc ", "cd ", "ce ", "cf ",
152 "d0 ", "d1 ", "d2 ", "d3 ", "d4 ", "d5 ", "d6 ", "d7 ", "d8 ", "d9 ", "da ", "db ", "dc ", "dd ", "de ", "df ",
153 "e0 ", "e1 ", "e2 ", "e3 ", "e4 ", "e5 ", "e6 ", "e7 ", "e8 ", "e9 ", "ea ", "eb ", "ec ", "ed ", "ee ", "ef ",
154 "f0 ", "f1 ", "f2 ", "f3 ", "f4 ", "f5 ", "f6 ", "f7 ", "f8 ", "f9 ", "fa ", "fb ", "fc ", "fd ", "fe ", "ff "
156 const int hx_len = 3;
159 for (size_t i = 0; i < len; ++i) {
160 if (DEBUG_STR_LEN <= pos + hx_len) {
163 strncpy(str_data + pos, table[(unsigned char)*(data + i)], hx_len);
166 *(str_data + pos) = '\0';
172 * @param[in] lfd listening socket fd
173 * @param[in] lsock listening socket
177 l7vs_conn_create(int lfd, struct l7vs_lsock *lsock)
179 /*-------- DEBUG LOG --------*/
180 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
181 char lsock_str[DEBUG_STR_LEN] = {0};
182 l7vs_lsock_c_str(lsock_str, lsock);
183 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,50,
184 "in_function: struct l7vs_conn* lvs_conn_create(int fd, struct l7vs_lsock *lsock) "
189 /*------ DEBUG LOG END ------*/
192 struct l7vs_conn *conn = NULL;
198 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,28, "error / lsock fd is not specified");
203 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,29, "error / lsock is null");
207 conn = (struct l7vs_conn*)malloc(sizeof(struct l7vs_conn));
209 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,8, "error / can not allocate memory");
212 /*-------- DEBUG LOG --------*/
213 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
214 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,51,
215 "malloc: conn=%p: size=%zu",
216 conn, sizeof(struct l7vs_conn));
218 /*------ DEBUG LOG END ------*/
219 memset(conn, 0, sizeof(struct l7vs_conn));
221 conn->ciom = l7vs_iomux_get_from_avail_list();
223 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,7, "error / can not get client iom");
226 /*-------- DEBUG LOG --------*/
227 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
228 char ciom_str[DEBUG_STR_LEN] = {0};
229 l7vs_iomux_c_str(ciom_str, conn->ciom);
230 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,52,
231 "iom_get: conn->ciom=%s",
234 /*------ DEBUG LOG END ------*/
236 conn->riom = l7vs_iomux_get_from_avail_list();
238 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,8, "error / can not get realserver iom");
241 /*-------- DEBUG LOG --------*/
242 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
243 char riom_str[DEBUG_STR_LEN] = {0};
244 l7vs_iomux_c_str(riom_str, conn->riom);
245 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,53,
246 "iom_get: conn->riom=%s",
249 /*------ DEBUG LOG END ------*/
251 conn->cldata_len = 0;
252 conn->cldata_bufsize = l7vs_conn_read_bufsize;
253 conn->cldata = (char *)malloc(conn->cldata_bufsize);
255 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,9, "error / can not allocate memory for buffer");
258 /*-------- DEBUG LOG --------*/
259 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
260 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,54,
261 "malloc: conn->cldata=%p: size=%zu",
262 conn->cldata, conn->cldata_bufsize);
264 /*------ DEBUG LOG END ------*/
265 memset(conn->cldata, 0, conn->cldata_bufsize);
267 len = sizeof(struct sockaddr_in);
268 /*-------- DEBUG LOG --------*/
269 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
270 char caddr_str[DEBUG_STR_LEN] = {0};
271 l7vs_conn_sockaddr_in_c_str(caddr_str, &conn->caddr);
272 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,55,
273 "accept param: lfd=%d: conn->caddr=%s: len=%d",
274 lfd, caddr_str, len);
276 /*------ DEBUG LOG END ------*/
277 conn->ciom->fd = accept(lfd, (struct sockaddr *)&conn->caddr, &len);
278 if (conn->ciom->fd < 0) {
279 char caddr_str[DEBUG_STR_LEN] = {0};
280 l7vs_conn_sockaddr_in_c_str(caddr_str, &conn->caddr);
281 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,8,
282 "error / accept error accept param: lfd=%d: conn->caddr=%s: len=%d (%s)",
283 lfd, caddr_str, len,strerror(errno));
286 /*-------- DEBUG LOG --------*/
287 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
288 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,56,
289 "accept result: conn->ciom->fd=%d",
292 /*------ DEBUG LOG END ------*/
295 /*-------- DEBUG LOG --------*/
296 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
297 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,57,
298 "fnctl param: conn->ciom->fd=%d: cmd=F_GETFL: flags=0",
301 /*------ DEBUG LOG END ------*/
302 flags = fcntl(conn->ciom->fd, F_GETFL, 0);
304 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,9,
305 "error / fcntl((conn->ciom->fd=%d),F_GETFL) error(%s)",
306 conn->ciom->fd,strerror(errno));
309 /*-------- DEBUG LOG --------*/
310 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
311 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,58,
312 "fnctl result: flags=%d",
315 /*------ DEBUG LOG END ------*/
318 /*-------- DEBUG LOG --------*/
319 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
320 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,59,
321 "fnctl param: conn->ciom->fd=%d: cmd=F_SETFL: flags=%d",
322 conn->ciom->fd, (flags | O_NONBLOCK));
324 /*------ DEBUG LOG END ------*/
325 flags = fcntl(conn->ciom->fd, F_SETFL, flags | O_NONBLOCK);
327 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,10,
328 "error / fcntl((conn->ciom->fd=%d),F_SETFL) error(%s)",
329 conn->ciom->fd,strerror(errno));
332 /*-------- DEBUG LOG --------*/
333 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
334 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,60,
335 "fnctl result: flags=%d",
338 /*------ DEBUG LOG END ------*/
342 /*-------- DEBUG LOG --------*/
343 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
344 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,61,
345 "getsockopt param: conn->ciom->fd=%d: level=IPROTO_TCP: optname=TCP_MAXSEG: "
347 conn->ciom->fd, len);
349 /*------ DEBUG LOG END ------*/
350 ret = getsockopt(conn->ciom->fd, IPPROTO_TCP, TCP_MAXSEG, &mss, &len);
352 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,11, "error / getsockopt TCP_MAXSEG error(%s)", strerror(errno));
355 /*-------- DEBUG LOG --------*/
356 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
357 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,62,
358 "getsockopt result: mss=%d: len=%d",
361 /*------ DEBUG LOG END ------*/
363 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
364 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,63, "client %s mss %d",
365 inet_ntoa(conn->caddr.sin_addr), mss);
369 /*-------- DEBUG LOG --------*/
370 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
371 char lsock_str[DEBUG_STR_LEN] = {0};
372 l7vs_lsock_c_str(lsock_str, lsock);
373 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,64,
374 "pointer_assign: conn->lsock=%s",
377 /*------ DEBUG LOG END ------*/
378 conn->proto = lsock->proto;
379 /*-------- DEBUG LOG --------*/
380 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
381 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,65,
382 "conn->ciom->status change: %d->%d",
383 conn->ciom->status, iomux_conn_receiving);
385 /*------ DEBUG LOG END ------*/
386 conn->ciom->status = iomux_conn_receiving;
387 conn->ciom->callback = l7vs_conn_cl_callback;
388 /*-------- DEBUG LOG --------*/
389 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
390 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,66,
391 "pointer_assign: conn->ciom->callback=%p",
392 l7vs_conn_cl_callback);
394 /*------ DEBUG LOG END ------*/
395 conn->ciom->data = conn;
396 /*-------- DEBUG LOG --------*/
397 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
398 char conn_str[DEBUG_STR_LEN] = {0};
399 l7vs_conn_c_str(conn_str, conn);
400 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,67,
401 "pointer_assign: conn->ciom->data=%s",
404 /*------ DEBUG LOG END ------*/
405 conn->sorry_conn_flag = 0;
406 conn->old_dest = NULL;
407 l7vs_iomux_add(conn->ciom, iom_read);
409 // connect real server immediately if all lsock services are fast schedule.
410 if (lsock->fast_schedule) {
411 struct l7vs_service* srv;
412 struct l7vs_dest* dest;
413 conn->ciom->status = iomux_conn_received;
414 if (!l7vs_conn_is_rs_connected(conn->ciom, conn, &srv, &dest)) {
415 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,38, "error / is realserver connected failed");
418 switch (conn->ciom->status) {
419 case iomux_conn_block:
420 //already decided real server
422 case iomux_conn_service_selected:
423 //service and destination were selected then attempt to connect the real server
424 if (!l7vs_conn_connection_establish(conn->ciom, conn, srv, dest)) {
425 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,39, "error / client connect rs failed");
430 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,79, "error / invalid status(%d)", conn->ciom->status);
435 /*-------- DEBUG LOG --------*/
436 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
437 char ret_conn_str[DEBUG_STR_LEN] = {0};
438 l7vs_conn_c_str(ret_conn_str, conn);
439 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,68,
440 "out_function: struct l7vs_conn* lvs_conn_create(int fd, struct l7vs_lsock *lsock) "
441 "return_value: conn=%s",
444 /*------ DEBUG LOG END ------*/
448 /*-------- DEBUG LOG --------*/
449 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
450 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,69,
451 "entering: create_error_label");
453 /*------ DEBUG LOG END ------*/
456 if (-1 != conn->ciom->fd) {
457 /*-------- DEBUG LOG --------*/
458 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
459 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,70,
460 "close: conn->ciom->fd=%d",
463 /*------ DEBUG LOG END ------*/
464 close(conn->ciom->fd);
466 /*-------- DEBUG LOG --------*/
467 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
468 char put_ciom_str[DEBUG_STR_LEN] = {0};
469 l7vs_iomux_c_str(put_ciom_str, conn->ciom);
470 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,71,
471 "iom_put: conn->ciom=%s",
474 /*------ DEBUG LOG END ------*/
475 l7vs_iomux_put_to_avail_list(conn->ciom);
478 /*-------- DEBUG LOG --------*/
479 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
480 char put_riom_str[DEBUG_STR_LEN] = {0};
481 l7vs_iomux_c_str(put_riom_str, conn->riom);
482 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,72,
483 "iom_put: conn->riom=%s",
486 /*------ DEBUG LOG END ------*/
487 l7vs_iomux_put_to_avail_list(conn->riom);
490 /*-------- DEBUG LOG --------*/
491 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
492 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,73,
493 "free: conn->cldata=%p",
496 /*------ DEBUG LOG END ------*/
499 /*-------- DEBUG LOG --------*/
500 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
501 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,74,
505 /*------ DEBUG LOG END ------*/
508 /*-------- DEBUG LOG --------*/
509 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
510 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,75,
511 "out_function: struct l7vs_conn* lvs_conn_create(int fd, struct l7vs_lsock *lsock) "
512 "return_value: conn=NULL");
514 /*------ DEBUG LOG END ------*/
521 * @param[in] conn connection
525 l7vs_conn_destroy(struct l7vs_conn *conn)
527 /*-------- DEBUG LOG --------*/
528 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
529 char conn_str[DEBUG_STR_LEN] = {0};
530 l7vs_conn_c_str(conn_str, conn);
531 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,76,
532 "in_function: void l7vs_conn_destroy(struct l7vs_conn *conn) "
536 /*------ DEBUG LOG END ------*/
538 /*-------- DEBUG LOG --------*/
539 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
540 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,77,
541 "out_function: void l7vs_conn_destroy(struct l7vs_conn *conn) "
542 "return_value: void");
544 /*------ DEBUG LOG END ------*/
549 l7vs_service_remove_conn(conn->srv, conn);
550 /*-------- DEBUG LOG --------*/
551 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
552 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,78,
553 "pointer_assign: conn->srv=NULL");
555 /*------ DEBUG LOG END ------*/
560 if (-1 != conn->ciom->fd) {
561 l7vs_conn_close_csock(conn);
563 /*-------- DEBUG LOG --------*/
564 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
565 char put_ciom_str[DEBUG_STR_LEN] = {0};
566 l7vs_iomux_c_str(put_ciom_str, conn->ciom);
567 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,79,
568 "iom_put: conn->ciom=%s",
571 /*------ DEBUG LOG END ------*/
572 l7vs_iomux_put_to_avail_list(conn->ciom);
573 /*-------- DEBUG LOG --------*/
574 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
575 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,80,
576 "pointer_assign: conn->ciom=NULL");
578 /*------ DEBUG LOG END ------*/
583 if (-1 != conn->riom->fd) {
584 l7vs_conn_close_rsock(conn);
586 /*-------- DEBUG LOG --------*/
587 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
588 char put_riom_str[DEBUG_STR_LEN] = {0};
589 l7vs_iomux_c_str(put_riom_str, conn->riom);
590 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,81,
591 "iom_put: conn->riom=%s",
594 /*------ DEBUG LOG END ------*/
595 l7vs_iomux_put_to_avail_list(conn->riom);
596 /*-------- DEBUG LOG --------*/
597 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
598 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,82,
599 "pointer_assign: conn->riom=NULL");
601 /*------ DEBUG LOG END ------*/
606 /*-------- DEBUG LOG --------*/
607 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
608 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,83,
609 "free: conn->cldata=%p",
612 /*------ DEBUG LOG END ------*/
614 /*-------- DEBUG LOG --------*/
615 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
616 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,84,
617 "pointer_assign: conn->cldata=NULL");
619 /*------ DEBUG LOG END ------*/
623 /*-------- DEBUG LOG --------*/
624 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
625 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,85,
629 /*------ DEBUG LOG END ------*/
631 /*-------- DEBUG LOG --------*/
632 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
633 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,86,
634 "out_function: void l7vs_conn_destroy(struct l7vs_conn *conn) "
635 "return_value: void");
637 /*------ DEBUG LOG END ------*/
641 * client connection callback
643 * @param[in] iom connection iomux
649 l7vs_conn_cl_callback(struct l7vs_iomux *iom )
651 /*-------- DEBUG LOG --------*/
652 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
653 char iom_str[DEBUG_STR_LEN] = {0};
654 l7vs_iomux_c_str(iom_str, iom);
655 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,87,
656 "in_function: static int l7vs_conn_cl_callback(struct l7vs_iomux *iom ) "
660 /*------ DEBUG LOG END ------*/
661 struct l7vs_conn* conn = NULL;
664 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,30, "error / iom is null");
665 /*-------- DEBUG LOG --------*/
666 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
667 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,88,
668 "out_function: static int l7vs_conn_cl_callback(struct l7vs_iomux *iom ) "
671 /*------ DEBUG LOG END ------*/
675 conn = (struct l7vs_conn *)iom->data;
676 /*-------- DEBUG LOG --------*/
677 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
678 char conn_str[DEBUG_STR_LEN] = {0};
679 l7vs_conn_c_str(conn_str, conn);
680 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,89,
681 "pointer_assign: conn=%s",
684 /*------ DEBUG LOG END ------*/
686 // invalid status check
687 if (iomux_conn_receiving != iom->status &&
688 iomux_conn_block != iom->status &&
689 iomux_conn_busy != iom->status &&
690 iomux_conn_sending != iom->status &&
691 iomux_conn_sending_busy != iom->status) {
692 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,31, "error / invalid status(%d)", iom->status);
693 l7vs_conn_destroy(conn);
694 /*-------- DEBUG LOG --------*/
695 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
696 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,90,
697 "out_function: static int l7vs_conn_cl_callback(struct l7vs_iomux *iom ) "
700 /*------ DEBUG LOG END ------*/
704 // switch by current status
705 switch (iom->status) {
706 case iomux_conn_receiving:
707 if (!l7vs_conn_client_receiving(iom)) {
708 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,9, "error / cl_callback/client receiving failed");
709 l7vs_conn_destroy(conn);
710 /*-------- DEBUG LOG --------*/
711 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
712 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,91,
713 "out_function: static int l7vs_conn_cl_callback(struct l7vs_iomux *iom ) "
716 /*------ DEBUG LOG END ------*/
719 if (iomux_conn_disconnected == iom->status) {
720 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
721 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,92, "client connection disconnected");
723 l7vs_conn_destroy(conn);
726 case iomux_conn_block:
727 if (!l7vs_conn_block(iom, conn->riom)) {
728 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,10, "error / cl_callback/block failed");
729 l7vs_conn_destroy(conn);
730 /*-------- DEBUG LOG --------*/
731 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
732 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,93,
733 "out_function: static int l7vs_conn_cl_callback(struct l7vs_iomux *iom ) "
736 /*------ DEBUG LOG END ------*/
740 case iomux_conn_busy:
741 if (!l7vs_conn_busy(iom)) {
742 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,11, "error / cl_callback/busy failed");
743 l7vs_conn_destroy(conn);
744 /*-------- DEBUG LOG --------*/
745 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
746 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,94,
747 "out_function: static int l7vs_conn_cl_callback(struct l7vs_iomux *iom ) "
750 /*------ DEBUG LOG END ------*/
754 case iomux_conn_sending:
755 if (!l7vs_conn_sending(iom, conn->riom)) {
756 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,12, "error / cl_callback/sending failed");
757 l7vs_conn_destroy(conn);
758 /*-------- DEBUG LOG --------*/
759 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
760 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,95,
761 "out_function: static int l7vs_conn_cl_callback(struct l7vs_iomux *iom ) "
764 /*------ DEBUG LOG END ------*/
768 case iomux_conn_sending_busy:
769 if (!l7vs_conn_sending(iom, conn->riom)) {
770 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,13, "error / cl_callback/sending_busy failed");
771 l7vs_conn_destroy(conn);
772 /*-------- DEBUG LOG --------*/
773 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
774 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,96,
775 "out_function: static int l7vs_conn_cl_callback(struct l7vs_iomux *iom ) "
778 /*------ DEBUG LOG END ------*/
783 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,14, "error / invalid status(%d)", iom->status);
784 l7vs_conn_destroy(conn);
785 /*-------- DEBUG LOG --------*/
786 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
787 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,97,
788 "out_function: static int l7vs_conn_cl_callback(struct l7vs_iomux *iom ) "
791 /*------ DEBUG LOG END ------*/
795 /*-------- DEBUG LOG --------*/
796 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
797 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,98,
798 "out_function: static int l7vs_conn_cl_callback(struct l7vs_iomux *iom ) "
801 /*------ DEBUG LOG END ------*/
808 * @param[in] iom connection iomux
814 l7vs_conn_client_receiving(struct l7vs_iomux *iom)
816 /*-------- DEBUG LOG --------*/
817 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
818 char iom_str[DEBUG_STR_LEN] = {0};
819 l7vs_iomux_c_str(iom_str, iom);
820 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,99,
821 "in_function: static int l7vs_conn_client_receiving(struct l7vs_iomux *iom) "
825 /*------ DEBUG LOG END ------*/
826 struct l7vs_conn *conn = NULL;
827 struct l7vs_service *srv = NULL;
828 struct l7vs_dest *dest = NULL;
831 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,32, "error / iom is null");
832 /*-------- DEBUG LOG --------*/
833 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
834 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,100,
835 "out_function: static int l7vs_conn_client_receiving(struct l7vs_iomux *iom) "
838 /*------ DEBUG LOG END ------*/
842 if (iomux_conn_receiving != iom->status) {
843 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,33, "error / invalid status(%d)", iom->status);
844 /*-------- DEBUG LOG --------*/
845 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
846 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,101,
847 "out_function: static int l7vs_conn_client_receiving(struct l7vs_iomux *iom) "
850 /*------ DEBUG LOG END ------*/
854 conn = (struct l7vs_conn *)iom->data;
855 /*-------- DEBUG LOG --------*/
856 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
857 char conn_str[DEBUG_STR_LEN] = {0};
858 l7vs_conn_c_str(conn_str, conn);
859 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,102,
860 "pointer_assign: conn=%s",
863 /*------ DEBUG LOG END ------*/
865 // when the real server is not set in read-blocked
866 if (iomux_conn_block != conn->riom->status && iomux_conn_busy != conn->riom->status) {
867 // set the real server in read-blocked
868 /*-------- DEBUG LOG --------*/
869 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
870 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,103,
871 "conn->riom->status change: %d->%d",
872 conn->riom->status, iomux_conn_block);
874 /*------ DEBUG LOG END ------*/
875 conn->riom->status = iomux_conn_block;
878 // receive client data
879 if (!l7vs_conn_recv(iom, iom->fd)) {
880 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,15, "error / recv failed");
881 /*-------- DEBUG LOG --------*/
882 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
883 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,104,
884 "out_function: static int l7vs_conn_client_receiving(struct l7vs_iomux *iom) "
887 /*------ DEBUG LOG END ------*/
890 switch (iom->status) {
891 case iomux_conn_receiving:
892 // data still remain, epoll re-registration for read
893 l7vs_iomux_mod(iom, iom_read);
895 case iomux_conn_received:
896 // all data is received, service is selected by using the received data
897 if (!l7vs_conn_is_rs_connected(iom, conn, &srv, &dest)) {
898 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,16, "error / is realserver connected failed");
899 /*-------- DEBUG LOG --------*/
900 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
901 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,105,
902 "out_function: static int l7vs_conn_client_receiving(struct l7vs_iomux *iom) "
905 /*------ DEBUG LOG END ------*/
908 switch (iom->status) {
909 case iomux_conn_block:
910 //already decided real server
911 /*-------- DEBUG LOG --------*/
912 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
913 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,106,
914 "out_function: static int l7vs_conn_client_receiving(struct l7vs_iomux *iom) "
917 /*------ DEBUG LOG END ------*/
919 case iomux_conn_service_selected:
920 //service and destination were selected then attempt to connect the real server
921 if (!l7vs_conn_connection_establish(iom, conn, srv, dest)) {
922 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,17, "error / client connect rs failed");
923 /*-------- DEBUG LOG --------*/
924 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
925 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,107,
926 "out_function: static int l7vs_conn_client_receiving(struct l7vs_iomux *iom) "
929 /*------ DEBUG LOG END ------*/
932 l7vs_conn_QoS_recvsize_register( conn, conn->cldata_len, QOS_UP );
936 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,34, "error / invalid status(%d)", iom->status);
937 /*-------- DEBUG LOG --------*/
938 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
939 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,108,
940 "out_function: static int l7vs_conn_client_receiving(struct l7vs_iomux *iom) "
943 /*------ DEBUG LOG END ------*/
947 case iomux_conn_disconnected:
948 // client connection was disconnected
952 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,35, "error / invalid status(%d)", iom->status);
953 /*-------- DEBUG LOG --------*/
954 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
955 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,109,
956 "out_function: static int l7vs_conn_client_receiving(struct l7vs_iomux *iom) "
959 /*------ DEBUG LOG END ------*/
962 /*-------- DEBUG LOG --------*/
963 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
964 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,110,
965 "out_function: static int l7vs_conn_client_receiving(struct l7vs_iomux *iom) "
968 /*------ DEBUG LOG END ------*/
973 * check realserver fd, and if real server not connected, call select_service function
975 * @param[in] iom connection_iomux
976 * @param[in] conn connection
977 * @param[out] srv service
978 * @param[out] dest destination(real server)
984 l7vs_conn_is_rs_connected(struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest)
986 /*-------- DEBUG LOG --------*/
987 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
988 char iom_str[DEBUG_STR_LEN] = {0};
989 char conn_str[DEBUG_STR_LEN] = {0};
990 char srv_str[DEBUG_STR_LEN] = {0};
991 char dest_str[DEBUG_STR_LEN] = {0};
992 l7vs_iomux_c_str(iom_str, iom);
993 l7vs_conn_c_str(conn_str, conn);
994 l7vs_service_c_str(srv_str, *srv);
995 l7vs_dest_c_str(dest_str, *dest);
996 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,111,
997 "in_function: static int l7vs_conn_is_rs_connected("
998 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
1003 iom_str, conn_str, srv_str, dest_str);
1005 /*------ DEBUG LOG END ------*/
1008 struct l7vs_dest *d; // destination for sorry-server
1009 int sorry_state; // sorry state
1011 struct l7vs_lsock *lsock = NULL;
1014 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,36, "error / iom is null");
1015 /*-------- DEBUG LOG --------*/
1016 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1017 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,112,
1018 "out_function: static int l7vs_conn_is_rs_connected("
1019 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
1022 /*------ DEBUG LOG END ------*/
1027 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,37, "error / conn is null");
1028 /*-------- DEBUG LOG --------*/
1029 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1030 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,113,
1031 "out_function: static int l7vs_conn_is_rs_connected("
1032 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
1035 /*------ DEBUG LOG END ------*/
1039 if (iomux_conn_received != iom->status) {
1040 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,38, "error / invalid status(%d)", iom->status);
1041 /*-------- DEBUG LOG --------*/
1042 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1043 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,114,
1044 "out_function: static int l7vs_conn_is_rs_connected("
1045 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
1048 /*------ DEBUG LOG END ------*/
1052 lsock = conn->lsock;
1053 /*-------- DEBUG LOG --------*/
1054 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1055 char lsock_str[DEBUG_STR_LEN] = {0};
1056 l7vs_lsock_c_str(lsock_str, lsock);
1057 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,115,
1058 "pointer_assign: lsock=%s",
1061 /*------ DEBUG LOG END ------*/
1063 //is real server connected?
1064 if (-1 != conn->riom->fd) {
1065 // check sorry status of service
1066 // argment 0 means no connection count check
1067 sorry_state = l7vs_sched_sorry_check(conn->srv, 0);
1069 // check connect to sorry-server now
1070 if (!conn->sorry_conn_flag) {
1071 // get sorry-server destination (argment 0)
1072 d = l7vs_sched_sorry_dest(conn->srv, conn, 0);
1073 /*-------- DEBUG LOG --------*/
1074 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1075 char sorry_dest_str1[DEBUG_STR_LEN] = {0};
1076 l7vs_dest_c_str(sorry_dest_str1, d);
1077 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,116,
1078 "pointer_assign: d=%s",
1081 /*------ DEBUG LOG END ------*/
1083 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,18, "error / sorry-server dest NG");
1084 /*-------- DEBUG LOG --------*/
1085 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1086 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,117,
1087 "iom->status change: %d->%d",
1088 iom->status, iomux_conn_rs_connect_error);
1090 /*------ DEBUG LOG END ------*/
1091 iom->status = iomux_conn_rs_connect_error;
1092 /*-------- DEBUG LOG --------*/
1093 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1094 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,118,
1095 "out_function: static int l7vs_conn_is_rs_connected("
1096 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
1099 /*------ DEBUG LOG END ------*/
1102 conn->old_dest = conn->dest;
1103 /*-------- DEBUG LOG --------*/
1104 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1105 char old_dest_str[DEBUG_STR_LEN] = {0};
1106 l7vs_dest_c_str(old_dest_str, conn->old_dest);
1107 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,119,
1108 "pointer_assign: conn->old_dest=%s",
1111 /*------ DEBUG LOG END ------*/
1112 // change connection to sorry-server
1113 if (!l7vs_conn_change_connect_rs(conn, d)) {
1114 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,19, "error / change connection to Sorry NG");
1115 /*-------- DEBUG LOG --------*/
1116 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1117 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,120,
1118 "iom->status change: %d->%d",
1119 iom->status, iomux_conn_rs_connect_error);
1121 /*------ DEBUG LOG END ------*/
1122 iom->status = iomux_conn_rs_connect_error;
1123 /*-------- DEBUG LOG --------*/
1124 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1125 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,121,
1126 "out_function: static int l7vs_conn_is_rs_connected("
1127 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
1130 /*------ DEBUG LOG END ------*/
1133 conn->sorry_conn_flag = 1;
1136 // check connect to sorry-server now
1137 if (conn->sorry_conn_flag) {
1138 // get old real-server destination (argment 1)
1139 d = l7vs_sched_sorry_dest(conn->srv, conn, 1);
1140 /*-------- DEBUG LOG --------*/
1141 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1142 char sorry_dest_str2[DEBUG_STR_LEN] = {0};
1143 l7vs_dest_c_str(sorry_dest_str2, d);
1144 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,122,
1145 "pointer_assign: d=%s",
1148 /*------ DEBUG LOG END ------*/
1150 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,20, "error / old real-server dest NG");
1151 /*-------- DEBUG LOG --------*/
1152 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1153 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,123,
1154 "iom->status change: %d->%d",
1155 iom->status, iomux_conn_rs_connect_error);
1157 /*------ DEBUG LOG END ------*/
1158 iom->status = iomux_conn_rs_connect_error;
1159 /*-------- DEBUG LOG --------*/
1160 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1161 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,124,
1162 "out_function: static int l7vs_conn_is_rs_connected("
1163 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
1166 /*------ DEBUG LOG END ------*/
1169 // change connection to real-server
1170 if (!l7vs_conn_change_connect_rs(conn, d)) {
1171 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,21, "error / change connection to RS NG");
1172 /*-------- DEBUG LOG --------*/
1173 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1174 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,125,
1175 "iom->status change: %d->%d",
1176 iom->status, iomux_conn_rs_connect_error);
1178 /*------ DEBUG LOG END ------*/
1179 iom->status = iomux_conn_rs_connect_error;
1180 /*-------- DEBUG LOG --------*/
1181 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1182 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,126,
1183 "out_function: static int l7vs_conn_is_rs_connected("
1184 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
1187 /*------ DEBUG LOG END ------*/
1190 conn->sorry_conn_flag = 0;
1193 /*-------- DEBUG LOG --------*/
1194 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1195 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,127,
1196 "iom->status change: %d->%d",
1197 iom->status, iomux_conn_block);
1199 /*------ DEBUG LOG END ------*/
1200 iom->status = iomux_conn_block;
1201 if (iomux_conn_busy == conn->riom->status) {
1202 /*-------- DEBUG LOG --------*/
1203 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1204 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,128,
1205 "conn->riom->status change: %d->%d",
1206 conn->riom->status, iomux_conn_sending_busy);
1208 /*------ DEBUG LOG END ------*/
1209 conn->riom->status = iomux_conn_sending_busy;
1212 /*-------- DEBUG LOG --------*/
1213 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1214 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,129,
1215 "conn->riom->status change: %d->%d",
1216 conn->riom->status, iomux_conn_sending);
1218 /*------ DEBUG LOG END ------*/
1219 conn->riom->status = iomux_conn_sending;
1221 //epoll re-registration for write
1222 l7vs_iomux_mod(conn->riom, iom_write);
1226 ret = l7vs_lsock_select_service(lsock, conn, conn->cldata,
1227 conn->cldata_len, srv, dest);
1231 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,22, "error / no matching service found");
1232 /*-------- DEBUG LOG --------*/
1233 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1234 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,130,
1235 "iom->status change: %d->%d",
1236 iom->status, iomux_conn_receive_error);
1238 /*------ DEBUG LOG END ------*/
1239 iom->status = iomux_conn_receive_error;
1240 /*-------- DEBUG LOG --------*/
1241 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1242 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,131,
1243 "out_function: static int l7vs_conn_is_rs_connected("
1244 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
1247 /*------ DEBUG LOG END ------*/
1250 /*-------- DEBUG LOG --------*/
1251 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1252 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,132,
1253 "iom->status change: %d->%d",
1254 iom->status, iomux_conn_service_selected);
1256 /*------ DEBUG LOG END ------*/
1257 iom->status = iomux_conn_service_selected;
1260 // analyze and modify client data
1262 ret = conn->srv->pm->analyze_cldata(conn->srv, conn, conn->cldata, &conn->cldata_len);
1264 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_PROTOCOL,19,
1265 "Failed to modify client data: %d", ret);
1269 /*-------- DEBUG LOG --------*/
1270 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1271 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,133,
1272 "out_function: static int l7vs_conn_is_rs_connected("
1273 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service **srv, struct l7vs_dest **dest) "
1276 /*------ DEBUG LOG END ------*/
1281 * connecction establish
1283 * @param[in] iom connection_iomux
1284 * @param[in] conn connection
1285 * @param[in] srv service
1286 * @param[in] dest destination(real server)
1292 l7vs_conn_connection_establish(struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service *srv, struct l7vs_dest *dest)
1294 /*-------- DEBUG LOG --------*/
1295 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1296 char iom_str[DEBUG_STR_LEN] = {0};
1297 char conn_str[DEBUG_STR_LEN] = {0};
1298 char srv_str[DEBUG_STR_LEN] = {0};
1299 char dest_str[DEBUG_STR_LEN] = {0};
1300 l7vs_iomux_c_str(iom_str, iom);
1301 l7vs_conn_c_str(conn_str, conn);
1302 l7vs_service_c_str(srv_str, srv);
1303 l7vs_dest_c_str(dest_str, dest);
1304 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,134,
1305 "in_function: static int l7vs_conn_connection_establish("
1306 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service *srv, struct l7vs_dest *dest)"
1311 iom_str, conn_str, srv_str, dest_str);
1313 /*------ DEBUG LOG END ------*/
1317 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,39, "error / iom is null");
1318 /*-------- DEBUG LOG --------*/
1319 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1320 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,135,
1321 "out_function: static int l7vs_conn_connection_establish("
1322 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service *srv, struct l7vs_dest *dest)"
1325 /*------ DEBUG LOG END ------*/
1330 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,40, "error / conn is null");
1331 /*-------- DEBUG LOG --------*/
1332 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1333 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,136,
1334 "out_function: static int l7vs_conn_connection_establish("
1335 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service *srv, struct l7vs_dest *dest)"
1338 /*------ DEBUG LOG END ------*/
1343 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,41, "error / srv is null");
1344 /*-------- DEBUG LOG --------*/
1345 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1346 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,137,
1347 "out_function: static int l7vs_conn_connection_establish("
1348 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service *srv, struct l7vs_dest *dest)"
1351 /*------ DEBUG LOG END ------*/
1356 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,42, "error / dest is null");
1357 /*-------- DEBUG LOG --------*/
1358 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1359 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,138,
1360 "out_function: static int l7vs_conn_connection_establish("
1361 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service *srv, struct l7vs_dest *dest)"
1364 /*------ DEBUG LOG END ------*/
1368 if (iom->status != iomux_conn_service_selected) {
1369 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,43, "error / invalid status(%d)", iom->status);
1370 /*-------- DEBUG LOG --------*/
1371 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1372 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,139,
1373 "out_function: static int l7vs_conn_connection_establish("
1374 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service *srv, struct l7vs_dest *dest)"
1377 /*------ DEBUG LOG END ------*/
1381 // connect to real server
1382 if (!l7vs_conn_connect_rs(conn, dest)) {
1383 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,23, "error / connect rs failed");
1384 /*-------- DEBUG LOG --------*/
1385 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1386 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,140,
1387 "iom->status change: %d->%d",
1388 iom->status, iomux_conn_rs_connect_error);
1390 /*------ DEBUG LOG END ------*/
1391 iom->status = iomux_conn_rs_connect_error;
1392 /*-------- DEBUG LOG --------*/
1393 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1394 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,141,
1395 "out_function: static int l7vs_conn_connection_establish("
1396 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service *srv, struct l7vs_dest *dest)"
1399 /*------ DEBUG LOG END ------*/
1402 /*-------- DEBUG LOG --------*/
1403 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1404 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,142,
1405 "iom->status change: %d->%d",
1406 iom->status, iomux_conn_rs_connected);
1408 /*------ DEBUG LOG END ------*/
1409 iom->status = iomux_conn_rs_connected;
1411 // set pointer for cross reference
1413 /*-------- DEBUG LOG --------*/
1414 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1415 char service_str[DEBUG_STR_LEN] = {0};
1416 l7vs_service_c_str(service_str, conn->srv);
1417 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,143,
1418 "pointer_assign: conn->srv=%s",
1421 /*------ DEBUG LOG END ------*/
1422 l7vs_service_register_conn(srv, conn);
1424 // service establish
1425 ret = l7vs_service_establish(conn->srv, conn);
1427 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,24, "error / service establish failed");
1428 /*-------- DEBUG LOG --------*/
1429 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1430 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,144,
1431 "iom->status change: %d->%d",
1432 iom->status, iomux_conn_rs_connect_error);
1434 /*------ DEBUG LOG END ------*/
1435 iom->status = iomux_conn_rs_connect_error;
1436 /*-------- DEBUG LOG --------*/
1437 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1438 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,145,
1439 "out_function: static int l7vs_conn_connection_establish("
1440 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service *srv, struct l7vs_dest *dest)"
1443 /*------ DEBUG LOG END ------*/
1448 /*-------- DEBUG LOG --------*/
1449 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1450 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,146,
1451 "iom->status change: %d->%d",
1452 iom->status, iomux_conn_block);
1454 /*------ DEBUG LOG END ------*/
1455 iom->status = iomux_conn_block;
1456 /*-------- DEBUG LOG --------*/
1457 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1458 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,147,
1459 "conn->riom->status change: %d->%d",
1460 conn->riom->status, iomux_conn_sending);
1462 /*------ DEBUG LOG END ------*/
1463 conn->riom->status = iomux_conn_sending;
1465 /*-------- DEBUG LOG --------*/
1466 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1467 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,148,
1468 "out_function: static int l7vs_conn_connection_establish("
1469 "struct l7vs_iomux *iom, struct l7vs_conn *conn, struct l7vs_service *srv, struct l7vs_dest *dest)"
1472 /*------ DEBUG LOG END ------*/
1478 * when block status, arrived data turn next epoll reaction
1479 * and changes state to busy, expect the another iom is already busy
1481 * @param[in] iom connection_iomux
1482 * @param[in] another_iom another side's iomux
1488 l7vs_conn_block(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom)
1490 /*-------- DEBUG LOG --------*/
1491 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1492 char iom_str[DEBUG_STR_LEN] = {0};
1493 char a_iom_str[DEBUG_STR_LEN] = {0};
1494 l7vs_iomux_c_str(iom_str, iom);
1495 l7vs_iomux_c_str(a_iom_str, another_iom);
1496 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,149,
1497 "in_function: static int l7vs_conn_block(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1500 iom_str, a_iom_str);
1502 /*------ DEBUG LOG END ------*/
1505 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,44, "error / iom is null");
1506 /*-------- DEBUG LOG --------*/
1507 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1508 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,150,
1509 "out_function: static int l7vs_conn_block(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1512 /*------ DEBUG LOG END ------*/
1517 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,45, "error / another_iom is null");
1518 /*-------- DEBUG LOG --------*/
1519 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1520 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,151,
1521 "out_function: static int l7vs_conn_block(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1524 /*------ DEBUG LOG END ------*/
1528 if (iomux_conn_block != iom->status) {
1529 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,46, "error / invalid status(%d)", iom->status);
1530 /*-------- DEBUG LOG --------*/
1531 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1532 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,152,
1533 "out_function: static int l7vs_conn_block(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1536 /*------ DEBUG LOG END ------*/
1540 // epoll re-registraion for read
1541 l7vs_iomux_mod(iom, iom_read);
1543 // when another iom status is busy, do not change my status
1544 if (iomux_conn_busy != another_iom->status &&
1545 iomux_conn_sending_busy != another_iom->status &&
1546 iomux_conn_sent_busy != another_iom->status) {
1547 /*-------- DEBUG LOG --------*/
1548 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1549 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,153,
1550 "iom->status change: %d->%d",
1551 iom->status, iomux_conn_busy);
1553 /*------ DEBUG LOG END ------*/
1554 iom->status = iomux_conn_busy;
1557 /*-------- DEBUG LOG --------*/
1558 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1559 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,154,
1560 "out_function: static int l7vs_conn_block(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1563 /*------ DEBUG LOG END ------*/
1569 * when busy status, arrived data turn next epoll reaction and status keep busy
1571 * @param[in] iom connection_iomux
1577 l7vs_conn_busy(struct l7vs_iomux *iom)
1579 /*-------- DEBUG LOG --------*/
1580 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1581 char iom_str[DEBUG_STR_LEN] = {0};
1582 l7vs_iomux_c_str(iom_str, iom);
1583 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,155,
1584 "in_function: static int l7vs_conn_busy(struct l7vs_iomux *iom) "
1588 /*------ DEBUG LOG END ------*/
1591 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,47, "error / iom is null");
1592 /*-------- DEBUG LOG --------*/
1593 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1594 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,156,
1595 "out_function: static int l7vs_conn_busy(struct l7vs_iomux *iom) "
1598 /*------ DEBUG LOG END ------*/
1602 if (iomux_conn_busy != iom->status) {
1603 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,48, "error / invalid status(%d)", iom->status);
1604 /*-------- DEBUG LOG --------*/
1605 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1606 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,157,
1607 "out_function: static int l7vs_conn_busy(struct l7vs_iomux *iom) "
1610 /*------ DEBUG LOG END ------*/
1614 //epoll re-registration for read
1615 // l7vs_iomux_mod(iom, iom_read);
1617 /*-------- DEBUG LOG --------*/
1618 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1619 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,158,
1620 "out_function: static int l7vs_conn_busy(struct l7vs_iomux *iom) "
1623 /*------ DEBUG LOG END ------*/
1630 * @param[in] iom connection_iomux
1631 * @param[in] another_iom another side's iomux
1637 l7vs_conn_sending(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom)
1639 /*-------- DEBUG LOG --------*/
1640 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1641 char iom_str[DEBUG_STR_LEN] = {0};
1642 char a_iom_str[DEBUG_STR_LEN] = {0};
1643 l7vs_iomux_c_str(iom_str, iom);
1644 l7vs_iomux_c_str(a_iom_str, another_iom);
1645 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,159,
1646 "in_function: static int l7vs_conn_sending(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1649 iom_str, a_iom_str);
1651 /*------ DEBUG LOG END ------*/
1654 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,49, "error / iom is null");
1655 /*-------- DEBUG LOG --------*/
1656 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1657 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,160,
1658 "out_function: static int l7vs_conn_sending(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1661 /*------ DEBUG LOG END ------*/
1666 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,50, "error / another_iom is null");
1667 /*-------- DEBUG LOG --------*/
1668 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1669 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,161,
1670 "out_function: static int l7vs_conn_sending(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1673 /*------ DEBUG LOG END ------*/
1677 if (iomux_conn_sending != iom->status && iomux_conn_sending_busy != iom->status) {
1678 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,51, "error / invalid status(%d)", iom->status);
1679 /*-------- DEBUG LOG --------*/
1680 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1681 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,162,
1682 "out_function: static int l7vs_conn_sending(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1685 /*------ DEBUG LOG END ------*/
1689 // send to handling iom
1690 if (!l7vs_conn_send(iom, iom->fd)) {
1691 iom->status = iomux_conn_send_error;
1692 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,25, "error / send failed");
1693 /*-------- DEBUG LOG --------*/
1694 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1695 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,163,
1696 "out_function: static int l7vs_conn_sending(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1699 /*------ DEBUG LOG END ------*/
1702 if (iomux_conn_sent == iom->status || iomux_conn_sent_busy == iom->status) {
1703 // when all data was sent, select the next state
1704 if (!l7vs_conn_sent_next_state(another_iom, iom)) {
1705 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,26, "error / send next state failed");
1706 /*-------- DEBUG LOG --------*/
1707 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1708 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,164,
1709 "out_function: static int l7vs_conn_sending(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1712 /*------ DEBUG LOG END ------*/
1715 if (iomux_conn_receiving != iom->status && iomux_conn_block != iom->status) {
1716 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,52, "error / invalid status(%d)", iom->status);
1717 /*-------- DEBUG LOG --------*/
1718 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1719 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,165,
1720 "out_function: static int l7vs_conn_sending(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1723 /*------ DEBUG LOG END ------*/
1727 else if (iomux_conn_sending == iom->status || iomux_conn_sending_busy == iom->status) {
1728 // data still remain
1729 // epoll re-registration for write
1730 l7vs_iomux_mod(iom, iom_write);
1733 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,53, "error / invalid status(%d)", iom->status);
1734 /*-------- DEBUG LOG --------*/
1735 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1736 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,166,
1737 "out_function: static int l7vs_conn_sending(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1740 /*------ DEBUG LOG END ------*/
1744 /*-------- DEBUG LOG --------*/
1745 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1746 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,167,
1747 "out_function: static int l7vs_conn_sending(struct l7vs_iomux *iom, struct l7vs_iomux *another_iom) "
1750 /*------ DEBUG LOG END ------*/
1755 * decide sent next state
1757 * @param[in,out] src_iom source connection_iomux
1758 * @param[in,out] dest_iom destionation connection_iomux
1764 l7vs_conn_sent_next_state(struct l7vs_iomux *src_iom, struct l7vs_iomux *dest_iom)
1766 /*-------- DEBUG LOG --------*/
1767 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1768 char s_iom_str[DEBUG_STR_LEN] = {0};
1769 char d_iom_str[DEBUG_STR_LEN] = {0};
1770 l7vs_iomux_c_str(s_iom_str, src_iom);
1771 l7vs_iomux_c_str(d_iom_str, dest_iom);
1772 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,168,
1773 "in_function: static int l7vs_conn_sent_next_state(struct l7vs_iomux *src_iom, struct l7vs_iomux *dest_iom) "
1776 s_iom_str, d_iom_str);
1778 /*------ DEBUG LOG END ------*/
1781 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,54, "error / src_iom is null");
1782 /*-------- DEBUG LOG --------*/
1783 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1784 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,169,
1785 "out_function: static int l7vs_conn_sent_next_state(struct l7vs_iomux *src_iom, struct l7vs_iomux *dest_iom) "
1788 /*------ DEBUG LOG END ------*/
1792 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,55, "error / dest_iom is null");
1793 /*-------- DEBUG LOG --------*/
1794 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1795 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,170,
1796 "out_function: static int l7vs_conn_sent_next_state(struct l7vs_iomux *src_iom, struct l7vs_iomux *dest_iom) "
1799 /*------ DEBUG LOG END ------*/
1803 // when writing, the dest_status will be "sent" or "sent_busy"
1804 if (iomux_conn_sent != dest_iom->status && iomux_conn_sent_busy != dest_iom->status) {
1805 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,56, "error / invalid dest status(%d)", dest_iom->status);
1806 /*-------- DEBUG LOG --------*/
1807 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1808 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,171,
1809 "out_function: static int l7vs_conn_sent_next_state(struct l7vs_iomux *src_iom, struct l7vs_iomux *dest_iom) "
1812 /*------ DEBUG LOG END ------*/
1815 // and the src_status will be "block" or "busy"
1816 if (iomux_conn_block != src_iom->status && iomux_conn_busy != src_iom->status) {
1817 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,57, "error / invalid src status(%d)", src_iom->status);
1818 /*-------- DEBUG LOG --------*/
1819 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1820 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,172,
1821 "out_function: static int l7vs_conn_sent_next_state(struct l7vs_iomux *src_iom, struct l7vs_iomux *dest_iom) "
1824 /*------ DEBUG LOG END ------*/
1828 // decide the next state
1829 if (iomux_conn_sent_busy == dest_iom->status) {
1830 // when receiving from source, request come to the destination, then destination has priority
1831 /*-------- DEBUG LOG --------*/
1832 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1833 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,173,
1834 "src_iom->status change: %d->%d",
1835 src_iom->status, iomux_conn_block);
1837 /*------ DEBUG LOG END ------*/
1838 src_iom->status = iomux_conn_block;
1839 /*-------- DEBUG LOG --------*/
1840 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1841 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,174,
1842 "dest_iom->status change: %d->%d",
1843 dest_iom->status, iomux_conn_receiving);
1845 /*------ DEBUG LOG END ------*/
1846 dest_iom->status = iomux_conn_receiving;
1848 else if (iomux_conn_busy == src_iom->status) {
1849 // when sending to destination, request come to the source, then source has priority
1850 /*-------- DEBUG LOG --------*/
1851 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1852 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,175,
1853 "src_iom->status change: %d->%d",
1854 src_iom->status, iomux_conn_receiving);
1856 /*------ DEBUG LOG END ------*/
1857 src_iom->status = iomux_conn_receiving;
1858 /*-------- DEBUG LOG --------*/
1859 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1860 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,176,
1861 "dest_iom->status change: %d->%d",
1862 dest_iom->status, iomux_conn_block);
1864 /*------ DEBUG LOG END ------*/
1865 dest_iom->status = iomux_conn_block;
1868 // request come to neither source nor destnation, ready to read both
1869 /*-------- DEBUG LOG --------*/
1870 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1871 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,177,
1872 "src_iom->status change: %d->%d",
1873 src_iom->status, iomux_conn_receiving);
1875 /*------ DEBUG LOG END ------*/
1876 src_iom->status = iomux_conn_receiving;
1877 /*-------- DEBUG LOG --------*/
1878 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1879 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,178,
1880 "dest_iom->status change: %d->%d",
1881 dest_iom->status, iomux_conn_receiving);
1883 /*------ DEBUG LOG END ------*/
1884 dest_iom->status = iomux_conn_receiving;
1886 l7vs_iomux_mod(src_iom, iom_read);
1887 l7vs_iomux_mod(dest_iom, iom_read);
1889 /*-------- DEBUG LOG --------*/
1890 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1891 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,179,
1892 "out_function: static int l7vs_conn_sent_next_state(struct l7vs_iomux *src_iom, struct l7vs_iomux *dest_iom) "
1895 /*------ DEBUG LOG END ------*/
1900 * realserver connection callback
1902 * @param[in] iom connection iomux
1908 l7vs_conn_rs_callback(struct l7vs_iomux *iom)
1910 /*-------- DEBUG LOG --------*/
1911 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1912 char iom_str[DEBUG_STR_LEN] = {0};
1913 l7vs_iomux_c_str(iom_str, iom);
1914 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,180,
1915 "in_function: static int l7vs_conn_rs_callback(struct l7vs_iomux *iom) "
1919 /*------ DEBUG LOG END ------*/
1920 struct l7vs_conn* conn = NULL;
1923 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,58, "error / iom is null");
1924 /*-------- DEBUG LOG --------*/
1925 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1926 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,181,
1927 "out_function: static int l7vs_conn_rs_callback(struct l7vs_iomux *iom) "
1930 /*------ DEBUG LOG END ------*/
1934 conn = (struct l7vs_conn *)iom->data;
1935 /*-------- DEBUG LOG --------*/
1936 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1937 char conn_str[DEBUG_STR_LEN] = {0};
1938 l7vs_conn_c_str(conn_str, conn);
1939 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,182,
1940 "pointer_assign: conn=%s",
1943 /*------ DEBUG LOG END ------*/
1945 // invalid status check
1946 if (iomux_conn_receiving != iom->status &&
1947 iomux_conn_block != iom->status &&
1948 iomux_conn_busy != iom->status &&
1949 iomux_conn_sending != iom->status &&
1950 iomux_conn_sending_busy != iom->status) {
1951 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,59, "error / invalid status(%d)", iom->status);
1952 l7vs_conn_destroy(conn);
1953 /*-------- DEBUG LOG --------*/
1954 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1955 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,183,
1956 "out_function: static int l7vs_conn_rs_callback(struct l7vs_iomux *iom) "
1959 /*------ DEBUG LOG END ------*/
1963 // switch by current status
1964 switch (iom->status) {
1965 case iomux_conn_receiving:
1966 if (!l7vs_conn_realserver_receiving(iom)) {
1967 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,27, "error / rs_callback/realserver receiving failed");
1968 l7vs_conn_destroy(conn);
1969 /*-------- DEBUG LOG --------*/
1970 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1971 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,184,
1972 "out_function: static int l7vs_conn_rs_callback(struct l7vs_iomux *iom) "
1975 /*------ DEBUG LOG END ------*/
1978 if (iomux_conn_disconnected == iom->status) {
1979 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1980 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,185, "realserver connection disconnected");
1982 l7vs_conn_destroy(conn);
1985 case iomux_conn_block:
1986 if (!l7vs_conn_block(iom, conn->ciom)) {
1987 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,28, "error / rs_callback/block failed");
1988 l7vs_conn_destroy(conn);
1989 /*-------- DEBUG LOG --------*/
1990 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
1991 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,186,
1992 "out_function: static int l7vs_conn_rs_callback(struct l7vs_iomux *iom) "
1995 /*------ DEBUG LOG END ------*/
1999 case iomux_conn_busy:
2000 if (!l7vs_conn_busy(iom)) {
2001 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,29, "error / rs_callback/busy failed");
2002 l7vs_conn_destroy(conn);
2003 /*-------- DEBUG LOG --------*/
2004 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2005 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,187,
2006 "out_function: static int l7vs_conn_rs_callback(struct l7vs_iomux *iom) "
2009 /*------ DEBUG LOG END ------*/
2013 case iomux_conn_sending:
2014 if (!l7vs_conn_sending(iom, conn->ciom)) {
2015 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,30, "error / rs_callback/sending failed");
2016 l7vs_conn_destroy(conn);
2017 /*-------- DEBUG LOG --------*/
2018 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2019 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,188,
2020 "out_function: static int l7vs_conn_rs_callback(struct l7vs_iomux *iom) "
2023 /*------ DEBUG LOG END ------*/
2027 case iomux_conn_sending_busy:
2028 if (!l7vs_conn_sending(iom, conn->ciom)) {
2029 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,31, "error / rs_callback/sending_busy failed");
2030 l7vs_conn_destroy(conn);
2031 /*-------- DEBUG LOG --------*/
2032 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2033 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,189,
2034 "out_function: static int l7vs_conn_rs_callback(struct l7vs_iomux *iom) "
2037 /*------ DEBUG LOG END ------*/
2042 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,60, "error / invalid status(%d)", iom->status);
2043 l7vs_conn_destroy(conn);
2044 /*-------- DEBUG LOG --------*/
2045 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2046 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,190,
2047 "out_function: static int l7vs_conn_rs_callback(struct l7vs_iomux *iom) "
2050 /*------ DEBUG LOG END ------*/
2054 /*-------- DEBUG LOG --------*/
2055 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2056 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,191,
2057 "out_function: static int l7vs_conn_rs_callback(struct l7vs_iomux *iom) "
2060 /*------ DEBUG LOG END ------*/
2065 * realserver receiving
2067 * @param[in] iom connection iomux
2073 l7vs_conn_realserver_receiving(struct l7vs_iomux *iom)
2075 /*-------- DEBUG LOG --------*/
2076 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2077 char iom_str[DEBUG_STR_LEN] = {0};
2078 l7vs_iomux_c_str(iom_str, iom);
2079 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,192,
2080 "in_function: static int l7vs_conn_realserver_receiving(struct l7vs_iomux *iom) "
2084 /*------ DEBUG LOG END ------*/
2086 struct l7vs_conn *conn = NULL;
2089 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,61, "error / iom is null");
2090 /*-------- DEBUG LOG --------*/
2091 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2092 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,193,
2093 "out_function: static int l7vs_conn_realserver_receiving(struct l7vs_iomux *iom) "
2096 /*------ DEBUG LOG END ------*/
2100 if (iomux_conn_receiving != iom->status) {
2101 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,62, "error / invalid status(%d)", iom->status);
2102 /*-------- DEBUG LOG --------*/
2103 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2104 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,194,
2105 "out_function: static int l7vs_conn_realserver_receiving(struct l7vs_iomux *iom) "
2108 /*------ DEBUG LOG END ------*/
2112 conn = (struct l7vs_conn *)iom->data;
2113 /*-------- DEBUG LOG --------*/
2114 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2115 char conn_str[DEBUG_STR_LEN] = {0};
2116 l7vs_conn_c_str(conn_str, conn);
2117 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,195,
2118 "pointer_assign: conn=%s",
2121 /*------ DEBUG LOG END ------*/
2123 // when the client is not set in read-blocked
2124 if (iomux_conn_block != conn->ciom->status && iomux_conn_busy != conn->ciom->status) {
2125 // set the real server in read-blocked
2126 /*-------- DEBUG LOG --------*/
2127 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2128 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,196,
2129 "conn->ciom->status change: %d->%d",
2130 conn->ciom->status, iomux_conn_block);
2132 /*------ DEBUG LOG END ------*/
2133 conn->ciom->status = iomux_conn_block;
2136 // receive realserver data
2137 if (!l7vs_conn_recv(iom, iom->fd)) {
2138 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,32, "error / recv failed");
2139 /*-------- DEBUG LOG --------*/
2140 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2141 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,197,
2142 "out_function: static int l7vs_conn_realserver_receiving(struct l7vs_iomux *iom) "
2145 /*------ DEBUG LOG END ------*/
2148 switch (iom->status) {
2149 case iomux_conn_receiving:
2150 // data still remain, epoll re-registration for read
2151 l7vs_iomux_mod(iom, iom_read);
2153 case iomux_conn_received:
2154 // all data is received, append the session infomation
2155 if (!l7vs_conn_realserver_modify_data(iom)) {
2156 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,33, "error / realserver modify data failed");
2157 /*-------- DEBUG LOG --------*/
2158 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2159 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,198,
2160 "out_function: static int l7vs_conn_realserver_receiving(struct l7vs_iomux *iom) "
2163 /*------ DEBUG LOG END ------*/
2166 /*-------- DEBUG LOG --------*/
2167 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2168 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,199,
2169 "iom->status change: %d->%d",
2170 iom->status, iomux_conn_block);
2172 /*------ DEBUG LOG END ------*/
2173 iom->status = iomux_conn_block;
2174 if (iomux_conn_busy == conn->ciom->status) {
2175 /*-------- DEBUG LOG --------*/
2176 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2177 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,200,
2178 "conn->ciom->status change: %d->%d",
2179 conn->ciom->status, iomux_conn_sending_busy);
2181 /*------ DEBUG LOG END ------*/
2182 conn->ciom->status = iomux_conn_sending_busy;
2184 /*-------- DEBUG LOG --------*/
2185 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2186 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,201,
2187 "conn->ciom->status change: %d->%d",
2188 conn->ciom->status, iomux_conn_sending);
2190 /*------ DEBUG LOG END ------*/
2191 conn->ciom->status = iomux_conn_sending;
2193 //epoll re-registration for write
2194 l7vs_iomux_mod(conn->ciom, iom_write);
2195 case iomux_conn_disconnected:
2196 // client connection was disconnected
2200 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,63, "error / invalid status(%d)", iom->status);
2201 /*-------- DEBUG LOG --------*/
2202 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2203 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,202,
2204 "out_function: static int l7vs_conn_realserver_receiving(struct l7vs_iomux *iom) "
2207 /*------ DEBUG LOG END ------*/
2211 /*-------- DEBUG LOG --------*/
2212 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2213 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,203,
2214 "out_function: static int l7vs_conn_realserver_receiving(struct l7vs_iomux *iom) "
2217 /*------ DEBUG LOG END ------*/
2222 * realserver modify data
2224 * @param[in] iom connection iomux
2230 l7vs_conn_realserver_modify_data(struct l7vs_iomux *iom)
2232 /*-------- DEBUG LOG --------*/
2233 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2234 char iom_str[DEBUG_STR_LEN] = {0};
2235 l7vs_iomux_c_str(iom_str, iom);
2236 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,204,
2237 "in_function: static int l7vs_conn_realserver_modify_data(struct l7vs_iomux *iom) "
2241 /*------ DEBUG LOG END ------*/
2242 struct l7vs_conn *conn = NULL;
2243 char *newbuf = NULL;
2244 int (*relayf)(struct l7vs_service *, struct l7vs_conn *, char *, size_t *) = NULL;
2249 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,64, "error / iom is null");
2250 /*-------- DEBUG LOG --------*/
2251 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2252 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,205,
2253 "out_function: static int l7vs_conn_realserver_modify_data(struct l7vs_iomux *iom) "
2256 /*------ DEBUG LOG END ------*/
2260 if (iomux_conn_received != iom->status) {
2261 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,65, "error / invalid status(%d)", iom->status);
2262 /*-------- DEBUG LOG --------*/
2263 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2264 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,206,
2265 "out_function: static int l7vs_conn_realserver_modify_data(struct l7vs_iomux *iom) "
2268 /*------ DEBUG LOG END ------*/
2272 conn = (struct l7vs_conn *)iom->data;
2273 /*-------- DEBUG LOG --------*/
2274 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2275 char conn_str[DEBUG_STR_LEN] = {0};
2276 l7vs_conn_c_str(conn_str, conn);
2277 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,207,
2278 "pointer_assign: conn=%s",
2281 /*------ DEBUG LOG END ------*/
2283 //set the function pointer that modify the real server data
2285 relayf = conn->srv->pm->analyze_rsdata;
2286 /*-------- DEBUG LOG --------*/
2287 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2288 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,208,
2289 "pointer_assign: relayf=%p",
2292 /*------ DEBUG LOG END ------*/
2296 len_ret = conn->cldata_len;
2297 newbuf = (char *)realloc(conn->cldata, (conn->cldata_len + L7VS_PROTOMOD_MAX_ADD_BUFSIZE + 1));
2299 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,10, "error / realloc failed");
2300 iom->status = iomux_conn_buffer_realloc_error;
2301 /*-------- DEBUG LOG --------*/
2302 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2303 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,209,
2304 "out_function: static int l7vs_conn_realserver_modify_data(struct l7vs_iomux *iom) "
2307 /*------ DEBUG LOG END ------*/
2310 /*-------- DEBUG LOG --------*/
2311 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2312 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,210,
2313 "realloc: newbuf=%p: size=%zu",
2314 newbuf, (conn->cldata_len + L7VS_PROTOMOD_MAX_ADD_BUFSIZE + 1));
2316 /*------ DEBUG LOG END ------*/
2317 conn->cldata = newbuf;
2319 ret = (*relayf)(conn->srv, conn, conn->cldata, &len_ret);
2321 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,34, "error / analyze rsdata failed");
2322 /*-------- DEBUG LOG --------*/
2323 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2324 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,211,
2325 "iom->status change: %d->%d",
2326 iom->status, iomux_conn_rsdata_modify_error);
2328 /*------ DEBUG LOG END ------*/
2329 iom->status = iomux_conn_rsdata_modify_error;
2330 /*-------- DEBUG LOG --------*/
2331 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2332 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,212,
2333 "out_function: static int l7vs_conn_realserver_modify_data(struct l7vs_iomux *iom) "
2336 /*------ DEBUG LOG END ------*/
2339 if (L7VS_PROTOMOD_MAX_ADD_BUFSIZE < len_ret - conn->cldata_len) {
2340 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,35, "error / bufsize too long modified by protomod");
2341 /*-------- DEBUG LOG --------*/
2342 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2343 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,213,
2344 "iom->status change: %d->%d",
2345 iom->status, iomux_conn_rsdata_modify_error);
2347 /*------ DEBUG LOG END ------*/
2348 iom->status = iomux_conn_rsdata_modify_error;
2349 /*-------- DEBUG LOG --------*/
2350 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2351 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,214,
2352 "out_function: static int l7vs_conn_realserver_modify_data(struct l7vs_iomux *iom) "
2355 /*------ DEBUG LOG END ------*/
2359 conn->cldata_len = len_ret;
2362 /*-------- DEBUG LOG --------*/
2363 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2364 char modify_data[DEBUG_STR_LEN] = {0};
2365 l7vs_conn_dump_data(modify_data, conn->cldata, conn->cldata_len);
2366 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,215,
2370 /*------ DEBUG LOG END ------*/
2372 /*-------- DEBUG LOG --------*/
2373 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2374 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,216,
2375 "iom->status change: %d->%d",
2376 iom->status, iomux_conn_rsdata_modified);
2378 /*------ DEBUG LOG END ------*/
2379 iom->status = iomux_conn_rsdata_modified;
2380 /*-------- DEBUG LOG --------*/
2381 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2382 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,217,
2383 "out_function: static int l7vs_conn_realserver_modify_data(struct l7vs_iomux *iom) "
2386 /*------ DEBUG LOG END ------*/
2393 * @param[in] iom connection_iomux
2394 * @param[in] source_fd the filedescriptor to be read
2400 l7vs_conn_recv(struct l7vs_iomux *iom, int source_fd)
2402 /*-------- DEBUG LOG --------*/
2403 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2404 char iom_str[DEBUG_STR_LEN] = {0};
2405 l7vs_iomux_c_str(iom_str, iom);
2406 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,218,
2407 "in_function: static int l7vs_conn_recv(struct l7vs_iomux *iom, int source_fd) "
2410 iom_str, source_fd);
2412 /*------ DEBUG LOG END ------*/
2414 struct l7vs_conn *conn = NULL;
2415 char read_buf[l7vs_conn_read_bufsize];
2416 // char *newbuf = NULL;
2419 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,66, "error / iom is null");
2420 /*-------- DEBUG LOG --------*/
2421 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2422 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,219,
2423 "out_function: static int l7vs_conn_recv(struct l7vs_iomux *iom, int source_fd) "
2426 /*------ DEBUG LOG END ------*/
2430 if (0 > source_fd || INT_MAX == source_fd) {
2431 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,67, "error / source fd is not specified");
2432 /*-------- DEBUG LOG --------*/
2433 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2434 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,220,
2435 "out_function: static int l7vs_conn_recv(struct l7vs_iomux *iom, int source_fd) "
2438 /*------ DEBUG LOG END ------*/
2442 if (iomux_conn_receiving != iom->status) {
2443 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,68, "error / invalid status(%d)", iom->status);
2444 /*-------- DEBUG LOG --------*/
2445 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2446 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,221,
2447 "out_function: static int l7vs_conn_recv(struct l7vs_iomux *iom, int source_fd) "
2450 /*------ DEBUG LOG END ------*/
2454 conn = (struct l7vs_conn *)iom->data;
2455 /*-------- DEBUG LOG --------*/
2456 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2457 char conn_str[DEBUG_STR_LEN] = {0};
2458 l7vs_conn_c_str(conn_str, conn);
2459 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,222,
2460 "pointer_assign: conn=%s",
2463 /*------ DEBUG LOG END ------*/
2465 //QoS Control to server
2466 if( (source_fd == conn->ciom->fd) && !l7vs_conn_QoS_control( conn, QOS_UP ) ){
2467 /*-------- DEBUG LOG --------*/
2468 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2469 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,223,
2470 "iom->status change: %d->%d",
2471 iom->status, iomux_conn_receiving);
2473 /*------ DEBUG LOG END ------*/
2474 iom->status = iomux_conn_receiving;
2475 /*-------- DEBUG LOG --------*/
2476 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2477 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,224,
2478 "out_function: static int l7vs_conn_recv(struct l7vs_iomux *iom, int source_fd) "
2481 /*------ DEBUG LOG END ------*/
2484 //QoS Control to client
2485 if( (source_fd == conn->riom->fd) && !l7vs_conn_QoS_control( conn, QOS_DOWN ) ){
2486 /*-------- DEBUG LOG --------*/
2487 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2488 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,346,
2489 "iom->status change: %d->%d",
2490 iom->status, iomux_conn_receiving);
2492 /*------ DEBUG LOG END ------*/
2493 iom->status = iomux_conn_receiving;
2494 /*-------- DEBUG LOG --------*/
2495 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2496 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,347,
2497 "out_function: static int l7vs_conn_recv(struct l7vs_iomux *iom, int source_fd) "
2500 /*------ DEBUG LOG END ------*/
2504 /*-------- DEBUG LOG --------*/
2505 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2506 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,225,
2507 "recv param: source_fd=%d: len=%d: flags=%d",
2508 source_fd, (l7vs_conn_read_bufsize - 1), 0);
2510 /*------ DEBUG LOG END ------*/
2511 ret = recv(source_fd, read_buf, (l7vs_conn_read_bufsize - 1), 0);
2512 /*-------- DEBUG LOG --------*/
2513 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2514 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,226,
2515 "recv result: ret=%d",
2518 /*------ DEBUG LOG END ------*/
2519 /*-------- DEBUG LOG --------*/
2520 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2521 char recv_data[DEBUG_STR_LEN] = {0};
2522 l7vs_conn_dump_data(recv_data, read_buf, ret);
2523 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,227,
2527 /*------ DEBUG LOG END ------*/
2530 if (EAGAIN != errno) {
2531 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,12, "error / recv error(%s)", strerror(errno));
2532 /*-------- DEBUG LOG --------*/
2533 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2534 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,228,
2535 "iom->status change: %d->%d",
2536 iom->status, iomux_conn_receive_error);
2538 /*------ DEBUG LOG END ------*/
2539 iom->status = iomux_conn_receive_error;
2540 /*-------- DEBUG LOG --------*/
2541 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2542 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,229,
2543 "out_function: static int l7vs_conn_recv(struct l7vs_iomux *iom, int source_fd) "
2546 /*------ DEBUG LOG END ------*/
2549 /*-------- DEBUG LOG --------*/
2550 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2551 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,230,
2552 "out_function: static int l7vs_conn_recv(struct l7vs_iomux *iom, int source_fd) "
2555 /*------ DEBUG LOG END ------*/
2558 /*-------- DEBUG LOG --------*/
2559 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2560 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,231, "peer disconnected");
2561 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,232,
2562 "iom->status change: %d->%d",
2563 iom->status, iomux_conn_disconnected);
2565 /*------ DEBUG LOG END ------*/
2566 iom->status = iomux_conn_disconnected;
2567 /*-------- DEBUG LOG --------*/
2568 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2569 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,233,
2570 "out_function: static int l7vs_conn_recv(struct l7vs_iomux *iom, int source_fd) "
2573 /*------ DEBUG LOG END ------*/
2576 // reading data is finished
2577 /*-------- DEBUG LOG --------*/
2578 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2579 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,239,
2580 "iom->status change: %d->%d",
2581 iom->status, iomux_conn_received);
2583 /*------ DEBUG LOG END ------*/
2584 iom->status = iomux_conn_received;
2588 // register reveive information for QoS to server
2589 if( source_fd == conn->ciom->fd ){
2590 l7vs_conn_QoS_recvsize_register( conn, ret, QOS_UP );
2592 // register reveive information for QoS to client
2593 if( source_fd == conn->riom->fd ){
2594 l7vs_conn_QoS_recvsize_register( conn, ret, QOS_DOWN );
2596 // copy to conn_buffer
2597 memcpy(conn->cldata + conn->cldata_len, read_buf, ret);
2598 conn->cldata_len += ret;
2599 conn->cldata[conn->cldata_len] = '\0';
2601 /*-------- DEBUG LOG --------*/
2602 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2603 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,240,
2604 "out_function: static int l7vs_conn_recv(struct l7vs_iomux *iom, int source_fd) "
2607 /*------ DEBUG LOG END ------*/
2612 * pre-read whether next data exists
2614 * @param[in] iom connection iomux
2615 * @param[in] source_fd source file description
2621 l7vs_conn_preread(struct l7vs_iomux *iom, int source_fd)
2623 /*-------- DEBUG LOG --------*/
2624 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2625 char iom_str[DEBUG_STR_LEN] = {0};
2626 l7vs_iomux_c_str(iom_str, iom);
2627 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,241,
2628 "in_function: static int l7vs_conn_preread(struct l7vs_iomux *iom, int source_fd) "
2631 iom_str, source_fd);
2633 /*------ DEBUG LOG END ------*/
2634 int preread_ret = 0;
2635 char preread_buf[1] = {0};
2638 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,69, "error / iom is null");
2639 /*-------- DEBUG LOG --------*/
2640 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2641 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,242,
2642 "out_function: static int l7vs_conn_preread(struct l7vs_iomux *iom, int source_fd) "
2645 /*------ DEBUG LOG END ------*/
2649 if (-1 == source_fd) {
2650 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,70, "error / source fd is not specified");
2651 /*-------- DEBUG LOG --------*/
2652 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2653 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,243,
2654 "out_function: static int l7vs_conn_preread(struct l7vs_iomux *iom, int source_fd) "
2657 /*------ DEBUG LOG END ------*/
2661 if (iomux_conn_receiving != iom->status) {
2662 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,71, "error / invalid status(%d)", iom->status);
2663 /*-------- DEBUG LOG --------*/
2664 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2665 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,244,
2666 "out_function: static int l7vs_conn_preread(struct l7vs_iomux *iom, int source_fd) "
2669 /*------ DEBUG LOG END ------*/
2673 /*-------- DEBUG LOG --------*/
2674 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2675 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,245,
2676 "recv param: source_fd=%d: len=1: flags=MSG_PEEK",
2679 /*------ DEBUG LOG END ------*/
2680 preread_ret = recv(source_fd, preread_buf, 1, MSG_PEEK);
2681 /*-------- DEBUG LOG --------*/
2682 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2683 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,246,
2684 "recv result: preread_ret=%d",
2687 /*------ DEBUG LOG END ------*/
2688 /*-------- DEBUG LOG --------*/
2689 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2690 char recv_data[DEBUG_STR_LEN] = {0};
2691 l7vs_conn_dump_data(recv_data, preread_buf, preread_ret);
2692 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,247,
2696 /*------ DEBUG LOG END ------*/
2697 switch (preread_ret) {
2699 if (EAGAIN != errno) {
2700 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,13, "error / recv error(%s)", strerror(errno));
2701 /*-------- DEBUG LOG --------*/
2702 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2703 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,248,
2704 "iom->status change: %d->%d",
2705 iom->status, iomux_conn_receive_error);
2707 /*------ DEBUG LOG END ------*/
2708 iom->status = iomux_conn_receive_error;
2709 /*-------- DEBUG LOG --------*/
2710 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2711 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,249,
2712 "out_function: static int l7vs_conn_preread(struct l7vs_iomux *iom, int source_fd) "
2715 /*------ DEBUG LOG END ------*/
2718 // finished reading all data
2719 /*-------- DEBUG LOG --------*/
2720 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2721 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,250,
2722 "iom->status change: %d->%d",
2723 iom->status, iomux_conn_received);
2725 /*------ DEBUG LOG END ------*/
2726 iom->status = iomux_conn_received;
2729 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2730 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,251, "peer disconnected");
2732 /*-------- DEBUG LOG --------*/
2733 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2734 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,252,
2735 "iom->status change: %d->%d",
2736 iom->status, iomux_conn_disconnected);
2738 /*------ DEBUG LOG END ------*/
2739 iom->status = iomux_conn_disconnected;
2742 // the data that should be read remains
2743 // status does not change
2746 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_NETWORK,37, "error / preread error");
2747 /*-------- DEBUG LOG --------*/
2748 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2749 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,253,
2750 "out_function: static int l7vs_conn_preread(struct l7vs_iomux *iom, int source_fd) "
2753 /*------ DEBUG LOG END ------*/
2756 /*-------- DEBUG LOG --------*/
2757 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2758 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,254,
2759 "out_function: static int l7vs_conn_preread(struct l7vs_iomux *iom, int source_fd) "
2762 /*------ DEBUG LOG END ------*/
2769 * @param[in] iom connection_iomux
2770 * @param[in] dest_fd the filedescriptor to be write
2776 l7vs_conn_send(struct l7vs_iomux *iom, int dest_fd)
2778 /*-------- DEBUG LOG --------*/
2779 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2780 char iom_str[DEBUG_STR_LEN] = {0};
2781 l7vs_iomux_c_str(iom_str, iom);
2782 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,255,
2783 "in_function: static int l7vs_conn_send(struct l7vs_iomux *iom, int dest_fd) "
2788 /*------ DEBUG LOG END ------*/
2791 struct l7vs_conn *conn = NULL;
2792 char *newbuf = NULL;
2793 size_t sent_len = 0;
2796 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,72, "error / iom is null");
2797 /*-------- DEBUG LOG --------*/
2798 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2799 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,256,
2800 "out_function: static int l7vs_conn_send(struct l7vs_iomux *iom, int dest_fd) "
2803 /*------ DEBUG LOG END ------*/
2807 if (-1 == dest_fd) {
2808 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,73, "error / dest fd is not specified");
2809 /*-------- DEBUG LOG --------*/
2810 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2811 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,257,
2812 "out_function: static int l7vs_conn_send(struct l7vs_iomux *iom, int dest_fd) "
2815 /*------ DEBUG LOG END ------*/
2819 if (iomux_conn_sending != iom->status &&
2820 iomux_conn_sending_busy != iom->status) {
2821 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,74, "error / invalid status(%d)", iom->status);
2822 /*-------- DEBUG LOG --------*/
2823 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2824 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,258,
2825 "out_function: static int l7vs_conn_send(struct l7vs_iomux *iom, int dest_fd) "
2828 /*------ DEBUG LOG END ------*/
2832 conn = (struct l7vs_conn *)iom->data;
2833 /*-------- DEBUG LOG --------*/
2834 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2835 char conn_str[DEBUG_STR_LEN] = {0};
2836 l7vs_conn_c_str(conn_str, conn);
2837 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,259,
2838 "pointer_assign: conn=%s",
2841 /*------ DEBUG LOG END ------*/
2843 /*-------- DEBUG LOG --------*/
2844 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2845 char send_data[DEBUG_STR_LEN] = {0};
2846 l7vs_conn_dump_data(send_data, conn->cldata, conn->cldata_len);
2847 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,260,
2851 /*------ DEBUG LOG END ------*/
2853 /*-------- DEBUG LOG --------*/
2854 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2855 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,261,
2856 "send param: dest_fd=%d: len=%zu: flags=MSG_NOSIGNAL",
2857 dest_fd, conn->cldata_len);
2859 /*------ DEBUG LOG END ------*/
2860 ret = send(dest_fd, conn->cldata, conn->cldata_len, MSG_NOSIGNAL);
2861 /*-------- DEBUG LOG --------*/
2862 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2863 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,262,
2864 "send result: ret=%d",
2867 /*------ DEBUG LOG END ------*/
2869 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,14, "error / send error(%s)", strerror(errno));
2870 iom->status = iomux_conn_send_error;
2871 /*-------- DEBUG LOG --------*/
2872 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2873 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,263,
2874 "out_function: static int l7vs_conn_send(struct l7vs_iomux *iom, int dest_fd) "
2877 /*------ DEBUG LOG END ------*/
2881 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2882 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,264, "sent %zu bytes", sent_len);
2885 // decide the status
2886 if (conn->cldata_len == sent_len) {
2887 // finished sending all data
2888 if (iomux_conn_sending == iom->status) {
2889 /*-------- DEBUG LOG --------*/
2890 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2891 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,265,
2892 "iom->status change: %d->%d",
2893 iom->status, iomux_conn_sent);
2895 /*------ DEBUG LOG END ------*/
2896 iom->status = iomux_conn_sent;
2898 /*-------- DEBUG LOG --------*/
2899 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2900 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,266,
2901 "iom->status change: %d->%d",
2902 iom->status, iomux_conn_sent_busy);
2904 /*------ DEBUG LOG END ------*/
2905 iom->status = iomux_conn_sent_busy;
2907 //cldata memory realloc
2908 conn->cldata_len = 0;
2909 conn->cldata_bufsize = l7vs_conn_read_bufsize;
2910 newbuf = (char *)malloc(conn->cldata_bufsize);
2912 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,12, "error / malloc failed");
2913 iom->status = iomux_conn_send_error;
2914 /*-------- DEBUG LOG --------*/
2915 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2916 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,267,
2917 "out_function: static int l7vs_conn_send(struct l7vs_iomux *iom, int dest_fd) "
2920 /*------ DEBUG LOG END ------*/
2924 conn->cldata = newbuf;
2925 memset(conn->cldata, 0, l7vs_conn_read_bufsize);
2928 // shift data for next sending
2929 newbuf = (char *)malloc((conn->cldata_len - sent_len) + 1);
2931 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_MEMORY,13, "error / malloc failed");
2932 /*-------- DEBUG LOG --------*/
2933 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2934 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,268,
2935 "iom->status change: %d->%d",
2936 iom->status, iomux_conn_send_error);
2938 /*------ DEBUG LOG END ------*/
2939 iom->status = iomux_conn_send_error;
2940 /*-------- DEBUG LOG --------*/
2941 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2942 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,269,
2943 "out_function: static int l7vs_conn_send(struct l7vs_iomux *iom, int dest_fd) "
2946 /*------ DEBUG LOG END ------*/
2949 memcpy(newbuf, (conn->cldata + sent_len), conn->cldata_len - sent_len);
2951 conn->cldata = newbuf;
2952 conn->cldata_len -= sent_len;
2953 conn->cldata[conn->cldata_len] = '\0';
2955 // the data that should be sent remains, status does not change
2958 /*-------- DEBUG LOG --------*/
2959 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2960 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,270,
2961 "out_function: static int l7vs_conn_send(struct l7vs_iomux *iom, int dest_fd) "
2964 /*------ DEBUG LOG END ------*/
2970 * connect to real server
2972 * @param[in] conn connection
2973 * @param[in] dest destination
2979 l7vs_conn_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest)
2981 /*-------- DEBUG LOG --------*/
2982 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
2983 char conn_str[DEBUG_STR_LEN] = {0};
2984 char dest_str[DEBUG_STR_LEN] = {0};
2985 l7vs_conn_c_str(conn_str, conn);
2986 l7vs_dest_c_str(dest_str, dest);
2987 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,271,
2988 "in_function: int l7vs_conn_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
2991 conn_str, dest_str);
2993 /*------ DEBUG LOG END ------*/
2999 enum iomaction action;
3002 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,75, "error / conn is null");
3003 /*-------- DEBUG LOG --------*/
3004 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3005 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,272,
3006 "out_function: int l7vs_conn_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
3009 /*------ DEBUG LOG END ------*/
3013 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,76, "error / dest is null");
3014 /*-------- DEBUG LOG --------*/
3015 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3016 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,273,
3017 "out_function: int l7vs_conn_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
3020 /*------ DEBUG LOG END ------*/
3024 switch (conn->proto) {
3026 stype = SOCK_STREAM;
3032 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,15, "error / unknown socket type");
3033 /*-------- DEBUG LOG --------*/
3034 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3035 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,274,
3036 "out_function: int l7vs_conn_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
3039 /*------ DEBUG LOG END ------*/
3043 /*-------- DEBUG LOG --------*/
3044 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3045 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,275,
3046 "socket param: family=PF_INET: type=%d: protocol=%d",
3047 stype, conn->proto);
3049 /*------ DEBUG LOG END ------*/
3050 s = socket(PF_INET, stype, conn->proto);
3052 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,16, "error / socket error(%s)", strerror(errno));
3053 /*-------- DEBUG LOG --------*/
3054 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3055 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,276,
3056 "out_function: int l7vs_conn_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
3059 /*------ DEBUG LOG END ------*/
3063 /*-------- DEBUG LOG --------*/
3064 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3065 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,277,
3066 "fnctl param: s=%d: cmd=F_GETFL: flags=0",
3069 /*------ DEBUG LOG END ------*/
3070 flags = fcntl(s, F_GETFL, 0);
3072 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,17, "error / fcntl(s=%d,F_GETFL) error(%s)", s,strerror(errno));
3074 /*-------- DEBUG LOG --------*/
3075 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3076 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,278,
3077 "out_function: int l7vs_conn_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
3080 /*------ DEBUG LOG END ------*/
3083 /*-------- DEBUG LOG --------*/
3084 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3085 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,279,
3086 "fnctl result: flags=%d",
3089 /*------ DEBUG LOG END ------*/
3091 /*-------- DEBUG LOG --------*/
3092 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3093 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,280,
3094 "fnctl param: s=%d: cmd=F_SETFL: flags=%d",
3095 s, (flags | O_NONBLOCK));
3097 /*------ DEBUG LOG END ------*/
3098 flags = fcntl(s, F_SETFL, flags | O_NONBLOCK);
3100 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,18, "error / fcntl(s=%d,F_SETFL) error(%s)", s,strerror(errno));
3102 /*-------- DEBUG LOG --------*/
3103 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3104 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,281,
3105 "out_function: int l7vs_conn_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
3108 /*------ DEBUG LOG END ------*/
3111 /*-------- DEBUG LOG --------*/
3112 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3113 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,282,
3114 "fnctl result: flags=%d",
3117 /*------ DEBUG LOG END ------*/
3119 if (conn->cmss > 0) {
3120 /*-------- DEBUG LOG --------*/
3121 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3122 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,283,
3123 "setsockopt param: s=%d: level=IPROTO_TCP: optname=TCP_MAXSEG: optval=%d: "
3125 s, conn->cmss, sizeof(int));
3127 /*------ DEBUG LOG END ------*/
3128 ret = setsockopt(s, IPPROTO_TCP, TCP_MAXSEG, &conn->cmss,
3131 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,19, "error / setsockopt(TCP_MAXSEG) error(%s)", strerror(errno));
3133 /*-------- DEBUG LOG --------*/
3134 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3135 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,284,
3136 "setsockopt result: ret=%d: len=%zu",
3139 /*------ DEBUG LOG END ------*/
3142 /*-------- DEBUG LOG --------*/
3143 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3144 char addr_str[DEBUG_STR_LEN] = {0};
3145 l7vs_conn_sockaddr_in_c_str(addr_str, &dest->addr);
3146 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,285,
3147 "connect param: s=%d: dest->addr=%s: len=%zu",
3148 s, addr_str, sizeof(struct sockaddr_in));
3150 /*------ DEBUG LOG END ------*/
3151 ret = connect(s, (struct sockaddr *)&dest->addr,
3152 sizeof(struct sockaddr_in));
3154 if (errno != EINPROGRESS) {
3155 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_SYSTEM_SOCKET,20, "error / connect error(%s)", strerror(errno));
3157 /*-------- DEBUG LOG --------*/
3158 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3159 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,286,
3160 "out_function: int l7vs_conn_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
3163 /*------ DEBUG LOG END ------*/
3167 /*-------- DEBUG LOG --------*/
3168 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3169 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,287,
3170 "connect result: ret=%d",
3173 /*------ DEBUG LOG END ------*/
3174 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3175 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,288, "dest %p nactive %d->%d",
3176 dest, dest->nactive,
3183 /*-------- DEBUG LOG --------*/
3184 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3185 char dest_str[DEBUG_STR_LEN] = {0};
3186 l7vs_dest_c_str(dest_str, conn->dest);
3187 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,289,
3188 "pointer_assign: conn->dest=%s",
3191 /*------ DEBUG LOG END ------*/
3193 conn->riom->callback = l7vs_conn_rs_callback;
3194 /*-------- DEBUG LOG --------*/
3195 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3196 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,290,
3197 "pointer_assign: conn->riom->callback=%p",
3198 conn->riom->callback);
3200 /*------ DEBUG LOG END ------*/
3201 conn->riom->data = conn;
3202 /*-------- DEBUG LOG --------*/
3203 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3204 char conn_str[DEBUG_STR_LEN] = {0};
3205 l7vs_conn_c_str(conn_str, conn);
3206 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,291,
3207 "pointer_assign: conn->riom->data=%s",
3210 /*------ DEBUG LOG END ------*/
3211 l7vs_iomux_add(conn->riom, action);
3213 /*-------- DEBUG LOG --------*/
3214 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3215 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,292,
3216 "out_function: int l7vs_conn_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
3221 /*-------- DEBUG LOG --------*/
3222 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3223 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,341,
3224 "RealServer Connecting Count : nactive is %d",
3227 /*-------- DEBUG LOG --------*/
3229 /*-------- INFO LOG (Access Log) --------*/
3230 if (LOG_LV_INFO >= logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3231 char addr_str_tmp[ADDR_STR_LEN] = {0};
3232 memcpy(addr_str_tmp, inet_ntoa(conn->caddr.sin_addr), ADDR_STR_LEN);
3233 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_NETWORK,342,
3234 "[[AccessLog] (SRC)%s:%d -> (DST)%s:%d ]",
3236 ntohs(conn->caddr.sin_port),
3237 inet_ntoa(conn->dest->addr.sin_addr),
3238 ntohs(conn->dest->addr.sin_port));
3240 /*------ INFO LOG END (Access Log) ------*/
3243 /*------ DEBUG LOG END ------*/
3248 * close client socket
3250 * @param[in] conn connection
3254 l7vs_conn_close_csock(struct l7vs_conn *conn)
3256 /*-------- DEBUG LOG --------*/
3257 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3258 char conn_str[DEBUG_STR_LEN] = {0};
3259 l7vs_conn_c_str(conn_str, conn);
3260 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,293,
3261 "in_function: void l7vs_conn_close_csock(struct l7vs_conn *conn) "
3265 /*------ DEBUG LOG END ------*/
3268 /*-------- DEBUG LOG --------*/
3269 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3270 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,294,
3271 "out_function: void l7vs_conn_close_csock(struct l7vs_conn *conn) "
3272 "return_value: void");
3274 /*------ DEBUG LOG END ------*/
3278 /*-------- DEBUG LOG --------*/
3279 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3280 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,295,
3281 "out_function: void l7vs_conn_close_csock(struct l7vs_conn *conn) "
3282 "return_value: void");
3284 /*------ DEBUG LOG END ------*/
3287 if (-1 == conn->ciom->fd) {
3288 /*-------- DEBUG LOG --------*/
3289 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3290 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,296,
3291 "out_function: void l7vs_conn_close_csock(struct l7vs_conn *conn) "
3292 "return_value: void");
3294 /*------ DEBUG LOG END ------*/
3298 l7vs_iomux_remove(conn->ciom);
3299 /*-------- DEBUG LOG --------*/
3300 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3301 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,297,
3302 "close: conn->ciom->fd=%d",
3305 /*------ DEBUG LOG END ------*/
3306 close(conn->ciom->fd);
3307 conn->ciom->fd = -1;
3309 /*-------- DEBUG LOG --------*/
3310 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3311 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,298,
3312 "out_function: void l7vs_conn_close_csock(struct l7vs_conn *conn) "
3313 "return_value: void");
3315 /*------ DEBUG LOG END ------*/
3319 * close real server socket
3321 * @param[in] conn connection
3325 l7vs_conn_close_rsock(struct l7vs_conn *conn)
3327 /*-------- DEBUG LOG --------*/
3328 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3329 char conn_str[DEBUG_STR_LEN] = {0};
3330 l7vs_conn_c_str(conn_str, conn);
3331 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,299,
3332 "in_function: void l7vs_conn_close_rsock(struct l7vs_conn *conn) "
3336 /*------ DEBUG LOG END ------*/
3339 /*-------- DEBUG LOG --------*/
3340 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3341 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,300,
3342 "out_function: void l7vs_conn_close_rsock(struct l7vs_conn *conn) "
3343 "return_value: void");
3345 /*------ DEBUG LOG END ------*/
3349 /*-------- DEBUG LOG --------*/
3350 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3351 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,301,
3352 "out_function: void l7vs_conn_close_rsock(struct l7vs_conn *conn) "
3353 "return_value: void");
3355 /*------ DEBUG LOG END ------*/
3358 if (-1 == conn->riom->fd) {
3359 /*-------- DEBUG LOG --------*/
3360 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3361 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,302,
3362 "out_function: void l7vs_conn_close_rsock(struct l7vs_conn *conn) "
3363 "return_value: void");
3365 /*------ DEBUG LOG END ------*/
3370 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3371 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,303, "dest %p nactive %d->%d",
3372 conn->dest, conn->dest->nactive,
3373 conn->dest->nactive - 1);
3375 conn->dest->nactive--;
3376 conn->dest->ninact++;
3377 if(conn->dest->ninact == INT_MAX) {
3378 conn->dest->ninact = 0;
3381 /*-------- DEBUG LOG --------*/
3382 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3383 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,343,
3384 "RealServer Connected Count : ninact is %d",
3385 conn->dest->ninact);
3387 /*------ DEBUG LOG END ------*/
3390 l7vs_iomux_remove(conn->riom);
3391 /*-------- DEBUG LOG --------*/
3392 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3393 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,304,
3394 "close: conn->riom->fd=%d",
3397 /*------ DEBUG LOG END ------*/
3398 close(conn->riom->fd);
3399 conn->riom->fd = -1;
3401 /*-------- DEBUG LOG --------*/
3402 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3403 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,305,
3404 "out_function: void l7vs_conn_close_rsock(struct l7vs_conn *conn) "
3405 "return_value: void");
3407 /*------ DEBUG LOG END ------*/
3411 * confirmation of whether conn is closed
3413 * @param[in] conn connection
3414 * @return closed or not
3415 * @retval 0 not closed
3419 l7vs_conn_closed(struct l7vs_conn *conn)
3421 /*-------- DEBUG LOG --------*/
3422 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3423 char conn_str[DEBUG_STR_LEN] = {0};
3424 l7vs_conn_c_str(conn_str, conn);
3425 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,306,
3426 "in_function: int l7vs_conn_closed(struct l7vs_conn *conn) "
3430 /*------ DEBUG LOG END ------*/
3433 /*-------- DEBUG LOG --------*/
3434 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3435 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,307,
3436 "out_function: int l7vs_conn_closed(struct l7vs_conn *conn) "
3439 /*------ DEBUG LOG END ------*/
3442 if ((conn->ciom && -1 != conn->ciom->fd) || (conn->riom && -1 != conn->riom->fd)) {
3443 /*-------- DEBUG LOG --------*/
3444 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3445 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,308,
3446 "out_function: int l7vs_conn_closed(struct l7vs_conn *conn) "
3449 /*------ DEBUG LOG END ------*/
3452 /*-------- DEBUG LOG --------*/
3453 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3454 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,309,
3455 "out_function: int l7vs_conn_closed(struct l7vs_conn *conn) "
3458 /*------ DEBUG LOG END ------*/
3464 * Change connection to specified destination (to real-server or sorry-server).
3466 * @param[in] *conn connection pointer
3467 * @param[in] *dest destination pointer
3468 * @return int change connection result 0=NG, 1=OK
3470 static int l7vs_conn_change_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest)
3472 /*-------- DEBUG LOG --------*/
3473 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3474 char conn_str[DEBUG_STR_LEN] = {0};
3475 char dest_str[DEBUG_STR_LEN] = {0};
3476 l7vs_conn_c_str(conn_str, conn);
3477 l7vs_dest_c_str(dest_str, dest);
3478 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,310,
3479 "in_function: static int l7vs_conn_change_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
3482 conn_str, dest_str);
3484 /*------ DEBUG LOG END ------*/
3489 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,77, "error / conn is null");
3490 /*-------- DEBUG LOG --------*/
3491 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3492 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,311,
3493 "out_function: static int l7vs_conn_change_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
3496 /*------ DEBUG LOG END ------*/
3500 LOGGER_PUT_LOG_ERROR(LOG_CAT_L7VSD_PROGRAM,78, "error / dest is null");
3501 /*-------- DEBUG LOG --------*/
3502 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3503 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,312,
3504 "out_function: static int l7vs_conn_change_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
3507 /*------ DEBUG LOG END ------*/
3510 // save old destination
3511 conn->old_dest = conn->dest;
3512 /*-------- DEBUG LOG --------*/
3513 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3514 char old_dest_str[DEBUG_STR_LEN] = {0};
3515 l7vs_dest_c_str(old_dest_str, conn->old_dest);
3516 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,313,
3517 "pointer_assign: conn->old_dest=%s",
3520 /*------ DEBUG LOG END ------*/
3521 // close real-server connection
3522 l7vs_conn_close_rsock(conn);
3523 // connect to new destination
3524 ret = l7vs_conn_connect_rs(conn, dest);
3526 /*-------- DEBUG LOG --------*/
3527 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3528 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,314,
3529 "out_function: static int l7vs_conn_change_connect_rs(struct l7vs_conn *conn, struct l7vs_dest *dest) "
3533 /*------ DEBUG LOG END ------*/
3538 * Judges from the data size received last time and recieve-interval
3540 * @param[in] *conn connection pointer
3541 * @param[in] direction traffic direction
3542 * @return int permitte for recv function call 0=NG(not permitted), 1=OK(permitted)
3545 l7vs_conn_QoS_control( struct l7vs_conn *conn, int direction )
3547 /*-------- DEBUG LOG --------*/
3548 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3549 char conn_str[DEBUG_STR_LEN] = {0};
3550 l7vs_conn_c_str(conn_str, conn);
3551 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,315,
3552 "in_function: static int l7vs_conn_QoS_control( struct l7vs_conn *conn, int direction ) "
3553 "conn=%s, direction=%d",
3554 conn_str, direction);
3556 /*------ DEBUG LOG END ------*/
3559 /*-------- DEBUG LOG --------*/
3560 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3561 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,316,
3562 "out_function: static int l7vs_conn_QoS_control( struct l7vs_conn *conn, int direction ) "
3565 /*------ DEBUG LOG END ------*/
3569 /*-------- DEBUG LOG --------*/
3570 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3571 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,348,
3572 "out_function: static int l7vs_conn_QoS_control( struct l7vs_conn *conn, int direction ) "
3575 /*------ DEBUG LOG END ------*/
3579 struct timeval CurrTime;
3580 gettimeofday( &CurrTime, NULL );
3581 /*-------- DEBUG LOG --------*/
3582 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3583 char time_str[DEBUG_STR_LEN] = {0};
3584 snprintf(time_str, DEBUG_STR_LEN,
3589 , CurrTime.tv_usec);
3590 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,339,
3591 "gettimeofday result: CurrTime=%s",
3594 /*------ DEBUG LOG END ------*/
3596 unsigned long long cur_recvtime = (CurrTime.tv_sec * 1000000ULL + CurrTime.tv_usec) / throughput_interval;
3597 l7vs_service_update_throughput(conn->srv, cur_recvtime);
3599 switch (direction) {
3601 //QoS Control check : to server
3602 conn->srv->throughput_to_server = conn->srv->cur_recvsize_from_client * 1000000ULL / throughput_interval;
3603 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3604 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,323, "QoS threshold to server:%lld ", conn->srv->qos_threshold_up);
3605 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,324, "(current throughput:%lld)", conn->srv->throughput_to_server);
3607 if( (conn->srv->qos_threshold_up) && (conn->srv->throughput_to_server + l7vs_conn_read_bufsize > conn->srv->qos_threshold_up) ){
3608 if (conn->srv->qos_up_flag == 0) {
3609 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_NETWORK_QOS,1, "Start QoS traffic control to server.");
3610 conn->srv->qos_up_flag = 1;
3612 /*-------- DEBUG LOG --------*/
3613 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3614 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,326,
3615 "out_function: static int l7vs_conn_QoS_control( struct l7vs_conn *conn, int direction ) "
3618 /*------ DEBUG LOG END ------*/
3621 if (conn->srv->qos_up_flag == 1) {
3622 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_NETWORK_QOS,2, "Stop QoS traffic control to server.");
3623 conn->srv->qos_up_flag = 0;
3627 //QoS Control check : to client
3628 conn->srv->throughput_to_client = conn->srv->cur_recvsize_from_server * 1000000ULL / throughput_interval;
3629 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3630 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,349, "QoS threshold to client:%lld ", conn->srv->qos_threshold_down);
3631 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,350, "(current throughput:%lld)", conn->srv->throughput_to_client);
3633 if( (conn->srv->qos_threshold_down) && (conn->srv->throughput_to_client + l7vs_conn_read_bufsize > conn->srv->qos_threshold_down) ){
3634 if (conn->srv->qos_down_flag == 0) {
3635 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_NETWORK_QOS,3, "Start QoS traffic control to client.");
3636 conn->srv->qos_down_flag = 1;
3638 /*-------- DEBUG LOG --------*/
3639 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3640 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,351,
3641 "out_function: static int l7vs_conn_QoS_control( struct l7vs_conn *conn, int direction ) "
3644 /*------ DEBUG LOG END ------*/
3647 if (conn->srv->qos_down_flag == 1) {
3648 LOGGER_PUT_LOG_INFO(LOG_CAT_L7VSD_NETWORK_QOS,4, "Stop QoS traffic control to client.");
3649 conn->srv->qos_down_flag = 0;
3653 /*-------- DEBUG LOG --------*/
3654 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3655 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,317,
3656 "out_function: static int l7vs_conn_QoS_control( struct l7vs_conn *conn, int direction ) "
3659 /*------ DEBUG LOG END ------*/
3663 /*-------- DEBUG LOG --------*/
3664 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3665 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,335,
3666 "out_function: static int l7vs_conn_QoS_control( struct l7vs_conn *conn ) "
3669 /*------ DEBUG LOG END ------*/
3674 * Regsiter recive time and recieved data size
3676 * @param[in] *conn connection pointer
3677 * @param[in] in_recvsize recieved size
3678 * @param[in] direction traffic direction
3682 l7vs_conn_QoS_recvsize_register( struct l7vs_conn *conn, const size_t in_recvsize, int direction )
3684 /*-------- DEBUG LOG --------*/
3685 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3686 char conn_str[DEBUG_STR_LEN] = {0};
3687 l7vs_conn_c_str(conn_str, conn);
3688 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,336,
3689 "in_function: static void l7vs_conn_QoS_recvsize_register( struct l7vs_conn *conn, const size_t in_recvsize ) "
3692 conn_str, in_recvsize);
3694 /*------ DEBUG LOG END ------*/
3697 /*-------- DEBUG LOG --------*/
3698 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3699 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,337,
3700 "out_function: static void l7vs_conn_QoS_recvsize_register( struct l7vs_conn *conn, const size_t in_recvsize ) "
3701 "return_value: void");
3703 /*------ DEBUG LOG END ------*/
3707 /*-------- DEBUG LOG --------*/
3708 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3709 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,338,
3710 "out_function: static void l7vs_conn_QoS_recvsize_register( struct l7vs_conn *conn, const size_t in_recvsize ) "
3711 "return_value: void");
3713 /*------ DEBUG LOG END ------*/
3716 struct timeval CurrTime;
3717 gettimeofday( &CurrTime, NULL );
3718 /*-------- DEBUG LOG --------*/
3719 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3720 char time_str[DEBUG_STR_LEN] = {0};
3721 snprintf(time_str, DEBUG_STR_LEN,
3726 , CurrTime.tv_usec);
3727 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,352,
3728 "gettimeofday result: CurrTime=%s",
3731 /*------ DEBUG LOG END ------*/
3733 int throughput_interval = BPS_DEFAULT_INTERVAL;
3734 if ( parameter_is_int_exist( PARAM_COMP_L7VSD, "calc_throughput_interval" ) ) {
3735 throughput_interval = parameter_get_int_value( PARAM_COMP_L7VSD, "calc_throughput_interval" );
3737 unsigned long long cur_recvtime = (CurrTime.tv_sec * 1000000ULL + CurrTime.tv_usec) / throughput_interval;
3738 l7vs_service_update_throughput(conn->srv, cur_recvtime);
3740 switch (direction) {
3742 conn->srv->cur_recvsize_from_client += in_recvsize;
3745 conn->srv->cur_recvsize_from_server += in_recvsize;
3751 /*-------- DEBUG LOG --------*/
3752 if (LOG_LV_DEBUG == logger_get_log_level(LOG_CAT_L7VSD_NETWORK)) {
3753 LOGGER_PUT_LOG_DEBUG(LOG_CAT_L7VSD_NETWORK,340,
3754 "out_function: static void l7vs_conn_QoS_recvsize_register( struct l7vs_conn *conn, const size_t in_recvsize ) "
3755 "return_value: void");
3757 /*------ DEBUG LOG END ------*/