diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2015-06-04 17:18:06 +1200 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2015-06-04 17:18:06 +1200 |
commit | 9fda74c65a632bda5176e2ccafbbcab2af27d77d (patch) | |
tree | a37c633bda76ae3f2c623bf1d14355279c0631d9 /libpathod/language/websockets.py | |
parent | 5bee061849b9e48d097b2aba3613e38f7282f36b (diff) | |
download | mitmproxy-9fda74c65a632bda5176e2ccafbbcab2af27d77d.tar.gz mitmproxy-9fda74c65a632bda5176e2ccafbbcab2af27d77d.tar.bz2 mitmproxy-9fda74c65a632bda5176e2ccafbbcab2af27d77d.zip |
Clarify language API, stub out nested websocket frames
Diffstat (limited to 'libpathod/language/websockets.py')
-rw-r--r-- | libpathod/language/websockets.py | 42 |
1 files changed, 32 insertions, 10 deletions
diff --git a/libpathod/language/websockets.py b/libpathod/language/websockets.py index 46daa467..3869bd85 100644 --- a/libpathod/language/websockets.py +++ b/libpathod/language/websockets.py @@ -3,16 +3,6 @@ import netlib.websockets import pyparsing as pp from . import base, generators, actions, message -""" - wf:ctext:b'foo' - wf:c15:r'foo' - wf:fin:rsv1:rsv2:rsv3:mask - wf:-fin:-rsv1:-rsv2:-rsv3:-mask - wf:l234 - - wf:mask:r"foo -""" - class WF(base.CaselessLiteral): TOK = "wf" @@ -79,6 +69,38 @@ class Times(base.Integer): preamble = "x" +class NestedFrame(base.Token): + def __init__(self, value): + self.value = value + try: + self.parsed = WebsocketFrame( + Response.expr().parseString( + value.val, + parseAll=True + ) + ) + except pp.ParseException as v: + raise exceptions.ParseException(v.msg, v.line, v.col) + + @classmethod + def expr(klass): + e = pp.Literal("wf").suppress() + e = e + base.TokValueLiteral.expr() + return e.setParseAction(lambda x: klass(*x)) + + def values(self, settings): + return [ + self.value.get_generator(settings), + ] + + def spec(self): + return "s%s" % (self.value.spec()) + + def freeze(self, settings): + f = self.parsed.freeze(settings).spec() + return NestedFrame(base.TokValueLiteral(f.encode("string_escape"))) + + class WebsocketFrame(message.Message): comps = ( OpCode, |