00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022 #ifndef _EGG_SOCKBUF_H_
00023 #define _EGG_SOCKBUF_H_
00024
00025
00026 #define SOCKBUF_BLOCK 1
00027 #define SOCKBUF_SERVER 2
00028 #define SOCKBUF_CLIENT 4
00029 #define SOCKBUF_CONNECTING 8
00030 #define SOCKBUF_INBOUND 16
00031 #define SOCKBUF_DELETED 32
00032 #define SOCKBUF_NOREAD 64
00033
00034
00035
00036
00037
00038
00039 #define SOCKBUF_AVAIL 128
00040
00041
00042 #define SOCKBUF_LEVEL_INTERNAL -1
00043 #define SOCKBUF_LEVEL_WRITE_INTERNAL 1000000
00044 #define SOCKBUF_LEVEL_PROXY 1000
00045 #define SOCKBUF_LEVEL_THROTTLE 2000
00046 #define SOCKBUF_LEVEL_ENCRYPTION 3000
00047 #define SOCKBUF_LEVEL_COMPRESSION 4000
00048 #define SOCKBUF_LEVEL_TEXT_ALTERATION 5000
00049 #define SOCKBUF_LEVEL_TEXT_BUFFER 6000
00050
00051
00052 typedef struct {
00053 egg_timeval_t connected_at;
00054 egg_timeval_t last_input_at;
00055 egg_timeval_t last_output_at;
00056
00057 uint64_t raw_bytes_in, raw_bytes_out, raw_bytes_left;
00058 uint64_t bytes_in, bytes_out;
00059
00060 int total_in_cps, snapshot_in_cps;
00061 int total_out_cps, snapshot_out_cps;
00062
00063 int snapshot_in_bytes[5], snapshot_out_bytes[5], snapshot_counter, last_snapshot;
00064 } sockbuf_stats_t;
00065
00066 typedef struct {
00067 const char *name;
00068 int level;
00069
00070
00071 int (*on_connect)(void *client_data, int idx, const char *peer_ip, int peer_port);
00072 int (*on_eof)(void *client_data, int idx, int err, const char *errmsg);
00073 int (*on_newclient)(void *client_data, int idx, int newidx, const char *peer_ip, int peer_port);
00074
00075
00076 int (*on_read)(void *client_data, int idx, char *data, int len);
00077 int (*on_write)(void *client_data, int idx, const char *data, int len);
00078 int (*on_written)(void *client_data, int idx, int len, int remaining);
00079
00080
00081 int (*on_flush)(void *client_data, int idx);
00082 int (*on_delete)(void *client_data, int idx);
00083 } sockbuf_filter_t;
00084
00085 typedef struct {
00086 const char *name;
00087
00088
00089 int (*on_connect)(void *client_data, int idx, const char *peer_ip, int peer_port);
00090 int (*on_eof)(void *client_data, int idx, int err, const char *errmsg);
00091 int (*on_newclient)(void *client_data, int idx, int newidx, const char *peer_ip, int peer_port);
00092
00093
00094 int (*on_read)(void *client_data, int idx, char *data, int len);
00095 int (*on_written)(void *client_data, int idx, int len, int remaining);
00096
00097
00098
00099 } sockbuf_handler_t;
00100
00101 int sockbuf_init(void);
00102 int sockbuf_shutdown(void);
00103
00104 int sockbuf_write(int idx, const char *data, int len);
00105 int sockbuf_new(void);
00106 int sockbuf_delete(int idx);
00107 int sockbuf_list(int **idx, int *len, int flags);
00108 int sockbuf_isvalid(int idx);
00109 int sockbuf_close(int idx);
00110 int sockbuf_flush(int idx);
00111 int sockbuf_get_handler(int idx, sockbuf_handler_t **handler, void *client_data_ptr);
00112 int sockbuf_set_handler(int idx, sockbuf_handler_t *handler, void *client_data, event_owner_t *owner);
00113 int sockbuf_get_sock(int idx);
00114 int sockbuf_set_sock(int idx, int sock, int flags);
00115 int sockbuf_get_peer(int idx, const char **peer_ip, int *peer_port);
00116 int sockbuf_get_self(int idx, const char **my_ip, int *my_port);
00117 int sockbuf_get_stats(int idx, sockbuf_stats_t **stats);
00118 int sockbuf_read(int idx);
00119 int sockbuf_noread(int idx);
00120 int sockbuf_attach_listener(int fd);
00121 int sockbuf_get_filter_data(int idx, sockbuf_filter_t *filter, void *client_data_ptr);
00122 int sockbuf_detach_listener(int fd);
00123 int sockbuf_attach_filter(int idx, sockbuf_filter_t *filter, void *client_data);
00124 int sockbuf_detach_filter(int idx, sockbuf_filter_t *filter, void *client_data_ptr);
00125 int sockbuf_update_all(int timeout);
00126
00127
00128 int sockbuf_on_connect(int idx, int level, const char *peer_ip, int peer_port);
00129 int sockbuf_on_newclient(int idx, int level, int newidx, const char *peer_ip, int peer_port);
00130 int sockbuf_on_eof(int idx, int level, int err, const char *errmsg);
00131 int sockbuf_on_read(int idx, int level, char *data, int len);
00132 int sockbuf_on_write(int idx, int level, const char *data, int len);
00133 int sockbuf_on_written(int idx, int level, int len, int remaining);
00134
00135 #endif