Advertisement
Guest User

Untitled

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