diff options
Diffstat (limited to 'libmproxy')
-rw-r--r-- | libmproxy/console/contentview.py | 37 | ||||
-rw-r--r-- | libmproxy/utils.py | 35 |
2 files changed, 28 insertions, 44 deletions
diff --git a/libmproxy/console/contentview.py b/libmproxy/console/contentview.py index 359b3d3c..4b934ed5 100644 --- a/libmproxy/console/contentview.py +++ b/libmproxy/console/contentview.py @@ -1,4 +1,4 @@ -import re, cStringIO, traceback +import re, cStringIO, traceback, json import urwid from PIL import Image from PIL.ExifTags import TAGS @@ -7,6 +7,13 @@ import common from .. import utils, encoding, flow from ..contrib import jsbeautifier, html2text +try: + import pyamf + from pyamf import remoting +except ImportError: # pragma nocover + pyamf = None + + VIEW_CUTOFF = 1024*50 @@ -230,9 +237,25 @@ class ViewAMF: prompt = ("amf", "f") content_types = ["application/x-amf"] def __call__(self, hdrs, content, limit): - s = utils.pretty_amf(content) - if s: - return "AMF", _view_text(s[:limit], len(s), limit) + envelope = remoting.decode(content) + if not envelope: + return None + + data = {} + data['amfVersion'] = envelope.amfVersion + for target, message in iter(envelope): + one_message = {} + + if hasattr(message, 'status'): + one_message['status'] = message.status + + if hasattr(message, 'target'): + one_message['target'] = message.target + + one_message['body'] = message.body + data[target] = one_message + s = json.dumps(data, indent=4) + return "AMF", _view_text(s[:limit], len(s), limit) class ViewJavaScript: @@ -307,12 +330,8 @@ views = [ ViewMultipart(), ViewImage(), ] -try: - import pyamf +if pyamf: views.append(ViewAMF()) -except ImportError: # pragma nocover - pass - content_types_map = {} for i in views: diff --git a/libmproxy/utils.py b/libmproxy/utils.py index bbde0d49..871beb35 100644 --- a/libmproxy/utils.py +++ b/libmproxy/utils.py @@ -81,41 +81,6 @@ def pretty_json(s): return json.dumps(p, sort_keys=True, indent=4).split("\n") -def pretty_amf(s): - """ - Takes an AMF encoded string, decodes it and returns a nicely indented - string in JSON format. - - Reqires pyamf module. The function returns None if pyamf is not - installed. - """ - try: - import pyamf - from pyamf import remoting - except ImportError: # pragma nocover - return None - - envelope = remoting.decode(s) - if not envelope: - return None - - data = {} - data['amfVersion'] = envelope.amfVersion - for target, message in iter(envelope): - one_message = {} - - if hasattr(message, 'status'): - one_message['status'] = message.status - - if hasattr(message, 'target'): - one_message['target'] = message.target - - one_message['body'] = message.body - data[target] = one_message - - return json.dumps(data, indent=4) - - def urldecode(s): """ Takes a urlencoded string and returns a list of (key, value) tuples. |