3 Copyright (C) 2004 Chris Porter.
10 #include <netinet/in.h>
12 #include "../lib/sstring.h"
19 #define BF_UNLOADED 0xFE
22 #define SS_VERSIONED 0x01
23 #define SS_AUTHENTICATED 0x02
25 #define NTERFACER_PORT 2438
29 #define PROTOCOL_VERSION "4"
30 #define ANTI_FULL_VERSION "service_link " PROTOCOL_VERSION
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
);
37 typedef struct handler
{
39 int args
; /* MINIMUM ARGUMENTS */
40 handler_function function
;
45 typedef struct service_node
{
47 struct handler
*handlers
;
48 struct service_node
*next
;
51 typedef struct rline
{
52 struct handler
*handler
;
54 struct service_node
*service
;
55 char buf
[MAX_BUFSIZE
];
59 rline_callback callback
;
60 struct esocket
*socket
;
63 typedef struct permitted
{
69 typedef struct sconnect
{
71 char response
[32 * 2 + 1], challenge
[32 * 2 + 1];
73 struct permitted
*permit
;
74 unsigned char ournonce
[16];
77 extern struct nterface_auto_log
*nrl
;
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
, ...);
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
);
90 int load_permits(void);
91 int setup_listening_socket(void);
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
);
99 void *nterfacer_sendline(char *service
, char *command
, int argc
, char **argv
, rline_callback callback
, void *tag
);
100 void nterfacer_freeline(void *arg
);