src/interface.h

Go to the documentation of this file.
00001 
00002 /* interface.h */
00003 
00004 /* $Id: interface.h,v 1.7 2005/08/08 10:30:11 murrayma Exp $ */
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 /* these symbols must be defined by the interface */
00027 
00028 extern int shutdown_flag;       /* if non-zero, interface should shut down */
00029 
00030 /* Disconnection reason codes */
00031 
00032 #define R_QUIT          1       /* User quit */
00033 #define R_TIMEOUT       2       /* Inactivity timeout */
00034 #define R_BOOT          3       /* Victim of @boot, @toad, or @destroy */
00035 #define R_SOCKDIED      4       /* Other end of socked closed it */
00036 #define R_GOING_DOWN    5       /* Game is going down */
00037 #define R_BADLOGIN      6       /* Too many failed login attempts */
00038 #define R_GAMEDOWN      7       /* Not admitting users now */
00039 #define R_LOGOUT        8       /* Logged out w/o disconnecting */
00040 #define R_GAMEFULL      9       /* Too many players logged in */
00041 
00042 /* Logged out command tabel definitions */
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;         /* Used by @prog */
00103     dbref wait_cause;           /* Used by @prog */
00104     PROG *program_data;
00105     struct sockaddr_storage saddr;      /* added 3/6/90 SCG */
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 /* flags in the flag field */
00116 #define DS_CONNECTED    0x0001  /* player is connected */
00117 #define DS_AUTODARK     0x0002  /* Wizard was auto set dark. */
00118 #define DS_IDENTIFIED   0x0008
00119 #define DS_DEAD     0x10000000 /* Socket has disconnected, ignore. */
00120 
00121 extern DESC *descriptor_list;
00122 
00123 /* from the net interface */
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 /* from netcommon.c */
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 /* from hcode/btech/hudinfo.c */
00159 #ifdef HUDINFO_SUPPORT
00160 extern void do_hudinfo(DESC *, char *);
00161 #endif
00162 
00163 /* From predicates.c */
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

Generated on Mon May 28 04:25:24 2007 for BattletechMUX by  doxygen 1.4.7