📄 smscconnection.java
字号:
package smgpgw;
import java.io.*;
import java.net.*;
/**
* Title:
* Description:
* Copyright: Copyright (c) 2002
* Company:
* @author wangpei
* @version 1.0
*/
public class SMSCConnection extends Thread {
private String myID;
private String strBindType;
private String mystate;
private Socket mySocket;
private String PeerHost;
private InputStream myinputstream;
private OutputStream myoutputstream;
public DataInputStream dataInStream;
public String getStatus() {
return mystate;
}
public String getMyID() {
return myID;
}
private volatile static int recvSubmitNum ;
public SMSCConnection(Socket socket) {
mySocket = socket;
mystate = Constants.NOTLOGIN;
PeerHost = mySocket.getInetAddress().getHostAddress();
try {
mySocket.setSoTimeout(Constants.MBCPRCVSOCK_TIMEOUT);
myinputstream = mySocket.getInputStream() ;
myoutputstream = mySocket.getOutputStream() ;
dataInStream = new DataInputStream(myinputstream);
} catch (Exception e) {
SMSCFrame.RecvArea.append("SMSC connection create stream expcetion .\n");
}
}
public void run() {
int i;
while(true) {
byte[] buf = recv();
for(int test=0;test<buf.length;test++)
System.err.print("["+buf[test]+"]");
if( Constants.DISPLAY_BINARY) {
for(i=0; i<buf.length ; i++ ) {
if(i%12 == 0 && i>0)
SMSCFrame.RecvArea.append("\n");
SMSCFrame.RecvArea.append("[" + buf[i] + "] ");
}
SMSCFrame.RecvArea.append("\n");
}
if(buf.length != 1)
handle(buf);
else {
switch(buf[0]) {
case Constants.ERROR_INTERRUPT:
break;
case Constants.ERROR_SOCKET:
disconnect();
(SMSCConnectionManager.instance()).delConnection(myID);
return ;
default :
break;
}
}
}
}
private void handle(byte[] b) {
boolean bResp;
String strHostAddr = null;
SmscShortMsg smpp=new SmscShortMsg();
smpp.parsePackage(b);
displayRecvMsg(smpp);
switch(smpp.headCmdID) {
case SmscConstants.SMPP_BIND_RECEIVER :
//if(Constants.SMSC_DEBUG)
// SMSCFrame.RecvArea.append("SMSC receive SMPP_BIND_RECEIVER from " + PeerHost + "\n");
myID = mySocket.getInetAddress().getHostAddress() + Constants.Receiver;
if(mystate.equals(Constants.NOTLOGIN) &&
!SMSCConnectionManager.instance().isConncected(myID)) {
bResp = SMSCConnectionManager.instance().addHost(PeerHost, PeerHost);
if(bResp == false) {
smpp.headCmdID = SmscConstants.SMPP_BIND_RECEIVER_RESP ;
smpp.headCmdStatus = SmscConstants.ESME_RSYSERR;
bResp = send(smpp);
break;
}
smpp.headCmdID = SmscConstants.SMPP_BIND_RECEIVER_RESP ;
smpp.headCmdStatus = 0;
bResp = send(smpp);
if(bResp) {
strBindType = Constants.Receiver;
mystate = Constants.WORKING ;
// SMSCConnectionManager.instance().setConncection(myID, this);
SMSCFrame.RecvArea.append(myID + " connect SMSC succeed ......\n\n");
}
} else {
SMSCFrame.RecvArea.append(PeerHost + " already BIND SMSC by SMPP_BIND_RECEIVER .\n") ;
smpp.headCmdID =SmscConstants.SMPP_GENERIC_NAK;
smpp.headCmdStatus =0;
}
break;
case SmscConstants.SMPP_BIND_TRANSMITTER :
//if(Constants.SMSC_DEBUG)
// SMSCFrame.RecvArea.append("SMSC receive SMPP_BIND_TRANSMITTER from " + PeerHost + "\n") ;
myID = mySocket.getInetAddress().getHostAddress() + " " + Constants.Transmitter;
if(mystate.equals(Constants.NOTLOGIN) &&
!SMSCConnectionManager.instance().isConncected(myID)) {
smpp.headCmdID = SmscConstants.SMPP_BIND_TRANSMITTER_RESP;
smpp.headCmdStatus =0;
bResp = send(smpp);
if(bResp) {
strBindType = Constants.Transmitter;
mystate = Constants.WORKING ;
// SMSCConnectionManager.instance().setConncection(myID, this);
SMSCFrame.RecvArea.append(myID + " connect SMSC succeed ......\n\n");
}
} else {
SMSCFrame.RecvArea.append(PeerHost + " already BIND SMSC by SMPP_BIND_TRANSMITTER .\n") ;
smpp.headCmdID = SmscConstants.SMPP_GENERIC_NAK ;
smpp.headCmdStatus = 0;
send(smpp);
}
break;
case SmscConstants.SMPP_UNBIND :
SMSCFrame.RecvArea.append("SMSC receive SMPP_UNBIND from " + myID + "\n\n") ;
smpp.headCmdID = SmscConstants.SMPP_UNBIND_RESP ;
smpp.headCmdStatus =0;
send(smpp);
disconnect();
SMSCConnectionManager.instance().delConnection(myID) ;
break;
case SmscConstants.SMPP_SUBMIT_SM :
//SMSCFrame.RecvArea.append("SMSC receive SMPP_SUBMIT_SM from " + PeerHost + "\n\n");
bResp = handleSubmit(smpp);
break;
case SmscConstants.SMPP_DELIVER_SM_RESP :
//SMSCFrame.RecvArea.append("recv a SMPP_DELIVER_SM_RESP:" + smpp.headSeqcNo + " .\n");
if(smpp.headSeqcNo == Constants.nStartNumber)
SMSCFrame.RecvArea.append("First receive time : " + Constants.formatDateTime() + " .\n");
// SMSCFrame.RecvArea.append("SMSC receive SMPP_DELIVER_RESP from " +
// PeerHost + ", Command status : [" + smpp.headCmdStatus + "], " +
// "Seq : [" + smpp.headSeqcNo + "] .\n\n");
if(smpp.headSeqcNo == Constants.nEndNumber && smpp.headSeqcNo > 0)
SMSCFrame.RecvArea.append("Last receive time : " + Constants.formatDateTime() + " .\n");
break;
case SmscConstants.SMPP_ENQUIRE_LINK :
if(Constants.DISPLAY_ACTIVE)
SMSCFrame.RecvArea.append("SMSC receive SMPP_ENQUIRE_LINK message from " +
myID + "\n\n");
smpp.headCmdStatus = 0;
smpp.headCmdID = SmscConstants.SMPP_ENQUIRE_LINK_RESP ;
send(smpp);
break;
case SmscConstants.SMPP_GENERIC_NAK :
SMSCFrame.RecvArea.append("SMSC receive SMPP_GENERIC_NAK from " + myID + "\n\n") ;
break;
default:
SMSCFrame.RecvArea.append("SMSC receive Unknown command message " + smpp.headCmdID +
" from " + myID + " .\n\n");
smpp.headCmdID = SmscConstants.SMPP_GENERIC_NAK;
smpp.headCmdStatus =0;
send(smpp);
break;
}
}
private boolean handleSubmit(SmscShortMsg sm) {
boolean bResp;
byte[] btContent;
String strText, strMsgID, strContent;
sm.headCmdID = SmscConstants.SMPP_SUBMIT_SM_RESP;
strMsgID = Integer.toHexString(sm.headSeqcNo);
sm.ackMsgID = strMsgID;
sm.headCmdStatus = 0;
recvSubmitNum ++;
if( recvSubmitNum % 200 == 1 )
SMSCFrame.RecvArea.append("Deliver No.:"+ recvSubmitNum +" time:"+System.currentTimeMillis() +"\n");
//SMSCFrame.SendArea.append("send SMPP_SUBMIT_SM_RESP :"+sm.headSeqcNo+"\n");
bResp = send(sm);
if(bResp) {
strText = sm.msgSourceAddress;
sm.msgSourceAddress = sm.msgDestAddress;
sm.msgDestAddress = strText;
strContent = sm.msgShortMsgText;
String time = sm.msgScheduleDeliveryTime;
if(strContent.length() > 20)
strContent = strContent.substring(0,20) ;
strContent = writeString(strContent);
if(strMsgID.length() >10)
strMsgID = strMsgID.substring(0,10);
strMsgID = writeString(strMsgID);
if(time.length() > 10)
time = time.substring(0,10);
time = writeString(time);
sm.msgShortMsgText = strMsgID + "000000" + time + time + "DELIVRD" + "000" + strContent;
//Log.debug(" strmsg===="+strmsg+"length==="+strmsg.length() ) ;
//sm.msgShortMsgText = strContent;
sm.msgEsmClass = (byte)(sm.msgEsmClass | 0x04);
sm.msgSmLength = (byte)sm.msgShortMsgText.length( );
sm.msgDataCoding = 0;
sm.headCmdID = SmscConstants.SMPP_DELIVER_SM;
sm.headCmdStatus = 0;
sm.headSeqcNo = Constants.getSequence();
String strDestAddress = PeerHost + Constants.Receiver;
// bResp = SMSCConnectionManager.instance().send(sm);
//SMSCFrame.SendArea.append("send SMPP_SUBMIT report: "+sm.headSeqcNo+"\n");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -