blob: ce27d35834847fa89af9ef710cbe9129b72f532e [file] [log] [blame]
Emeric Vigier2f625822012-08-06 11:09:52 -04001// Copyright (C) 2001-2005 Open Source Telecom Corporation.
2// Copyright (C) 2006-2008 David Sugar, Tycho Softworks.
3//
4// This program is free software; you can redistribute it and/or modify
5// it under the terms of the GNU General Public License as published by
6// the Free Software Foundation; either version 2 of the License, or
7// (at your option) any later version.
8//
9// This program is distributed in the hope that it will be useful,
10// but WITHOUT ANY WARRANTY; without even the implied warranty of
11// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12// GNU General Public License for more details.
13//
14// You should have received a copy of the GNU General Public License
15// along with this program; if not, write to the Free Software
16// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
17//
18// As a special exception to the GNU General Public License, permission is
19// granted for additional uses of the text contained in its release
20// of Common C++.
21//
22// The exception is that, if you link the Common C++ library with other
23// files to produce an executable, this does not by itself cause the
24// resulting executable to be covered by the GNU General Public License.
25// Your use of that executable is in no way restricted on account of
26// linking the Common C++ library code into it.
27//
28// This exception does not however invalidate any other reasons why
29// the executable file might be covered by the GNU General Public License.
30//
31// This exception applies only to the code released under the
32// name Common C++. If you copy code from other releases into a copy of
33// Common C++, as the General Public License permits, the exception does
34// not apply to the code that you add in this way. To avoid misleading
35// anyone as to the status of such modified files, you must delete
36// this exception notice from them.
37//
38// If you write modifications of your own for Common C++, it is your choice
39// whether to permit this exception to apply to your modifications.
40// If you do not wish that, delete this exception notice.
41
42#include <cc++/common.h>
43#include <iostream>
44#include <cstdlib>
45
46#ifdef CCXX_NAMESPACES
47using namespace std;
48using namespace ost;
49#endif
50
51class myXMLParser : public URLStream, public XMLStream
52{
53private:
54 void httpHeader(const char *header, const char *value) {
55 cout << "HEADER " << header << "=" << value << endl;
56 }
57
58 int read(unsigned char *buffer, size_t len) {
59 URLStream::read((char *)buffer, len);
60 len = gcount();
61 return len;
62 }
63
64 void startDocument(void) {
65 cout << "START DOCUMENT" << endl;
66 }
67
68 void endDocument(void) {
69 cout << "END DOCUMENT" << endl;
70 }
71
72 void characters(const unsigned char *text, size_t len) {
73 cout << "CHARS=";
74 while(len--)
75 cout << *(text++);
76 cout << endl;
77 }
78
79 void comment(const char *text) {
80 cout << "COMMENT=" << text << endl;
81 }
82
83 void startElement(const unsigned char *name, const unsigned char **attr) {
84 cout << "<" << name;
85 if(attr) {
86 while(*attr) {
87 cout << " " << *(attr++);
88 cout << "=" << *(attr++);
89 }
90 }
91 cout << ">" << endl;
92 }
93
94 void endElement(const unsigned char *name) {
95 cout << "</" << name << ">" << endl;
96 }
97public:
98 void Close(void) {
99 URLStream::close();
100 }
101};
102
103int main(int argc, char **argv)
104{
105 myXMLParser xml;
106 URLStream::Error status;
107
108// url.setProxy("home.sys", 8000);
109#ifdef CCXX_EXCEPTIONS
110 try {
111#endif
112 while(--argc) {
113 ++argv;
114 cout << "fetching " << *argv << endl;
115 status = xml.get(*argv);
116 if(status) {
117 cout << "failed; reason=" << status << endl;
118 xml.Close();
119 continue;
120 }
121 cout << "Parsing..." << endl;
122 if(!xml.parse())
123 cout << "not well formed..." << endl;
124 xml.Close();
125 cout << ends;
126 }
127#ifdef CCXX_EXCEPTIONS
128 }
129 catch(...) {
130 cerr << "url " << *argv << " failed" << endl;
131 }
132#endif
133}
134