193 lines
5.3 KiB
C
193 lines
5.3 KiB
C
|
//#---------------------------------------------------------------
|
||
|
// File: cliproto.h
|
||
|
//
|
||
|
// Synopsis: header for shuttle client protocol
|
||
|
//
|
||
|
// Copyright (C) 1995 Microsoft Corporation
|
||
|
// All rights reserved.
|
||
|
//
|
||
|
// Authors: t-alexwe
|
||
|
//----------------------------------------------------------------
|
||
|
|
||
|
#ifndef _CLIPROTO_H_
|
||
|
#define _CLIPROTO_H_
|
||
|
|
||
|
#include <windows.h>
|
||
|
#define SECURITY_WIN32
|
||
|
|
||
|
#define PROXY_PROTOCOL_VERSION MAKEWORD(1, 0)
|
||
|
|
||
|
#define MAXPACKETDATASIZE 960
|
||
|
#define MAXMSGSPERPACKET 4
|
||
|
|
||
|
//
|
||
|
// make sure everything is byte aligned
|
||
|
//
|
||
|
#pragma pack(1)
|
||
|
|
||
|
//
|
||
|
// the message structure
|
||
|
//
|
||
|
typedef struct {
|
||
|
WORD wCommand; // the command requested
|
||
|
WORD cData; // the amount of data
|
||
|
WORD cOffset; // the offset of the data into the
|
||
|
// the packets pData
|
||
|
} PROXYMESSAGE, *PPROXYMESSAGE;
|
||
|
|
||
|
//
|
||
|
// client connection protocol packet structure
|
||
|
//
|
||
|
// each packet contains 1 to 4 messages.
|
||
|
//
|
||
|
typedef struct {
|
||
|
WORD cLength; // the length of this packet
|
||
|
WORD cMessages; // the message count in this packet
|
||
|
//
|
||
|
// information for each message
|
||
|
//
|
||
|
PROXYMESSAGE pMessages[MAXMSGSPERPACKET];
|
||
|
//
|
||
|
// the packets data
|
||
|
//
|
||
|
BYTE pData[MAXPACKETDATASIZE];
|
||
|
} PROXYPACKET, *PPROXYPACKET;
|
||
|
|
||
|
#define PACKETHDRSIZE (sizeof(PROXYPACKET) - MAXPACKETDATASIZE)
|
||
|
|
||
|
//
|
||
|
// message types (wCommand in PROXYMESSAGE)
|
||
|
//
|
||
|
// format:
|
||
|
// | 16 | 15 - 0 |
|
||
|
//
|
||
|
// bit 16 - if 0 then message is handled by Shuttle server, if 1 then
|
||
|
// message is handled by client.
|
||
|
//
|
||
|
// generally these are laid out in the order that they are expected to be
|
||
|
// received in. a command of type wCommand should return a message of type
|
||
|
// wCommand | 0x8000.
|
||
|
//
|
||
|
// Only exception is that PROXY_NEGOTIATE can return a PROXY_CHALLENGE or
|
||
|
// a PROXY_ACCEPT message.
|
||
|
//
|
||
|
#define PROXY_VERSION 0x0000
|
||
|
#define PROXY_VERSION_RETURN 0x8000
|
||
|
#define PROXY_NEGOTIATE 0x0001
|
||
|
#define PROXY_CHALLENGE 0x8001
|
||
|
#define PROXY_ACCEPT 0x8002
|
||
|
#define PROXY_GETHOSTBYNAME 0x0003
|
||
|
#define PROXY_GETHOSTBYNAME_RETURN 0x8003
|
||
|
#define PROXY_CONNECT 0x0004
|
||
|
#define PROXY_CONNECT_RETURN 0x8004
|
||
|
#define PROXY_SETSOCKOPT 0x0005
|
||
|
#define PROXY_SETSOCKOPT_RETURN 0x8005
|
||
|
#define PROXY_DOGATEWAY 0x0006
|
||
|
#define PROXY_DOGATEWAY_RETURN 0x8006
|
||
|
#define MAX_PROXY_SRV_COMMAND PROXY_DOGATEWAY
|
||
|
|
||
|
#define PROXY_NOMESSAGE 0xffff
|
||
|
|
||
|
//
|
||
|
// include the error codes from the client connection API
|
||
|
//
|
||
|
#include <clicnct.h>
|
||
|
|
||
|
//
|
||
|
// message data formats
|
||
|
//
|
||
|
// packet data sizes need to be < MAXDATASIZE bytes, so the total size
|
||
|
// of a group of messages going in one packet should be < MAXDATASIZE bytes.
|
||
|
//
|
||
|
// error codes are NT/WinSock or PROXYERR error codes
|
||
|
//
|
||
|
#define MAXCOMPUTERNAME MAX_COMPUTERNAME_LENGTH + 1
|
||
|
typedef struct {
|
||
|
WORD wRequestedVersion; // requested ver of the protocol
|
||
|
DWORD cComputerName; // length of the computer name
|
||
|
CHAR pszComputerName[MAXCOMPUTERNAME]; // cli's comp name
|
||
|
} PROXY_VERSION_DATA, *PPROXY_VERSION_DATA;
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD dwError; // error code
|
||
|
WORD wVersion; // version of protocol used
|
||
|
WORD wHighVersion; // highest version supported
|
||
|
} PROXY_VERSION_RETURN_DATA, *PPROXY_VERSION_RETURN_DATA;
|
||
|
|
||
|
#define SECBUFSIZE 768
|
||
|
|
||
|
typedef struct {
|
||
|
WORD cNegotiateBuffer;
|
||
|
BYTE pNegotiateBuffer[SECBUFSIZE];
|
||
|
} PROXY_NEGOTIATE_DATA, *PPROXY_NEGOTIATE_DATA;
|
||
|
|
||
|
typedef struct {
|
||
|
WORD cChallengeBuffer;
|
||
|
BYTE pChallengeBuffer[SECBUFSIZE];
|
||
|
} PROXY_CHALLENGE_DATA, *PPROXY_CHALLENGE_DATA;
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD dwError; // error code
|
||
|
} PROXY_ACCEPT_DATA, *PPROXY_ACCEPT_DATA;
|
||
|
|
||
|
#define MAXHOSTNAMELEN 512
|
||
|
#define MAXADDRLISTSIZE 128
|
||
|
|
||
|
typedef struct {
|
||
|
WORD cHostname; // length of hostname
|
||
|
char pszHostname[MAXHOSTNAMELEN]; // hostname
|
||
|
} PROXY_GETHOSTBYNAME_DATA, *PPROXY_GETHOSTBYNAME_DATA;
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD dwError; // error code
|
||
|
WORD cAddr; // number of addresses
|
||
|
WORD h_addrtype; // should always be AF_INET
|
||
|
WORD h_length; // the length of each addr
|
||
|
// should always be 4
|
||
|
//
|
||
|
// the addresses. this has cAddr addresses in it. each address is of
|
||
|
// length h_length and the first one starts at h_addr_list[0].
|
||
|
//
|
||
|
BYTE h_addr_list[MAXADDRLISTSIZE];
|
||
|
} PROXY_GETHOSTBYNAME_RETURN_DATA, *PPROXY_GETHOSTBYNAME_RETURN_DATA;
|
||
|
|
||
|
typedef struct {
|
||
|
WORD cAddr; // the length of the address (16)
|
||
|
struct sockaddr addr; // the address
|
||
|
} PROXY_CONNECT_DATA, *PPROXY_CONNECT_DATA;
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD dwError; // error code
|
||
|
} PROXY_CONNECT_RETURN_DATA, *PPROXY_CONNECT_RETURN_DATA;
|
||
|
|
||
|
#define MAXSOCKOPTS 32 // maximum sockopts per packet
|
||
|
#define MAXOPTVAL 16 // maximum length of optval
|
||
|
|
||
|
typedef struct {
|
||
|
WORD level; // option level
|
||
|
WORD optname; // option name
|
||
|
BYTE optval[MAXOPTVAL]; // option value
|
||
|
WORD optlen; // option length (<= MAXOPTVAL)
|
||
|
} NETSOCKOPT, *PNETSOCKOPT;
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD cSockopt; // number of socket options
|
||
|
NETSOCKOPT sockopts[MAXSOCKOPTS]; // the socket options
|
||
|
} PROXY_SETSOCKOPT_DATA, *PPROXY_SETSOCKOPT_DATA;
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD dwError; // error code
|
||
|
} PROXY_SETSOCKOPT_RETURN_DATA, *PPROXY_SETSOCKOPT_RETURN_DATA;
|
||
|
|
||
|
typedef struct {
|
||
|
BYTE reserved; // we need some data...
|
||
|
} PROXY_DOGATEWAY_DATA, *PPROXY_DOGATEWAY_DATA;
|
||
|
|
||
|
typedef struct {
|
||
|
DWORD dwError; // error code
|
||
|
} PROXY_DOGATEWAY_RETURN_DATA, *PPROXY_DOGATEWAY_RETURN_DATA;
|
||
|
|
||
|
#pragma pack()
|
||
|
|
||
|
#endif
|