#define REMOTE_SERVER 1
#define REMOTE_CLIENT 2
#define REMOTE_INIT_MSGTEXT("APPC Remote")
// commands for the remote server begin with this
#define COMMANDCHAR TEXT('@')
#define CTRLC 3
#define CLIENT_ATTR FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_RED|BACKGROUND_BLUE
#define SERVER_ATTR FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE|BACKGROUND_RED
//
//Some General purpose Macros
//
#define MINIMUM(x,y) ((x)>(y)?(y):(x))
#define MAXIMUM(x,y) ((x)>(y)?(x):(y))
// All because printf does not work
// with NT IO redirection
#define WRITEF(wsprintfargs) \
{ \
HANDLE h = GetStdHandle(STD_OUTPUT_HANDLE); \
wchar_tVBuff[256]; \
DWORD tmp; \
wsprintf wsprintfargs;\
WriteConsole(h, VBuff, lstrlen(VBuff), &tmp, NULL);\
}
#define HOSTNAMELEN 16
#define CHARS_PER_LINE 80
// magic number is version number is 00yyyymm (yyyy = year, mm = month)
#define MAGICNUMBER 0x00199406
#define BEGINMARK '\xfe'
#define ENDMARK '\xff'
#define LINESTOSEND 200
#define MAX_SESSION 10
typedef struct
{
DWORD MagicNumber;// version of client software
TCHAR ClientName[HOSTNAMELEN];// name of client machine
DWORD LinesToSend;// lines to send on startup
DWORD Flag;// optional flags
} SESSION_STARTUPINFO;
typedef struct
{
DWORD MagicNumber; // New Remote
DWORD FileSize; // Num bytes sent
} SESSION_STARTREPLY;
typedef struct
{
TCHAR Name[HOSTNAMELEN]; //Name of client Machine;
BOOL Active; //Client at the other end connected
BOOL CommandRcvd; //True if a command recieved
BOOL SendOutput; //True if Sendoutput output
tpconvid_t tpconv;//TP and conversation IDs for client's APPC connection
HANDLE rSaveFile; //Sessions read handle to SaveFile
HANDLE hThread; //Session Thread
HANDLE MoreData; //Event handle set if data available to be read
HANDLEDoClose;//Event saying that this session should close
} SESSION_TYPE;
VOID Server(TCHAR *ChildCmd, TCHAR *PipeName);
VOID Client(TCHAR *local_lu, TCHAR *server_lu, TCHAR *tp_name, TCHAR *loc_tp_name, TCHAR *mode_name);
VOID ErrorExit(TCHAR* str);
VOID DisplayClientHlp();
VOID DisplayServerHlp();
ULONG DbgPrint(PCH Format, ...);
// Timeout is ignored for now
DWORD ReadFixBytes(HANDLE hRead, TCHAR *Buffer, DWORD ToRead, DWORD TimeOut);
VOID Errormsg(TCHAR* str);
externTCHAR HostName[];
externTCHAR *ChildCmd;
externDWORD ClientToServerFlag;
externDWORDLinesToSend;
externTCHAR*UserName;