summaryrefslogtreecommitdiff
path: root/win32/sablot/include/shandler.h
diff options
context:
space:
mode:
Diffstat (limited to 'win32/sablot/include/shandler.h')
-rw-r--r--win32/sablot/include/shandler.h371
1 files changed, 370 insertions, 1 deletions
diff --git a/win32/sablot/include/shandler.h b/win32/sablot/include/shandler.h
index ea7fc83..bf4f3fa 100644
--- a/win32/sablot/include/shandler.h
+++ b/win32/sablot/include/shandler.h
@@ -1,369 +1,738 @@
/*
+
* The contents of this file are subject to the Mozilla Public
+
* License Version 1.1 (the "License"); you may not use this file
+
* except in compliance with the License. You may obtain a copy of
+
* the License at http://www.mozilla.org/MPL/
+
*
+
* Software distributed under the License is distributed on an "AS
+
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
+
* implied. See the License for the specific language governing
+
* rights and limitations under the License.
+
*
+
* The Original Code is the Sablotron XSLT Processor.
+
*
+
* The Initial Developer of the Original Code is Ginger Alliance Ltd.
+
* Portions created by Ginger Alliance are Copyright (C) 2000-2002
+
* Ginger Alliance Ltd. All Rights Reserved.
+
*
+
* Contributor(s):
+
*
+
* Alternatively, the contents of this file may be used under the
+
* terms of the GNU General Public License Version 2 or later (the
+
* "GPL"), in which case the provisions of the GPL are applicable
+
* instead of those above. If you wish to allow use of your
+
* version of this file only under the terms of the GPL and not to
+
* allow others to use your version of this file under the MPL,
+
* indicate your decision by deleting the provisions above and
+
* replace them with the notice and other provisions required by
+
* the GPL. If you do not delete the provisions above, a recipient
+
* may use your version of this file under either the MPL or the
+
* GPL.
+
*/
+
+
#ifndef ShandlerHIncl
+
#define ShandlerHIncl
+
+
/* we have to deal with the size_t type, sys/types.h;
+
is needed on some platforms */
-#if !defined(_MSC_VER)
+
+#if !defined(_MSC_VER) && !defined(__BORLANDC__)
+
#include <sabcfg.h>
+
#endif
+
+
#include <stddef.h>
+
+
/* GP: clean */
+
+
/*****************************************************************
+
+
handler types
+
+
*****************************************************************/
+
+
typedef enum
+
{
+
HLR_MESSAGE = 0,
+
HLR_SCHEME,
+
HLR_SAX,
+
HLR_MISC,
+
HLR_ENC
+
} HandlerType;
+
+
extern const char* hlrTypeNames[]; /* found in base.cpp */
+
+
typedef enum
+
{
+
SH_ERR_OK = 0,
+
SH_ERR_NOT_OK = 1,
+
SH_ERR_UNSUPPORTED_SCHEME
+
} SchemeHandlerErrors;
+
+
/*****************************************************************
+
SchemeHandler
+
+
is a structure for a scheme handler. It contains pointers to
+
the following functions of the handler:
+
open(), get(), put(), close().
+
All of these function return an error flag (0=OK, 1=not).
+
open() may also return SH_ERR_UNSUPPORTED_SCHEME.
+
*****************************************************************/
+
+
/* getAll: open the URI and return the whole string
+
scheme = URI scheme (e.g. "http")
+
rest = the rest of the URI (without colon)
+
the document is returned in a handler-allocated buffer
+
byteCount holds the byte count on return
+
return *buffer = NULL if not processed
+
*/
+
typedef int SchemeHandlerGetAll(void *userData, SablotHandle processor_,
+
const char *scheme, const char *rest,
+
char **buffer, int *byteCount);
+
+
/* freeMemory: free the buffer allocated by getAll
+
*/
+
+
typedef int SchemeHandlerFreeMemory(void *userData, SablotHandle processor_,
+
char *buffer);
+
+
/* open: open the URI and return a handle
+
scheme = URI scheme (e.g. "http")
+
rest = the rest of the URI (without colon)
+
the resulting handle is returned in '*handle'
+
*/
+
typedef int SchemeHandlerOpen(void *userData, SablotHandle processor_,
+
const char *scheme, const char *rest, int *handle);
+
+
/* get: retrieve data from the URI
+
handle = the handle assigned on open
+
buffer = pointer to the data
+
*byteCount = number of bytes to read
+
(the number actually read is returned here)
+
*/
+
typedef int SchemeHandlerGet(void *userData, SablotHandle processor_,
+
int handle, char *buffer, int *byteCount);
+
+
/* put: save data to the URI (if possible)
+
handle = the handle assigned on open
+
buffer = pointer to the data
+
*byteCount = number of bytes to write
+
(the number actually written is returned here)
+
*/
+
typedef int SchemeHandlerPut(void *userData, SablotHandle processor_,
+
int handle, const char *buffer, int *byteCount);
+
+
/* close: close the URI with the given handle
+
handle = the handle assigned on open
+
*/
+
typedef int SchemeHandlerClose(void *userData, SablotHandle processor_,
+
int handle);
+
+
typedef struct
+
{
+
SchemeHandlerGetAll *getAll;
+
SchemeHandlerFreeMemory *freeMemory;
+
SchemeHandlerOpen *open;
+
SchemeHandlerGet *get;
+
SchemeHandlerPut *put;
+
SchemeHandlerClose *close;
+
} SchemeHandler;
+
+
/*****************************************************************
+
MessageHandler
+
+
a structure for external message handlers. Such a handler, if set,
+
receives all error reports, displays them, keeps the log, the
+
error trace, etc.
+
*****************************************************************/
+
+
/*
+
define the "facility number" for Sablotron. This does not mean much
+
nowadays.
+
*/
+
+
#define MH_FACILITY_SABLOTRON 2
+
+
/* type for the error codes used by the message handler */
+
+
typedef unsigned long MH_ERROR;
+
+
/* logging levels for the message handler */
+
+
typedef enum
+
{
+
MH_LEVEL_DEBUG,
+
MH_LEVEL_INFO,
+
MH_LEVEL_WARN,
+
MH_LEVEL_ERROR,
+
MH_LEVEL_CRITICAL
+
} MH_LEVEL;
+
+
/*
+
makeCode()
+
makes the "external" error code to report with log() or error()
+
call with facility = module id; severity = 1 iff critical.
+
'code' is the error code internal to Sablotron.
+
*/
+
+
typedef MH_ERROR
+
MessageHandlerMakeCode(
+
void *userData, SablotHandle processor_,
+
int severity, unsigned short facility, unsigned short code);
+
+
/*
+
log()
+
pass code created by makeCode, level as necessary
+
fields is a NULL-terminated list of strings in form "field:contents"
+
distinguished fields include: msg, file, line, token
+
*/
+
+
typedef MH_ERROR
+
MessageHandlerLog(
+
void *userData, SablotHandle processor_,
+
MH_ERROR code, MH_LEVEL level, char **fields);
+
+
/*
+
error()
+
for reporting errors, meaning as with log()
+
*/
+
+
typedef MH_ERROR
+
MessageHandlerError(void *userData, SablotHandle processor_,
+
MH_ERROR code, MH_LEVEL level, char **fields);
+
+
/* the message handler structure. Use SablotRegMessageHandler() to register. */
+
+
typedef struct
+
{
+
MessageHandlerMakeCode *makeCode;
+
MessageHandlerLog *log;
+
MessageHandlerError *error;
+
} MessageHandler;
+
+
+
+
+
+
/*
+
+
SAXHandler
+
a SAX-like, streaming interface for access to XML docs
+
+
*/
+
+
+
#define SAX_RETURN void
+
+
typedef SAX_RETURN
+
SAXHandlerStartDocument(void* userData, SablotHandle processor_);
+
+
typedef SAX_RETURN
+
SAXHandlerStartElement(void* userData, SablotHandle processor_,
+
const char* name, const char** atts);
+
+
typedef SAX_RETURN
+
SAXHandlerEndElement(void* userData, SablotHandle processor_,
+
const char* name);
+
+
typedef SAX_RETURN
+
SAXHandlerStartNamespace(void* userData, SablotHandle processor_,
+
const char* prefix, const char* uri);
+
+
typedef SAX_RETURN
+
SAXHandlerEndNamespace(void* userData, SablotHandle processor_,
+
const char* prefix);
+
+
typedef SAX_RETURN
+
SAXHandlerComment(void* userData, SablotHandle processor_,
+
const char* contents);
+
+
typedef SAX_RETURN
+
SAXHandlerPI(void* userData, SablotHandle processor_,
+
const char* target, const char* contents);
+
+
typedef SAX_RETURN
+
SAXHandlerCharacters(void* userData, SablotHandle processor_,
+
const char* contents, int length);
+
+
typedef SAX_RETURN
+
SAXHandlerEndDocument(void* userData, SablotHandle processor_);
+
+
+
/*
+
The SAX handler structure. Use SablotRegSAXHandler() to register.
+
*/
+
+
+
typedef struct
+
{
+
SAXHandlerStartDocument *startDocument;
+
SAXHandlerStartElement *startElement;
+
SAXHandlerEndElement *endElement;
+
SAXHandlerStartNamespace *startNamespace;
+
SAXHandlerEndNamespace *endNamespace;
+
SAXHandlerComment *comment;
+
SAXHandlerPI *processingInstruction;
+
SAXHandlerCharacters *characters;
+
SAXHandlerEndDocument *endDocument;
+
} SAXHandler;
+
+
+
/*****************************************************************
+
MiscHandler
+
+
Collects miscellaneous callbacks.
+
*****************************************************************/
+
+
/*
+
documentInfo()
+
If set, this callback gets called after the output of a result
+
document is finished, giving information about its content type
+
and encoding.
+
*/
+
+
typedef void
+
MiscHandlerDocumentInfo(void* userData, SablotHandle processor_,
+
const char *contentType, const char *encoding);
+
+
/*
+
The Misc handler structure.
+
Use SablotRegHandler(HLR_MISC, ...) to register.
+
*/
+
+
typedef struct
+
{
+
MiscHandlerDocumentInfo *documentInfo;
+
} MiscHandler;
+
+
/*****************************************************************
+
EncHandler
+
+
Handler for recoding requests in absence of iconv.
+
*****************************************************************/
+
+
#define EH_FROM_UTF8 1
+
#define EH_TO_UTF8 0
+
+
/*
+
the conversion descriptor like iconv_t
+
*/
+
+
typedef void* EHDescriptor;
+
+
typedef enum
+
{
+
EH_OK,
+
EH_EINVAL,
+
EH_E2BIG,
+
EH_EILSEQ
+
} EHResult;
+
+
/*
+
open()
+
direction is either EH_FROM_UTF8 or EH_TO_UTF8
+
encoding is the other encoding
+
RETURN the descriptor, or -1 if the encoding is not supported
+
*/
+
+
typedef EHDescriptor EncHandlerOpen(void* userData, SablotHandle processor_,
+
int direction, const char *encoding);
+
+
/*
+
conv()
+
arguments 3 through 7 are just like for iconv, see the manpage
+
RETURN -1 on error (set errno), a different value (e.g. 0) if OK
+
*/
+
+
typedef EHResult EncHandlerConv(void* userData, SablotHandle processor_,
+
EHDescriptor cd, const char** inbuf, size_t *inbytesleft,
+
char ** outbuf, size_t *outbytesleft);
+
+
/*
+
close()
+
cd is the descriptor to close. Return 0 if OK, -1 on error.
+
*/
+
+
typedef int EncHandlerClose(void* userData, SablotHandle processor_,
+
EHDescriptor cd);
+
+
/*
+
The EncHandler structure.
+
Use SablotRegHandler(HLR_ENC, ...) to register.
+
*/
+
+
typedef struct
+
{
+
EncHandlerOpen *open;
+
EncHandlerConv *conv;
+
EncHandlerClose *close;
+
} EncHandler;
+
+
#endif
+