/*--- * Domino Web Server - Filter API (modified) * * Note: This file is a customized version of the dsapi.h file that comes as part of the * Lotus C API 5.0.3 Toolkit. The authentication and group list sections have been * removed, and request and response sections have been added based on the information * provided in the dsapifilter.h file that comes with the "3 Strikes" sample filter * available on Notes.net. */ #if !defined(DSAPIMOD_H) #define DSAPIMOD_H #ifdef __cplusplus extern "C" { #endif #define kInterfaceVersion 2 #define kMaxFilterDesc 255 typedef unsigned char LMBCS; typedef enum { kFilterNotHandled = 0, kFilterHandledRequest = 1, kFilterHandledEvent = 2, kFilterError = 3 } FilterReturnCode; // DSAPI events to register for typedef enum { kFilterRawRequest = 0x01, kFilterResponse = 0x20, kFilterEndRequest = 0x80 } EventFlags; // Filter initialization data typedef struct { unsigned int serverFilterVersion; unsigned int appFilterVersion; unsigned int eventFlags; unsigned int initFlags; char filterDesc[kMaxFilterDesc+1]; } FilterInitData; // Request line descriptor typedef struct { unsigned int method; char* URL; char* version; char* userName; char* password; unsigned char* clientCert; unsigned int clientCertLen; char* contentRead; unsigned int contentReadLen; } FilterRequest; // Filter context data included in every call to filter typedef struct _FilterContext { unsigned int contextSize; unsigned int revision; void* serverContext; unsigned int serverReserved; unsigned int securePort; void* privateContext; int (*GetRequest)(struct _FilterContext* context, FilterRequest* request, unsigned int* errID); int (*GetRequestContents)(struct _FilterContext* context, char** contents, unsigned int* errID); int (*GetServerVariable)(struct _FilterContext* context, char* name, void* buffer, unsigned int bufferSize, unsigned int* errID); int (*WriteClient)(struct _FilterContext* context, char* buffer, unsigned int bufferLen, unsigned int reserved, unsigned int* errID); void* (*AllocMem)(struct _FilterContext* context, unsigned int size, unsigned int reserved, unsigned int* errID); int (*ServerSupport)(struct _FilterContext* context, unsigned int funcType, void* data1, void* data2, unsigned int other, unsigned int* errID); } FilterContext; // raw request (headers not processed yet) typedef struct { unsigned int requestMethod; int (*GetAllHeaders)(FilterContext* context, char** headers, unsigned int* errID); int (*GetHeader)(FilterContext* context, char* name, char* buffer, unsigned int bufferSize, unsigned int* errID); int (*SetHeader)(FilterContext* context, char* name, char* value, unsigned int* errID); int (*AddHeader)(FilterContext* context, char* header, unsigned int* errID); unsigned int reserved; } FilterRawRequest; // parsed request typedef struct { unsigned int requestMethod; int (*GetAllHeaders)(FilterContext* context, char** headers, unsigned int* errID); int (*GetHeader)(FilterContext* context, char* name, char* buffer, unsigned int bufferSize, unsigned int* errID); unsigned int reserved; } FilterParsedRequest; // request response typedef struct { unsigned int responseCode; char* reasonText; int (*GetAllHeaders)(FilterContext* context, char** headers, unsigned int* errID); int (*GetHeader)(FilterContext* context, char* name, char* buffer, unsigned int bufferSize, unsigned int* errID); int (*SetHeader)(FilterContext* context, char* name, char* value, unsigned int* errID); int (*AddHeader)(FilterContext* context, char* header, unsigned int* errID); unsigned int reserved; } FilterResponse; #ifdef __cplusplus } #endif #endif /* DSAPIMOD_H */