[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]
[0166]
[0167]
[0168]
[0169]
[0170]
[0171]
[0172]
[0173]
[0174]
[0175]
[0176]
[0177]
[0178]
[0179]
[0180]
[0181]
/*****************************************************************************/
/*
                                Service.h

Function prototypes for service configuration module.

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

#ifndef SERVICE_H_LOADED
#define SERVICE_H_LOADED 1

#include "wasd.h"

#define SERVICE_ERROR_REPORT_PATH_CODES_MAX 16

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

/*
   Store these structures naturally-aligned on AXP.
   Uses a bit more storage but makes access as efficient as possible.
*/

#pragma member_alignment __save
#pragma member_alignment

/* for code backward compatibility */
#define RequestScheme SchemeType
#define RequestSchemeNamePtr SchemeNamePtr

typedef struct ServiceStruct SERVICE_STRUCT;

struct ServiceStruct
{
   LIST_ENTRY  ListEntry;

   BOOL  AdminService,
         ConnectService,
         GenericService,
         Http2Enabled,
         LogFileError,
         LogFileOpen,
         LogFormatCommon,
         LogFormatCommonServer,
         LogFormatCombined,
         LogFormatProblem,
         LogFormatStamp,
         LogTimeoutEvents,
         LocalAuthRequired,
         NoLog,
         ProxyAffinity,
         ProxyAuthRequired,
         ProxyChainAuthRequired,
         ProxyFileCacheEnabled,
         ProxyService,
         RawSocket,
         SSLclientEnabled,
         ServiceErrorReportPath,
         SharedSocket;

   int  AcceptQueued,
        AdminPort,
        ConnectCount,
        ErrorReportPathLength,
        ErrorReportPathCodesCount,
        ListenBacklog,
        LogDayNumber,
        LogFileNameLength,
        LogHourNumber,
        LogMonthNumber,
        LogYearNumber,
        ProxyChainHostNameLength,
        ProxyChainPort,
        ProxyReworkMax,
        ProxyTunnel,
        ReadErrorCount,
        ReferenceCount,
        SchemeType,
        ServerBindStatus,
        ServerHostNameLength,
        ServerHostPortLength,
        ServerPort,
        ShareSSH,
        WriteErrorCount;

   int  ErrorReportPathCodes [SERVICE_ERROR_REPORT_PATH_CODES_MAX];

   int64  BytesRawRx64,
          BytesRawTx64;

   char  *LogFormatPtr,
         *ErrorReportPathCodesPtr,
         *SchemeNamePtr;

   char  BgDevName [64],
         BindIpAddressString [TCPIP_ADDRESS_STRING_MAX+1],
         BodyTag [256],
         ErrorReportPath [128],
         LogFileName [256],
         LogFormat [128],
         LogHostName [64],
         NonSslRedirect [TCPIP_HOSTNAME_MAX+1+8],
         ProxyBindIpAddressString [TCPIP_ADDRESS_STRING_MAX+1],
         ProxyChainCred [63+1],
         ProxyChainHostName [TCPIP_HOSTNAME_MAX+1],
         ProxyChainHostPort [TCPIP_HOSTNAME_MAX+1+8],
         ProxyChainIpAddressString [TCPIP_ADDRESS_STRING_MAX+1],
         ProxyChainPortString [16],
         ServerHostName [TCPIP_HOSTNAME_MAX+1],
         ServerHostPort [TCPIP_HOSTNAME_MAX+1+8],
         ServerIpAddressString [TCPIP_ADDRESS_STRING_MAX+1],
         ServerPortString [16];

   /* we'll have to cast these when we need them */
   void  *SSLclientPtr,
         *SSLserverPtr;

   IPADDRESS  BindIpAddress,
              MultiHomeIpAddress,
              ProxyBindIpAddress,
              ProxyChainIpAddress,
              ServerIpAddress;

   IO_SB  ServerIOsb;

   struct dsc$descriptor  LogFileNameDsc;
   
   struct FAB  LogFileFab;
   struct RAB  LogFileRab;

   unsigned short  ServerChannel;

   SOCKADDRESS  ServerSocketName;
};

typedef struct ServiceMetaStruct SERVICE_META;

struct ServiceMetaStruct
{
   LIST_HEAD  ServiceList;

   BOOL  ServiceLooksValid;

   /* used during configuration load */
   LIST_HEAD  *ServiceListPtr;
   SERVICE_STRUCT  ConfigService;
   int  ServiceLineNumber;
   char  ServiceLine [128];

   /* only used when reporting or changing configuration */
   void  *RequestPtr;
};

#pragma member_alignment __restore

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

BOOL ServiceChange (REQUEST_STRUCT*, char*);
int ServiceConfigFromString (META_CONFIG**);
int ServiceConfigLoad (META_CONFIG**);
ServiceConfigUnload (META_CONFIG*);
ServiceConfigPostProcess (META_CONFIG*);
BOOL ServiceConfigLoadCallback (META_CONFIG*);
int ServiceControl (char*, char*);
BOOL ServiceFindVirtual (REQUEST_STRUCT*);
BOOL ServiceIsConfigured (char*);
int ServiceReferenceCount (SERVICE_STRUCT*, int);
ServiceConfigRevise (REQUEST_STRUCT*, BOOL);
ServiceConfigReviseNow (REQUEST_STRUCT*, META_CONFIG*);
int ServiceParse (char*, int*, char*, int, int*, BOOL*);
ServiceReport (REQUEST_STRUCT*, BOOL);
ServiceReportNow (REQUEST_STRUCT*, META_CONFIG*);
int ServiceReportConfigFromString (REQUEST_STRUCT*, CONFIG_STRUCT*);

#endif /* SERVICE_H_LOADED */

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