|
|
/***************************************************************************
Name : AWNSFAPI.H Comment : Definitions of the AtWork AWBC (Basicaps) structure which is the decrypted/decooded/reformatted form of the At Work NSF and NSC Also the decrypted form of the At Work NSS Also defines the APIs for encoding/decoding AtWork NSF/NSC/NSS
Copyright (c) 1993 Microsoft Corp.
Revision Log Date Name Description -------- ----- --------------------------------------------------------- 08/28/93 arulm Created ***************************************************************************/
#ifndef _AWNSFAPI_H
#define _AWNSFAPI_H
/***********************************************************************
* * * NOTICE: This file has to be ANSI compilable, under GCC on UNIX * * and other ANSI compiles. Be sure to use no MS C specific features * * In particular, don't use // for comments!!!! *
* * ***********************************************************************/
#ifdef PORTABLE /** -DPORTABLE on machines with flat 32-bit model **/
#ifdef STDCALL
# define WINAPI __stdcall
# define EXPORTAWBC __stdcall
#else
# define WINAPI
# define EXPORTAWBC
#endif
# define FAR
# define NEAR
# define PASCAL
# define CALLBACK
# define __export
# define _export
# define max(a, b) (((a) > (b)) ? (a) : (b))
typedef short BOOL; #elif defined(WIN32) /** WIN32 **/
# define __export __declspec( dllexport )
# define _export __declspec( dllexport )
# define EXPORTAWBC WINAPI
#else /** 16bit Windows */
# define FAR _far
# define NEAR _near
# define PASCAL _pascal
# define WINAPI _far _pascal
# define CALLBACK _far _pascal
# define EXPORTAWBC _export WINAPI
typedef int BOOL; #endif /** Portable, WIN32 or WIN16 **/
typedef unsigned char BYTE; typedef unsigned short WORD; typedef unsigned long DWORD; typedef unsigned short USHORT; typedef BYTE FAR* LPBYTE; typedef WORD FAR* LPWORD;
#include <fr.h>
#pragma pack(2) /** ensure packing is portable, i.e. 2 or more **/
typedef enum { BC_NONE = 0, SEND_CAPS, /** Used to derive an NSF to send **/ RECV_CAPS, /** Derived from a received NSF **/ SEND_PARAMS, /** Used to derive an NSS to send **/ RECV_PARAMS, /** Derived from a received NSS **/ SEND_POLLREQ, /** Used to derive a NSC to send **/ RECV_POLLREQ, /** Derived from a receive NSC **/
SEND_ACK, RECV_ACK, SEND_DISCONNECT, RECV_DISCONNECT
} BCTYPE;
#define BCTYPE_FIRST RECV_CAPS
#define BCTYPE_LAST RECV_POLLREQ
#define MAXTOTALIDLEN 61
#define MAXNSCPOLLREQ 5
#ifndef NOCHALL
# define POLL_CHALLENGE_LEN 10
# define POLL_PASSWORD_LEN 20
#endif
#define MAXNSFFRAMESIZE 256 /* MAW NSx frames must be 255 bytes or less */
#define MAXFIRSTNSFSIZE 38 /* The first transmitted MAW NSx frame must
be 38 bytes or less */ #define MAXNEXTNSFSIZE 70 /* subsequent transmitted MAW NSx frame must
be 72 bytes or less */ #define MAXNSFFRAMES (MAXNSCPOLLREQ+5)
typedef struct { WORD PollType; /* one of the POLLTYPE_ defines below */ WORD fReturnControl; /* T or F */ WORD PassType; WORD wNameLen; BYTE bName[MAXTOTALIDLEN+3]; /* align on even boundary */
#ifdef NOCHALL
WORD wPassLen; BYTE bPass[MAXTOTALIDLEN+3]; /* align on even boundary */ #else
WORD wChallRespLen; BYTE bChallResp[max(POLL_PASSWORD_LEN, POLL_CHALLENGE_LEN)+2]; #endif
} AWBCPOLLREQ, FAR* LPAWBCPOLLREQ;
typedef struct { BCTYPE bctype; /* must always be set. One of the enum values above */ WORD wAWBCSize; /* size of this (fixed size) AWBC struct, must be set */ WORD wAWBCVer; /* if using this header file, set it to VER_AWFXPROT100*/ WORD wAWBCSig; /* Clients must set to SIG_AWFXPROT in struct passed in
to the NSF encoding/decoding routines. In Structs returned from these routines this will be 0 */
BYTE vMsgProtocol; /* 00==Doesn't accept linearized msgs. vMSG_SNOW==
Current (WFW) version of linearizer. For NSS, ver of linearized msg, if any, following the NSS-DCS */ BYTE fInwardRouting;/* 00==no inward routing */ BYTE fBinaryData; /* accept binary files inside linearized msgs */ BYTE vMsgCompress; /* 00==none */ BYTE fDontCache; /* 1=NSF/DIS caps of this machine should _not_ be cached (see long note above)*/
BYTE DataLink; /* Data-link protocols. 000==none */ BYTE DataSpeed; /* Data modem modulations/speeds. 00000==none */ BYTE vShortFlags; /* 00==not supported */
BYTE OperatingSys; /* OS_WIN16==16bit Windows(Win3.1, WFW etc) */ /* OS_ARADOR==AtWork based OSs (IFAX etc) */ /* OS_WIN32== WIN32 OSs (NT, WIN95) */ BYTE vSecurity; /* 00==none vSECURE_SNOW==snowball security */ BYTE vInteractive; /* 00==No interactive protocol support */
BYTE TextEncoding; /* Text code. TEXTCODE_ASCII==ascii */ BYTE TextIdLen; /* Text ID length */ BYTE Reserved1; /* Pad to even boundary before array */
BYTE bTextId[MAXTOTALIDLEN+3]; /* zero-terminated */ BYTE bMachineId[MAXTOTALIDLEN+3];/* machine ID */
BYTE MachineIdLen; /* length of machine id */
BYTE vRamboVer; /* Rambo: 00==not supported */ BYTE vAddrAttach; /* 00==cannot accept address bk attachmnts */ BYTE fAnyWidth; /* page pixel widths don't have to be exactly T.4 */ BYTE HiEncoding; /* one or more of the HENCODE_ #defines below */ BYTE HiResolution; /* one or more of the HRES_ #defines below */ BYTE CutSheetSizes; /* one or more of the PSIZE_ #defines below */ BYTE fOddCutSheet; /* Cut-sheet sizes other than ones listed below */ BYTE vMetaFile; /* 00==metafiles not accepted */ BYTE vCoverAttach; /* 00==no digital cover page renderer */
BYTE fLowSpeedPoll; /* SEP/PWD/NSC poll reqs accepted */ BYTE fHighSpeedPoll; /* PhaseC pollreqs accepted */ /* if both the above 00, poll reqs not accepted */ BYTE fFilePolling; /* Supports polling for arbitrary files */ BYTE fPollByRecipAvail; /* Poll-by-Recipient msgs available */ BYTE fPollByNameAvail; /* Poll-by-MessageName msgs available */
BYTE fExtCapsAvail; /* Extended capabiities available */ BYTE fNoShortTurn; /* NOT OK recving NSC-DTC immediately after EOM-MCF*/ BYTE vMsgRelay; /* Msg relay ver. 0==no support */
WORD ExtCapsCRC; /* CRC of machine's extended capabilities */
struct { BYTE vMsgProtocol; /* non-zero: linearized msg follows */ /* vMSG_SNOW current linearized format */ BYTE vInteractive; /* non-zero: Interactive prot being invoked */ } NSS;
WORD wNumPollReq; /* number of poll reqs */ AWBCPOLLREQ rgPollReq[MAXNSCPOLLREQ]; /* array of AWBCPOLLREQ structures */ } AWBC, FAR* LPAWBC, NEAR* NPAWBC;
/** Appropriate values for some of the above fields **/
#define vMSG_SNOW 1 /* Snowball Linearizer version */
#define vMSG_IFAX100 2 /* IFAX linearizer version */
#define vSECURE_SNOW 1 /* vSecurity for Snowball (v1.00 of MAW) */
#define OS_WIN16 0 /* OperatingSys for Win3.0, 3.1, WFW3.1, 3.11*/
#define OS_ARADOR 1 /* OperatingSys for Arador-based systems */
#define OS_WIN32 2 /* OperatingsSys for WIN32 (NT, WIN95) */
#define TEXTCODE_ASCII 0 /* TextEncoding for 7-bit ASCII */
#define SIG_AWFXPROT 0xYYYY
#define VER_AWFXPROT100 0x100
extern BOOL WINAPI IsAtWorkNSx(LPBYTE lpb, WORD wSize);
extern WORD _export WINAPI AWBCtoNSx(IFR ifr, LPAWBC lpawbcIn, LPBYTE lpbOut, WORD wMaxOut, LPWORD lpwNumFrame);
extern WORD _export WINAPI NSxtoAWBC(IFR ifr, LPLPFR rglpfr, WORD wNumFrame, LPAWBC lpawbcOut, WORD wAWBCSize);
extern void _export WINAPI MaskAWBC(LPAWBC lpawbc, WORD wSize);
#define AWERROR_OK 0
#define AWERROR_BCTYPE 1
#define AWERROR_SIG 2
#define AWERROR_NOSPACE 3
#define AWERROR_NOTAWFRAME 4
#define AWERROR_NULLFRAME 5
#define AWERROR_VERSION 6
#define AWERROR_INVALIDBC 7
#pragma pack()
#endif /** _AWNSFAPI_H **/
|