/****************************************************************************
* [S]imulated [M]edieval [A]dventure multi[U]ser [G]ame | *
* -----------------------------------------------------------| \\._.// *
* SmaugWiz (C) 1998 by Russ Pillsbury (Windows NT version) | (0...0) *
* -----------------------------------------------------------| ).:.( *
* SMAUG (C) 1994, 1995, 1996 by Derek Snider | {o o} *
* -----------------------------------------------------------| / ' ' \ *
* SMAUG code team: Thoric, Altrag, Blodkai, Narn, Haus, |~'~.VxvxV.~'~*
* Scryn, Swordbearer, Rennard, Tricops, and Gorog. | *
* ------------------------------------------------------------------------ *
* Merc 2.1 Diku Mud improvments copyright (C) 1992, 1993 by Michael *
* Chastain, Michael Quan, and Mitchell Tse. *
* Original Diku Mud copyright (C) 1990, 1991 by Sebastian Hammer, *
* Michael Seifert, Hans Henrik Staerfeldt, Tom Madsen, and Katja Nyboe. *
* ------------------------------------------------------------------------ *
* Socket Descriptors Interface file *
****************************************************************************/
#ifndef DESCRIPTOR_H
#define DESCRIPTOR_H
class host_and_name_lookup {
public:
host_and_name_lookup () { memset (this, 0,
sizeof (host_and_name_lookup)); }
// These are used by WSAAsyncGetHostByAddr ()
char hostdata [MAXGETHOSTSTRUCT];
HANDLE hRequestHandle;
struct in_addr sin_addr;
// These are used by the identd stuff
char username [64];
UINT sAuth; // Auth Socket #
struct sockaddr_in authsock; // Address of the authentication
struct sockaddr_in us; // Address of our socket to this player
struct sockaddr_in them; // Address of our socket to this player
};
// Descriptor (channel) class.
class CDescriptor {
public:
CDescriptor () { Empty (); }
void Empty ()
{ ClearAddrRange (&m_pSnoopBy, &m_PrevColor,
sizeof (m_PrevColor)); }
BOOL IsCommandReady () { return m_Incomm [0] != '\0'; }
void ReadFromBuffer ();
BOOL ReadFromDescriptor ();
void WriteToBuffer (const char* txt, int length = 0);
BOOL WriteToDescriptor (char *txt, int length = 0);
BOOL ProcessOutput (BOOL fPrompt);
void GetPagerInput ();
BOOL PagerOutput ();
void ShowString (char *input);
void DisplayPrompt ();
void GetConnectionInfo ();
void SetDisconnecting () { m_bCloseSocket = TRUE; }
BOOL IsDisconnecting () { return m_bCloseSocket; }
void Shutdown ();
BOOL IsHost () { return m_pHost && *m_pHost; }
CDescriptor *m_pSnoopBy;
CCharacter *m_pCharacter;
CCharacter *m_pOriginal;
char *m_pHost;
CSmaugSocket *m_pSocket;
host_and_name_lookup *m_HostAndName; // Gets players site and user name
short m_Connected;
BOOL m_bFcommand;
char m_Inbuf [4 * MAX_INPUT_LENGTH];
char m_Incomm [MAX_INPUT_LENGTH];
char m_Inlast [MAX_INPUT_LENGTH];
int m_Repeat;
char *m_pOutbuf;
int m_Outsize;
int m_Outtop;
int m_bCloseSocket; // Close socket & retire Desc. when empty.
// Note: All below added by Smaug
int port;
int m_DescNo;
ULONG m_Idle;
short lines;
short scrlen;
char *pagebuf;
ULONG pagesize;
int pagetop;
char *pagepoint;
char pagecmd;
int auth_inc;
int auth_state;
char abuf [256];
int auth_fd;
char *user;
int atimes;
int newstate;
UCHAR m_PrevColor;
};
class CDescriptorList : public CPtrList {
public:
CDescriptorList () {}
CDescriptor *GetNext (POSITION& pos)
{ return (CDescriptor*) CPtrList::GetNext (pos); }
CDescriptor *GetPrev (POSITION& pos)
{ return (CDescriptor*) CPtrList::GetPrev (pos); }
void AddHead (CDescriptor* d)
{ CPtrList::AddHead (d); d->m_DescNo = GetCount (); }
void AddTail (CDescriptor* d)
{ CPtrList::AddTail (d); d->m_DescNo = GetCount (); }
};
extern CDescriptorList DList; // List of connected player descriptors
extern CPtrList DFreeList; // list of free descriptors
#ifdef SMAUGSERVER_CPP
CDescriptorList DList;
CPtrList DFreeList;
#endif
extern HWND hQryDlgBox; // handle of modeless dialog box
// @@@ My junk
#ifdef SMAUGSERVER_CPP
char echo_off_str [] = { IAC, WILL, TELOPT_ECHO, '\0' };
char echo_on_str [] = { IAC, WONT, TELOPT_ECHO, '\0' };
char go_ahead_str [] = { IAC, GA, '\0' };
#endif
extern char echo_off_str [];
extern char echo_on_str [];
extern char go_ahead_str [];
#endif