/*++
 *  File name:
 *      feedback.h
 *  Contents:
 *      Common definitions for tclient.dll and clxtshar.dll
 *
 *      Copyright (C) 1998-1999 Microsoft Corp.
 --*/

#ifndef _FEEDBACK_H
#define _FEEDBACK_H

#define _HWNDOPT        "hSMC="
#define _RECONIDOPT     "ReconID="

#define MAX_VCNAME_LEN  8

/*
 *  Definitions for local execution of smclient and RDP client
 */

#define _TSTNAMEOFCLAS  "_SmClientClass"

#define WM_FB_TEXTOUT       (WM_USER+0) // wPar = ProcId, 
                                        // lPar = Share mem handle 
                                        // to FEEDBACKINFO
#define WM_FB_DISCONNECT    (WM_USER+1) // wPar = uResult, lPar = ProcId
#define WM_FB_ACCEPTME      (WM_USER+2) // wPar = 0,      lPar = ProcId
#define WM_FB_END           (WM_USER+3) // tclient's internal
#define WM_FB_CONNECT       (WM_USER+5) // wPar = hwndMain,   
                                        // lPar = ProcId
#define WM_FB_LOGON         (WM_USER+6) // wPar = session ID
                                        // lPar = ProcId

#ifdef  OS_WIN32

#define WM_FB_BITMAP        WM_FB_GLYPHOUT
#define WM_FB_GLYPHOUT      (WM_USER+4) // wPar = ProcId,
                                        // lPar = (HANDLE)BMPFEEDBACK

typedef struct _FEEDBACKINFO {
    DWORD   dwProcessId;
    DWORD   strsize;
    WCHAR   string[1024];
    WCHAR   align;
} FEEDBACKINFO, *PFEEDBACKINFO;

typedef struct _BMPFEEDBACK {
    LONG_PTR lProcessId;
    UINT    bmpsize;
    UINT    bmiSize;
    UINT    xSize;
    UINT    ySize;
    BITMAPINFO  BitmapInfo;
} BMPFEEDBACK, *PBMPFEEDBACK;
#endif  // OS_WIN32

/*
 *  Definitons for RCLX (remote execution of clx)
 *  both WIN32 and WIN16
 */

#define RCLX_DEFAULT_PORT       12344

#define WM_WSOCK            (WM_USER + 0x20)    // used for winsock 
                                                // notifications

#ifdef  _WIN64
typedef unsigned short  UINT16;
#else   // !_WIN64
#ifdef  OS_WIN32
typedef unsigned int    UINT32;
typedef unsigned short  UINT16;
#endif  // OS_WIN32
#ifdef  OS_WIN16
typedef unsigned long   UINT32;
typedef unsigned int    UINT16;
#endif
#endif  // _WIN64

// Feedback types. Send from clxtshar.dll to tclient.dll
//
enum {FEED_BITMAP,              // bitmap/glyph data
      FEED_TEXTOUT,             // unicode string
      FEED_TEXTOUTA,            // ansi string (unused)
      FEED_CONNECT,             // event connected
      FEED_DISCONNECT,          // event disconnected
      FEED_CLIPBOARD,           // clipboard data (RCLX)
      FEED_LOGON,               // logon event (+ session id)
      FEED_CLIENTINFO,          // client info (RCLX)
      FEED_WILLCALLAGAIN,       // rclx.exe will start a client, which will call
                                // us again
      FEED_DATA                 // response to requested data (RCLX)
} FEEDBACK_TYPE;

typedef struct _RCLXFEEDPROLOG {
    UINT32  FeedType;
    UINT32  HeadSize;
    UINT32  TailSize;
} RCLXFEEDPROLOG, *PRCLXFEEDPROLOG;

typedef struct _RCLXTEXTFEED {
    UINT32  strsize;
} RCLXTEXTFEED, *PRCLXTEXTFEED;

typedef struct _RCLXBITMAPFEED {
    UINT32  bmpsize;
    UINT32  bmisize;
    UINT32  xSize;
    UINT32  ySize;
    BITMAPINFO  BitmapInfo;
} RCLXBITMAPFEED, *PRCLXBITMAPFEED;

typedef struct _RCLXCLIPBOARDFEED {
    UINT32  uiFormat;               // Clipboard is send from the client
    UINT32  nClipBoardSize;         // system to tclient.dll
} RCLXCLIPBOARDFEED, *PRCLXCLIPBOARDFEED;

typedef struct _RCLXCLIENTINFOFEED {
    UINT32  nReconnectAct;
    UINT32  ReconnectID;
    CHAR    szClientInfo[128];    
} RCLXCLIENTINFOFEED, *PRCLXCLIENTINFOFEED;

//Requests. Send from tclient.dll to clxtshar.dll
enum {REQ_MESSAGE,
      REQ_CONNECTINFO,
      REQ_GETCLIPBOARD,
      REQ_SETCLIPBOARD,
      REQ_DATA
} REQUEST_TYPE;

typedef struct _RCLXREQPROLOG {
    UINT32  ReqType;
    UINT32  ReqSize;
} RCLXREQPROLOG, *PRCLXREQPROLOG;

typedef struct _RCLXMSG {
    UINT32  message;
    UINT32  wParam;
    UINT32  lParam;
} RCLXMSG, *PRCLXMSG;

typedef struct _RCLXCONNECTINFO {
    UINT32  YourID;
    UINT32  xResolution;
    UINT32  yResolution;
    UINT32  bLowSpeed;
    UINT32  bPersistentCache;
    CHAR    szHydraServer[32];
} RCLXCONNECTINFO, *PRCLXCONNECTINFO;

typedef struct _RCLXCLIPBOARD {     // Request for retrieve/setting the clipboard
    UINT32  uiFormat;               // from the client system
    BYTE    pNewClipboard[0];       // used in REQ_SETCLIPBOARD, otherwise 0 len
} RCLXCLIPBOARD, *PRCLXCLIPBOARD;

typedef struct _RCLXDATA {
    UINT32  uiType;
    UINT32  uiSize;
    BYTE    Data[0];
} RCLXDATA, *PRCLXDATA;

enum {  // these identify RCLX_DATA
    DATA_BITMAP,
    DATA_VC
};

typedef struct _REQBITMAP {
    UINT32  left, top, right, bottom;
} REQBITMAP, *PREQBITMAP;

#endif  // _FEEDBACK_H