/**************************************************************************** * [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