⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 smscconnection.java

📁 本人为友邦公司做的模拟网关源代码
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -