summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLoic Guegan <manzerbredes@mailbox.org>2022-06-23 11:52:00 +0200
committerLoic Guegan <manzerbredes@mailbox.org>2022-06-23 11:52:00 +0200
commitb81ea45bd316869884cdee68b5ae07cc9e13c0c2 (patch)
treec1de9fc58e8622ac8b00ab9b5277a351f34f04c3
parent0daa96651f1761eea188aa52d9d06e748657600a (diff)
Improve API arguments checking
-rw-r--r--esds/esds.py39
1 files changed, 29 insertions, 10 deletions
diff --git a/esds/esds.py b/esds/esds.py
index a0b4557..0149a82 100644
--- a/esds/esds.py
+++ b/esds/esds.py
@@ -50,7 +50,15 @@ class Node:
value=self.chest[key]=value
self.chest_lock.release()
+ def abort(self,reason):
+ self.rargs=reason
+ self["request"]="abort"
+ self["state"]="call"
+ while True: continue
+
def log(self,msg):
+ if type(msg) != str:
+ self.abort("log() called with a non-string argument")
self.rargs=msg
self["request"]="log"
self["state"]="call"
@@ -90,6 +98,8 @@ class Node:
self.wait_ack(["turn_on"])
def send(self, interface, data, datasize, dst):
+ if interface not in self["interfaces"]:
+ self.abort("send() called with an unknown interface \""+interface+"\"")
self.plugin_notify("send_call",(interface,data,datasize,dst))
self.rargs=(interface, data, datasize, dst)
self["request"]="send"
@@ -98,16 +108,9 @@ class Node:
self.plugin_notify("send_return",(interface,data,datasize,dst,ack[1]))
return ack[1]
- def receive(self,interface):
- self["request"]="receive"
- self.rargs=interface
- self["state"]="request"
- self.wait_ack(["receive"])
- data,start_at,end_at=self["interfaces"][interface].get()
- self.plugin_notify("receive_return",(interface,data,start_at,end_at))
- return (0,data)
-
def sendt(self, interface, data, datasize, dst, timeout):
+ if interface not in self["interfaces"]:
+ self.abort("sendt() called with an unknown interface \""+interface+"\"")
self.rargs=timeout
self["request"]="timeout_add"
self["state"]="call"
@@ -125,8 +128,21 @@ class Node:
self["state"]="call"
self.wait_ack(["timeout_remove"])
return ack[1]
+
+ def receive(self,interface):
+ if interface not in self["interfaces"]:
+ self.abort("receive() called with an unknown interface \""+interface+"\"")
+ self["request"]="receive"
+ self.rargs=interface
+ self["state"]="request"
+ self.wait_ack(["receive"])
+ data,start_at,end_at=self["interfaces"][interface].get()
+ self.plugin_notify("receive_return",(interface,data,start_at,end_at))
+ return (0,data)
def receivet(self,interface, timeout):
+ if interface not in self["interfaces"]:
+ self.abort("receivet() called with an unknown interface \""+interface+"\"")
self.rargs=timeout
self["request"]="timeout_add"
self["state"]="call"
@@ -284,7 +300,7 @@ class Simulator:
"""
node=Node(src, self.netmat.keys())
self.nodes.append(node)
- thread=threading.Thread(target=node.run, daemon=False,args=[args])
+ thread=threading.Thread(target=node.run, daemon=True,args=[args])
thread.start()
def log(self,msg,node=None):
@@ -322,6 +338,9 @@ class Simulator:
self.events=self.events[~np.array(selector)]
node["state"]="running"
node.rqueue.put(("timeout_remove",0))
+ elif node["request"] == "abort":
+ self.log("Simulation aborted: "+node.rargs,node=node.node_id)
+ exit(1)
elif node["request"] == "read":
node["state"]="running"
if node.rargs == "clock":