/Conn.h (5cfc105feca3f770a9ce2c1d8532a4d7a775705f) (7096 bytes) (mode 100644) (type blob)
#ifndef _Conn_h
#define _Conn_h 1
#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 <sys/poll.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
struct Conn
{
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 */
unsigned int 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 */
unsigned int 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);
};
/* 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)(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;
/* Functions */
extern char *Conn_strerror(void);
extern int Conn_init(unsigned int max);
extern void Conn_close(struct Conn *C);
extern ssize_t Conn_send(struct Conn *C, void *buf, size_t count);
extern ssize_t Conn_recv(struct Conn *C, void *buf, size_t count);
extern struct Conn *Conn_socket(int domain, int type, int port);
extern char *Conn_status(unsigned int flags);
extern int Conn_poll(int timeout);
extern int Conn_enqueue(struct Conn *C, void *buf, size_t count);
extern void Conn_debug(FILE *f, unsigned short debug);
extern struct Conn *Conn_connect(int domain, int type, char *addr, int port);
extern char *Conn_dump(char *buf_src, int len_src);
extern char *Conn_dumphex(char *buf_src, int len_src);
extern int Conn_nodelay(struct Conn *C);
extern void Conn_rollback(struct Conn *C, unsigned int bytes);
extern char *Conn_strstr(struct Conn *C, char *str);
extern unsigned int Conn_qlen(struct Conn *C);
extern void Conn_eat(struct Conn *C, unsigned int bytes);
extern void Conn_eatall(struct Conn *C);
extern char *Conn_ibuf(struct Conn *C);
extern char *Conn_obuf(struct Conn *C);
extern int Conn_try_expand_buf(struct Conn *C, int what, int needed);
extern int Conn_band(struct Conn *C, unsigned int width, unsigned int factor);
extern void Conn_set(struct Conn *C, int var, unsigned int val);
extern char *Conn_ostrstr(struct Conn *C, unsigned int off, char *str);
extern unsigned long long Conn_getid(struct Conn *C);
extern struct Conn *Conn_get(unsigned long long id);
extern int Conn_get_fd(struct Conn *C);
extern void Conn_last_time(struct Conn *C, struct timeval *tv);
extern int Conn_set_cb(struct Conn *C, unsigned int type,
void (*f)(struct Conn *));
extern char *Conn_get_line(struct Conn *C);
#endif
Mode |
Type |
Size |
Ref |
File |
100644 |
blob |
49 |
dff4e6d7fcaef8e156d19d0a93a79661df3fde13 |
.gitignore |
100644 |
blob |
1945 |
fecf0e7a7e8580485101a179685aedc7e00affbb |
Changelog.pre109 |
100644 |
blob |
40172 |
fdc5bb1c7bedafcfddf964b855afc4c05abf6b8a |
Conn.c |
100644 |
blob |
7096 |
5cfc105feca3f770a9ce2c1d8532a4d7a775705f |
Conn.h |
100644 |
blob |
726 |
64b1bad93a84f87c3e93fc24ac5341db691ea578 |
Conn.spec.in |
100644 |
blob |
30 |
d987fa5df957830331139935d517009e2911b0cf |
INSTALL |
100644 |
blob |
25275 |
92b8903ff3fea7f49ef5c041b67a087bca21c5ec |
LICENSE |
100644 |
blob |
726 |
73073f4ae39f745ea430ec896644697fcbd4fd30 |
Makefile.in |
100644 |
blob |
192 |
5b11bdfb23857d8588845465aef993b320596b44 |
README |
100644 |
blob |
1453 |
b9f9dab2d0bb2762dea406c9e87d34eb38a18d9d |
TODO |
100755 |
blob |
23 |
d33bb6c4ecdce1390ce1db3c79ea3b93e22ea755 |
configure |
040000 |
tree |
- |
d4c9c4a69c5cfa2a84316967185f1661b6817779 |
docs |
100755 |
blob |
8765 |
3ae028d745b2a369ebef7d24ecfee708f110ce72 |
duilder |
100644 |
blob |
250 |
13cd330b31d5dfd5270da498883dba242095a09d |
duilder.conf |
040000 |
tree |
- |
3be8480b1f34d52212447fb55da1c3cb80317c1a |
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