/Conn_engine_core.h (e686ef53647160d7c50f263e5d9de822b4856514) (8258 bytes) (mode 100644) (type blob)
#ifndef CONN_ENGINE_CORE_H
#define CONN_ENGINE_CORE_H
#include <Conn_config.h>
#define _GNU_SOURCE
#include <stdarg.h>
#include <resolv.h>
#include <errno.h>
#include <signal.h>
#include <netinet/in.h>
#include <netdb.h>
#include <sys/types.h>
#include <sys/time.h>
#include <sys/stat.h>
#include <sys/socket.h>
#include <unistd.h>
#include <time.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <string.h>
#include <fcntl.h>
#include <arpa/inet.h>
#include <netinet/tcp.h>
/* type */
#define Conn_type_MASTER 1
#define Conn_type_CLIENT 2
#define Conn_type_UNK 3
/* state */
#define CONN_STATE_START 0
#define CONN_STATE_FREE CONN_STATE_START + 1
#define CONN_STATE_EMPTY CONN_STATE_START + 2
#define CONN_STATE_OPEN CONN_STATE_START + 3
#define CONN_STATE_LISTEN CONN_STATE_START + 4
#define CONN_STATE_CONNECT_0 CONN_STATE_START + 5
#define CONN_STATE_CONNECT_a CONN_STATE_START + 6
#define CONN_STATE_CONNECT_b CONN_STATE_START + 7
/* error kind */
#define CONN_ERROR_START 0
#define CONN_ERROR_USERREQ CONN_ERROR_START + 1 /* user requested the close */
#define CONN_ERROR_POLL CONN_ERROR_START + 2
#define CONN_ERROR_RECV CONN_ERROR_START + 3
#define CONN_ERROR_SEND CONN_ERROR_START + 4
#define CONN_ERROR_SOCKET CONN_ERROR_START + 5
#define CONN_ERROR_HANGUP CONN_ERROR_START + 6
#define CONN_ERROR_GETADDRINFO CONN_ERROR_START + 7
#define CONN_ERROR_EXPIRED CONN_ERROR_START + 8
#define CONN_ERROR_ACCEPT CONN_ERROR_START + 9
#define CONN_ERROR_MEM CONN_ERROR_START + 10
#define CONN_ERROR_CONNECT CONN_ERROR_START + 11
#define CONN_ERROR_READ_TIMEOUT CONN_ERROR_START + 12
#define CONN_ERROR_CONN_TIMEOUT CONN_ERROR_START + 13
/* FLAGS */
#define CONN_FLAGS_AUTO_RECONNECT 0x01 << 0
#define CONN_FLAGS_CLOSE_AFTER_SEND 0x01 << 1
/* Parameters */
#define CONN_PARA_START 0
#define CONN_PARA_AUTO_RECONNECT CONN_PARA_START + 1
#define CONN_PARA_RECONNECT_DELAY CONN_PARA_START + 2
#define CONN_PARA_IDLE_TIME CONN_PARA_START + 3
#define CONN_PARA_READ_TIMEOUT CONN_PARA_START + 4
#define CONN_PARA_CONN_TIMEOUT CONN_PARA_START + 5
#define CONN_PARA_TRIGGER CONN_PARA_START + 6
#define CONN_PARA_IBUF CONN_PARA_START + 7
#define CONN_PARA_OBUF CONN_PARA_START + 8
/* Callbacks */
#define CONN_CB_START 0
#define CONN_CB_ACCEPT CONN_CB_START + 1
#define CONN_CB_RECV CONN_CB_START + 2
#define CONN_CB_SEND CONN_CB_START + 3
#define CONN_CB_DATA CONN_CB_START + 4
#define CONN_CB_CLOSE CONN_CB_START + 5
#define CONN_CB_TRIGGER CONN_CB_START + 6
#define CONN_CB_ERROR CONN_CB_START + 7
#define CONN_CB_CONNECTED CONN_CB_START + 8
/* Engine type */
#define CONN_ENGINE_POLL 1
#define CONN_ENGINE_EPOLL 2
extern unsigned int CONN_POLLIN;
extern unsigned int CONN_POLLOUT;
extern unsigned int CONN_POLLPRI;
extern unsigned int CONN_POLLERR;
extern unsigned int CONN_POLLHUP;
extern unsigned int CONN_POLLNVAL;
extern unsigned int CONN_POLLRDNORM;
extern unsigned int CONN_POLLRDBAND;
struct Conn
{
int fd;
unsigned int events, revents; /* I/O events */
unsigned char type;
unsigned char state;
unsigned char error_state;
unsigned int slot;
char *ibuf;
unsigned int ibuf_size, ibuf_head, ibuf_tail;
char *obuf;
unsigned int obuf_size, obuf_head, obuf_tail;
struct timeval trecv, tsend; /* last time we saw an receive/send */
time_t idle; /* idle time allowed */
unsigned int read_timeout; /* Max timeout for receiving an answer (milliseconds) */
struct timeval conn_syn; /* Time when a connection was initiated */
unsigned int conn_timeout; /* Timeout for connection (milliseconds) */
time_t last_trigger; /* last trigger was at */
time_t trigger; /* Frequency of wakeup a connection */
int sock_domain;
int sock_type;
char addr[64];
int port, via; /* "via" is the port via a client was accepted */
unsigned long long bi, bo;
void *private; /* private use by user */
/* reconnect stuff */
unsigned int retries;
unsigned int delay; /* delay between reconnects */
time_t tryat; /* when we go to CONNECT_a state */
int xerrno;
time_t start;
unsigned int flags;
/* bandwidth stuff */
struct timeval band_lasttime; /* last time tokens were added */
unsigned int band_tokens; /* 1 token -> 1000 bytes */
unsigned int band_factor; /* tokens cannot go past f * w */
unsigned int band_width; /* in 1000b increments */
unsigned long long id; /* the id of a connection */
/* Specific callbacks */
void (*cb_accept)(struct Conn *C);
void (*cb_recv)(struct Conn *C);
void (*cb_send)(struct Conn *C);
void (*cb_data)(struct Conn *C);
void (*cb_close)(struct Conn *C);
void (*cb_trigger)(struct Conn *C);
void (*cb_error)(struct Conn *C);
void (*cb_connected)(struct Conn *C);
void (*cb_accept_error)(struct Conn *C);
};
struct Conn_queue_entry
{
unsigned int slot;
struct Conn_queue_entry *next;
};
struct Conn_queue
{
struct Conn_queue_entry *head, *tail;
};
/* Variables */
extern void (*Conn_accept_cb)(struct Conn *C);
extern void (*Conn_recv_cb)(struct Conn *C);
extern void (*Conn_send_cb)(struct Conn *C);
extern void (*Conn_data_cb)(struct Conn *C);
extern void (*Conn_close_cb)(struct Conn *C);
extern void (*Conn_trigger_cb)(struct Conn *C);
extern void (*Conn_error_cb)(struct Conn *C);
extern void (*Conn_connected_cb)(struct Conn *C);
extern char *(*Conn_status_slot_html_cb)(const struct Conn *C);
extern char *(*Conn_status_cb)(void);
extern unsigned int Conn_max_reached;
extern unsigned int Conn_default_ibuf;
extern unsigned int Conn_default_obuf;
extern unsigned int Conn_max_ibuf;
extern unsigned int Conn_max_obuf;
extern unsigned int Conn_no;
extern unsigned int Conn_max;
extern unsigned long Conn_total;
extern unsigned int Conn_start;
extern unsigned int Conn_pending;
extern struct timeval Conn_now;
extern unsigned int Conn_max_send;
extern unsigned int Conn_max_recv;
extern unsigned short Conn_level;
extern unsigned int Conn_accept_is_allowed;
extern unsigned int Conn_accept_is_allowed_last;
extern struct Conn *Conns;
extern unsigned int Conn_inited;
extern unsigned int Conn_allocated;
extern unsigned long long Conn_id;
extern char Conn_error[512];
extern FILE *Conn_Log;
extern int debug_band;
/* queues */
extern struct Conn_queue Conn_queue_free;
/* Functions */
extern char *Conn_strerror(void);
extern void Log(const unsigned short level, char *format, ...);
extern char *Conn_errno(const struct Conn *C);
extern char *Conn_status_slot(const struct Conn *C);
extern char *Conn_status(const unsigned int flags);
extern int Conn_try_expand_buf(struct Conn *C, const int what,
const int needed);
extern char *Conn_state(const struct Conn *C);
extern long long Conn_time_diff(const struct timeval *t1,
const struct timeval *t2);
extern void Conn_last_time(const struct Conn *C, struct timeval *tv);
extern int Conn_setnonblock(const int fd);
extern char *Conn_dump(const char *buf_src, const int len_src);
extern char *Conn_dumphex(const char *buf_src, const int len_src);
extern void Conn_debug(FILE *f, const unsigned short debug);
extern void Conn_close(struct Conn *C);
extern int Conn_ignore(const struct Conn *C);
extern void Conn_expire(struct Conn *C);
extern int Conn_set_cb(struct Conn *C, const unsigned int type,
void (*f)(struct Conn *));
extern char *Conn_get_line(struct Conn *C);
extern void Conn_for_every_line(struct Conn *C,
int (*cb)(struct Conn *C, char *line));
extern void Conn_eat(struct Conn *C, const unsigned int bytes);
extern void Conn_eatall(struct Conn *C);
extern unsigned int Conn_qlen(const struct Conn *C);
extern void Conn_set(struct Conn *C, const unsigned int var,
const int val);
extern int Conn_get_fd(const struct Conn *C);
extern unsigned long long Conn_getid(const struct Conn *C);
extern char *Conn_ibuf(const struct Conn *C);
extern char *Conn_obuf(const struct Conn *C);
extern char *Conn_domain(const struct Conn *C);
extern char *Conn_type(const struct Conn *C);
/* queue stuff */
extern void Conn_queue_init(struct Conn_queue *q);
extern int Conn_queue_add(struct Conn_queue *q,
const unsigned int slot);
extern void Conn_queue_destroy(struct Conn_queue *q);
#endif
Mode |
Type |
Size |
Ref |
File |
100644 |
blob |
65 |
762bb463799a6ea2b172e34fda93fc0b74abc3e2 |
.gitignore |
100644 |
blob |
1945 |
fecf0e7a7e8580485101a179685aedc7e00affbb |
Changelog.pre109 |
100644 |
blob |
25277 |
eca8f5b703161fa7ab7849be74d1e577935aca7a |
Conn.c |
100644 |
blob |
710 |
677f5d80411be8b49a15047207f7581c1f25dc6c |
Conn.h |
100644 |
blob |
726 |
64b1bad93a84f87c3e93fc24ac5341db691ea578 |
Conn.spec.in |
100644 |
blob |
66 |
68138d781ca754b15e14c687da91ee261b2c41f3 |
Conn_config.h.in |
100644 |
blob |
19455 |
5f5c3c162e98f54c02215c881a3b9ba6fc6f8bb5 |
Conn_engine_core.c |
100644 |
blob |
8258 |
e686ef53647160d7c50f263e5d9de822b4856514 |
Conn_engine_core.h |
100644 |
blob |
3379 |
0bf0866c967ee9a20dc0150a20d59a43a3cb8017 |
Conn_engine_epoll.c |
100644 |
blob |
602 |
b648aaf1ad3c79ac5b6f425989aa5fee9a0d9f30 |
Conn_engine_epoll.h |
100644 |
blob |
2589 |
264b9b69fcb9dbda1c562316594208c753e4bacd |
Conn_engine_poll.c |
100644 |
blob |
589 |
f897f7d70dd5b17256cb51dce4637f0a8cf6291d |
Conn_engine_poll.h |
100644 |
blob |
30 |
d987fa5df957830331139935d517009e2911b0cf |
INSTALL |
100644 |
blob |
25275 |
92b8903ff3fea7f49ef5c041b67a087bca21c5ec |
LICENSE |
100644 |
blob |
1255 |
976d5d795aae2df1b265bb7bb19f9c1761db98e3 |
Makefile.in |
100644 |
blob |
192 |
5b11bdfb23857d8588845465aef993b320596b44 |
README |
100644 |
blob |
1399 |
08635341ecd426e7fb1cfb0e83c72c1e00dec586 |
TODO |
100755 |
blob |
23 |
d33bb6c4ecdce1390ce1db3c79ea3b93e22ea755 |
configure |
040000 |
tree |
- |
d4c9c4a69c5cfa2a84316967185f1661b6817779 |
docs |
100755 |
blob |
9919 |
c725a3c2d63619ef838cad8255b99935bbc81871 |
duilder |
100644 |
blob |
276 |
658123039aec67bc2d07105ad1a7ecd1ebd261fe |
duilder.conf |
040000 |
tree |
- |
aacc31d4a94c805c1444dabe0d103b6008a7659f |
examples |
Hints:
Before first commit, do not forget to setup your git environment:
git config --global user.name "your_name_here"
git config --global user.email "your@email_here"
Clone this repository using HTTP(S):
git clone https://rocketgit.com/user/catalinux/Conn
Clone this repository using ssh (do not forget to upload a key first):
git clone ssh://rocketgit@ssh.rocketgit.com/user/catalinux/Conn
Clone this repository using git:
git clone git://git.rocketgit.com/user/catalinux/Conn
You are allowed to anonymously push to this repository.
This means that your pushed commits will automatically be transformed into a
merge request:
... clone the repository ...
... make some changes and some commits ...
git push origin main