]> jfr.im git - irc/quakenet/newserv.git/blame - nterface/esockets.h
r439@blue (orig r429): slug | 2006-02-23 13:39:37 +0000
[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"
9be751b7 10#include <sys/types.h>
632cc7de 11#include <ctype.h>
18f8bd28
CP
12
13#define ESOCKET_UNIX_DOMAIN ESOCKET_LISTENING
14#define ESOCKET_UNIX_DOMAIN_CONNECTED ESOCKET_INCOMING
15#define ESOCKET_TCP_LISTENING ESOCKET_LISTENING
16#define ESOCKET_INCOMING_TCP ESOCKET_INCOMING
17#define ESOCKET_OUTGOING_TCP ESOCKET_OUTGOING
18#define ESOCKET_OUTGOING_TCP_CONNECTED ESOCKET_OUTGOING_CONNECTED
19
20#define ESOCKET_LISTENING 1
21#define ESOCKET_OUTGOING 2
22#define ESOCKET_INCOMING 3
23#define ESOCKET_OUTGOING_CONNECTED 4
24
25#define ST_CONNECTING 1
26#define ST_CONNECTED 2
27#define ST_LISTENING 3
28#define ST_DISCONNECT 4
29#define ST_BLANK 5
30
31#define BLANK_TOKEN 0
32
33#define BUF_CONT -1
34#define BUF_OVERFLOW -2
5757e1ef 35#define BUF_ERROR -3
18f8bd28
CP
36
37#define MAX_BUFSIZE 50000
38
39#define USED_MAC_LEN 3
40
41typedef unsigned short packet_t;
42
43#define MAX_BINARY_LINE_SIZE MAX_BUFSIZE
44#define MAX_ASCII_LINE_SIZE MAX_BINARY_LINE_SIZE - sizeof(packet_t) - USED_MAC_LEN
45
701500af 46#define MAX_OUT_QUEUE_SIZE 5000
18f8bd28
CP
47
48struct buffer;
49struct esocket;
50
51typedef int (*parse_event)(struct esocket *sock);
52
53typedef int (*line_event)(struct esocket *sock, char *newline);
54
55typedef struct esocket_in_buffer {
56 char data[MAX_BUFSIZE];
57 char *writepos;
58 char *curpos;
59 char *startpos;
60 unsigned short buffer_size;
61 parse_event on_parse;
62 packet_t packet_length;
63} in_buffer;
64
65typedef struct esocket_packet {
66 char *line;
67 packet_t size;
a690fb9f 68 packet_t startpos;
18f8bd28
CP
69 struct esocket_packet *next;
70} esocket_packet;
71
72typedef struct esocket_out_buffer {
73 struct esocket_packet *head;
74 struct esocket_packet *end;
75 unsigned short count;
76} out_buffer;
77
78typedef void (*esocket_event)(struct esocket *socket);
79
80typedef struct esocket_events {
81 esocket_event on_connect;
82 esocket_event on_accept;
83 esocket_event on_disconnect;
84 line_event on_line;
85} esocket_events;
86
87typedef struct esocket {
88 int fd;
89 struct esocket_in_buffer in;
90 struct esocket_out_buffer out;
91 char socket_type;
92 char socket_status;
93 struct esocket_events events;
94 struct esocket *next;
95 unsigned short token;
96 void *tag;
97 helix_ctx keysend;
98 helix_ctx keyreceive;
60deb130
CP
99 unsigned char sendnonce[NONCE_LEN];
100 unsigned char recvnonce[NONCE_LEN];
18f8bd28
CP
101} esocket;
102
103struct esocket *esocket_add(int fd, char socket_type, struct esocket_events *events, unsigned short token);
104struct esocket *find_esocket_from_fd(int fd);
105void esocket_poll_event(int fd, short events);
106void esocket_disconnect(struct esocket *active);
107int buffer_parse_ascii(struct esocket *sock);
108int esocket_read(struct esocket *sock);
109int esocket_write(struct esocket *sock, char *buffer, int bytes);
110int esocket_write_line(struct esocket *sock, char *format, ...);
111unsigned short esocket_token(void);
112struct esocket *find_esocket_from_fd(int fd);
113void esocket_clean_by_token(unsigned short token);
114void switch_buffer_mode(struct esocket *sock, char *key, unsigned char *ournonce, unsigned char *theirnonce);
115void esocket_disconnect_when_complete(struct esocket *active);
116int esocket_raw_write(struct esocket *sock, char *buffer, int bytes);
117
632cc7de
CP
118#ifndef BYTE_ORDER
119#ifndef _BYTE_ORDER
120#ifndef __BYTE_ORDER
121#error No byte order defined!
122#else
123#define BYTE_ORDER __BYTE_ORDER
124#endif
125#else
126#define BYTE_ORDER _BYTE_ORDER
127#endif
128#endif
129
60deb130
CP
130#ifndef htonq
131#if BYTE_ORDER == BIG_ENDIAN
132 #define htonq(x) x
133 #define ntohq(x) x
134#else
135 #define htonq(x) ntohq(x)
136 #define ntohq(x) (((u_int64_t)htonl((x)>>32))|(((u_int64_t)htonl(x))<<32))
137#endif
138#endif
139
18f8bd28
CP
140#endif
141
142