File: com-socket.h

package info (click to toggle)
proxy-suite 1.9.2.4-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 1,420 kB
  • ctags: 436
  • sloc: ansic: 6,530; sh: 2,955; makefile: 341
file content (183 lines) | stat: -rw-r--r-- 6,061 bytes parent folder | download | duplicates (7)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
/*
 * $Id: com-socket.h,v 1.5.2.1 2003/05/07 11:13:34 mt Exp $
 *
 * Header for common functions for TCP/IP sockets
 *
 * Author(s): Jens-Gero Boehm <jens-gero.boehm@suse.de>
 *            Pieter Hollants <pieter.hollants@suse.de>
 *            Marius Tomaschewski <mt@suse.de>
 *            Volker Wiegand <volker.wiegand@suse.de>
 *
 * This file is part of the SuSE Proxy Suite
 *            See also  http://proxy-suite.suse.de/
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version
 * 2 of the License, or (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the
 * Free Software Foundation, Inc., 59 Temple Place - Suite 330,
 * Boston, MA 02111-1307, USA.
 *
 * A history log can be found at the end of this file.
 */

#if !defined(_COM_SOCKET_H_)
#define _COM_SOCKET_H_

/* ------------------------------------------------------------ */

#include <sys/types.h>
#include <sys/socket.h>

#if !defined(INADDR_NONE)
#  if defined(INADDR_BROADCAST)
#    define INADDR_NONE INADDR_BROADCAST
#  else
#    define INADDR_NONE ((uint32_t) 0xffffffffU)
#  endif
#endif

#if !defined(INPORT_ANY)
#  define   INPORT_ANY   0
#endif

#if !defined(MAXHOSTNAMELEN)
#  define MAXHOSTNAMELEN 256
#endif

/* ------------------------------------------------------------ */

#define SK_LISTEN	1	/* Kind: listening socket	*/
#define SK_CONTROL	2	/* Kind: control connection	*/
#define SK_DATA		3	/* Kind: data transfer		*/

#define LOC_END		1	/* Local end of connection	*/
#define REM_END		2	/* Remote end of connection	*/

#define PEER_LEN	32	/* Storage for dotted decimal	*/

#define MAX_RETRIES	6	/* bind retries on EADDRINUSE	*/

typedef void (*ACPT_CB)(int);	/* Accept callback function	*/


/* ------------------------------------------------------------ */

/*
** Definition of a "High Level Socket"
*/

typedef struct buf_t {
	struct buf_t *next;	/* Next one in the chain	*/
	size_t  len;		/* Number of bytes at ptr	*/
	size_t  cur;		/* Currently used offset	*/
	int     flg;		/* Flag for send() (e.g. OOB)	*/
	char    dat[8];		/* Beginning of data (Guard)	*/
} BUF;

typedef struct hls_t {
	struct hls_t *next;	/* Next one in the chain	*/
	int       sock;		/* The corresponding socket	*/
	int       kill;		/* 1=kill socket after send	*/
	int       ernr;		/* socket i/o error number	*/
	int       retr;		/* recv i/o retry counter	*/
	int       flag;		/* Flag for send() (e.g. OOB)	*/
	int       more;		/* 1=read more to complete line	*/
	u_int32_t addr;		/* Peer's address (host order)	*/
	u_int16_t port;		/* Peer's port (host order)	*/
	char      peer[PEER_LEN]; /* Peer's readable address	*/
	char     *ctyp;		/* Connection type identifier	*/
	BUF      *wbuf;		/* Write buffer chain		*/
	BUF      *rbuf;		/* Read buffer chain		*/
	size_t    wcnt;		/* write bytes counter		*/
	size_t    rcnt;		/* read bytes counter		*/
} HLS;


/* ------------------------------------------------------------ */

int  socket_listen (u_int32_t addr, u_int16_t port, ACPT_CB func);
void socket_lclose (int shut);

HLS  *socket_init  (int sock);
void  socket_opts  (int sock, int kind);
void  socket_kill  (HLS *hls);
char *socket_gets  (HLS *hls, char *ptr, int len);
void  socket_flag  (HLS *hls, int flag);
int   socket_write (HLS *hls, char *ptr, int len);
int   socket_printf(HLS *hls, char *fmt, ...);
int   socket_file  (HLS *hls, char *file, int crlf);

int   socket_exec  (int timeout, int *close_flag);

char *socket_msgline(char *fmt);

u_int16_t socket_d_bind   (int sock, u_int32_t addr,
			   u_int16_t lrng, u_int16_t urng,
			   int incr);

u_int16_t socket_d_listen (u_int32_t addr,
			   u_int16_t lrng, u_int16_t urng,
			   HLS **phls, char *ctyp,
			   int incr);

u_int16_t socket_d_connect(u_int32_t addr, u_int16_t port,
			   u_int32_t ladr,
			   u_int16_t lrng, u_int16_t urng,
			   HLS **phls, char *ctyp,
			   int incr);

u_int32_t  socket_str2addr(char *name, u_int32_t dflt);
u_int16_t  socket_str2port(char *name, u_int16_t dflt);
char      *socket_addr2str(u_int32_t addr);
u_int32_t  socket_sck2addr(int sock, int peer, u_int16_t *port);

int        socket_chkladdr(u_int32_t addr);
int        socket_orgdst(HLS *phls, u_int32_t *addr, u_int16_t *port);

int        getfqhostname(char *fqhost, size_t n);
int        getfqdomainname(char *fqdomain, size_t n);

/* ------------------------------------------------------------ */

#endif /* defined(_COM_SOCKET_H_) */

/* ------------------------------------------------------------
 * $Log: com-socket.h,v $
 * Revision 1.5.2.1  2003/05/07 11:13:34  mt
 * added hls->retr -- recv i/o retry counter
 *
 * Revision 1.5  2002/05/02 13:01:32  mt
 * merged with v1.8.2.2
 *
 * Revision 1.4.2.1  2002/04/04 14:33:17  mt
 * added ernr flag in hls needed to remember failures
 *
 * Revision 1.4  2002/01/14 18:26:55  mt
 * implemented socket_orgdst to read transparent proxying destinations
 * implemented a MaxRecvBufSize option limiting max recv buffer size
 * implemented workarround for Netscape (4.x) directory symlink handling
 * extended log messages to provide basic transfer statistics data
 * fixed socket_gets to wait for a complete line if no EOL found
 * added snprintf usage, replaced strcpy/strncpy with misc_strncpy
 *
 * Revision 1.3  2001/11/06 23:04:43  mt
 * applied / merged with transparent proxy patches v8
 * see ftp-proxy/NEWS for more detailed release news
 *
 * Revision 1.2  1999/09/17 06:32:28  wiegand
 * buffer length and overflow protection review
 *
 * Revision 1.1  1999/09/15 14:05:38  wiegand
 * initial checkin
 *
 * ------------------------------------------------------------ */