📄 cmpp_yx.java
字号:
Exception {
CMPPHead backMsg = new CMPPHead();
int stat = head.stat;
switch (head.nCommandID) {
case COMMAND_CMPP_NACK_RESP:
break;
case COMMAND_CMPP_CONNECT_RESP:
CMPPConnectMessageResp cResp = new CMPPConnectMessageResp();
if (msg == null) {
stat = CONNECT_MSG_NULL_ERROR;
}
else {
cResp.nStatus = msg[0];
try {
stat = msg[0];
if (stat != 3) {
cResp.sISMG = new String(msg, 1, 16);
}
cResp.nVersion = msg[msg.length - 1];
}
catch (Exception ex) {
stat = CONNECT_MSG_FORMAT_ERROR;
}
}
cResp.nStatus = stat;
backMsg = cResp;
break;
case COMMAND_CMPP_DELIVER:
CMPPDeliverMessage back = new CMPPDeliverMessage();
stat = getDeliverMessage(back, msg);
CMPPDeliverMessageResp resp = new CMPPDeliverMessageResp();
resp.nMsgId = back.msgID;
resp.nSequenceID = head.nSequenceID;
resp.nMsgSize = 21;
resp.nResult = stat;
byte[] send = new byte[9];
System.arraycopy(Tools.long2byte(resp.nMsgId), 0, send, 0, 8);
send[8] = (byte) resp.nResult;
try {
sendPacket(resp, send);
}
catch (IOException ex) {
throw ex;
}
back.stat = stat;
backMsg = back;
break;
case COMMAND_CMPP_SUBMIT_RESP:
CMPPSubmitMessageResp sResp = new CMPPSubmitMessageResp();
if (msg == null) {
stat = SUBMIT_MSG_NULL_ERROR;
}
else {
try {
byte id[] = new byte[8];
System.arraycopy(msg, 0, id, 0, 8);
sResp.setMsgID(id);
sResp.nResult = msg[8];
stat = msg[8];
}
catch (Exception ex) {
stat = SUBMIT_MSG_FORMAT_ERROR;
}
}
sResp.stat = stat;
backMsg = sResp;
break;
case COMMAND_CMPP_ACTIVE_TEST:
CMPPActiveTestMessageResp respMsg = new CMPPActiveTestMessageResp();
respMsg.nSequenceID = head.nSequenceID;
try {
sendHead(respMsg);
}
catch (IOException ex) {
throw ex;
}
break;
case COMMAND_CMPP_ACTIVE_TEST_REP:
break;
case COMMAND_CMPP_TERMINATE:
CMPPHead out = new CMPPHead();
out.nMsgSize = 12;
out.nCommandID = COMMAND_CMPP_TERMINATE_RESP;
out.nSequenceID = head.nSequenceID;
try {
sendHead(out);
}
catch (IOException ex) {
throw ex;
}
break;
case COMMAND_CMPP_TERMINATE_RESP:
break;
default:
stat = CMPP_UNKNOWN_PACKAGE_ERROR;
}
backMsg.nCommandID = head.nCommandID;
backMsg.nMsgSize = head.nMsgSize;
backMsg.nSequenceID = head.nSequenceID;
backMsg.stat = stat;
return backMsg;
}
public void deliver() throws IOException {
try {
if (!activeTest("auto")) {
throw new IOException();
}
CMPPHead back = Deliver();
if (back.nCommandID == this.COMMAND_CMPP_DELIVER) {
deliverMsgList.addElement( ( (CMPPDeliverMessage) back).getDeliverMsg());
return;
}
if (back.nCommandID == this.COMMAND_CMPP_TERMINATE) {
close();
throw new IOException();
}
}
catch (IOException ex) {
close();
throw ex;
}
}
//收取网关下发信息
private CMPPHead Deliver() throws IOException {
CMPPHead head = new CMPPHead();
byte[] bMsg = null;
int i = 0;
while (true) {
try {
bMsg = read(head);
}
catch (InterruptedIOException ex) {
if (i == 3) {
head.stat = DELIVER_MSG_TIME_OUT; //由于没有消息而退出--stat=1
break;
}
else {
i++;
continue;
}
}
catch (IOException ex) {
throw ex;
}
try {
head = dealMsg(head, bMsg);
}
catch (IOException ex) {
throw ex;
}
catch (Exception ex) {
Log.printBytes(bMsg, logFile);
Log.printError(ex, "", logFile);
}
if (head.nCommandID == this.COMMAND_CMPP_ACTIVE_TEST) {
continue;
}
break;
}
return head;
}
//向网关查询信息流量
public CMPPQueryMessageResp Query() {
CMPPQueryMessage queryMessage = new CMPPQueryMessage();
CMPPQueryMessageResp queryResp = new CMPPQueryMessageResp();
return queryResp;
}
//发送测试信息
private boolean activeTest(String flag) throws IOException {
boolean testFlag = false;
if (flag == null ||
(int) (System.currentTimeMillis() / 1000) - checkTime > 10) {
testFlag = true;
}
if (testFlag) {
CMPPActiveTestMessage test = new CMPPActiveTestMessage();
sendOut = test.setSequenceID(sendOut);
test.nMsgSize = 12;
try {
sendHead(test);
}
catch (IOException e) {
sendOut--;
return false;
}
try {
while (true) {
CMPPHead back = Deliver();
if (back.nCommandID == this.COMMAND_CMPP_DELIVER) {
deliverMsgList.addElement( ( (CMPPDeliverMessage) back).
getDeliverMsg());
continue;
}
if (back.stat == this.DELIVER_MSG_TIME_OUT) {
throw new IOException();
}
if (back.nCommandID == this.COMMAND_CMPP_ACTIVE_TEST_REP) {
checkTime = (int) (System.currentTimeMillis() / 1000);
break;
}
}
}
catch (IOException ex) {
return false;
}
return true;
}
return true;
}
public boolean activeTest() throws IOException {
return activeTest(null);
}
private int getDeliverMessage(CMPPDeliverMessage msg, byte[] content) throws
Exception {
if (msg == null) {
return DELIVER_MSG_NULL_ERROR;
}
int stat = CMPP_SUCCESS;
//把content解析成所需信息
byte msgID[] = new byte[8];
byte sDestTermID[] = new byte[21];
byte sServiceID[] = new byte[10];
byte cTpPid = 0;
byte cTpUdhi = 0;
byte nMsgFormat = 0;
byte sSrcTermID[] = new byte[21];
byte nIsReply = 0;
byte nMsgLen = 0;
byte sMsgContent[] = null;
try {
System.arraycopy(content, 0, msgID, 0, 8);
System.arraycopy(content, 8, sDestTermID, 0, 21);
System.arraycopy(content, 29, sServiceID, 0, 10);
cTpPid = content[39];
cTpUdhi = content[40];
nMsgFormat = content[41];
System.arraycopy(content, 42, sSrcTermID, 0, 21);
nIsReply = content[63];
nMsgLen = content[64];
if (nMsgLen < 0) {
nMsgLen += 256;
}
sMsgContent = new byte[nMsgLen];
System.arraycopy(content, 65, sMsgContent, 0, nMsgLen);
}
catch (Exception ex) {
return DELIVER_MSG_FORMAT_ERROR;
}
/////////////////////////////////////////封装正常消息
msg.setMsgID(msgID);
msg.msgID = Tools.byte2long(msgID);
msg.nIsDelivery = nIsReply;
msg.nMsgFormat = nMsgFormat;
msg.nMsgLength = nMsgLen;
msg.nTPpid = cTpPid;
msg.nTPudhi = cTpUdhi;
msg.sDestId = new String(sDestTermID).trim();
if (msg.sDestId.startsWith(spNum)) {
msg.sDestId = rpSPNum + msg.sDestId.substring(spNum.length());
msg.sDestId = msg.sDestId.trim();
}
msg.sServiceId = new String(sServiceID).trim();
msg.sSrcTerminalId = new String(sSrcTermID).trim();
try {
if (nIsReply == 0) {
if (nMsgFormat == 8) { //ucs2编码格式
msg.sMsgContent = new String(sMsgContent, "iso-10646-ucs-2");
}
else {
msg.sMsgContent = new String(sMsgContent, "gb2312");
}
}
}
catch (Exception ex) {
return DELIVER_MSG_FORMAT_DECODE_ERROR;
}
/////////////////////////////状态报告中所需字段
if (nIsReply == 1) {
try {
byte msgReportID[] = new byte[8];
System.arraycopy(sMsgContent, 0, msgReportID, 0, 8);
msg.setReportMsgId(msgReportID);
//msg.nReportMsgId=Tools.byte2long(sMsgContent,0);
msg.sStat = new String(sMsgContent, 8, 7).trim();
msg.sSubmitTime = new String(sMsgContent, 15, 10).trim();
msg.sDoneTime = new String(sMsgContent, 25, 10).trim();
msg.sDestTerminalId = new String(sMsgContent, 35, 21).trim();
msg.nSMSCSequence = Tools.byte2int(sMsgContent, 56);
}
catch (Exception ex) {
stat = DELIVER_MSG_FORMAT_REPORT_ERROR;
}
}
return stat;
}
private void sendHead(CMPPHead head) throws IOException {
byte[] send = new byte[12];
System.arraycopy(Tools.int2byte(head.nMsgSize), 0, send, 0, 4);
System.arraycopy(Tools.int2byte(head.nCommandID), 0, send, 4, 4);
System.arraycopy(Tools.int2byte(head.nSequenceID), 0, send, 8, 4);
send(send);
}
private void sendPacket(CMPPHead head, byte[] msg) throws IOException {
byte[] send = new byte[12 + msg.length];
head.nMsgSize = 12 + msg.length;
System.arraycopy(Tools.int2byte(head.nMsgSize), 0, send, 0, 4);
System.arraycopy(Tools.int2byte(head.nCommandID), 0, send, 4, 4);
System.arraycopy(Tools.int2byte(head.nSequenceID), 0, send, 8, 4);
System.arraycopy(msg, 0, send, 12, msg.length);
send(send);
}
private void send(byte[] msg) throws IOException {
DataOutputStream out = creatOutputStream();
out.write(msg);
out.flush();
}
private byte[] read(CMPPHead head) throws InterruptedIOException, IOException {
DataInputStream in = creatInputStream();
head.nMsgSize = in.readInt();
head.nCommandID = in.readInt();
head.nSequenceID = in.readInt();
byte[] resp = null;
if (head.nMsgSize <= 12) {
return null;
}
else {
resp = new byte[head.nMsgSize - 12];
in.read(resp, 0, head.nMsgSize - 12);
}
return resp;
}
private DataInputStream creatInputStream() throws IOException {
return new DataInputStream(s.getInputStream());
}
private DataOutputStream creatOutputStream() throws IOException {
return new DataOutputStream(s.getOutputStream());
}
private void close() {
socketManger.freeSocket();
s = null;
}
private static final int CMPP_SUCCESS = 0;
private static final int CMPP_UNKNOWN_PACKAGE_ERROR = -9;
private static final int CMPP_LOGOUT_HAPPEND = -2;
private static final int SUBMIT_MSG_NULL_ERROR = -4;
private static final int SUBMIT_MSG_FORMAT_ERROR = -5;
private static final int SUBMIT_MSG_TIME_OUT = -6;
private static final int DELIVER_MSG_FORMAT_REPORT_ERROR = -7;
private static final int DELIVER_MSG_NULL_ERROR = -8;
private static final int DELIVER_MSG_TIME_OUT = -9;
private static final int DELIVER_MSG_FORMAT_ERROR = -10;
private static final int DELIVER_MSG_FORMAT_DECODE_ERROR = -11;
private static final int CONNECT_MSG_NULL_ERROR = -12;
private static final int CONNECT_MSG_RESP_NOT_FOUNT_ERROR = -13;
private static final int CONNECT_MSG_FORMAT_ERROR = -14;
private static final int CONNECT_INIT_ERROR = -15;
private static final int CONNECT_HEAD_LEN = 12;
private static final int CONNECT_PACKET_LEN = 27;
private static final int QUERY_PACKET_LEN = 27;
private static final int COMMAND_CMPP_SUBMIT = 4;
private static final int COMMAND_CMPP_QUERY = 6;
private static final int COMMAND_CMPP_TERMINATE = 2;
private static final int COMMAND_CMPP_TERMINATE_RESP = 0x80000002;
private static final int COMMAND_CMPP_QUERY_RESP = 0x80000006;
private static final int COMMAND_CMPP_SUBMIT_RESP = 0x80000004;
private static final int COMMAND_CMPP_CONNECT = 1;
private static final int COMMAND_CMPP_CONNECT_RESP = 0x80000001;
private static final int COMMAND_CMPP_ACTIVE_TEST = 8;
private static final int COMMAND_CMPP_ACTIVE_TEST_REP = 0x80000008;
private static final int COMMAND_CMPP_DELIVER = 5;
private static final int COMMAND_CMPP_NACK_RESP = 0x80000000;
private static final int COMMAND_CMPP_DELIVER_RESP = 0x80000005;
private static final int COMMAND_CMPP_SET_KEY = 4098;
private static final int COMMAND_CMPP_SET_KEY_RESP = 0x80001002;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -