#ifndef MUSH_TYPES_H
#define MUSH_TYPES_H
#include "copyrite.h"
#include "options.h"
#include <stdio.h>
#ifdef WIN32
#include <windows.h>
#endif
#ifdef HAS_OPENSSL
#include <openssl/ssl.h>
#endif
/* Function number type */
typedef double NVAL;
/* Dbref type */
typedef int dbref;
/** The type that stores the warning bitmask */
typedef long int warn_type;
/* special dbref's */
#define NOTHING (-1) /* null dbref */
#define AMBIGUOUS (-2) /* multiple possibilities, for matchers */
#define HOME (-3) /* virtual room, represents mover's home */
#define ANY_OWNER (-2) /* For lstats and @stat */
#define INTERACT_SEE 0x1
#define INTERACT_HEAR 0x2
#define INTERACT_MATCH 0x4
#define INTERACT_PRESENCE 0x8
typedef unsigned char *object_flag_type;
/* Boolexps and locks */
typedef const char *lock_type;
typedef struct lock_list lock_list;
typedef struct pe_info PE_Info;
typedef struct debug_info Debug_Info;
/** process_expression() info
* This type is used by process_expression(). In all but parse.c,
* this should be left as an incompletely-specified type, making it
* impossible to declare anything but pointers to it.
*
* Unfortunately, we need to know what it is in funlist.c, too,
* to prevent denial-of-service attacks. ARGH! Don't look at
* this struct unless you _really_ want to get your hands dirty.
*/
struct pe_info {
int fun_invocations; /**< Invocation count */
int fun_depth; /**< Recursion count */
int nest_depth; /**< Depth of function nesting, for DEBUG */
int call_depth; /**< Function call counter */
Debug_Info *debug_strings; /**< DEBUG infromation */
};
/* new attribute foo */
typedef struct attr ATTR;
typedef ATTR ALIST;
/** A text block
*/
struct text_block {
int nchars; /**< Number of characters in the block */
struct text_block *nxt; /**< Pointer to next block in queue */
unsigned char *start; /**< Start of text */
unsigned char *buf; /**< Current position in text */
};
/** A queue of text blocks.
*/
struct text_queue {
struct text_block *head; /**< Pointer to the head of the queue */
struct text_block **tail; /**< Pointer to pointer to tail of the queue */
};
/* Descriptor foo */
#define DOING_LEN 40
/** Pueblo checksum length.
* Pueblo uses md5 now, but if they switch to sha1, this will still
* be safe.
*/
#define PUEBLO_CHECKSUM_LEN 40
typedef struct descriptor_data DESC;
/** A player descriptor's data.
* This structure associates a connection's socket (file descriptor)
* with a lot of other relevant information.
*/
struct descriptor_data {
int descriptor; /**< Connection socket (fd) */
int connected; /**< Connection status */
char addr[101]; /**< Hostname of connection source */
char ip[101]; /**< IP address of connection source */
dbref player; /**< Dbref of player associated with connection */
unsigned char *output_prefix; /**< Text to show before output */
unsigned char *output_suffix; /**< Text to show after output */
int output_size; /**< Size of output left to send */
struct text_queue output; /**< Output text queue */
struct text_queue input; /**< Input text queue */
unsigned char *raw_input; /**< Pointer to start of next raw input */
unsigned char *raw_input_at; /**< Pointer to position in raw input */
long connected_at; /**< Time of connection */
long last_time; /**< Time of last activity */
int quota; /**< Quota of commands allowed */
int cmds; /**< Number of commands sent */
int hide; /**< Hide status */
char doing[DOING_LEN]; /**< Player's doing string */
#ifdef NT_TCP
/* these are for the Windows NT TCP/IO */
char input_buffer[512]; /**< WinNT: buffer for reading */
char output_buffer[512]; /**< WinNT: buffer for writing */
OVERLAPPED InboundOverlapped; /**< WinNT: for asynchronous reading */
OVERLAPPED OutboundOverlapped; /**< WinNT: for asynchronous writing */
BOOL bWritePending; /**< WinNT: true if in process of writing */
BOOL bConnectionDropped; /**< WinNT: true if we cannot send to player */
BOOL bConnectionShutdown; /**< WinNT: true if connection has been shutdown */
#endif
struct descriptor_data *next; /**< Next descriptor in linked list */
struct descriptor_data *prev; /**< Previous descriptor in linked list */
struct mail *mailp; /**< Pointer to start of player's mail chain */
int conn_flags; /**< Flags of connection (telnet status, etc.) */
unsigned long input_chars; /**< Characters received */
unsigned long output_chars; /**< Characters sent */
int width; /**< Screen width */
int height; /**< Screen height */
char *ttype; /**< Terminal type */
#ifdef HAS_OPENSSL
SSL *ssl; /**< SSL object */
int ssl_state; /**< Keep track of state of SSL object */
#endif
char checksum[PUEBLO_CHECKSUM_LEN + 1]; /**< Pueblo checksum */
};
/* max length of command argument to process_command */
#define MAX_COMMAND_LEN 4096
#define BUFFER_LEN ((MAX_COMMAND_LEN)*2)
#define MAX_ARG 63
/* Channel stuff */
typedef struct chanuser CHANUSER;
typedef struct chanlist CHANLIST;
typedef struct channel CHAN;
#endif