ViewVC Help
View File | Revision Log | Show Annotations | Download File | View Changeset | Root Listing
root/proj/trunk/Search/HttpHandler.cpp
(Generate patch)

Comparing trunk/Search/HttpHandler.cpp (file contents):
Revision 13 by douglas, 2002-12-06T19:56:56-08:00 vs.
Revision 14 by douglas, 2002-12-07T00:19:03-08:00

# Line 52 | Line 52
52  
53   HttpHandler::HttpHandler()
54   {
55 +        buffer = new char[BUFSIZ + 1];
56 +
57   #ifdef _WIN32
58 <        WSADATA data;
57 <        if (WSAStartup(MAKEWORD(2, 0) != 0, &data))
58 >        if (WSAStartup(MAKEWORD(2, 0), &data) != 0)
59          {
60                  error(program + ": WSAStartup()");
61                  exit(1);
# Line 66 | Line 67 | HttpHandler::HttpHandler()
67  
68   HttpHandler::~HttpHandler()
69   {
70 +        delete [] buffer;
71 +
72   #ifdef _WIN32
73          WSACleanup();
74   #endif // _WIN32
75   }
76  
77 < bool HttpHandler::connect(URL &url, bool head)
77 > bool HttpHandler::handle(URL &url, bool head)
78   {
79          bool answer = false;
80  
81 < //      if (status != JNI_ERR)
82 < //      {
83 < //              if (cls != 0)
84 < //              {
85 < //                      if (mid != 0)
86 < //                      {
87 < //                              jstring addressJ = env->NewStringUTF(url.getAddress().c_str());
88 < //                              jint portJ = url.getPort();
89 < //                              jstring pathJ = env->NewStringUTF(url.getPath().c_str());
90 < //                              jstring programNameJ = env->NewStringUTF(programName.c_str());
91 < //                              jstring programVersionJ =
92 < //                                      env->NewStringUTF(programVersion.c_str());
93 <
94 < //                              jstring pageJ = (jstring)env->CallStaticObjectMethod(cls, mid,
95 < //                                      addressJ, portJ, pathJ, programNameJ, programVersionJ);
96 <
97 < //                              const char* pageC = env->GetStringUTFChars(pageJ, 0);
98 < //                              page = pageC;
99 < //                              env->ReleaseStringUTFChars(pageJ, pageC);
100 <
101 < //                              if (page != "unknown host\n" && page != "io exception\n" &&
102 < //                                      page != "bad headers\n") answer = true;
103 < //                      }
104 < //              }
105 < //      }
81 >        if ((http = socket(PF_INET, SOCK_STREAM, 0)) == INVALID_SOCKET)
82 >        {
83 >                error(program + ": Socket");
84 >                exit(1);
85 >        }
86 >
87 >        sockaddr_in address;
88 >        hostent* host;
89 >
90 >        address.sin_family = AF_INET;
91 >
92 >        if ((host = gethostbyname(url.getAddress().c_str())) == NULL)
93 >        {
94 >                error(program + ": Host: " + url.getAddress(), true);
95 >                return answer;
96 >        }
97 >
98 >        address.sin_addr = *((in_addr*)*host->h_addr_list);
99 >        address.sin_port = htons(url.getPort());
100 >
101 >        if (connect(http, (sockaddr*)&address, sizeof(sockaddr_in)) ==
102 >                SOCKET_ERROR)
103 >        {
104 >                error(program + ": Connect");
105 >                return answer;
106 >        }
107 >
108 >        if (head)
109 >        {
110 >                putline("HEAD " + url.getPath() + " HTTP/1.1");
111 >        }
112 >        else
113 >        {
114 >                putline("GET " + url.getPath() + " HTTP/1.1");
115 >        }
116 >
117 >        putline("Accept: text/html; text/plain");
118 >        putline("User-Agent: " + agent(true) + ' ' + platform());
119 >
120 >        if (url.getPort() == 80)
121 >        {
122 >                putline("Host: " + url.getAddress());
123 >        }
124 >        else
125 >        {
126 >                char* port = new char[1024];
127 >                sprintf(port, "%u", url.getPort());
128 >
129 >                putline("Host: " + url.getAddress() + ':' + port);
130 >
131 >                delete [] port;
132 >        }
133 >
134 >        putline();
135  
136          return answer;
137   }
# Line 150 | Line 182 | void HttpHandler::clear()
182          page = "";
183   }
184  
185 + void HttpHandler::putline(const string line)
186 + {
187 +        sprintf(buffer, "%s\r\n", line.c_str());
188 +        if (send(http, buffer, strlen(buffer), 0) == SOCKET_ERROR)
189 +        {
190 +                error(program + ": Send");
191 +                exit(1);
192 +        }
193 + }
194 +
195   void HttpHandler::error(const string prefix, bool host)
196   {
197   #ifdef _WIN32

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines