]> jfr.im git - irc/quakenet/newserv.git/blame - nterfacer/nterfacer.h
TRUSTS: require sqlite
[irc/quakenet/newserv.git] / nterfacer / nterfacer.h
CommitLineData
18f8bd28
CP
1/*
2 nterfacer
3 Copyright (C) 2004 Chris Porter.
4*/
5
6#ifndef __nterfacer_H
7#define __nterfacer_H
8
6bc02131 9#include <sys/types.h>
18f8bd28
CP
10#include <netinet/in.h>
11
8186335d
CP
12#include "../lib/sstring.h"
13
18f8bd28
CP
14#include "esockets.h"
15#include "library.h"
16
17#define BF_OK 0x00
18#define BF_OVER 0xFF
f435bd22 19#define BF_UNLOADED 0xFE
18f8bd28
CP
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
80d91dd6 29#define PROTOCOL_VERSION "4"
18f8bd28
CP
30#define ANTI_FULL_VERSION "service_link " PROTOCOL_VERSION
31
a690fb9f
CP
32struct rline;
33
34typedef int (*handler_function)(struct rline *ri, int argc, char **argv);
2a6be5fe 35typedef void (*rline_callback)(int failed, int linec, char **linev, void *tag);
a690fb9f 36
18f8bd28
CP
37typedef struct handler {
38 sstring *command;
39 int args; /* MINIMUM ARGUMENTS */
a690fb9f 40 handler_function function;
18f8bd28 41 struct handler *next;
504f62c7 42 void *service;
18f8bd28
CP
43} handler;
44
45typedef struct service_node {
46 sstring *name;
47 struct handler *handlers;
48 struct service_node *next;
49} service_node;
50
51typedef 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;
e5a7c318 59 rline_callback callback;
18f8bd28
CP
60 struct esocket *socket;
61} rline;
62
63typedef struct permitted {
64 sstring *hostname;
65 sstring *password;
66 in_addr_t ihost;
67} permitted;
68
69typedef struct sconnect {
70 int status;
1ac1d43c
CP
71 char response[32 * 2 + 1], challenge[32 * 2 + 1];
72 unsigned char iv[16];
18f8bd28 73 struct permitted *permit;
1ac1d43c 74 unsigned char ournonce[16];
18f8bd28
CP
75} sconnect;
76
77extern struct nterface_auto_log *nrl;
78
18f8bd28
CP
79struct service_node *register_service(char *name);
80struct handler *register_handler(struct service_node *service, char *command, int args, handler_function fp);
81void deregister_service(struct service_node *service);
504f62c7 82void deregister_handler(struct handler *hp);
18f8bd28
CP
83int respond(struct rline *li, int argc, ...);
84int error_respond(struct rline *li, int error_code, char *format, ...);
85
bb4b25ee
CP
86int ri_append(struct rline *li, char *format, ...) __attribute__ ((format (printf, 2, 3)));
87int ri_error(struct rline *li, int error_code, char *format, ...) __attribute__ ((format (printf, 3, 4)));
18f8bd28
CP
88int ri_final(struct rline *li);
89
90int load_permits(void);
91int setup_listening_socket(void);
92
93void nterfacer_accept_event(struct esocket *socket);
94void nterfacer_disconnect_event(struct esocket *socket);
95int nterfacer_line_event(struct esocket *socket, char *newline);
96int nterfacer_new_rline(char *line, struct esocket *socket, int *number);
97struct sconnect *find_sconnect_from_fd(int fd);
98
e5a7c318
CP
99void *nterfacer_sendline(char *service, char *command, int argc, char **argv, rline_callback callback, void *tag);
100void nterfacer_freeline(void *arg);
18f8bd28 101
e5a7c318 102#endif