[0001]
[0002]
[0003]
[0004]
[0005]
[0006]
[0007]
[0008]
[0009]
[0010]
[0011]
[0012]
[0013]
[0014]
[0015]
[0016]
[0017]
[0018]
[0019]
[0020]
[0021]
[0022]
[0023]
[0024]
[0025]
[0026]
[0027]
[0028]
[0029]
[0030]
[0031]
[0032]
[0033]
[0034]
[0035]
[0036]
[0037]
[0038]
[0039]
[0040]
[0041]
[0042]
[0043]
[0044]
[0045]
[0046]
[0047]
[0048]
[0049]
[0050]
[0051]
[0052]
[0053]
[0054]
[0055]
[0056]
[0057]
[0058]
[0059]
[0060]
[0061]
[0062]
[0063]
[0064]
[0065]
[0066]
[0067]
[0068]
[0069]
[0070]
[0071]
[0072]
[0073]
[0074]
[0075]
[0076]
[0077]
[0078]
[0079]
[0080]
[0081]
[0082]
[0083]
[0084]
[0085]
[0086]
[0087]
[0088]
[0089]
[0090]
[0091]
[0092]
[0093]
[0094]
[0095]
[0096]
[0097]
[0098]
[0099]
[0100]
[0101]
[0102]
[0103]
[0104]
[0105]
[0106]
[0107]
[0108]
[0109]
[0110]
[0111]
[0112]
[0113]
[0114]
[0115]
[0116]
[0117]
[0118]
[0119]
[0120]
[0121]
[0122]
[0123]
[0124]
[0125]
[0126]
[0127]
[0128]
[0129]
[0130]
[0131]
[0132]
[0133]
[0134]
[0135]
[0136]
[0137]
[0138]
[0139]
[0140]
[0141]
[0142]
[0143]
[0144]
[0145]
[0146]
[0147]
[0148]
[0149]
[0150]
[0151]
[0152]
[0153]
[0154]
[0155]
[0156]
[0157]
[0158]
[0159]
[0160]
[0161]
[0162]
[0163]
[0164]
[0165]
/*****************************************************************************/
/*
                                  DECnet.h
*/
/*****************************************************************************/

#ifndef DECNET_H_LOADED
#define DECNET_H_LOADED 1

#include "wasd.h"

/**************/
/* structures */
/**************/

typedef struct DECnetConnectStruct DECNET_CONNECT;

struct DECnetConnectStruct
{
   struct  /* allows a list of these to be constructed */
           ListEntryStruct  DclListEntry;

   BOOL  /* when the current request is finished disconnect from the task */
         IsMarkedForDisconnect,
         /* task has indicated it is capable of reusing the connection */
         ReuseConnection;

   unsigned short  /* zero if no current channel, or channel number */
                  DECnetChannel;

   int  /* timer tick when we'll expire */
        LifeTimeSecond,
        /* number of times it has been reused */
        ReUsageCount,
        /* number of times it has been used */
        UsageCount;

   char  /* node::"task=whatever" */
         ConnectString [64];

   int64  /* last used binary time ;^) */
          LastUsedTime64;

   /* NULL if no associated request, or pointer to assosciated request */
   REQUEST_STRUCT  *RequestPtr;
};

typedef struct DECnetTaskStruct DECNET_TASK;

struct DECnetTaskStruct
{
   BOOL  /* */
         AddNewline,
         /* build <LF> or <CR><LF> delimited records from single bytes */
         BuildRecords,
         /* an  <DNETCGI> was set by the script */
         OsuDnetCgi,
         /* an  <DNETRECMODE> was set by the script */
         OsuDnetRecMode,
         /* the script generated some output */
         ScriptResponded;
 

   int  /* when building records from single bytes */
        BuildCount,
        /* */
        CgiDialogState,
        /* */
        CgiEofLength,
        /* */
        ConnectStringLength,
        /* */
        ContentCount,
        /* */
        FindScriptCount,
        /* */
        FindScriptLength,
        /* */
        FindScriptTotalLength,
        /* */
        OsuDialogState,
        /* outstanding request body reads */
        QueuedBodyRead,
        /* outstanding DECnet I/Os */
        QueuedDECnetIO,
        /* outstanding network (client) writes */
        QueuedNetWrite,
        /* */
        ScriptType,
        /* copied from request structure for WATCHing purposes */
        WatchItem;

   unsigned short  DECnetChannel,
                   DECnetMbxChannel;

   char  /* */
         *ContentPtr,
         /* */
         *FindScriptTypePtr,
         /* current position when sending request header */
         *OsuDnetHdrPtr,
         /* */
         *RunTimePtr,
         /* */
         *ScriptPtr;

   char  /* unsique string used to indicate end of script output */
         CgiEof [48],
         /* node::"task=whatever" */
         ConnectString [64],
         /* buffer for DCL commands */
         DclCommand [256],
         /* VMS file script name used for searching */
         FindScript [256],
         /* VMS file script name */
         MappedScript [256],
         /* DCL required to execute the script */
         CgiScriptDcl [256],
         /* the above command being set up as a foreign verb, if necessary */
         CgiScriptForeignVerb [256],
         /* store the mapped runtime */
         ScriptRunTime [256];

   IO_SB  DECnetConnectIOsb,
                  DECnetReadIOsb,
                  DECnetWriteIOsb;

   /* pointer a request using this DCL task structure */
   REQUEST_STRUCT  *RequestPtr;

   /* pointer to the DECnet connection */
   struct DECnetConnectStruct  *cnptr;

   /* pointer to function, used for specifying the next task */
   REQUEST_AST NextTaskFunction;
};

/***********************/
/* function prototypes */
/***********************/

DECnetBegin (REQUEST_STRUCT*, REQUEST_AST, char*, char*);
DECnetCgiDialog (REQUEST_STRUCT*);
DECnetConnect (REQUEST_STRUCT*, REQUEST_AST, char*);
DECnetConnectAst (REQUEST_STRUCT*);
DECnetCountConnection ();
BOOL DECnetEnd (REQUEST_STRUCT*);
DECnetFindCgiScript (REQUEST_STRUCT*);
DECnetOsuCgi (REQUEST_STRUCT*, char*);
DECnetOsuDialog (REQUEST_STRUCT*);
DECnetOsuDnetId (REQUEST_STRUCT*, DECNET_TASK*, BOOL);
DECnetOsuDnetXlate (REQUEST_STRUCT*, DECNET_TASK*, char*);
DECnetRead (REQUEST_STRUCT*);
DECnetReadAst (REQUEST_STRUCT*);
BOOL DECnetSupervisor (int);
DECnetWrite (REQUEST_STRUCT*, char*, int);
DECnetWriteAst (REQUEST_STRUCT*);
DECnetWriteRequest (REQUEST_STRUCT*);
DECnetWriteRequestBody (REQUEST_STRUCT*);
DECnetWriteRequestAst (REQUEST_STRUCT*);

#endif /* DECNET_H_LOADED */

/*****************************************************************************/