]> jfr.im git - irc/quakenet/newserv.git/blame - nterface/esockets.h
Merged in nterface NU.
[irc/quakenet/newserv.git] / nterface / esockets.h
CommitLineData
18f8bd28
CP
1/*
2 Easy async socket library with HELIX encryption and authentication
3 Copyright (C) 2004 Chris Porter.
4*/
5
6#ifndef __esockets_H
7#define __esockets_H
8
9#include "../lib/helix.h"
10
11#define ESOCKET_UNIX_DOMAIN ESOCKET_LISTENING
12#define ESOCKET_UNIX_DOMAIN_CONNECTED ESOCKET_INCOMING
13#define ESOCKET_TCP_LISTENING ESOCKET_LISTENING
14#define ESOCKET_INCOMING_TCP ESOCKET_INCOMING
15#define ESOCKET_OUTGOING_TCP ESOCKET_OUTGOING
16#define ESOCKET_OUTGOING_TCP_CONNECTED ESOCKET_OUTGOING_CONNECTED
17
18#define ESOCKET_LISTENING 1
19#define ESOCKET_OUTGOING 2
20#define ESOCKET_INCOMING 3
21#define ESOCKET_OUTGOING_CONNECTED 4
22
23#define ST_CONNECTING 1
24#define ST_CONNECTED 2
25#define ST_LISTENING 3
26#define ST_DISCONNECT 4
27#define ST_BLANK 5
28
29#define BLANK_TOKEN 0
30
31#define BUF_CONT -1
32#define BUF_OVERFLOW -2
33
34#define MAX_BUFSIZE 50000
35
36#define USED_MAC_LEN 3
37
38typedef unsigned short packet_t;
39
40#define MAX_BINARY_LINE_SIZE MAX_BUFSIZE
41#define MAX_ASCII_LINE_SIZE MAX_BINARY_LINE_SIZE - sizeof(packet_t) - USED_MAC_LEN
42
43#define MAX_OUT_QUEUE_SIZE 1500
44
45struct buffer;
46struct esocket;
47
48typedef int (*parse_event)(struct esocket *sock);
49
50typedef int (*line_event)(struct esocket *sock, char *newline);
51
52typedef struct esocket_in_buffer {
53 char data[MAX_BUFSIZE];
54 char *writepos;
55 char *curpos;
56 char *startpos;
57 unsigned short buffer_size;
58 parse_event on_parse;
59 packet_t packet_length;
60} in_buffer;
61
62typedef struct esocket_packet {
63 char *line;
64 packet_t size;
65 struct esocket_packet *next;
66} esocket_packet;
67
68typedef struct esocket_out_buffer {
69 struct esocket_packet *head;
70 struct esocket_packet *end;
71 unsigned short count;
72} out_buffer;
73
74typedef void (*esocket_event)(struct esocket *socket);
75
76typedef struct esocket_events {
77 esocket_event on_connect;
78 esocket_event on_accept;
79 esocket_event on_disconnect;
80 line_event on_line;
81} esocket_events;
82
83typedef struct esocket {
84 int fd;
85 struct esocket_in_buffer in;
86 struct esocket_out_buffer out;
87 char socket_type;
88 char socket_status;
89 struct esocket_events events;
90 struct esocket *next;
91 unsigned short token;
92 void *tag;
93 helix_ctx keysend;
94 helix_ctx keyreceive;
95} esocket;
96
97struct esocket *esocket_add(int fd, char socket_type, struct esocket_events *events, unsigned short token);
98struct esocket *find_esocket_from_fd(int fd);
99void esocket_poll_event(int fd, short events);
100void esocket_disconnect(struct esocket *active);
101int buffer_parse_ascii(struct esocket *sock);
102int esocket_read(struct esocket *sock);
103int esocket_write(struct esocket *sock, char *buffer, int bytes);
104int esocket_write_line(struct esocket *sock, char *format, ...);
105unsigned short esocket_token(void);
106struct esocket *find_esocket_from_fd(int fd);
107void esocket_clean_by_token(unsigned short token);
108void switch_buffer_mode(struct esocket *sock, char *key, unsigned char *ournonce, unsigned char *theirnonce);
109void esocket_disconnect_when_complete(struct esocket *active);
110int esocket_raw_write(struct esocket *sock, char *buffer, int bytes);
111
112#endif
113
114