diff --git a/frn/protocol/server.py b/frn/protocol/server.py index 1daeb7e..391d93e 100644 --- a/frn/protocol/server.py +++ b/frn/protocol/server.py @@ -114,6 +114,8 @@ class FRNServer(BufferingLineReceiver, TimeoutMixin): log.msg("Logging out client %s" % self.user) self.factory.manager.clientLogout(self.factory.serverAuth, self.user) self.factory.tracker.logout(self) + if self.factory.talking == self: + self.factory.talking = None self.transport.loseConnection() def decodeCT(self, body): @@ -158,6 +160,8 @@ class FRNServer(BufferingLineReceiver, TimeoutMixin): def decodeRX(self, body): log.msg("RX%d" % int(body)) self.startPinging() + if self.factory.talking == self: + self.factory.talking = None for c in self.factory.tracker.getClientList(self.user.NT): cp = self.factory.tracker.getClientProtocol(c.ID).startPinging() @@ -182,8 +186,10 @@ class FRNServer(BufferingLineReceiver, TimeoutMixin): def decodeTX(self, body): if body == '0': if not self.factory.tracker.isMute(self.user.ID): - ih,il = divmod(self.getIndex(), 256) - self.transport.write(chr(1)+chr(ih)+chr(il)) + if not self.factory.talking: + self.factory.talking = self + ih,il = divmod(self.getIndex(), 256) + self.transport.write(chr(1)+chr(ih)+chr(il)) elif body == '1': self.stopPinging() self.expectRawData(325) @@ -261,7 +267,7 @@ class FRNServer(BufferingLineReceiver, TimeoutMixin): def audioFrameReceived(self, frame): #log.msg("audioFrameReceived") - if self.factory.tracker.canTalk(self.user.ID): + if self.factory.tracker.canTalk(self.user.ID) and self.factory.talking == self: clientIdx = self.getIndex() for c in self.factory.tracker.getClientList(self.user.NT): if int(c.S) < 2 and c.ID != self.user.ID: diff --git a/manager.py b/manager.py index 5d4b6c4..c84b4ff 100755 --- a/manager.py +++ b/manager.py @@ -29,7 +29,7 @@ if __name__ == '__main__': def databaseManagerFactory(): log.msg("Building DatabaseManager") return DatabaseManager( - ConnectionPool("sqlite3", "/tmp/frnmanager.sqlite3", cp_noisy=True)) + ConnectionPool("sqlite3", "/tmp/frnmanager.sqlite3", check_same_thread=False, cp_noisy=True)) reactor.listenTCP(10025, FRNManagerServerFactory( databaseManagerFactory diff --git a/twisted/plugins/frncrosslink.py b/twisted/plugins/frncrosslink.py index 749f639..e9d1996 100755 --- a/twisted/plugins/frncrosslink.py +++ b/twisted/plugins/frncrosslink.py @@ -63,7 +63,7 @@ class FRNCrosslinkClient(FRNClient): role = factory.connection.serverdata.get('AL', None) if role in ['OK', 'ADMIN', 'OWNER']: for c in factory.connection.clients: - ss = cStatus.get(c['s'], '?') + ss = cStatus.get(c['S'], '?') if c['M'] != '0': ss = ss.lower() cl.append(" %s%s %s " % (