@type ssl_params: HttpSslParams
@param ssl_params: SSL key and certificate
@type ssl_verify_peer: bool
- @param ssl_verify_peer: Whether to compare our certificate with server's
- certificate
+ @param ssl_verify_peer: Whether to compare our certificate with
+ server's certificate
"""
if post_data is not None:
http.HttpBase.__init__(self)
self.request = req
- self.poller = select.poll()
-
try:
# TODO: Implement connection caching/keep-alive
self.sock = self._CreateSocket(req.ssl_params,
finally:
# TODO: Keep-alive is not supported, always close connection
force_close = True
- http.ShutdownConnection(self.poller, self.sock,
- self.CLOSE_TIMEOUT, self.WRITE_TIMEOUT,
- response_msg_reader, force_close)
+ http.ShutdownConnection(self.sock, self.CLOSE_TIMEOUT,
+ self.WRITE_TIMEOUT, response_msg_reader,
+ force_close)
self.sock.close()
self.sock = None
if not connected:
# Wait for connection
- event = http.WaitForSocketCondition(self.poller, self.sock,
- select.POLLOUT, self.CONNECT_TIMEOUT)
+ event = http.WaitForSocketCondition(self.sock, select.POLLOUT,
+ self.CONNECT_TIMEOUT)
if event is None:
raise http.HttpError("Timeout while connecting to server")
# keep-alive settings, see "man 7 tcp" for TCP_KEEPCNT, TCP_KEEPIDLE and
# TCP_KEEPINTVL.
+ # Do the secret SSL handshake
+ if self.using_ssl:
+ self.sock.set_connect_state()
+ try:
+ http.Handshake(self.sock, self.WRITE_TIMEOUT)
+ except http.HttpSessionHandshakeUnexpectedEOF:
+ raise http.HttpError("Server closed connection during SSL handshake")
+
def _SendRequest(self):
"""Sends request to server.
if self.request.headers:
send_headers.update(self.request.headers)
- send_headers[http.HTTP_HOST] = "%s:%s" % (self.request.host, self.request.port)
+ send_headers[http.HTTP_HOST] = "%s:%s" % (self.request.host,
+ self.request.port)
# Response message
msg = http.HttpMessage()
# TODO: For keep-alive, change to HTTP/1.1
msg.start_line = \
http.HttpClientToServerStartLine(method=self.request.method.upper(),
- path=self.request.path, version=http.HTTP_1_0)
+ path=self.request.path,
+ version=http.HTTP_1_0)
msg.headers = send_headers
msg.body = self.request.post_data