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 145 by douglas, 2003-05-31T14:31:50-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 75 | Line 75 | HttpHandler::~HttpHandler()
75   #endif // _WIN32
76   }
77  
78 < bool HttpHandler::handle(URL &url, bool head)
78 > bool HttpHandler::handle(URL &url, const string referer, bool head)
79   {
80          bool answer = false;
81  
# Line 132 | Line 132 | bool HttpHandler::handle(URL &url, bool
132                  delete [] port;
133          }
134  
135 < //      putline("Referer: " + ?referer?);
135 >        if (referer != "")
136 >        {
137 >                putline("Referer: " + referer);
138 >        }
139 >
140          putline("Connection: close");
141          putline();
142  
# Line 155 | Line 159 | bool HttpHandler::handle(URL &url, bool
159                  unsigned minor = strtoul(line.substr(dot + 1, space - dot - 1).c_str(),
160                          0, 10);
161  
162 <                if (major > 1 || minor < 1)
162 >                if (major > 1)
163                  {
164                          cerr << program << ": Potentially Incompatible Server: HTTP/" <<
165                                  major << "." << minor << "\n";
# Line 239 | Line 243 | bool HttpHandler::handle(URL &url, bool
243  
244   HttpHandler& HttpHandler::getline(string& line, char endline)
245   {
246 <        int end = page.find(endline);
247 <        int newline = page.find('\n');
246 >        unsigned end = page.find(endline);
247 >        unsigned newline = page.find('\n');
248  
249          if (newline < end || end == string::npos)
250          {
# Line 250 | Line 254 | HttpHandler& HttpHandler::getline(string
254          line = page.substr(0, end);
255          page.erase(0, (end == string::npos ? end : end + 1));
256  
253 //      if (line == "") cerr << "line = [" << line << "]\npage = [" << page
254 //              << "]" << (good() ? "true" : "false") << "\n";
255
257          return *this;
258   }
259  
# Line 278 | Line 279 | void HttpHandler::populate()
279                          memset(buffer, 0, BUFSIZ + 1);
280  
281                          unsigned bytes = left > BUFSIZ ? BUFSIZ : left;
282 +                        unsigned received;
283  
284 <                        if (recv(http, buffer, bytes, 0) == SOCKET_ERROR)
284 >                        while (true)
285                          {
286 <                                error(program + ": Recv");
287 <                                exit(1);
286 >                                if ((received = recv(http, buffer, bytes, 0)) == SOCKET_ERROR)
287 >                                {
288 >                                        error(program + ": Recv");
289 >                                        exit(1);
290 >                                }
291 >                                else if (received != bytes)
292 >                                {
293 >                                        left -= received;
294 >                                        page += buffer;
295 >
296 >                                        memset(buffer, 0, BUFSIZ + 1);
297 >
298 >                                        bytes -= received;
299 >                                }
300 >                                else
301 >                                {
302 >                                        break;
303 >                                }
304                          }
305  
306                          page += buffer;
# Line 304 | Line 322 | void HttpHandler::populate()
322                                  memset(buffer, 0, BUFSIZ + 1);
323  
324                                  unsigned bytes = left > BUFSIZ ? BUFSIZ : left;
325 +                                unsigned received;
326  
327 <                                if (recv(http, buffer, bytes, 0) == SOCKET_ERROR)
327 >                                while (true)
328                                  {
329 <                                        error(program + ": Recv");
330 <                                        exit(1);
329 >                                        if ((received = recv(http, buffer, bytes, 0)) ==
330 >                                                SOCKET_ERROR)
331 >                                        {
332 >                                                error(program + ": Recv");
333 >                                                exit(1);
334 >                                        }
335 >                                        else if (received != bytes)
336 >                                        {
337 >                                                left -= received;
338 >                                                page += buffer;
339 >
340 >                                                memset(buffer, 0, BUFSIZ + 1);
341 >
342 >                                                bytes -= received;
343 >                                        }
344 >                                        else
345 >                                        {
346 >                                                break;
347 >                                        }
348                                  }
349  
350                                  page += buffer;

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines