Advertisement
Guest User

Untitled

a guest
Sep 3rd, 2015
79
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.66 KB | None | 0 0
  1. #!/usr/bin/env python
  2. ""
  3. name: publish_sms_MO-TCP.py
  4. author: Ettore Eliseo Pelliccioni
  5. last modified: 2015/09/03
  6.  
  7. This program receive a stream from TCP / PORT 11007 like this line (carriage return ended):
  8.  
  9. TEXT;XXXXXXXXXXXX;2015090111595232;
  10.  
  11. where the fields are separated by comma ";"
  12.  
  13. TEXT: is the text written from mobile phone number to SHORTCODE
  14. XXXXXXXXXXXX is the mobile phone number writing to SHORTCODE (src_addr)
  15. 2015090111595232 is the timestamp from the msg (YYYYMMDDHHMMSSMS)
  16.  
  17. and publish as SMS-MO directly on RabbitMQ as an upstream source to Jasmin SMS Gateway
  18.  
  19. TODO:
  20. - NOT FOR PRODUCTION SYSTEMS: deliver_sm_resp issue, no managment for sequence number!!!
  21. - Add logging to debug messages.
  22.  
  23. ""
  24. import pickle
  25.  
  26. from twisted.internet.defer import inlineCallbacks
  27. from twisted.internet import protocol,reactor
  28. from twisted.internet.protocol import ClientCreator
  29. from twisted.python import log
  30. from txamqp.protocol import AMQClient
  31. from txamqp.client import TwistedDelegate
  32. from txamqp.content import Content
  33. import txamqp.spec
  34.  
  35. from jasmin.vendor.smpp.pdu.pdu_types import (EsmClass, EsmClassMode, EsmClassType,
  36. RegisteredDelivery, RegisteredDeliveryReceipt,
  37. AddrTon, AddrNpi, PriorityFlag, ReplaceIfPresentFlag)
  38.  
  39. from jasmin.vendor.smpp.pdu.operations import DeliverSMResp,DeliverSM
  40. from jasmin.managers.content import DeliverSmContent
  41.  
  42. @inlineCallbacks
  43. def gotConnection(conn, username, password,src,dest,text):
  44. yield conn.authenticate(username, password)
  45. #print 'Connected to RabbitMQ'
  46.  
  47. chan = yield conn.channel(1)
  48. yield chan.channel_open()
  49.  
  50. DeliverSmPDU = DeliverSM( source_addr = src,
  51. source_addr_ton = AddrTon.NATIONAL,
  52. source_addr_npi = AddrNpi.ISDN,
  53. destination_addr = dest,
  54. dest_addr_ton = AddrTon.NATIONAL,
  55. dest_addr_npi = AddrNpi.ISDN,
  56. esm_class=EsmClass(EsmClassMode.DEFAULT, EsmClassType.DEFAULT),
  57. protocol_id=0,
  58. priority_flag=PriorityFlag.LEVEL_0,
  59. registered_delivery=RegisteredDelivery(RegisteredDeliveryReceipt.NO_SMSC_DELIVERY_RECEIPT_REQUESTED),
  60. replace_if_present_flag=ReplaceIfPresentFlag.DO_NOT_REPLACE,
  61. short_message = text,
  62. seqNum = 1,)
  63.  
  64. content = DeliverSmContent(DeliverSmPDU, 'SIMULATOR' )
  65.  
  66. #print DeliverSmPDU
  67. yield chan.basic_publish(exchange='messaging', routing_key='deliver.sm.SIMULATOR', content=content)
  68.  
  69. # A clean way to tear down and stop
  70. yield chan.channel_close()
  71.  
  72. chan0 = yield conn.channel(0)
  73. yield chan0.connection_close()
  74.  
  75.  
  76. class Server(protocol.Protocol):
  77.  
  78.  
  79.  
  80. def dataReceived(self, data):
  81.  
  82. self.transport.write(data)
  83. campo = data.split(";")
  84. #print campo[0],";",campo[1],";",campo[2]
  85.  
  86. # Send an SMS-MT with defined originating address
  87.  
  88.  
  89. host = '127.0.0.1'
  90. port = 5672
  91. vhost = '/'
  92. username = 'guest'
  93. password = 'guest'
  94. spec_file = '/etc/jasmin/resource/amqp0-9-1.xml'
  95. MO_dst = '24247'
  96. MO_src = campo[1]
  97. # transformation of the source address! :-)
  98. MOD_MO_src = '00' + MO_src[2:]
  99. texto = campo[0]
  100.  
  101. spec = txamqp.spec.load(spec_file)
  102.  
  103. delegate = TwistedDelegate()
  104.  
  105. # Connect and authenticate
  106. d = ClientCreator(reactor, AMQClient, delegate=delegate, vhost=vhost,
  107. spec=spec).connectTCP(host, port)
  108.  
  109. d.addCallback(gotConnection, username, password,MOD_MO_src,MO_dst,texto)
  110.  
  111. def whoops(err):
  112. if reactor.running:
  113. log.err(err)
  114. reactor.stop()
  115.  
  116. d.addErrback(whoops)
  117.  
  118. def __init__(self, amqpBroker):
  119. self.amqpBroker = amqpBroker
  120.  
  121.  
  122.  
  123. class ServerFactory(protocol.Factory):
  124. def buildProtocol(self, addr):
  125. return Server()
  126.  
  127. reactor.listenTCP(11007, ServerFactory())
  128. reactor.run()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement