00001
00002
00003
00004
00005
00006 #include "copyright.h"
00007
00008 #ifndef __INTERFACE__H
00009 #define __INTERFACE__H
00010
00011 #include "db.h"
00012 #include "htab.h"
00013 #include "alloc.h"
00014 #include "config.h"
00015
00016 #include <sys/types.h>
00017 #include <sys/time.h>
00018 #include <netinet/in.h>
00019 #include <arpa/inet.h>
00020 #include <netdb.h>
00021 #ifdef HAVE_SYS_SELECT_H
00022 #include <sys/select.h>
00023 #endif
00024 #include <event.h>
00025
00026
00027
00028 extern int shutdown_flag;
00029
00030
00031
00032 #define R_QUIT 1
00033 #define R_TIMEOUT 2
00034 #define R_BOOT 3
00035 #define R_SOCKDIED 4
00036 #define R_GOING_DOWN 5
00037 #define R_BADLOGIN 6
00038 #define R_GAMEDOWN 7
00039 #define R_LOGOUT 8
00040 #define R_GAMEFULL 9
00041
00042
00043
00044 #define CMD_QUIT 1
00045 #define CMD_WHO 2
00046 #define CMD_DOING 3
00047 #define CMD_PREFIX 5
00048 #define CMD_SUFFIX 6
00049 #define CMD_LOGOUT 7
00050 #define CMD_SESSION 8
00051 #define CMD_PUEBLOCLIENT 9
00052
00053 #define CMD_MASK 0xff
00054 #define CMD_NOxFIX 0x100
00055
00056 extern NAMETAB logout_cmdtable[];
00057
00058 typedef struct cmd_block CBLK;
00059
00060 struct cmd_block {
00061 struct cmd_block *nxt;
00062 char cmd[LBUF_SIZE - sizeof(struct cmd_block *)];
00063 };
00064
00065 typedef struct prog_data PROG;
00066 struct prog_data {
00067 dbref wait_cause;
00068 char *wait_regs[MAX_GLOBAL_REGS];
00069 };
00070
00071 #define DOINGLEN 45
00072 #define HUDKEYLEN 21
00073
00074 typedef struct descriptor_data DESC;
00075 struct descriptor_data {
00076 int descriptor;
00077 int flags;
00078 int retries_left;
00079 int command_count;
00080 int timeout;
00081 int host_info;
00082 char addr[256];
00083 char username[11];
00084 char doing[DOINGLEN];
00085 char hudkey[HUDKEYLEN];
00086 dbref player;
00087 char *output_prefix;
00088 char *output_suffix;
00089 int output_size;
00090 int output_tot;
00091 int output_lost;
00092 int input_size;
00093 int input_tot;
00094 int input_lost;
00095 int chokes;
00096 char input[LBUF_SIZE];
00097 int input_tail;
00098 time_t connected_at;
00099 time_t last_time;
00100 int quota;
00101 int refcount;
00102 int wait_for_input;
00103 dbref wait_cause;
00104 PROG *program_data;
00105 struct sockaddr_storage saddr;
00106 int saddr_len;
00107 void *outstanding_dnschild_query;
00108 struct descriptor_data *hashnext;
00109 struct descriptor_data *next;
00110 struct descriptor_data *prev;
00111 struct event sock_ev;
00112 struct bufferevent *sock_buff;
00113 };
00114
00115
00116 #define DS_CONNECTED 0x0001
00117 #define DS_AUTODARK 0x0002
00118 #define DS_IDENTIFIED 0x0008
00119 #define DS_DEAD 0x10000000
00120
00121 extern DESC *descriptor_list;
00122
00123
00124
00125 extern void emergency_shutdown(void);
00126 extern void shutdownsock(DESC *, int);
00127 extern void shovechars(int);
00128 extern void set_signals(void);
00129
00130
00131
00132 extern struct timeval timeval_sub(struct timeval, struct timeval);
00133 extern int msec_diff(struct timeval now, struct timeval then);
00134 extern struct timeval msec_add(struct timeval, int);
00135 extern struct timeval update_quotas(struct timeval, struct timeval);
00136 extern void handle_http(DESC *, char *);
00137 extern void raw_notify(dbref, const char *);
00138 extern void raw_notify_raw(dbref, const char *, char *);
00139 extern void raw_notify_newline(dbref);
00140 extern void hudinfo_notify(DESC *, const char *, const char *, const char *);
00141 extern void clearstrings(DESC *);
00142 extern void queue_write(DESC *, char *, int);
00143 extern void queue_string(DESC *, const char *);
00144 extern void freeqs(DESC *);
00145 extern void welcome_user(DESC *);
00146 extern void save_command(DESC *, CBLK *);
00147 extern void announce_disconnect(dbref, DESC *, const char *);
00148 extern int boot_off(dbref, char *);
00149 extern int boot_by_port(int, int, char *);
00150 extern int fetch_idle(dbref);
00151 extern int fetch_connect(dbref);
00152 extern void check_idle(void);
00153 extern void process_commands(void);
00154 extern int site_check(struct sockaddr_storage *, int, SITE *);
00155 extern void make_ulist(dbref, char *, char **);
00156 extern dbref find_connected_name(dbref, char *);
00157
00158
00159 #ifdef HUDINFO_SUPPORT
00160 extern void do_hudinfo(DESC *, char *);
00161 #endif
00162
00163
00164
00165 #define DESC_ITER_PLAYER(p,d) \
00166 for (d=(DESC *)rb_find(mudstate.desctree, (void *)p);d;d=d->hashnext)
00167
00168 #define DESC_ITER_CONN(d) \
00169 for (d=descriptor_list;(d);d=(d)->next) \
00170 if ((d)->flags & DS_CONNECTED)
00171
00172 #define DESC_ITER_ALL(d) \
00173 for (d=descriptor_list;(d);d=(d)->next)
00174
00175 #define DESC_SAFEITER_PLAYER(p,d,n) \
00176 for (d=(DESC *)rb_find(mudstate.desctree, (void *)p), \
00177 n=((d!=NULL) ? d->hashnext : NULL); \
00178 d; \
00179 d=n,n=((n!=NULL) ? n->hashnext : NULL))
00180
00181 #define DESC_SAFEITER_CONN(d,n) \
00182 for (d=descriptor_list,n=((d!=NULL) ? d->next : NULL); \
00183 d; \
00184 d=n,n=((n!=NULL) ? n->next : NULL)) \
00185 if ((d)->flags & DS_CONNECTED)
00186
00187 #define DESC_SAFEITER_ALL(d,n) \
00188 for (d=descriptor_list,n=((d!=NULL) ? d->next : NULL); \
00189 d; \
00190 d=n,n=((n!=NULL) ? n->next : NULL))
00191
00192 #endif