]> jfr.im git - irc/quakenet/newserv.git/blame - nterfacer/nterfacer.h
Add multiple uplink/hub/server support.
[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
19
20#define SS_IDLE 0x00
21#define SS_VERSIONED 0x01
22#define SS_AUTHENTICATED 0x02
23
24#define NTERFACER_PORT 2438
25
26#define MAX_ARGS 100
27
80d91dd6 28#define PROTOCOL_VERSION "4"
18f8bd28
CP
29#define ANTI_FULL_VERSION "service_link " PROTOCOL_VERSION
30
a690fb9f
CP
31struct rline;
32
33typedef int (*handler_function)(struct rline *ri, int argc, char **argv);
34
18f8bd28
CP
35typedef struct handler {
36 sstring *command;
37 int args; /* MINIMUM ARGUMENTS */
a690fb9f 38 handler_function function;
18f8bd28 39 struct handler *next;
504f62c7 40 void *service;
18f8bd28
CP
41} handler;
42
43typedef struct service_node {
44 sstring *name;
45 struct handler *handlers;
46 struct service_node *next;
47} service_node;
48
49typedef struct rline {
50 struct handler *handler;
51 int id;
52 struct service_node *service;
53 char buf[MAX_BUFSIZE];
54 char *curpos;
55 struct rline *next;
56 void *tag;
57 struct esocket *socket;
58} rline;
59
60typedef struct permitted {
61 sstring *hostname;
62 sstring *password;
63 in_addr_t ihost;
64} permitted;
65
66typedef struct sconnect {
67 int status;
1ac1d43c
CP
68 char response[32 * 2 + 1], challenge[32 * 2 + 1];
69 unsigned char iv[16];
18f8bd28 70 struct permitted *permit;
1ac1d43c 71 unsigned char ournonce[16];
18f8bd28
CP
72} sconnect;
73
74extern struct nterface_auto_log *nrl;
75
18f8bd28
CP
76struct service_node *register_service(char *name);
77struct handler *register_handler(struct service_node *service, char *command, int args, handler_function fp);
78void deregister_service(struct service_node *service);
504f62c7 79void deregister_handler(struct handler *hp);
18f8bd28
CP
80int respond(struct rline *li, int argc, ...);
81int error_respond(struct rline *li, int error_code, char *format, ...);
82
83int ri_append(struct rline *li, char *format, ...);
84int ri_error(struct rline *li, int error_code, char *format, ...);
85int ri_final(struct rline *li);
86
87int load_permits(void);
88int setup_listening_socket(void);
89
90void nterfacer_accept_event(struct esocket *socket);
91void nterfacer_disconnect_event(struct esocket *socket);
92int nterfacer_line_event(struct esocket *socket, char *newline);
93int nterfacer_new_rline(char *line, struct esocket *socket, int *number);
94struct sconnect *find_sconnect_from_fd(int fd);
95
96#endif
97