From b9a519f28a274699043be1f8f0f237ae7ca724c9 Mon Sep 17 00:00:00 2001
From: Christian OA4DOA <63084148+yuvelq@users.noreply.github.com>
Date: Mon, 6 Sep 2021 13:24:08 -0500
Subject: [PATCH] Update hotspot_proxy_v2.py

---
 hotspot_proxy_v2.py | 20 ++++++++------------
 1 file changed, 8 insertions(+), 12 deletions(-)

diff --git a/hotspot_proxy_v2.py b/hotspot_proxy_v2.py
index 2c896bf..50d8f03 100644
--- a/hotspot_proxy_v2.py
+++ b/hotspot_proxy_v2.py
@@ -1,7 +1,6 @@
 from twisted.internet.protocol import DatagramProtocol
 from twisted.internet import reactor, task
 from time import time
-from resettabletimer import ResettableTimer
 from dmr_utils3.utils import int_id
 import random
 import ipaddress
@@ -95,23 +94,21 @@ class Proxy(DatagramProtocol):
                         _peer_id = self.connTrack[port]
             elif _command == MSTN:
                     _peer_id = data[6:10]
-                    self.peerTrack[_peer_id]['timer'].cancel()
-                    self.reaper(_peer_id)
-                    return
             elif _command == MSTP:
                     _peer_id = data[7:11]
             elif _command == MSTC:
                     _peer_id = data[5:9]
-                    self.peerTrack[_peer_id]['timer'].cancel()
-                    self.reaper(_peer_id)
-                    return
                 
           #  _peer_id = self.connTrack[port]
             if self.debug:
                 print(data)
-            if _peer_id and _peer_id in self.peerTrack:
+            if _peer_id in self.peerTrack:
                 self.transport.write(data,(self.peerTrack[_peer_id]['shost'],self.peerTrack[_peer_id]['sport']))
                 #self.peerTrack[_peer_id]['timer'].reset()
+                # Remove the client after send a MSTN or MSTC packet
+                if _command in (MSTN,MSTC):
+                    self.peerTrack[_peer_id]['timer'].cancel()
+                    self.reaper(_peer_id)
             return
             
                 
@@ -122,7 +119,7 @@ class Proxy(DatagramProtocol):
             if _command == DMRD:                # DMRData -- encapsulated DMR data frame
                 _peer_id = data[11:15]
             elif _command == DMRA:              # DMRAlias -- Talker Alias information
-                _peer_id = _data[4:8]
+                _peer_id = data[4:8]
             elif _command == RPTL:              # RPTLogin -- a repeater wants to login
                 _peer_id = data[4:8]
             elif _command == RPTK:              # Repeater has answered our login challenge
@@ -144,7 +141,7 @@ class Proxy(DatagramProtocol):
                 self.peerTrack[_peer_id]['sport'] = port
                 self.peerTrack[_peer_id]['shost'] = host
                 self.transport.write(data, (Master,_dport))
-                self.peerTrack[_peer_id]['timer'].reset()
+                self.peerTrack[_peer_id]['timer'].reset(self.timeout)
                 if self.debug:
                     print(data)
                 return
@@ -163,8 +160,7 @@ class Proxy(DatagramProtocol):
                 self.peerTrack[_peer_id]['dport'] = _dport
                 self.peerTrack[_peer_id]['sport'] = port
                 self.peerTrack[_peer_id]['shost'] = host
-                self.peerTrack[_peer_id]['timer'] = ResettableTimer(self.timeout,self.reaper,[_peer_id])
-                self.peerTrack[_peer_id]['timer'].start()
+                self.peerTrack[_peer_id]['timer'] = reactor.callLater(self.timeout,self.reaper,_peer_id)
                 self.transport.write(data, (self.master,_dport))
                 if self.debug:
                     print(data)