]>
Commit | Line | Data |
---|---|---|
43ae1d95 | 1 | /* |
f6e9a3ee | 2 | * Copyright (C) 1996-2019 The Squid Software Foundation and contributors |
43ae1d95 | 3 | * |
bbc27441 AJ |
4 | * Squid software is distributed under GPLv2+ license and includes |
5 | * contributions from numerous individuals and organizations. | |
6 | * Please see the COPYING and CONTRIBUTORS files for details. | |
43ae1d95 | 7 | */ |
8 | ||
bbc27441 AJ |
9 | /* DEBUG: section 86 ESI processing */ |
10 | ||
582c2af2 | 11 | #include "squid.h" |
da783331 | 12 | |
95cd9022 | 13 | #if USE_SQUID_ESI && HAVE_LIBEXPAT |
da783331 | 14 | |
f99c2cfe | 15 | #include "esi/ExpatParser.h" |
43ae1d95 | 16 | |
019db3c6 | 17 | EsiParserDefinition(ESIExpatParser); |
c2d4889f | 18 | |
43ae1d95 | 19 | ESIExpatParser::ESIExpatParser(ESIParserClient *aClient) : theClient (aClient) |
20 | { | |
21 | /* TODO: grab the document encoding from the headers */ | |
22 | p = XML_ParserCreateNS(NULL,'|'); | |
23 | XML_SetUserData (myParser(), static_cast<void *>(this)); | |
24 | XML_SetElementHandler(myParser(), Start, End); | |
25 | XML_SetDefaultHandler(myParser(), Default); | |
26 | XML_SetCommentHandler(myParser(), Comment); | |
27 | XML_UseParserAsHandlerArg(myParser()); | |
28 | } | |
29 | ||
30 | ESIExpatParser::~ESIExpatParser() | |
31 | { | |
32 | XML_ParserFree (myParser()); | |
33 | p = NULL; | |
34 | } | |
35 | ||
36 | void | |
37 | ESIExpatParser::Start(void *data,const XML_Char *el, const char **attr) | |
38 | { | |
39 | XML_Parser parser = static_cast<XML_Parser>(data); | |
40 | ESIExpatParser *me = (ESIExpatParser *)XML_GetUserData(parser); | |
41 | me->theClient->start (el, attr, XML_GetSpecifiedAttributeCount (parser)); | |
42 | } | |
43 | ||
44 | void | |
45 | ESIExpatParser::End(void *data,const XML_Char *el) | |
46 | { | |
47 | XML_Parser parser = static_cast<XML_Parser>(data); | |
48 | ESIExpatParser *me = (ESIExpatParser *)XML_GetUserData(parser); | |
49 | me->theClient->end (el); | |
50 | } | |
51 | ||
52 | void | |
53 | ESIExpatParser::Default(void *data, const XML_Char *s, int len) | |
54 | { | |
55 | XML_Parser parser = static_cast<XML_Parser>(data); | |
56 | ESIExpatParser *me = (ESIExpatParser *)XML_GetUserData(parser); | |
57 | me->theClient->parserDefault (s, len); | |
58 | } | |
59 | ||
60 | void | |
61 | ESIExpatParser::Comment(void *data, const XML_Char *s) | |
62 | { | |
63 | XML_Parser parser = static_cast<XML_Parser>(data); | |
64 | ESIExpatParser *me = (ESIExpatParser *)XML_GetUserData(parser); | |
65 | me->theClient->parserComment (s); | |
66 | } | |
67 | ||
68 | bool | |
69 | ESIExpatParser::parse(char const *dataToParse, size_t const lengthOfData, bool const endOfStream) | |
70 | { | |
71 | return XML_Parse(myParser(), dataToParse, lengthOfData, endOfStream); | |
72 | } | |
73 | ||
137a13ea | 74 | long int |
43ae1d95 | 75 | ESIExpatParser::lineNumber() const |
76 | { | |
137a13ea | 77 | return (long int)XML_GetCurrentLineNumber(myParser()); |
43ae1d95 | 78 | } |
79 | ||
80 | char const * | |
81 | ESIExpatParser::errorString() const | |
82 | { | |
83 | return XML_ErrorString(XML_GetErrorCode(myParser())); | |
84 | } | |
da783331 AJ |
85 | |
86 | #endif /* USE_SQUID_ESI */ | |
f53969cc | 87 |