Commit 894ff02a authored by nextime's avatar nextime

send a SETTIME when an invalid packet is received

parent ddf5881a
......@@ -302,9 +302,10 @@ class domotikaService(service.Service):
self.sendCommand(str(st), msgtype=C.IKAP_MSG_ACTION, ctx=C.IKAP_CTX_STATUS, act=C.IKAP_ACT_CHANGE, ipdst=ipdst)
def broadcastTime(self):
log.debug("Broadcasting Time...")
self.sendCommand("SETTIME", arg=struct.pack("<L", int(time.time())), act=C.IKAP_ACT_BOARD, ctx=C.IKAP_CTX_SYSTEM, msgtype=C.IKAP_MSG_ACTION)
def broadcastTime(self, ipdst="255.255.255.255"):
if self.config.get("general", "timeserver").lower() in ['yes','y','1','true', 'on']:
log.debug("Broadcasting Time to "+str(ipdst))
self.sendCommand("SETTIME", arg=struct.pack("<L", int(time.time())), act=C.IKAP_ACT_BOARD, ctx=C.IKAP_CTX_SYSTEM, msgtype=C.IKAP_MSG_ACTION, ipdst=ipdst)
def initializePlugins(self):
......@@ -2357,6 +2358,9 @@ class domotikaService(service.Service):
def plugin_on_execute(cmd):
self.executeAction(cmd)
def domika_on_broadcastTime(self, ipdst="255.255.255.255"):
self.broadcastTime(ipdst)
def domika_on_updateWebPort(self, src, host, webport, port, ptype):
return dmdb.updateWebPort(src, host, webport)
......
......@@ -194,7 +194,8 @@ class DomIkaBaseProtocol(object):
if dst.startswith("DEBUG.INPUT.CHANGED.TO") or dst.startswith("DEBUG.RELAY.CHANGED.TO"):
arg=struct.unpack('B', arg[0])[0]
elif self.ikahdr.msgtype==C.IKAP_MSG_NOTIFY and dst.startswith("BOOTED."):
self.sendCommand("SETTIME", arg=struct.pack("<L", int(time.time())), act=C.IKAP_ACT_BOARD, ctx=C.IKAP_CTX_SYSTEM, msgtype=C.IKAP_MSG_ACTION, ipdst=host)
self.core.broadcastTime(host)
#self.sendCommand("SETTIME", arg=struct.pack("<L", int(time.time())), act=C.IKAP_ACT_BOARD, ctx=C.IKAP_CTX_SYSTEM, msgtype=C.IKAP_MSG_ACTION, ipdst=host)
elif self.ikahdr.msgtype==C.IKAP_MSG_NOTIFY and self.ikahdr.ctx==C.IKAP_CTX_SYSTEM and dst=='RELAY.AMPERE.LIMIT':
try:
log.info("Relay "+str(struct.unpack("<B", arg[1])[0])+" has gone in overrun at "+str(float(struct.unpack("<B", arg[0])[0])/10.0)+" Ampere")
......@@ -356,6 +357,8 @@ class DomIkaBaseProtocol(object):
self.core.manageIncomingPacket(self.ikahdr, src, dst, arg, host, port, ptype, argdict, data)
else:
log.error("INVALID PACKET TIME FROM "+str(host)+" - packet time: "+str(self.ikahdr.epoch)+" now: "+str(time.time()))
# XXX Set a min time between resend the time broadcasting to avoid DoS?
self.core.broadcastTime(host)
self.invalidPacket()
else:
log.error("INVALID PACKET (second check) FROM "+str(host))
......@@ -448,7 +451,8 @@ class DomIkaTCP(Int8StringReceiver, DomIkaBaseProtocol):
self.disconnected=False
self.sendCommand("IOSTATUS.NOW", arg=C.IKAP_BROADCAST, act=C.IKAP_ACT_BOARD,
ctx=C.IKAP_CTX_SYSTEM, msgtype=C.IKAP_MSG_REQUESTCONF)
self.sendCommand("SETTIME", arg=struct.pack("<L", int(time.time())), act=C.IKAP_ACT_BOARD, ctx=C.IKAP_CTX_SYSTEM, msgtype=C.IKAP_MSG_ACTION)
#self.sendCommand("SETTIME", arg=struct.pack("<L", int(time.time())), act=C.IKAP_ACT_BOARD, ctx=C.IKAP_CTX_SYSTEM, msgtype=C.IKAP_MSG_ACTION)
self.core.broadcastTime()
def invalidPacket(self):
try:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment