本文整理汇总了Python中jasmin.vendor.smpp.twisted.protocol.SMPPClientProtocol.doSendRequest方法的典型用法代码示例。如果您正苦于以下问题:Python SMPPClientProtocol.doSendRequest方法的具体用法?Python SMPPClientProtocol.doSendRequest怎么用?Python SMPPClientProtocol.doSendRequest使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类jasmin.vendor.smpp.twisted.protocol.SMPPClientProtocol
的用法示例。
在下文中一共展示了SMPPClientProtocol.doSendRequest方法的1个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的Python代码示例。
示例1: doSendRequest
# 需要导入模块: from jasmin.vendor.smpp.twisted.protocol import SMPPClientProtocol [as 别名]
# 或者: from jasmin.vendor.smpp.twisted.protocol.SMPPClientProtocol import doSendRequest [as 别名]
def doSendRequest(self, pdu, timeout):
if self.connectionCorrupted:
raise SMPPClientConnectionCorruptedError()
if not isinstance( pdu, PDURequest ) or pdu.requireAck is None:
raise SMPPClientError("Invalid PDU to send: %s" % pdu)
if pdu.commandId == CommandId.submit_sm:
# Start a LongSubmitSmTransaction if pdu is a long submit_sm and send multiple
# pdus, each with an OutboundTransaction
# - Every OutboundTransaction is closed upon receiving the correct submit_sm_resp
# - Every LongSubmitSmTransaction is closed upong closing all included OutboundTransactions
# UDH is set ?
UDHI_INDICATOR_SET = False
if hasattr(pdu.params['esm_class'], 'gsmFeatures'):
for gsmFeature in pdu.params['esm_class'].gsmFeatures:
if str(gsmFeature) == 'UDHI_INDICATOR_SET':
UDHI_INDICATOR_SET = True
# Discover any splitting method, otherwise, it is a single SubmitSm
if 'sar_msg_ref_num' in pdu.params:
splitMethod = 'sar'
elif UDHI_INDICATOR_SET and pdu.params['short_message'][:3] == '\x05\x00\x03':
splitMethod = 'udh'
else:
splitMethod = None
if splitMethod is not None:
partedSmPdu = pdu
first = True
# Iterate through parted PDUs
while True:
partedSmPdu.seqNum = self.claimSeqNum()
# Set LongSubmitSm tracking flags in pdu:
partedSmPdu.LongSubmitSm = {'msg_ref_num': None, 'total_segments': None, 'segment_seqnum': None}
if splitMethod == 'sar':
# Using SAR options:
partedSmPdu.LongSubmitSm['msg_ref_num'] = partedSmPdu.params['sar_msg_ref_num']
partedSmPdu.LongSubmitSm['total_segments'] = partedSmPdu.params['sar_total_segments']
partedSmPdu.LongSubmitSm['segment_seqnum'] = partedSmPdu.params['sar_segment_seqnum']
elif splitMethod == 'udh':
# Using UDH options:
partedSmPdu.LongSubmitSm['msg_ref_num'] = struct.unpack('!B', pdu.params['short_message'][3])[0]
partedSmPdu.LongSubmitSm['total_segments'] = struct.unpack('!B', pdu.params['short_message'][4])[0]
partedSmPdu.LongSubmitSm['segment_seqnum'] = struct.unpack('!B', pdu.params['short_message'][5])[0]
self.preSubmitSm(partedSmPdu)
self.sendPDU(partedSmPdu)
# Not like parent protocol's sendPDU, we don't return per pdu
# deferred, we'll return per transaction deferred instead
self.startOutboundTransaction(partedSmPdu, timeout).addCallbacks(
self.endLongSubmitSmTransaction,
self.endLongSubmitSmTransactionErr
)
# Start a transaction using the first parted PDU
if first:
first = False
txn = self.startLongSubmitSmTransaction(partedSmPdu, timeout)
try:
# There still another PDU to go for
partedSmPdu = partedSmPdu.nextPdu
except AttributeError:
break
return txn
else:
self.preSubmitSm(pdu)
return twistedSMPPClientProtocol.doSendRequest(self, pdu, timeout)