diff --git a/bumper/confserver.py b/bumper/confserver.py
index 62a4cca..dc6cf22 100644
--- a/bumper/confserver.py
+++ b/bumper/confserver.py
@@ -581,6 +581,23 @@ class ConfServer:
self.bumper_bots.set(bots)
body = {"result": "ok", "todo": "result"}
+
+ elif todo == "AddOneDevice":
+ bots = self.bumper_bots.get()
+ for bot in bots:
+ if postbody["did"] == bot.did:
+ bot.nick = postbody["nick"]
+ self.bumper_bots.set(bots)
+ body = {"result": "ok", "todo": "result"}
+
+ elif todo == "DeleteOneDevice":
+ bots = self.bumper_bots.get()
+ for bot in bots:
+ if postbody["did"] == bot.did:
+ #bots.remove(bot)
+ #self.bumper_bots.set(bots)
+ body = {"result": "ok", "todo": "result"}
+
confserverlog.debug(
"\r\n POST: {} \r\n Response: {}".format(postbody, body)
)
@@ -608,11 +625,17 @@ class ConfServer:
if todo == "FindBest":
service = postbody["service"]
if service == "EcoMsgNew":
+
+ srvip = socket.gethostbyname(socket.gethostname())
+ msgserver = {"ip":srvip,"port":5223,"result":"ok"}
+ msgserver = json.dumps(msgserver)
+ msgserver = msgserver.replace(" ","") #bot seems to be very picky about having no spaces, only way was with text
+
confserverlog.debug(
- "\r\n POST: {} \r\n Response: {}".format(postbody, body)
- )
- msgserver = '{"ip":"{}","port":5223,"result":"ok"}'.format(socket.gethostbyname(socket.gethostname())) #bot seems to be very picky about having no spaces, only way was with text
+ "\r\n POST: {} \r\n Response: {}".format(postbody, msgserver)
+ )
return web.json_response(text=msgserver)
+
elif service == "EcoUpdate":
body = {"result": "ok", "ip": "47.88.66.164", "port": 8005}
diff --git a/bumper/xmppserver.py b/bumper/xmppserver.py
index 366715a..4deeadf 100644
--- a/bumper/xmppserver.py
+++ b/bumper/xmppserver.py
@@ -194,6 +194,7 @@ class Client(threading.Thread):
self.address = client_address[0]
self.clientresource = ""
self.devclass = ""
+ self.bumper_jid = ""
self.uid = ""
self.log_sent_message = False # Set to true to log sends
self.log_incoming_data = True # Set to true to log sends
@@ -299,15 +300,15 @@ class Client(threading.Thread):
''.format(
xml.get("id"),
self.uid,
- XMPPServer.bot_id,
+ XMPPServer.server_id,
self.clientresource,
)
)
- else:
- xmppserverlog.debug(
- "Unknown set type: {}".format(data.decode("utf-8"))
- )
+ #else:
+ # xmppserverlog.debug(
+ # "Unknown set type: {}".format(data.decode("utf-8"))
+ # )
if xml[0][0]:
ctl = xml[0][0]
@@ -320,48 +321,111 @@ class Client(threading.Thread):
# forward
for client in XMPPServer.clients:
- if client.address != self.address and client.state == client.READY:
+ if client.bumper_jid != self.bumper_jid and client.state == client.READY:
+ #if client.address != self.address and client.state == client.READY:
+ ctl_to = xml.get("to")
+
+ #xml.attrib["from"] = self.bumper_jid#.replace("@{}".format(XMPPServer.server_id),"@ecouser.net")
+ xml.attrib["from"] = "{}@ecouser.net".format(self.uid)
+ rxmlstring = ET.tostring(xml).decode("utf-8")
+ #clean up string to remove namespaces added by ET
+ rxmlstring = rxmlstring.replace("xmlns:ns0=", "xmlns=")
+ rxmlstring = rxmlstring.replace("ns0:", "")
+ rxmlstring = rxmlstring.replace('iq xmlns="com:ctl"', "iq")
+ rxmlstring = rxmlstring.replace(' -1:
- data = (
- data[:id_index]
- + 'from="'
- + XMPPServer.client_id
- + '" '
- + data[id_index:]
- )
- data = data.encode()
- client.send(data.decode("utf-8"))
+ if client.uid.lower() in ctl_to.lower():
+ xmppserverlog.info("Sending ctl to bot: {}".format(rxmlstring))
+ client.send(rxmlstring)
+ #client.send(data.decode("utf-8"))
+
+ # data = data.decode("utf-8")
+ # id_index = data.find("id")
+ # if id_index > -1:
+ # data = (
+ # data[:id_index]
+ # + 'from="'
+ # + XMPPServer.client_id
+ # + '" '
+ # + data[id_index:]
+ # )
+ # data = data.encode()
+ # client.send(data.decode("utf-8"))
except Exception as e:
xmppserverlog.exception("{}".format(e))
def _handle_ping(self, xml, data):
try:
- if xml.get("to").find("@") == -1:
+ if xml.get("to").find("@") == -1: #No to address
# Ping to server - respond
- self.send(
- ''.format(
+ pingresp = ''.format(
xml.get("id"), xml.get("to")
)
- )
+ #xmppserverlog.debug("Server Ping resp: {}".format(pingresp))
+ self.send(pingresp)
else:
+ pingto = xml.get("to")
+ pingfrom = self.bumper_jid
+
+ xml.attrib["from"] = pingfrom
+ pingstring = ET.tostring(xml).decode("utf-8")
+ #clean up string to remove namespaces added by ET
+ pingstring = pingstring.replace("xmlns:ns0=", "xmlns=")
+ pingstring = pingstring.replace("ns0:", "")
+ pingstring = pingstring.replace('iq xmlns="com:ctl"', "iq")
+ pingstring = pingstring.replace(' 0:
+ if self.devclass: #its a bot
+ self.name = "XMPP_Client_{}_{}".format(self.uid,self.devclass)
+ self.bumper_jid = "{}@{}.ecorobot.net/atom".format(self.uid, self.devclass)
+ xmppserverlog.debug("new bot {}".format(self.uid))
+ res = '{}'.format(
+ xml.get("id"), self.bumper_jid
+ )
+ elif len(clientresourcexml) > 0:
self.clientresource = clientresourcexml[0].text
self.name = "XMPP_Client_{}".format(self.clientresource)
+ self.bumper_jid = "{}@{}/{}".format(self.uid, XMPPServer.server_id, self.clientresource)
xmppserverlog.debug(
"new client {} using resource {}".format(
- self.address, self.clientresource
+ self.uid, self.clientresource
)
)
- res = '{}@{}/{}'.format(
- xml.get("id"), self.uid, XMPPServer.bot_id, self.clientresource
+ res = '{}'.format(
+ xml.get("id"), self.bumper_jid
)
- else:
- xmppserverlog.debug("new client {}".format(self.address))
- res = '{}@{}'.format(
- xml.get("id"), self.uid, XMPPServer.bot_id
+ else:
+ self.name = "XMPP_Client_{}_{}".format(self.uid,self.address)
+ self.bumper_jid = "{}@{}".format(self.uid, XMPPServer.server_id)
+ xmppserverlog.debug("new client {}".format(self.uid))
+ res = '{}'.format(
+ xml.get("id"), self.bumper_jid
)
self._set_state("BIND")
@@ -658,10 +732,20 @@ class Client(threading.Thread):
"{} type set to BOT (based on presence tag)".format(self.address)
)
# send a command from an unknown user - the response will contain the correct admin username
-
+ self.send(
+ ' dummy '.format(
+ self.bumper_jid
+ )
+ )
+ # self.send(
+ # ''.format(
+ # self.uid, self.devclass, XMPPServer.server_id
+ # )
+ # )
+
self.send(
''.format(
- uuid.uuid4(), "unknown@ecouser.net", XMPPServer.bot_id
+ uuid.uuid4(), "unknown@ecouser.net", XMPPServer.server_id
)
)
@@ -674,7 +758,7 @@ class Client(threading.Thread):
)
self.send(
' dummy '.format(
- self.uid, XMPPServer.bot_id, self.clientresource
+ self.uid, XMPPServer.server_id, self.clientresource
)
)
@@ -748,13 +832,25 @@ class Client(threading.Thread):
self._handle_bind(xml)
elif child == "session":
self._handle_session(xml)
- elif child == "query":
- self._handle_ctl(xml, data)
elif child == "ping":
self._handle_ping(xml, data)
+ elif child == "query":
+ if self.type == self.BOT:
+ self._handle_result(xml, data)
+ else:
+ self._handle_ctl(xml, data)
elif xml.get("type") == "result":
- self._handle_result(data)
- elif xml.tag == "presence":
+ if self.type == self.BOT:
+ self._handle_result(xml, data)
+ else:
+ self._handle_result(xml, data)
+ elif xml.get("type") == "set":
+ if self.type == self.BOT:
+ self._handle_result(xml, data)
+ else:
+ self._handle_result(xml, data)
+
+ if xml.tag == "presence":
self._handle_presence(xml)
except Exception as e: