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 20 by douglas, 2002-12-10T14:04:39-08:00 vs.
Revision 178 by douglas, 2003-07-05T19:13:12-07:00

# Line 1 | Line 1
1   /* ============================================================================
2   * Douglas Thrift's Search Engine License
3   *
4 < * Copyright (C) 2002, Douglas Thrift. All Rights Reserved.
4 > * Copyright (C) 2002-2003, Douglas Thrift. All Rights Reserved.
5   * Redistribution and use in source and binary forms, with or without
6   * modification, are permitted provided that the following conditions are met:
7   *
# Line 50 | Line 50
50  
51   #include "HttpHandler.h"
52  
53 + #ifndef _WIN32
54 + #include <unistd.h>
55 + #include <sys/types.h>
56 + #include <sys/socket.h>
57 + #include <netinet/in.h>
58 + #include <netdb.h>
59 +
60 + #define INVALID_SOCKET -1
61 + #define SOCKET_ERROR -1
62 +
63 + inline int closesocket(SOCKET s) { return close(s); }
64 + #endif
65 +
66   HttpHandler::HttpHandler()
67   {
68          buffer = new char[BUFSIZ + 1];
# Line 75 | Line 88 | HttpHandler::~HttpHandler()
88   #endif // _WIN32
89   }
90  
91 < bool HttpHandler::handle(URL &url, bool head)
91 > bool HttpHandler::handle(URL &url, const string referer, bool head)
92   {
93          bool answer = false;
94  
# Line 132 | Line 145 | bool HttpHandler::handle(URL &url, bool
145                  delete [] port;
146          }
147  
148 < //      putline("Referer: " + ?referer?);
148 >        if (referer != "")
149 >        {
150 >                putline("Referer: " + referer);
151 >        }
152 >
153          putline("Connection: close");
154          putline();
155  
# Line 155 | Line 172 | bool HttpHandler::handle(URL &url, bool
172                  unsigned minor = strtoul(line.substr(dot + 1, space - dot - 1).c_str(),
173                          0, 10);
174  
175 <                if (major > 1 || minor < 1)
175 >                if (major > 1)
176                  {
177                          cerr << program << ": Potentially Incompatible Server: HTTP/" <<
178                                  major << "." << minor << "\n";
# Line 239 | Line 256 | bool HttpHandler::handle(URL &url, bool
256  
257   HttpHandler& HttpHandler::getline(string& line, char endline)
258   {
259 <        int end = page.find(endline);
260 <        int newline = page.find('\n');
259 >        unsigned end = page.find(endline);
260 >        unsigned newline = page.find('\n');
261  
262          if (newline < end || end == string::npos)
263          {
# Line 250 | Line 267 | HttpHandler& HttpHandler::getline(string
267          line = page.substr(0, end);
268          page.erase(0, (end == string::npos ? end : end + 1));
269  
253 //      if (line == "") cerr << "line = [" << line << "]\npage = [" << page
254 //              << "]" << (good() ? "true" : "false") << "\n";
255
270          return *this;
271   }
272  
# Line 278 | Line 292 | void HttpHandler::populate()
292                          memset(buffer, 0, BUFSIZ + 1);
293  
294                          unsigned bytes = left > BUFSIZ ? BUFSIZ : left;
295 +                        unsigned received;
296  
297 <                        if (recv(http, buffer, bytes, 0) == SOCKET_ERROR)
297 >                        while (true)
298                          {
299 <                                error(program + ": Recv");
300 <                                exit(1);
299 >                                if ((received = recv(http, buffer, bytes, 0)) == SOCKET_ERROR)
300 >                                {
301 >                                        error(program + ": Recv");
302 >                                        exit(1);
303 >                                }
304 >                                else if (received != bytes)
305 >                                {
306 >                                        left -= received;
307 >                                        page += buffer;
308 >
309 >                                        memset(buffer, 0, BUFSIZ + 1);
310 >
311 >                                        bytes -= received;
312 >                                }
313 >                                else
314 >                                {
315 >                                        break;
316 >                                }
317                          }
318  
319                          page += buffer;
# Line 304 | Line 335 | void HttpHandler::populate()
335                                  memset(buffer, 0, BUFSIZ + 1);
336  
337                                  unsigned bytes = left > BUFSIZ ? BUFSIZ : left;
338 +                                unsigned received;
339  
340 <                                if (recv(http, buffer, bytes, 0) == SOCKET_ERROR)
340 >                                while (true)
341                                  {
342 <                                        error(program + ": Recv");
343 <                                        exit(1);
342 >                                        if ((received = recv(http, buffer, bytes, 0)) ==
343 >                                                SOCKET_ERROR)
344 >                                        {
345 >                                                error(program + ": Recv");
346 >                                                exit(1);
347 >                                        }
348 >                                        else if (received != bytes)
349 >                                        {
350 >                                                left -= received;
351 >                                                page += buffer;
352 >
353 >                                                memset(buffer, 0, BUFSIZ + 1);
354 >
355 >                                                bytes -= received;
356 >                                        }
357 >                                        else
358 >                                        {
359 >                                                break;
360 >                                        }
361                                  }
362  
363                                  page += buffer;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines