From 3b308e3d411a4f154b93ebd90093a492490616d1 Mon Sep 17 00:00:00 2001 From: Kovid Goyal Date: Wed, 27 May 2015 13:57:42 +0530 Subject: [PATCH] Make information on the remote client available to HTTP handlers --- src/calibre/srv/http_response.py | 9 +++++++-- src/calibre/srv/loop.py | 10 ++++++++-- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/src/calibre/srv/http_response.py b/src/calibre/srv/http_response.py index 57e79e2b66..87bce58150 100644 --- a/src/calibre/srv/http_response.py +++ b/src/calibre/srv/http_response.py @@ -180,10 +180,11 @@ def get_range_parts(ranges, content_type, content_length): # {{{ class RequestData(object): # {{{ - def __init__(self, method, path, query, inheaders, request_body_file, outheaders, response_protocol, static_cache, opts): + def __init__(self, method, path, query, inheaders, request_body_file, outheaders, response_protocol, static_cache, opts, remote_addr, remote_port): self.method, self.path, self.query, self.inheaders, self.request_body_file, self.outheaders, self.response_protocol, self.static_cache = ( method, path, query, inheaders, request_body_file, outheaders, response_protocol, static_cache ) + self.remote_addr, self.remote_port = remote_addr, remote_port self.opts = opts self.status_code = httplib.CREATED if self.method == 'POST' else httplib.OK @@ -310,7 +311,11 @@ class HTTPConnection(HTTPRequest): return self.simple_response(httplib.OK, msg, close_after_response=False) request_body_file.seek(0) outheaders = MultiDict() - data = RequestData(self.method, self.path, self.query, inheaders, request_body_file, outheaders, self.response_protocol, self.static_cache, self.opts) + data = RequestData( + self.method, self.path, self.query, inheaders, request_body_file, + outheaders, self.response_protocol, self.static_cache, self.opts, + self.remote_addr, self.remote_port + ) try: output = self.request_handler(data) except HTTP404 as e: diff --git a/src/calibre/srv/loop.py b/src/calibre/srv/loop.py index 93fe333d67..56006fb5ca 100644 --- a/src/calibre/srv/loop.py +++ b/src/calibre/srv/loop.py @@ -111,8 +111,14 @@ class ReadBuffer(object): # {{{ class Connection(object): - def __init__(self, socket, opts, ssl_context, tdir): + def __init__(self, socket, opts, ssl_context, tdir, addr): self.opts = opts + try: + self.remote_addr = addr[0] + self.remote_port = addr[1] + except Exception: + # In case addr is None, which can occassionally happen + self.remote_addr = self.remote_port = None self.orig_send_bufsize = self.send_bufsize = 4096 self.tdir = tdir self.ssl_context = ssl_context @@ -471,7 +477,7 @@ class ServerLoop(object): if sock is not None: s = sock.fileno() if s > -1: - self.connection_map[s] = conn = self.handler(sock, self.opts, self.ssl_context, self.tdir) + self.connection_map[s] = conn = self.handler(sock, self.opts, self.ssl_context, self.tdir, addr) if self.ssl_context is not None: yield s, conn, RDWR else: