-
Notifications
You must be signed in to change notification settings - Fork 5
Expand file tree
/
Copy pathcmpp_handle.py
More file actions
125 lines (95 loc) · 3.41 KB
/
cmpp_handle.py
File metadata and controls
125 lines (95 loc) · 3.41 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
'''
cmpp 认证和短信的主要处理接口实现
'''
import threading
from cmpp_net import *
class cmppHandle(object):
#认证
@staticmethod
def connectISMG(ip, port):
sockFd = cmppNet.startTcpClient(0, ip, port, None)
if sockFd > 0 :
connObj = cmppConnect()
connObj.setTotalLength(12+6+16+1+4)
connObj.setCommandId(CMPP_CONNECT)
connObj.setSequenceId(cmppUtil.getSequenceId())
connObj.setSourceAddr(cmppManager.getSPID())
connObj.setAuthenticatorSource(cmppUtil.getAuthenticatorSource(cmppManager.getSPID(), cmppManager.getPassword()))
connObj.setVersion(CMPP_VERSION)
connObj.setTimestamp(time.strftime('%m%d%H%M%S', time.localtime(time.time())))
else:
print("connectISMG conenct error:" + ip + ", " + str(port))
return -1, 0
conncMessage = connObj.writeToByteBuffer()
sendObjc = cmppSender(sockFd, conncMessage)
return sendObjc.sendService(),sockFd
# 发送短信
@staticmethod
def sendMessage(sockFd, message, number):
if sockFd <= 0 or message == '' or number == '':
print('sendMessage param error')
return -1
submitObj = cmppSubmit()
#header
submitObj.setTotalLength(12+8+1+1+1+1+10+1+32+1+1+1+1+6+2+6+17+17+21+1+32+1+1+msg.length()*2+20)
submitObj.setCommandId(CMPP_SUBMIT)
submitObj.setSequenceId(cmppUtil.getSequenceId())
#body
submitObj.setMsgId(0x00)
submitObj.setPk_total(0x01)
submitObj.setPk_number(0x01)
submitObj.setRegistered_Del(0x00)
submitObj.setMsg_level(0x01)
submitObj.setService_Id(cmppManager.getServiceID())
submitObj.setFee_UserType(0x02)
submitObj.setFee_terminal_Id('')
submitObj.setFee_terminal_Type(0x00)
submitObj.setTP_pId(0x00);
submitObj.setTP_udhi(0x00);
submitObj.setMsg_Fmt(0x0F);
submitObj.setMsg_src(cmppManager.getSPID())
submitObj.setFeeType('01')
submitObj.setFeeCode('5')
submitObj.setValId_Time('')
submitObj.setAt_Time('')
submitObj.setSrc_Id(CMPPManager.getSrcID())
submitObj.setDestUsr_tl(0x01)
submitObj.setDest_Terminal_Id(number)
submitObj.setDest_Terminal_type(0x00)
submitObj.setMsgLength(len(message))
submitObj.setMsg_Content(message)
submitObj.setLinkID('')
submitMessage = submitObj.writeToByteBuffer()
sendObjc = cmppSender(sockFd, submitMessage)
return sendObjc.sendService()
#心跳保活连接
@staticmethod
def sendActiveTest(sockFd):
if sockFd <= 0 :
activeTestObj = cmppActiveTest()
active.setTotalLength(12) #消息总长度,总字节数:4+4+4(消息头)
active.setCommandId(CMPP_ACTIVE_TEST)
active.setSequenceId(cmppUtil.getSequenceId()) #序列,由我们指定
activeTestMessage = activeTestObj.writeToByteBuffer()
sendObj = cmppSender(sockFd, activeTestMessage)
return sendObj.sendService()
else:
print('sendActiveTest sockFd error:' + sockFd)
#心跳回应处理
staticmethod
def sendAciveTestResp(sockFd, recvmessage):
activeRespObj = cmppActiveTestResp(recvmessage)
activeRespObj.setTotalLength(12+1)
activeRespObj.setCommandId(CMPP_ACTIVE_TEST_RESP)
#activeRespObj.setSequenceId()构造函数中提取之前activetest中的sequenceid
activeRespObj.setReserved(0x00)
activeRespMessage = activeRespObj.writeToByteBuffer()
sendObjc = cmppSender(sockFd, activeRespMessage)
return sendObjc.sendService()
##心跳服务
def service(sockFd):
thread_list =[]
thread1 = threading.Thread(target=cmppHandle.sendActiveTest, args=sockFd)
thread_list.append(thread1)
for t in thread_list:
t.start()