kopia lustrzana https://github.com/Yakifo/amqtt
Check CONNECT is the first message received and that it is received only once
rodzic
c8b3f5bfac
commit
b1444f6a03
|
@ -10,6 +10,7 @@ from hbmqtt.codecs.header import MQTTHeaderCodec
|
||||||
from hbmqtt.codecs.errors import CodecException
|
from hbmqtt.codecs.errors import CodecException
|
||||||
from hbmqtt.codecs.connect import ConnectMessage
|
from hbmqtt.codecs.connect import ConnectMessage
|
||||||
from hbmqtt.message import MessageType
|
from hbmqtt.message import MessageType
|
||||||
|
from hbmqtt.errors import MQTTException
|
||||||
|
|
||||||
|
|
||||||
class BrokerProtocol(asyncio.Protocol):
|
class BrokerProtocol(asyncio.Protocol):
|
||||||
|
@ -100,13 +101,20 @@ def init_message_codecs():
|
||||||
def client_connected(reader, writer):
|
def client_connected(reader, writer):
|
||||||
(remote_address, remote_port) = writer.get_extra_info('peername')
|
(remote_address, remote_port) = writer.get_extra_info('peername')
|
||||||
codecs = init_message_codecs()
|
codecs = init_message_codecs()
|
||||||
|
first_packet = True
|
||||||
while True:
|
while True:
|
||||||
try:
|
try:
|
||||||
# Read fixed header
|
# Read fixed header
|
||||||
fixed_header = yield from MQTTHeaderCodec.decode(reader)
|
header = yield from MQTTHeaderCodec.decode(reader)
|
||||||
|
if first_packet and header.message_type != MessageType.CONNECT:
|
||||||
|
raise MQTTException("[MQTT-3.1.0-1] First Packet sent from the Client MUST be a CONNECT Packet")
|
||||||
|
if not first_packet and header.message_type == MessageType.CONNECT:
|
||||||
|
raise MQTTException("[MQTT-3.1.0-2] Client can only send the CONNECT Packet once over a Network Connection")
|
||||||
|
first_packet = False
|
||||||
# Find message decoder and decode
|
# Find message decoder and decode
|
||||||
codec = codecs[fixed_header.message_type]
|
codec = codecs[header.message_type]
|
||||||
message = yield from codec.decode(fixed_header, reader)
|
message = yield from codec.decode(header, reader)
|
||||||
except CodecException:
|
|
||||||
|
except MQTTException:
|
||||||
#End connection
|
#End connection
|
||||||
break
|
break
|
||||||
|
|
Ładowanie…
Reference in New Issue