xmlfetch.cpp

00001 // Copyright (C) 2001-2005 Open Source Telecom Corporation.
00002 // Copyright (C) 2006-2008 David Sugar, Tycho Softworks.
00003 //
00004 // This program is free software; you can redistribute it and/or modify
00005 // it under the terms of the GNU General Public License as published by
00006 // the Free Software Foundation; either version 2 of the License, or
00007 // (at your option) any later version.
00008 //
00009 // This program is distributed in the hope that it will be useful,
00010 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00011 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00012 // GNU General Public License for more details.
00013 //
00014 // You should have received a copy of the GNU General Public License
00015 // along with this program; if not, write to the Free Software
00016 // Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
00017 //
00018 // As a special exception to the GNU General Public License, permission is
00019 // granted for additional uses of the text contained in its release
00020 // of Common C++.
00021 //
00022 // The exception is that, if you link the Common C++ library with other
00023 // files to produce an executable, this does not by itself cause the
00024 // resulting executable to be covered by the GNU General Public License.
00025 // Your use of that executable is in no way restricted on account of
00026 // linking the Common C++ library code into it.
00027 //
00028 // This exception does not however invalidate any other reasons why
00029 // the executable file might be covered by the GNU General Public License.
00030 //
00031 // This exception applies only to the code released under the
00032 // name Common C++.  If you copy code from other releases into a copy of
00033 // Common C++, as the General Public License permits, the exception does
00034 // not apply to the code that you add in this way.  To avoid misleading
00035 // anyone as to the status of such modified files, you must delete
00036 // this exception notice from them.
00037 //
00038 // If you write modifications of your own for Common C++, it is your choice
00039 // whether to permit this exception to apply to your modifications.
00040 // If you do not wish that, delete this exception notice.
00041 
00042 #include <cc++/common.h>
00043 #include <iostream>
00044 #include <cstdlib>
00045 
00046 #ifdef  CCXX_NAMESPACES
00047 using namespace std;
00048 using namespace ost;
00049 #endif
00050 
00051 class myXMLParser : public URLStream, public XMLStream
00052 {
00053 private:
00054         void httpHeader(const char *header, const char *value) {
00055                 cout << "HEADER " << header << "=" << value << endl;
00056         }
00057 
00058         int read(unsigned char *buffer, size_t len) {
00059                 URLStream::read((char *)buffer, len);
00060                 len = gcount();
00061                 return len;
00062         }
00063 
00064         void startDocument(void) {
00065                 cout << "START DOCUMENT" << endl;
00066         }
00067 
00068         void endDocument(void) {
00069                 cout << "END DOCUMENT" << endl;
00070         }
00071 
00072         void characters(const unsigned char *text, size_t len) {
00073                 cout << "CHARS=";
00074                 while(len--)
00075                         cout << *(text++);
00076                 cout << endl;
00077         }
00078 
00079         void comment(const char *text) {
00080                 cout << "COMMENT=" << text << endl;
00081         }
00082 
00083         void startElement(const unsigned char *name, const unsigned char **attr) {
00084                 cout << "<" << name;
00085                 if(attr) {
00086                         while(*attr) {
00087                                 cout << " " << *(attr++);
00088                                 cout << "=" << *(attr++);
00089                         }
00090                 }
00091                 cout << ">" << endl;
00092         }
00093 
00094         void endElement(const unsigned char *name) {
00095                 cout << "</" << name << ">" << endl;
00096         }
00097 public:
00098         void Close(void) {
00099                 URLStream::close();
00100         }
00101 };
00102 
00103 int main(int argc, char **argv)
00104 {
00105         myXMLParser xml;
00106         URLStream::Error status;
00107 
00108 //      url.setProxy("home.sys", 8000);
00109 #ifdef  CCXX_EXCEPTIONS
00110         try {
00111 #endif
00112                 while(--argc) {
00113                         ++argv;
00114                         cout << "fetching " << *argv << endl;
00115                         status = xml.get(*argv);
00116                         if(status) {
00117                                 cout << "failed; reason=" << status << endl;
00118                                 xml.Close();
00119                                 continue;
00120                         }
00121                         cout << "Parsing..." << endl;
00122                         if(!xml.parse())
00123                                 cout << "not well formed..." << endl;
00124                         xml.Close();
00125                         cout << ends;
00126                 }
00127 #ifdef  CCXX_EXCEPTIONS
00128         }
00129         catch(...) {
00130                 cerr << "url " << *argv << " failed" << endl;
00131         }
00132 #endif
00133 }
00134 

Generated on Tue Apr 7 05:42:01 2009 for GNU CommonC++ by  doxygen 1.4.7