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 208 by douglas, 2003-07-18T00:17:10-07:00 vs.
Revision 312 by douglas, 2004-01-01T15:00:34-08:00

# Line 1 | Line 1
1   /* ============================================================================
2   * Douglas Thrift's Search Engine License
3   *
4 < * Copyright (C) 2002-2003, Douglas Thrift. All Rights Reserved.
4 > * Copyright (C) 2002-2004, 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 46 | Line 46
46   //
47   // Douglas Thrift
48   //
49 < // $Id: HttpHandler.cpp,v 1.20 2003/07/18 07:17:10 douglas Exp $
49 > // $Id: HttpHandler.cpp,v 1.27 2004/01/01 23:00:34 douglas Exp $
50  
51   #include "HttpHandler.h"
52  
# Line 59 | Line 59
59   #include <netinet/in.h>
60   #include <netdb.h>
61  
62 #define INVALID_SOCKET -1
63 #define SOCKET_ERROR -1
64
62   inline int closesocket(SOCKET s) { return close(s); }
63   #endif
64  
# Line 189 | Line 186 | bool HttpHandler::handle(URL &url, const
186                  unsigned dot = line.find('.');
187                  unsigned space = line.find(' ');
188  
189 <                unsigned major = strtoul(line.substr(5, dot - 5).c_str(), 0, 10);
190 <                unsigned minor = strtoul(line.substr(dot + 1, space - dot - 1).c_str(),
191 <                        0, 10);
189 >                unsigned major;
190 >                unsigned minor;
191 >
192 >                istringstream number(line.substr(5, dot - 5) + " " + line.substr(dot
193 >                        + 1, space - dot - 1));
194 >
195 >                number >> major;
196 >                number >> minor;
197  
198                  if (major > 1)
199                  {
# Line 201 | Line 203 | bool HttpHandler::handle(URL &url, const
203                          return answer;
204                  }
205  
206 <                response = code(strtoul(line.substr(space + 1).c_str(), 0, 10));
206 >                number.clear();
207 >                number.str(line.substr(space + 1, 3));
208 >                number >> response;
209  
210                  if (response < ok) do line = getline(); while (line != "");
211          }
# Line 226 | Line 230 | bool HttpHandler::handle(URL &url, const
230                          }
231                          else if (field == "Content-Length")
232                          {
233 <                                length = strtoul(value.c_str(), 0, 10);
233 >                                istringstream number(value);
234 >
235 >                                number >> length;
236                          }
237                          else if (field == "Location")
238                          {
# Line 277 | Line 283 | bool HttpHandler::handle(URL &url, const
283  
284   void HttpHandler::clear()
285   {
286 + #ifdef _OpenSSL_
287          if (tls)
288          {
289                  SSL_shutdown(ssl);
290                  SSL_free(ssl);
291                  SSL_CTX_free(ctx);
292          }
293 + #endif
294  
295          closesocket(http);
296  
# Line 323 | Line 331 | void HttpHandler::populate()
331                                          SSL_read(ssl, buffer, bytes)) <= 0)
332                                  {
333                                          !tls ? error(program + ": Recv") : error(program +
334 <                                                ": SSL Read", received);
334 >                                                ": SSL Read", int(received));
335                                  }
336   #endif
337                                  else if (received != bytes)
# Line 351 | Line 359 | void HttpHandler::populate()
359  
360                  do
361                  {
362 <                        chunk = strtoul(getline().c_str(), 0, 16);
362 >                        istringstream number(getline());
363 >
364 >                        number.setf(ios_base::hex, ios_base::basefield);
365 >                        number >> chunk;
366  
367                          unsigned left = chunk;
368  
# Line 376 | Line 387 | void HttpHandler::populate()
387                                                  SSL_read(ssl, buffer, bytes)) <= 0)
388                                          {
389                                                  !tls ? error(program + ": Recv") : error(program +
390 <                                                        ": SSL Read", received);
390 >                                                        ": SSL Read", int(received));
391                                                  exit(1);
392                                          }
393   #endif
# Line 761 | Line 772 | bool HttpHandler::starttls()
772          SSL_load_error_strings();
773          SSL_library_init();
774  
775 <        //
775 > #ifndef _urandomdev_
776 >        int pid = getpid();
777 >        int now = time(NULL);
778 >
779 >        unsigned seed = now > pid ? now - pid : pid - now;
780 >
781 >        char* junk = new char[seed % 30 + 2];
782 >        junk[0] = pid;
783 >        junk[seed % 30 + 1] = now;
784 >
785 >        srand(seed);
786 >
787 >        for (int index = 1; index < seed % 30 + 1; index++)
788 >        {
789 >                junk[index] = rand();
790 >        }
791 >
792 >        if (debug)
793 >        {
794 >                cerr << "junk = {\n";
795 >
796 >                for (int index = 1; index < seed % 30 + 2; index++)
797 >                {
798 >                        cerr << "   [" << index << "] = " << int(junk[index]) << "\n";
799 >                }
800 >
801 >                cerr << "}\n";
802 >        }
803 >
804 >        RAND_seed(junk, seed % 30 + 2);
805 >
806 >        delete junk;
807 > #else
808 >        if (debug) cerr << "junk = /dev/urandom\n";
809 > #endif
810 >
811 >        ctx = SSL_CTX_new(TLSv1_client_method());
812 >
813 >        if (ctx == NULL)
814 >        {
815 >                cerr << program << ": SSL CTX New: "
816 >                        << ERR_reason_error_string(ERR_get_error()) << "\n";
817 >                return false;
818 >        }
819 >
820 >        ssl = SSL_new(ctx);
821 >
822 >        if (SSL_set_fd(ssl, http) == 0)
823 >        {
824 >                cerr << program << ": SSL Set FD: "
825 >                        << ERR_reason_error_string(ERR_get_error()) << "\n";
826 >                return false;
827 >        }
828 >
829 >        int number;
830 >
831 >        if ((number = SSL_connect(ssl)) <= 0)
832 >        {
833 >                error(program + ": SSL Connect", number);
834 >                return false;
835 >        }
836  
837          return true;
838   }

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines