]> jfr.im git - irc/quakenet/newserv.git/blob - nterfacer/nterfacer.h
Port to git.
[irc/quakenet/newserv.git] / nterfacer / nterfacer.h
1 /*
2 nterfacer
3 Copyright (C) 2004 Chris Porter.
4 */
5
6 #ifndef __nterfacer_H
7 #define __nterfacer_H
8
9 #include <sys/types.h>
10 #include <netinet/in.h>
11
12 #include "../lib/sstring.h"
13
14 #include "esockets.h"
15 #include "library.h"
16
17 #define BF_OK 0x00
18 #define BF_OVER 0xFF
19 #define BF_UNLOADED 0xFE
20
21 #define SS_IDLE 0x00
22 #define SS_VERSIONED 0x01
23 #define SS_AUTHENTICATED 0x02
24
25 #define NTERFACER_PORT 2438
26
27 #define MAX_ARGS 100
28
29 #define PROTOCOL_VERSION "4"
30 #define ANTI_FULL_VERSION "service_link " PROTOCOL_VERSION
31
32 struct rline;
33
34 typedef int (*handler_function)(struct rline *ri, int argc, char **argv);
35 typedef void (*rline_callback)(int failed, int linec, char **linev, void *tag);
36
37 typedef struct handler {
38 sstring *command;
39 int args; /* MINIMUM ARGUMENTS */
40 handler_function function;
41 struct handler *next;
42 void *service;
43 } handler;
44
45 typedef struct service_node {
46 sstring *name;
47 struct handler *handlers;
48 struct service_node *next;
49 } service_node;
50
51 typedef struct rline {
52 struct handler *handler;
53 int id;
54 struct service_node *service;
55 char buf[MAX_BUFSIZE];
56 char *curpos;
57 struct rline *next;
58 void *tag;
59 rline_callback callback;
60 struct esocket *socket;
61 } rline;
62
63 typedef struct permitted {
64 sstring *hostname;
65 sstring *password;
66 in_addr_t ihost;
67 } permitted;
68
69 typedef struct sconnect {
70 int status;
71 char response[32 * 2 + 1], challenge[32 * 2 + 1];
72 unsigned char iv[16];
73 struct permitted *permit;
74 unsigned char ournonce[16];
75 } sconnect;
76
77 extern struct nterface_auto_log *nrl;
78
79 struct service_node *register_service(char *name);
80 struct handler *register_handler(struct service_node *service, char *command, int args, handler_function fp);
81 void deregister_service(struct service_node *service);
82 void deregister_handler(struct handler *hp);
83 int respond(struct rline *li, int argc, ...);
84 int error_respond(struct rline *li, int error_code, char *format, ...);
85
86 int ri_append(struct rline *li, char *format, ...) __attribute__ ((format (printf, 2, 3)));
87 int ri_error(struct rline *li, int error_code, char *format, ...) __attribute__ ((format (printf, 3, 4)));
88 int ri_final(struct rline *li);
89
90 int load_permits(void);
91 int setup_listening_socket(void);
92
93 void nterfacer_accept_event(struct esocket *socket);
94 void nterfacer_disconnect_event(struct esocket *socket);
95 int nterfacer_line_event(struct esocket *socket, char *newline);
96 int nterfacer_new_rline(char *line, struct esocket *socket, int *number);
97 struct sconnect *find_sconnect_from_fd(int fd);
98
99 void *nterfacer_sendline(char *service, char *command, int argc, char **argv, rline_callback callback, void *tag);
100 void nterfacer_freeline(void *arg);
101
102 #endif