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>