From b81ea45bd316869884cdee68b5ae07cc9e13c0c2 Mon Sep 17 00:00:00 2001 From: Loic Guegan Date: Thu, 23 Jun 2022 11:52:00 +0200 Subject: [PATCH] Improve API arguments checking --- esds/esds.py | 39 +++++++++++++++++++++++++++++---------- 1 file 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":