Commit 9c4a917f authored by Ian Craggs's avatar Ian Craggs

Allow test proxy to work with either Python 2 or 3

parent 5ed757d8
""" """
******************************************************************* *******************************************************************
Copyright (c) 2013, 2016 IBM Corp. Copyright (c) 2013, 2018 IBM Corp.
All rights reserved. This program and the accompanying materials All rights reserved. This program and the accompanying materials
are made available under the terms of the Eclipse Public License v1.0 are made available under the terms of the Eclipse Public License v1.0
...@@ -15,11 +15,15 @@ ...@@ -15,11 +15,15 @@
Ian Craggs - initial implementation and/or documentation Ian Craggs - initial implementation and/or documentation
******************************************************************* *******************************************************************
""" """
from __future__ import print_function
# Trace MQTT traffic import socket, sys, select, traceback, datetime, os
import MQTTV311 as MQTTV3 try:
import socketserver
import socket, sys, select, traceback, datetime, os, socketserver import MQTTV311 as MQTTV3 # Trace MQTT traffic - Python 3 version
except:
import SocketServer as socketserver
import MQTTV3112 as MQTTV3 # Trace MQTT traffic - Python 2 version
logging = True logging = True
myWindow = None myWindow = None
...@@ -29,6 +33,7 @@ def timestamp(): ...@@ -29,6 +33,7 @@ def timestamp():
now = datetime.datetime.now() now = datetime.datetime.now()
return now.strftime('%Y%m%d %H%M%S')+str(float("."+str(now.microsecond)))[1:] return now.strftime('%Y%m%d %H%M%S')+str(float("."+str(now.microsecond)))[1:]
suspended = []
class MyHandler(socketserver.StreamRequestHandler): class MyHandler(socketserver.StreamRequestHandler):
...@@ -43,10 +48,13 @@ class MyHandler(socketserver.StreamRequestHandler): ...@@ -43,10 +48,13 @@ class MyHandler(socketserver.StreamRequestHandler):
clients = self.request clients = self.request
brokers = socket.socket(socket.AF_INET, socket.SOCK_STREAM) brokers = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
brokers.connect((brokerhost, brokerport)) brokers.connect((brokerhost, brokerport))
while inbuf != None: terminated = False
while inbuf != None and not terminated:
(i, o, e) = select.select([clients, brokers], [], []) (i, o, e) = select.select([clients, brokers], [], [])
for s in i: for s in i:
if s == clients: if s in suspended:
print("suspended")
if s == clients and s not in suspended:
inbuf = MQTTV3.getPacket(clients) # get one packet inbuf = MQTTV3.getPacket(clients) # get one packet
if inbuf == None: if inbuf == None:
break break
...@@ -58,13 +66,19 @@ class MyHandler(socketserver.StreamRequestHandler): ...@@ -58,13 +66,19 @@ class MyHandler(socketserver.StreamRequestHandler):
print("Terminating client", self.ids[id(clients)]) print("Terminating client", self.ids[id(clients)])
brokers.close() brokers.close()
clients.close() clients.close()
terminated = True
break break
elif packet.fh.MessageType == MQTTV3.PUBLISH and \
packet.topicName == "MQTTSAS topic" and \
packet.data == b"TERMINATE_SERVER":
print("Suspending client ", self.ids[id(clients)])
suspended.append(clients)
elif packet.fh.MessageType == MQTTV3.CONNECT: elif packet.fh.MessageType == MQTTV3.CONNECT:
self.ids[id(clients)] = packet.ClientIdentifier self.ids[id(clients)] = packet.ClientIdentifier
self.versions[id(clients)] = 3 self.versions[id(clients)] = 3
print(timestamp() , "C to S", self.ids[id(clients)], repr(packet)) print(timestamp() , "C to S", self.ids[id(clients)], repr(packet))
print([hex(b) for b in inbuf]) #print([hex(b) for b in inbuf])
print(inbuf) #print(inbuf)
except: except:
traceback.print_exc() traceback.print_exc()
brokers.send(inbuf) # pass it on brokers.send(inbuf) # pass it on
...@@ -91,24 +105,27 @@ class ThreadingTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer): ...@@ -91,24 +105,27 @@ class ThreadingTCPServer(socketserver.ThreadingMixIn, socketserver.TCPServer):
def run(): def run():
global brokerhost, brokerport global brokerhost, brokerport
myhost = 'localhost' myhost = '127.0.0.1'
if len(sys.argv) > 1: if len(sys.argv) > 1:
brokerhost = sys.argv[1] brokerhost = sys.argv[1]
else: else:
brokerhost = 'localhost' brokerhost = '127.0.0.1'
if len(sys.argv) > 2: if len(sys.argv) > 2:
brokerport = int(sys.argv[2]) brokerport = int(sys.argv[2])
else: else:
brokerport = 1883 brokerport = 1883
if len(sys.argv) > 3:
myport = int(sys.argv[3])
else:
if brokerhost == myhost: if brokerhost == myhost:
myport = brokerport + 1 myport = brokerport + 1
else: else:
myport = 1883 myport = 1883
print("Listening on port", str(myport)+", broker on port", brokerport) print("Listening on port", str(myport)+", broker on port", brokerport)
s = ThreadingTCPServer(("", myport), MyHandler) s = ThreadingTCPServer(("127.0.0.1", myport), MyHandler)
s.serve_forever() s.serve_forever()
if __name__ == "__main__": if __name__ == "__main__":
......
...@@ -8,7 +8,7 @@ cd build.paho ...@@ -8,7 +8,7 @@ cd build.paho
echo "travis build dir $TRAVIS_BUILD_DIR pwd $PWD" echo "travis build dir $TRAVIS_BUILD_DIR pwd $PWD"
cmake -DPAHO_WITH_SSL=TRUE -DPAHO_BUILD_DOCUMENTATION=FALSE -DPAHO_BUILD_SAMPLES=TRUE .. cmake -DPAHO_WITH_SSL=TRUE -DPAHO_BUILD_DOCUMENTATION=FALSE -DPAHO_BUILD_SAMPLES=TRUE ..
make make
python ../test/mqttsas2.py & python ../test/mqttsas.py &
ctest -VV --timeout 600 ctest -VV --timeout 600
kill %1 kill %1
#killall mosquitto #killall mosquitto
......
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