You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
76 lines
2.4 KiB
76 lines
2.4 KiB
|
|
from time import time
|
|
from random import randint
|
|
|
|
from twisted.internet import reactor,task
|
|
from twisted.internet.defer import Deferred
|
|
from twisted.internet.protocol import ClientFactory,ReconnectingClientFactory,Protocol
|
|
from twisted.protocols.basic import LineReceiver
|
|
|
|
class AMI():
|
|
def __init__(self,host,port):
|
|
self._AMIClient = self.AMIClient
|
|
|
|
|
|
self.CF = reactor.connectTCP(host, port, self.CCClientFactory(self._AMIClient))
|
|
|
|
def closeConnection(self):
|
|
self.transport.loseConnection()
|
|
|
|
class AMIClient(LineReceiver):
|
|
|
|
delimiter = b'\r\n'
|
|
|
|
end = b"Bye-bye!"
|
|
|
|
def connectionMade(self):
|
|
print('b')
|
|
self.sendLine('Action: login')
|
|
self.sendLine('Username: admin')
|
|
self.sendLine('Secret: ilcgi')
|
|
self.sendLine('\r\n')
|
|
|
|
def lineReceived(self,line):
|
|
|
|
print(line)
|
|
|
|
if line == 'Asterisk Call Manager/1.0':
|
|
print('OK')
|
|
return
|
|
|
|
k,v = line.split(':')
|
|
|
|
if v == ' Success':
|
|
self.lastresponse = True
|
|
elif k == 'Response' and v == ' Error':
|
|
self.transport.loseConnection()
|
|
|
|
else:
|
|
self.sendLine('Action: command')
|
|
self.sendLine('Command:' + self.command)
|
|
self.sendline('\r\n')
|
|
self.transport.loseConnection()
|
|
|
|
|
|
|
|
class AMIClientFactory(ReconnectingClientFactory):
|
|
def __init__(self,AMIClient,command):
|
|
self.command = command
|
|
self.done = Deferred()
|
|
self.protocol = AMIClient
|
|
self.protocol.command = command
|
|
print('a')
|
|
|
|
def clientConnectionFailed(self, connector, reason):
|
|
print("connection failed:", reason.getErrorMessage())
|
|
ReconnectingClientFactory.clientConnectionLost(self, connector, reason)
|
|
|
|
def clientConnectionLost(self, connector, reason):
|
|
print("connection lost:", reason.getErrorMessage())
|
|
ReconnectingClientFactory.clientConnectionLost(self, connector, reason)
|
|
|
|
|
|
if __name__ == '__main__':
|
|
AMIc = AMI.AMIClientFactory(AMI.AMIClient,'rpt cmd 29177 ilink 3 2001')
|
|
|