aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy/proxy.py
diff options
context:
space:
mode:
authorMaximilian Hils <git@maximilianhils.com>2014-02-06 22:16:26 +0100
committerMaximilian Hils <git@maximilianhils.com>2014-02-06 22:16:26 +0100
commitff264eb30925914f71e53ff9d3c54bdf112b14b9 (patch)
tree2fa50584b3d7b3eed4812a9667be835b1a7607c5 /libmproxy/proxy.py
parent134c7795f8be632d7724b285a91805e7b3913756 (diff)
downloadmitmproxy-ff264eb30925914f71e53ff9d3c54bdf112b14b9.tar.gz
mitmproxy-ff264eb30925914f71e53ff9d3c54bdf112b14b9.tar.bz2
mitmproxy-ff264eb30925914f71e53ff9d3c54bdf112b14b9.zip
add functionality to change the destination server
Diffstat (limited to 'libmproxy/proxy.py')
-rw-r--r--libmproxy/proxy.py33
1 files changed, 15 insertions, 18 deletions
diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py
index 6ff02a36..b650181f 100644
--- a/libmproxy/proxy.py
+++ b/libmproxy/proxy.py
@@ -215,7 +215,6 @@ class ConnectionHandler:
self.close = False
self.conntype = None
self.sni = None
- self.server_address_priority = None
self.mode = "regular"
if self.config.reverse_proxy:
@@ -300,7 +299,6 @@ class ConnectionHandler:
self.log("serverdisconnect", ["%s:%s" % (self.server_conn.address.host, self.server_conn.address.port)])
self.channel.tell("serverdisconnect", self)
self.server_conn = None
- self.server_address_priority = None
self.sni = None
def determine_conntype(self):
@@ -309,27 +307,25 @@ class ConnectionHandler:
def set_server_address(self, address, priority):
"""
- Sets a new server address with the given priority
+ Sets a new server address with the given priority.
+ Does not re-establish either connection or SSL handshake.
@type priority: AddressPriority
"""
address = tcp.Address.wrap(address)
- self.log("Try to set server address: %s:%s" % (address.host, address.port))
- if self.server_conn and (self.server_conn.priority > priority):
- self.log("Server address priority too low (is: %s, got: %s)" % (self.server_address_priority, priority))
- return
- if self.server_conn and (self.server_conn.address == address):
- self.server_conn.priority = priority # Possibly increase priority
- self.log("Addresses match, skip.")
- return
+ if self.server_conn:
+ if self.server_conn.priority > priority:
+ self.log("Attempt to change server address, "
+ "but priority is too low (is: %s, got: %s)" % (self.server_conn.priority, priority))
+ return
+ if self.server_conn.address == address:
+ self.server_conn.priority = priority # Possibly increase priority
+ return
- server_conn = ServerConnection(address, priority)
- if self.server_conn and self.server_conn.connection:
self.del_server_connection()
- self.server_conn = server_conn
- self.establish_server_connection()
- else:
- self.server_conn = server_conn
+
+ self.log("Set new server address: %s:%s" % (address.host, address.port))
+ self.server_conn = ServerConnection(address, priority)
def establish_server_connection(self):
"""
@@ -373,6 +369,7 @@ class ConnectionHandler:
if server:
if self.server_conn.ssl_established:
raise ProxyError(502, "SSL to Server already established.")
+ self.establish_server_connection() # make sure there is a server connection.
self.server_conn.establish_ssl(self.config.clientcerts, self.sni)
if client:
if self.client_conn.ssl_established:
@@ -384,7 +381,7 @@ class ConnectionHandler:
def server_reconnect(self, no_ssl=False):
address = self.server_conn.address
had_ssl = self.server_conn.ssl_established
- priority = self.server_address_priority
+ priority = self.server_conn.priority
sni = self.sni
self.log("(server reconnect follows)")
self.del_server_connection()