diff options
author | Aldo Cortesi <aldo@nullcube.com> | 2015-05-17 11:04:53 +1200 |
---|---|---|
committer | Aldo Cortesi <aldo@nullcube.com> | 2015-05-17 11:04:53 +1200 |
commit | cd2fb13b3e9ced39059f3d6572fd8806d0026d2e (patch) | |
tree | d22f5d48705272516cf04e9793db33371c29abc7 /libpathod/language/websockets.py | |
parent | e4feba54330e1afcfb8d48bce8c474659aba281c (diff) | |
download | mitmproxy-cd2fb13b3e9ced39059f3d6572fd8806d0026d2e.tar.gz mitmproxy-cd2fb13b3e9ced39059f3d6572fd8806d0026d2e.tar.bz2 mitmproxy-cd2fb13b3e9ced39059f3d6572fd8806d0026d2e.zip |
websockets: replace the "raw" with a simpler mechanism
You can now say "knone" to specifiy that no key should be generated
under any circumstances.
Diffstat (limited to 'libpathod/language/websockets.py')
-rw-r--r-- | libpathod/language/websockets.py | 23 |
1 files changed, 14 insertions, 9 deletions
diff --git a/libpathod/language/websockets.py b/libpathod/language/websockets.py index 599cdb88..428f3b4d 100644 --- a/libpathod/language/websockets.py +++ b/libpathod/language/websockets.py @@ -9,7 +9,6 @@ from . import base, generators, actions, message wf:fin:rsv1:rsv2:rsv3:mask wf:-fin:-rsv1:-rsv2:-rsv3:-mask - wf:k"mask" wf:l234 """ @@ -35,10 +34,6 @@ class Body(base.Value): preamble = "b" -class Raw(base.CaselessLiteral): - TOK = "r" - - class Fin(base.Boolean): name = "fin" @@ -64,6 +59,11 @@ class Key(base.FixedLengthValue): length = 4 +class KeyNone(base.CaselessLiteral): + unique_name = "Key" + TOK = "knone" + + class WebsocketFrame(message.Message): comps = ( Body, @@ -78,9 +78,8 @@ class WebsocketFrame(message.Message): actions.PauseAt, actions.DisconnectAt, actions.InjectAt, + KeyNone, Key, - - Raw, ) logattrs = ["body"] @property @@ -119,6 +118,10 @@ class WebsocketFrame(message.Message): def key(self): return self.tok(Key) + @property + def knone(self): + return self.tok(KeyNone) + @classmethod def expr(klass): parts = [i.expr() for i in klass.comps] @@ -139,7 +142,7 @@ class WebsocketFrame(message.Message): tokens.append( Mask(True) ) - if self.mask and self.mask.value and not self.key: + if not self.knone and self.mask and self.mask.value and not self.key: tokens.append( Key(base.TokValueLiteral(os.urandom(4))) ) @@ -159,7 +162,9 @@ class WebsocketFrame(message.Message): ) if self.mask and self.mask.value: frameparts["mask"] = True - if self.key: + if self.knone: + frameparts["masking_key"] = None + elif self.key: key = self.key.values(settings)[0][:] frameparts["masking_key"] = key for i in ["opcode", "fin", "rsv1", "rsv2", "rsv3", "mask"]: |