// Sample code file: myio.h

// Warning: This code has been marked up for HTML

/*
//ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
//º (c) 1998 - 2002 Novell, Inc.  All rights reserved.                       º
//º                                                                          º
//º THIS WORK IS SUBJECT TO U.S. AND INTERNATIONAL COPYRIGHT LAWS AND        º
//º TREATIES.                                                                º
//º                                                                          º
//º NO PART OF THIS WORK MAY BE USED, PRACTICED, PERFORMED, COPIED,          º
//º DISTRIBUTED, REVISED, MODIFIED, TRANSLATED, ABRIDGED, CONDENSED,         º
//º EXPANDED, COLLECTED, COMPILED, LINKED, RECAST, TRANSFORMED OR ADAPTED    º
//º WITHOUT THE PRIOR WRITTEN CONSENT OF NOVELL, INC.                        º
//º                                                                          º
//º ANY USE OR EXPLOITATION OF THIS WORK WITHOUT AUTHORIZATION COULD SUBJECT º
//º THE PERPETRATOR TO CRIMINAL AND CIVIL LIABILITY.                         º
//ÌÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ͹
//º Source module name: MYIO.H                                               º
//ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
*/
/*ÉÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍ»
//º                                                                          º
//º   PARENT PROGRAM:   NDPSGW.NLM - NDPS Gateway:                           º
//º                        with 'accessories' (currently just SNMP/disabled) º
//º                                                                          º
//º   DESCRIPTION:      Header for Portal specific code - IPP                º
//º                                                                          º
//º   PROGRAMMERS:      Hugo Parra                                           º
//º                                                                          º
//º   HISTORY:                                                               º
//º      July 1998      Coded by Hugo Parra                                  º
//º                                                                          º
//ÈÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍÍͼ
*/



/* Inclusion Control */
#ifndef MYIO_H
#define  MYIO_H


/* Standard Library Header Includes */
   #ifndef ULONG
   #define ULONG nuint32      /* needed for qos.h */
   #endif

   #ifndef UCHAR
   #define UCHAR nuint8       /* needed for qos.h */
   #endif

//  #include "qos-fix.h"    /* fix for missing xplat\000815\qos.h for ws2nlm.h */
#include <qos.h>
#include <ws2nlm.h>


/* Header Includes */


#ifdef   MYIO_C
   #define  EXTERN
#else
   #define  EXTERN   extern
#endif /* MYIO_C */


/* Manifest Constant Definitions */
#define  REQ_BUF_SIZE      8192


/* Macro Definitions */


/* Type Definitions */
typedef struct
{
   SOCKET         sock;
   LONG           reqLen;
   BYTE           *buf;
   LONG           bufSize;
   nint32         chunked;
   nint32         leftInChunk;
   char           *curPtr;
   char           *maxPtr;
} ParserBuffer;

typedef struct _RequestBuffer
{
   struct _RequestBuffer *nextPtr;
   char           *curPtr;
   char           buf[REQ_BUF_SIZE];
} RequestBuffer;

typedef LONG (* ParseBufReadRemainderCallbackFPtr)(
   LONG           len,
   char           *buf,
   LONG           more,
   void           *parmPtr );


/* Structure Definitions */


/* Global Variable Declarations */
#ifdef   MYIO_C
   nint32         maxXferBufferSizeGbl = 0x10000;  /* 64K */
#else
   extern nint32   maxXferBufferSizeGbl;
#endif /* MYIO_C */


/* Function Prototype Declarations */
LONG ParseBufCreate(
   SOCKET         sock,
   LONG           reqLen,
  // char           *readAheadPtr,
  // LONG           readAheadLen,
   ParserBuffer   **pBuf );

void ParseBufDestroy(
   ParserBuffer   **pBuf );

LONG ParseBufReadChar(
   ParserBuffer   *pBufPtr,
   char           *chPtr );

LONG ParseBufReadShort(
   ParserBuffer   *pBufPtr,
   nint16         *sShortPtr );

LONG ParseBufReadLong(
   ParserBuffer   *pBufPtr,
   nint32         *sLongPtr );

LONG ParseBufReadOctetStr(
   ParserBuffer   *pBufPtr,
   LONG           len,
   char           *bufPtr );

LONG ParseBufReadName(
   ParserBuffer   *pBufPtr,
   nint16         len,
   char           *namePtr );

LONG ParseBufReadRemainder(
   ParserBuffer   *pBufPtr,
   ParseBufReadRemainderCallbackFPtr callbackFunc,
   void           *parmPtr );   

LONG ReqBufCreate(
   RequestBuffer  **resBuf );

void ReqBufDestroy(
   RequestBuffer  *resBuf );

LONG ReqBufWriteChar(
   RequestBuffer  **resBuf,
   char           ch );

LONG ReqBufWriteShort(
   RequestBuffer  **resBuf,
   nint16         num16 );

LONG ReqBufWriteLong(
   RequestBuffer  **resBuf,
   nint32         num32 );

LONG ReqBufWriteOctetStr(
   RequestBuffer  **resBuf,
   char           *buf,
   LONG           len );

#undef EXTERN


#endif /* MYIO_H */