OSDN Git Service

Update INSTALL.ja.utf-8 for new release.
[ultramonkey-l7/ultramonkey-l7-v2.git] / include / l7vs_conn.h
1 /*
2  * @file        l7vs_conn.h
3  * @bref        Connection is managed. 
4  * @bref        The previous substance becomes one conn though two iom is registered
5  * @bref        in sets of imoux so that conn may have sockaddr for a real server 
6  * @bref        and sockaddr for the client internally. 
7  *
8  * L7VSD: Linux Virtual Server for Layer7 Load Balancing
9  * Copyright (C) 2005  NTT COMWARE Corporation.
10  *
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.
15  *
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.
20  *
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
24  * 02110-1301 USA
25  *
26  **********************************************************************/
27 #ifndef L7VS_CONN_H
28 #define L7VS_CONN_H
29
30 #include <netinet/in.h>
31 #include <arpa/inet.h>
32 #include "l7vs_iom.h"
33 #include "l7vs_iomuxlist.h"
34 #include "l7vs_dest.h"
35 #include "logger_wrapper.h"
36
37 #define FDSET_SIZE      (8192)
38 struct  my_fd_set{
39         char    x[FDSET_SIZE];
40 };
41 #undef  FD_ZERO
42 #define FD_ZERO(ptr) memset((ptr), 0, FDSET_SIZE)
43
44 // connection management datatype
45 #define L7VS_CLDATA_CHUNKSIZE   (512)
46 #define L7VS_CLDATA_BUFSIZE(L)  (((L)->cldata_len + L7VS_CLDATA_CHUNKSIZE - 1) & ~(L7VS_CLDATA_CHUNKSIZE - 1))
47 #define L7VS_CLDATA_REST(L)     (L7VS_CLDATA_BUFSIZE(L) - (L)->cldata_len)
48
49 #define L7VS_CONN_S_CL_CONNECTED        0
50 #define L7VS_CONN_S_RS_CONNECTING       1
51 #define L7VS_CONN_S_RS_CONNECTED        2
52
53 #define QOS_UP  1
54 #define QOS_DOWN        2
55
56 #define L7VS_CONN_READ_BUFSIZE_MAX       262144         //minimum l7vs_conn_read_bufsize 262144Byte = 256KByte
57 #define L7VS_CONN_READ_BUFSIZE_MIN       2048           //minimum l7vs_conn_read_bufsize
58
59 struct  l7vs_conn{
60         struct  l7vs_lsock*     lsock;  //! l7vs_lsock pointer
61         struct  l7vs_service*   srv;    //! l7vs_service pointer
62         struct  l7vs_dest*      dest;   //! real server pointer
63         int                     splice; //! tcp splice handle (don't use)
64         struct  sockaddr_in     caddr;  //! client sockaddr struct
65         struct  sockaddr_in     raddr;  //! real server sockaddr struct
66         struct  sockaddr_in     vaddr;  //! 
67         struct  sockaddr_in     laddr;  //! 
68         struct  l7vs_iomux*     ciom;   //!     client-side socket
69         struct  l7vs_iomux*     riom;   //!     realserver-side socket  
70         uint8_t                 proto;  //!
71         uint32_t                state;  //! connn status
72         char*                   cldata; //! client data buffer
73         size_t                  cldata_len; //! client data buffer length
74         size_t                  cldata_bufsize; //! client buffer size
75         int                     cmss;   //! cmess??
76         int                     sorry_conn_flag; //! sorry connection flag
77         struct  l7vs_dest*      old_dest; //! old destination
78 };
79
80 //
81 // functions.
82 //
83 extern  struct  l7vs_conn*      l7vs_conn_create( int, struct l7vs_lsock* );
84 extern  void                    l7vs_conn_destroy( struct l7vs_conn* );
85 //extern        int                     l7vs_conn_recv_client( struct l7vs_conn* );
86 extern  int                     l7vs_conn_connect_rs( struct l7vs_conn*, struct l7vs_dest* );
87 //extern        int                     l7vs_conn_splice( struct l7vs_conn* );
88 extern  void                    l7vs_conn_close_csock( struct l7vs_conn* );
89 extern  void                    l7vs_conn_close_rsock( struct l7vs_conn* );
90 extern  int                     l7vs_conn_closed( struct l7vs_conn* );
91 /*! l7vs_conn_init
92  *      @return         success return is 0, else error code
93  */
94 extern  int     l7vs_conn_init();
95 /*!
96  * serialize struct sockaddr_in
97  *
98  * @param[out]  ret     serialized string
99  * @param[in]   conn    source sockaddr_in
100  * @return      void
101  */
102 inline  void    l7vs_conn_sockaddr_in_c_str(char* ret, const struct sockaddr_in* addr)
103 {
104         if (!ret) {
105                 return;
106         }
107
108         if (!addr) {
109                 snprintf(ret, DEBUG_STR_LEN, "(nil)");
110                 return;
111         }
112
113         snprintf(ret, DEBUG_STR_LEN,
114                 "sockaddr_in="
115                 "{sin_addr=%s: "
116                 "sin_port=%d}"
117                 , inet_ntoa(addr->sin_addr)
118                 , ntohs(addr->sin_port));
119 }
120
121 /*!
122  * serialize struct l7vs_conn
123  *
124  * @param[out]  ret     serialized string
125  * @param[in]   conn    source l7vs_conn
126  * @return      void
127  */
128 inline  void    l7vs_conn_c_str(char* ret, const struct l7vs_conn* conn)
129 {
130         if (!ret) {
131                 return;
132         }
133
134         char dest_str[DEBUG_STR_LEN];
135         char caddr_str[DEBUG_STR_LEN];
136         char raddr_str[DEBUG_STR_LEN];
137         char ciom_str[DEBUG_STR_LEN];
138         char riom_str[DEBUG_STR_LEN];
139         char old_dest_str[DEBUG_STR_LEN];
140
141         if (!conn) {
142                 snprintf(ret, DEBUG_STR_LEN, "(nil)");
143                 return;
144         }
145
146         l7vs_conn_sockaddr_in_c_str(caddr_str, &conn->caddr);
147         l7vs_conn_sockaddr_in_c_str(raddr_str, &conn->raddr);
148         l7vs_dest_c_str(dest_str, conn->dest);
149         l7vs_iomux_c_str(ciom_str, conn->ciom);
150         l7vs_iomux_c_str(riom_str, conn->riom);
151         l7vs_dest_c_str(old_dest_str, conn->old_dest);
152         
153         snprintf(ret, DEBUG_STR_LEN, 
154                 "l7vs_conn="
155                 "{lsock=%p: "
156                 "srv=%p: "
157                 "dest=%s: "
158                 "caddr=%s: "
159                 "raddr=%s: "
160                 "ciom=%s: "
161                 "riom=%s: "
162                 "proto=%x: "
163                 "cldata=%s: "
164                 "cldata_len=%zu: "
165                 "cldata_bufsize=%zu: "
166                 "cmss=%d: "
167                 "sorry_conn_flag=%d: "
168                 "old_dest=%s}"
169                 , conn->lsock
170                 , conn->srv
171                 , dest_str
172                 , caddr_str
173                 , raddr_str
174                 , ciom_str
175                 , riom_str
176                 , conn->proto
177                 , conn->cldata
178                 , conn->cldata_len
179                 , conn->cldata_bufsize
180                 , conn->cmss
181                 , conn->sorry_conn_flag
182                 , old_dest_str);
183 }
184
185 #endif  //L7VS_CONN_H