00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030 #ifdef HAVE_CONFIG_H
00031 #include "OW_config.h"
00032 #include <config.h>
00033 #endif
00034 #include "OW_Socket.hpp"
00035 #include "OW_SocketAddress.hpp"
00036 #include "OW_HTTPChunker.hpp"
00037 #include "OW_String.hpp"
00038 #include <iostream>
00039 #include <string>
00040 extern "C"
00041 {
00042 #include <stdlib.h>
00043 }
00044 using std::string;
00045 using std::ios;
00046 int
00047 main(int argc, char* argv[])
00048 {
00049 HTTPChunker* chunker;
00050 if (argc < 3)
00051 {
00052 cout << "Usage: " << argv[0] << " <hostname> <path> [chunked]" << endl;
00053 exit(1);
00054 }
00055 istream* istrm;
00056 try
00057 {
00058 string ipOrHost;
00059
00060
00061 SocketAddress addr;
00062 addr = SocketAddress::getByName(argv[1], 80);
00063 cout << "\n\nTrying to connect on port 80...\n";
00064 Socket sock(addr);
00065 cout << "Getting /\n";
00066 ostream& ostrm = sock.getOutputStream();
00067 sock.waitForOutput();
00068 ostrm << "GET " << argv[2] << " HTTP/1.1\r\n\r\n";
00069 ostrm.flush();
00070 char buf[1024];
00071 istrm = &sock.getInputStream();
00072 cout << "Receiving...\n";
00073 while (istrm->getline(buf, 1023))
00074 {
00075 cout << buf << endl;
00076 if (strcmp(buf,"\r") == 0)
00077 break;
00078 }
00079 cout << "^^HEADER^^" << endl;
00080 cout << "stream states: good bad fail eof rdstate" << endl;
00081 cout << istrm->good() << istrm->bad() << istrm->fail() << istrm->eof()
00082 << istrm->rdstate() << endl;
00083
00084 if (argc >= 4 && strcmp(argv[3], "chunked") == 0)
00085 {
00086 chunker = new HTTPChunker(istrm);
00087 istrm = &chunker->getInputStream();
00088 cout << "Switched istream pointer to chunker" << endl;
00089 cout << "stream states: good bad fail eof rdstate" << endl;
00090 cout << istrm->good() << istrm->bad() << istrm->fail() << istrm->eof()
00091 << istrm->rdstate() << endl;
00092 }
00093 string recievedChunk;
00094 cout << "~~BODY~~" << endl;
00095 try
00096 {
00097 while ((*istrm) >> recievedChunk)
00098 {
00099 cout << recievedChunk;
00100 }
00101 }
00102 catch (HTTPChunkException& e)
00103 {
00104 cout << "Chunk Error!" << endl;
00105 exit(1);
00106 }
00107 cout << endl;
00108 }
00109 catch(SocketException &e)
00110 {
00111 cerr << "An exception occurred: " << e.type() << " " << e.getMessage()
00112 << endl;
00113
00114
00115 return EXIT_SUCCESS;
00116 }
00117 catch (...)
00118 {
00119 cout << "caught unknown exception" << endl;
00120 }
00121 cout << "^^END OF BODY^^" << endl;
00122 cout << "stream states: good bad fail eof rdstate" << endl;
00123 cout << istrm->good() << istrm->bad() << istrm->fail() << istrm->eof()
00124 << istrm->rdstate() << endl;
00125 return EXIT_SUCCESS;
00126 }
00127