aboutsummaryrefslogtreecommitdiffstats
path: root/libmproxy
diff options
context:
space:
mode:
Diffstat (limited to 'libmproxy')
-rw-r--r--libmproxy/cmdline.py2
-rw-r--r--libmproxy/console/__init__.py5
-rw-r--r--libmproxy/console/flowview.py9
-rw-r--r--libmproxy/console/grideditor.py2
-rw-r--r--libmproxy/dump.py2
-rw-r--r--libmproxy/encoding.py2
-rw-r--r--libmproxy/flow.py6
-rw-r--r--libmproxy/proxy.py5
-rw-r--r--libmproxy/version.py2
9 files changed, 22 insertions, 13 deletions
diff --git a/libmproxy/cmdline.py b/libmproxy/cmdline.py
index b76792cf..6b6c4241 100644
--- a/libmproxy/cmdline.py
+++ b/libmproxy/cmdline.py
@@ -124,7 +124,7 @@ def get_common_options(options):
except ParseException, e:
raise OptionException(e.message)
try:
- v = open(path, "r").read()
+ v = open(path, "rb").read()
except IOError, e:
raise OptionException("Could not read replace file: %s"%path)
reps.append((patt, rex, v))
diff --git a/libmproxy/console/__init__.py b/libmproxy/console/__init__.py
index fe75a047..ef799167 100644
--- a/libmproxy/console/__init__.py
+++ b/libmproxy/console/__init__.py
@@ -479,7 +479,7 @@ class ConsoleMaster(flow.FlowMaster):
def _readflow(self, path):
path = os.path.expanduser(path)
try:
- f = file(path, "r")
+ f = file(path, "rb")
flows = list(flow.FlowReader(f).stream())
except (IOError, flow.FlowReadError), v:
return True, v.strerror
@@ -519,13 +519,14 @@ class ConsoleMaster(flow.FlowMaster):
except:
self.statusbar.message("Can't start editor: %s" % " ".join(c))
else:
- data = open(name).read()
+ data = open(name,"rb").read()
self.ui.start()
os.unlink(name)
return data
def spawn_external_viewer(self, data, contenttype):
if contenttype:
+ contenttype = contenttype.split(";")[0]
ext = mimetypes.guess_extension(contenttype) or ""
else:
ext = ""
diff --git a/libmproxy/console/flowview.py b/libmproxy/console/flowview.py
index 8932b912..da5a6c65 100644
--- a/libmproxy/console/flowview.py
+++ b/libmproxy/console/flowview.py
@@ -16,7 +16,7 @@
import os, sys
import urwid
import common, grideditor, contentview
-from .. import utils, flow
+from .. import utils, flow, controller
def _mkhelp():
text = []
@@ -341,7 +341,12 @@ class FlowView(common.WWrap):
conn = self.flow.request
else:
if not self.flow.response:
- self.flow.response = flow.Response(self.flow.request, 200, "OK", flow.ODictCaseless(), "", None)
+ self.flow.response = flow.Response(
+ self.flow.request,
+ self.flow.request.httpversion,
+ 200, "OK", flow.ODictCaseless(), "", None
+ )
+ self.flow.response.reply = controller.DummyReply()
conn = self.flow.response
self.flow.backup()
diff --git a/libmproxy/console/grideditor.py b/libmproxy/console/grideditor.py
index 314d6e88..55f3ba0f 100644
--- a/libmproxy/console/grideditor.py
+++ b/libmproxy/console/grideditor.py
@@ -294,7 +294,7 @@ class GridEditor(common.WWrap):
if p:
try:
p = os.path.expanduser(p)
- d = file(p, "r").read()
+ d = file(p, "rb").read()
self.walker.set_current_value(d, unescaped)
self.walker._modified()
except IOError, v:
diff --git a/libmproxy/dump.py b/libmproxy/dump.py
index b1022ef5..06c15c63 100644
--- a/libmproxy/dump.py
+++ b/libmproxy/dump.py
@@ -141,7 +141,7 @@ class DumpMaster(flow.FlowMaster):
def _readflow(self, path):
path = os.path.expanduser(path)
try:
- f = file(path, "r")
+ f = file(path, "rb")
flows = list(flow.FlowReader(f).stream())
except (IOError, flow.FlowReadError), v:
raise DumpError(v.strerror)
diff --git a/libmproxy/encoding.py b/libmproxy/encoding.py
index 9f8acbe9..4b80d38c 100644
--- a/libmproxy/encoding.py
+++ b/libmproxy/encoding.py
@@ -54,7 +54,7 @@ def decode_gzip(content):
gfile = gzip.GzipFile(fileobj=cStringIO.StringIO(content))
try:
return gfile.read()
- except IOError:
+ except (IOError, EOFError):
return None
def encode_gzip(content):
diff --git a/libmproxy/flow.py b/libmproxy/flow.py
index 1d15029b..10c5da5d 100644
--- a/libmproxy/flow.py
+++ b/libmproxy/flow.py
@@ -542,7 +542,7 @@ class Request(HTTPMsg):
headers["host"] = [utils.hostport(self.scheme, self.host, self.port)]
content = self.content
if content:
- headers["content-length"] = [str(len(content))]
+ headers["Content-Length"] = [str(len(content))]
else:
content = ""
if self.close:
@@ -737,7 +737,7 @@ class Response(HTTPMsg):
['proxy-connection', 'transfer-encoding']
)
if self.content:
- headers["content-length"] = [str(len(self.content))]
+ headers["Content-Length"] = [str(len(self.content))]
proto = "HTTP/%s.%s %s %s"%(self.httpversion[0], self.httpversion[1], self.code, str(self.msg))
data = (proto, str(headers))
return FMT%data
@@ -1548,7 +1548,7 @@ class FlowMaster(controller.Master):
if f.request:
f.request._set_replay()
if f.request.content:
- f.request.headers["content-length"] = [str(len(f.request.content))]
+ f.request.headers["Content-Length"] = [str(len(f.request.content))]
f.response = None
f.error = None
self.process_new_request(f)
diff --git a/libmproxy/proxy.py b/libmproxy/proxy.py
index 283072ab..8dfae77a 100644
--- a/libmproxy/proxy.py
+++ b/libmproxy/proxy.py
@@ -88,6 +88,9 @@ class ServerConnection(tcp.TCPClient):
def terminate(self):
try:
self.wfile.flush()
+ except IOError:
+ pass
+ try:
self.connection.close()
except IOError:
pass
@@ -213,7 +216,7 @@ class ProxyHandler(tcp.BaseHandler):
return
else:
request_reply = self.channel.ask(request)
- if request_reply == KILL:
+ if request_reply is None or request_reply == KILL:
return
elif isinstance(request_reply, flow.Response):
request = False
diff --git a/libmproxy/version.py b/libmproxy/version.py
index 3dfc9409..b3a9bd95 100644
--- a/libmproxy/version.py
+++ b/libmproxy/version.py
@@ -1,4 +1,4 @@
-IVERSION = (0, 9)
+IVERSION = (0, 9, 1)
VERSION = ".".join(str(i) for i in IVERSION)
NAME = "mitmproxy"
NAMEVERSION = NAME + " " + VERSION