aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--libpathod/language/__init__.py10
-rw-r--r--libpathod/language/http.py9
-rw-r--r--libpathod/language/message.py3
-rw-r--r--libpathod/language/websockets.py4
-rw-r--r--libpathod/templates/docs_lang_requests.html7
-rw-r--r--libpathod/templates/docs_lang_websockets.html6
6 files changed, 38 insertions, 1 deletions
diff --git a/libpathod/language/__init__.py b/libpathod/language/__init__.py
index 36ec19e2..3b7529f0 100644
--- a/libpathod/language/__init__.py
+++ b/libpathod/language/__init__.py
@@ -31,7 +31,7 @@ def parse_requests(s):
except UnicodeError:
raise exceptions.ParseException("Spec must be valid ASCII.", 0, 0)
try:
- return pp.OneOrMore(
+ reqs = pp.OneOrMore(
pp.Or(
[
websockets.WebsocketFrame.expr(),
@@ -41,6 +41,14 @@ def parse_requests(s):
).parseString(s, parseAll=True)
except pp.ParseException, v:
raise exceptions.ParseException(v.msg, v.line, v.col)
+ expanded = []
+ for i in reqs:
+ if i.times:
+ for j in range(int(i.times.value)):
+ expanded.append(i.copy())
+ else:
+ expanded.append(i)
+ return expanded
def serve(msg, fp, settings):
diff --git a/libpathod/language/http.py b/libpathod/language/http.py
index daee7e54..543cfee3 100644
--- a/libpathod/language/http.py
+++ b/libpathod/language/http.py
@@ -32,6 +32,10 @@ class Body(base.Value):
preamble = "b"
+class Times(base.Integer):
+ preamble = "x"
+
+
class Method(base.OptionsOrValue):
options = [
"GET",
@@ -284,6 +288,7 @@ class Request(_HTTPMessage):
ShortcutUserAgent,
Raw,
PathodResponse,
+ Times,
actions.PauseAt,
actions.DisconnectAt,
@@ -304,6 +309,10 @@ class Request(_HTTPMessage):
return self.tok(Path)
@property
+ def times(self):
+ return self.tok(Times)
+
+ @property
def pathodspec(self):
return self.tok(PathodResponse)
diff --git a/libpathod/language/message.py b/libpathod/language/message.py
index dbc0cfdd..e3c7ed9e 100644
--- a/libpathod/language/message.py
+++ b/libpathod/language/message.py
@@ -22,6 +22,9 @@ class Message(object):
track.add(i.unique_name)
self.tokens = tokens
+ def copy(self):
+ return self.__class__(self.tokens[:])
+
def toks(self, klass):
"""
Fetch all tokens that are instances of klass
diff --git a/libpathod/language/websockets.py b/libpathod/language/websockets.py
index 12b59bc6..ed5596ce 100644
--- a/libpathod/language/websockets.py
+++ b/libpathod/language/websockets.py
@@ -145,6 +145,10 @@ class WebsocketFrame(message.Message):
return self.tok(KeyNone)
@property
+ def times(self):
+ return self.tok(Times)
+
+ @property
def toklength(self):
return self.tok(Length)
diff --git a/libpathod/templates/docs_lang_requests.html b/libpathod/templates/docs_lang_requests.html
index 72391587..fe73f0af 100644
--- a/libpathod/templates/docs_lang_requests.html
+++ b/libpathod/templates/docs_lang_requests.html
@@ -103,5 +103,12 @@
</td>
</tr>
+
+ <tr>
+ <td> x<a href="#valuespec">INTEGER</a> </td>
+ <td>
+ Repeat this message N times.
+ </td>
+ </tr>
</tbody>
</table>
diff --git a/libpathod/templates/docs_lang_websockets.html b/libpathod/templates/docs_lang_websockets.html
index 8cd176fc..3233577f 100644
--- a/libpathod/templates/docs_lang_websockets.html
+++ b/libpathod/templates/docs_lang_websockets.html
@@ -105,6 +105,12 @@
</td>
</tr>
+ <tr>
+ <td> x<a href="#valuespec">INTEGER</a> </td>
+ <td>
+ Repeat this message N times.
+ </td>
+ </tr>
</tbody>
</table>