aboutsummaryrefslogtreecommitdiffstats
path: root/libpathod/language/websockets.py
diff options
context:
space:
mode:
Diffstat (limited to 'libpathod/language/websockets.py')
-rw-r--r--libpathod/language/websockets.py13
1 files changed, 13 insertions, 0 deletions
diff --git a/libpathod/language/websockets.py b/libpathod/language/websockets.py
index 428f3b4d..a006c50d 100644
--- a/libpathod/language/websockets.py
+++ b/libpathod/language/websockets.py
@@ -10,6 +10,7 @@ from . import base, generators, actions, message
wf:-fin:-rsv1:-rsv2:-rsv3:-mask
wf:l234
+ wf:mask:r"foo
"""
@@ -64,11 +65,17 @@ class KeyNone(base.CaselessLiteral):
TOK = "knone"
+class Length(base.Integer):
+ bounds = (0, 1<<64)
+ preamble = "l"
+
+
class WebsocketFrame(message.Message):
comps = (
Body,
OpCode,
+ Length,
# Bit flags
Fin,
RSV1,
@@ -122,6 +129,10 @@ class WebsocketFrame(message.Message):
def knone(self):
return self.tok(KeyNone)
+ @property
+ def toklength(self):
+ return self.tok(Length)
+
@classmethod
def expr(klass):
parts = [i.expr() for i in klass.comps]
@@ -157,6 +168,8 @@ class WebsocketFrame(message.Message):
else:
bodygen = None
length = 0
+ if self.toklength:
+ length = int(self.toklength.value)
frameparts = dict(
payload_length = length
)