Annotation of embedaddon/trafshow/session.h, revision 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>