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
and Eclipse Distribution License v1.0 which accompany this distribution. and Eclipse Distribution License v1.0 which accompany this distribution.
The Eclipse Public License is available at The Eclipse Public License is available at
http://www.eclipse.org/legal/epl-v10.html http://www.eclipse.org/legal/epl-v10.html
and the Eclipse Distribution License is available at and the Eclipse Distribution License is available at
http://www.eclipse.org/org/documents/edl-v10.php. http://www.eclipse.org/org/documents/edl-v10.php.
Contributors: Contributors:
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 brokerhost == myhost: if len(sys.argv) > 3:
myport = brokerport + 1 myport = int(sys.argv[3])
else: else:
myport = 1883 if brokerhost == myhost:
myport = brokerport + 1
else:
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