Annotation of embedaddon/trafshow/session.h, revision 1.1.1.1
1.1 misho 1: /*
2: * Copyright (c) 2003 Rinet Corp., Novosibirsk, Russia
3: *
4: * Redistribution and use in source forms, with and without modification,
5: * are permitted provided that this entire comment appears intact.
6: *
7: * THIS SOURCE CODE IS PROVIDED ``AS IS'' WITHOUT ANY WARRANTIES OF ANY KIND.
8: */
9:
10: #ifndef _SESSION_H_
11: #define _SESSION_H_
12:
13: #include <sys/types.h>
14: #include <sys/socket.h>
15: #include <sys/time.h>
16: #include <sys/select.h>
17: #include <netinet/in.h>
18:
19: /*
20: * Session handler.
21: */
22:
23: /* currently supported session types */
24: typedef enum {
25: PlainFile, /* simple I/O with a file descriptor */
26: TextStream, /* CRLFed text lines exchange through TCP */
27: DataSequence /* raw binary data exchange through UDP */
28: } SessionType;
29:
30: struct session_binder_ent;
31:
32: #ifndef HAVE_SOCKADDR_STORAGE
33:
34: /*
35: * RFC 2553: protocol-independent placeholder for socket addresses
36: */
37: #define _SS_MAXSIZE 128
38: #define _SS_ALIGNSIZE (sizeof(u_int64_t))
39: #define _SS_PAD1SIZE (_SS_ALIGNSIZE - sizeof(u_char) * 2)
40: #define _SS_PAD2SIZE (_SS_MAXSIZE - sizeof(u_char) * 2 - \
41: _SS_PAD1SIZE - _SS_ALIGNSIZE)
42:
43: struct sockaddr_storage {
44: u_char ss_len; /* address length */
45: u_char ss_family; /* address family */
46: char __ss_pad1[_SS_PAD1SIZE];
47: u_int64_t __ss_align; /* force desired structure storage alignment */
48: char __ss_pad2[_SS_PAD2SIZE];
49: };
50:
51: #endif /* HAVE_SOCKADDR_STORAGE */
52:
53: typedef struct session_ent {
54: u_long sid; /* session id (must not be zero!) */
55:
56: /* user supplied parameters */
57: int sock; /* socket file descriptor */
58: struct sockaddr_storage peer; /* remote peer address and port */
59: struct sockaddr_storage from; /* recvfrom peer */
60: SessionType type; /* session type, see above */
61: unsigned timeout; /* reply timeout in seconds */
62:
63: /* internal */
64: struct timeval expire; /* time until first timeout */
65: char *buf; /* temporary I/O buffer */
66:
67: /* user callback functions */
68: void (*connected)(struct session_ent *sd);
69: void (*read_error)(struct session_ent *sd, int error);
70: void (*read_data)(struct session_ent *sd, const unsigned char *data, int len);
71:
72: const void *cookie; /* user defined container, cast it yourself */
73:
74: struct session_binder_ent *sb; /* session binder container */
75:
76: struct session_ent *next;
77: } SESSION;
78:
79: SESSION *session_open(int sock, const struct sockaddr *peer, SessionType type);
80: int session_sock(SESSION *sd);
81: int session_start(SESSION *sd);
82: void session_stop(SESSION *sd);
83: int session_idle(SESSION *sd);
84: void session_free(SESSION *sd);
85: void session_setcallback(SESSION *sd,
86: void (*connected)(SESSION *sd),
87: void (*read_error)(SESSION *sd, int error),
88: void (*read_data)(SESSION *sd, const unsigned char *data, int len));
89: void session_setcookie(SESSION *sd, const void *cookie);
90: const void *session_cookie(SESSION *sd);
91: unsigned session_settimeout(SESSION *sd, unsigned timeout);
92: int session_send(SESSION *sd, const unsigned char *data, int len);
93: int session_select(int *nfds, fd_set *readfds, fd_set *writefds,
94: struct timeval *timeout, int *block);
95: void session_operate(fd_set *readfds, fd_set *writefds);
96: void session_timeout();
97: const struct sockaddr *session_peer(SESSION *sd);
98: const struct sockaddr *session_from(SESSION *sd);
99: SESSION *session_find(const struct sockaddr *peer, SessionType type);
100:
101: int session_bind(SESSION *sd, void (*notify)(void *arg), void *arg);
102: void session_unbind(SESSION *sd, void (*notify)(void *arg), void *arg);
103:
104: int socket_nonblock(int sock, int on);
105: int socket_keepalive(int sock, int on);
106: int socket_error(int sock);
107: int socket_peer(struct sockaddr *peer, int sock);
108: int socket_name(struct sockaddr *name, int sock);
109:
110: #endif /* _SESSION_H_ */
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>