📄 cmppsubmit.java
字号:
package com.ekun.sms.cmpp2;
import java.io.*;
//import cmppapi.*;
public class CmppSubmit
{
/*名称:CmppSubmit
* 功能:组装submit包,但不包括Reserve项目
* 输入参数:无
*
* 输出参数:无
*
* 返回值:无
*/
public CmppSubmit(CmppSocket sock)
{
byte temp_chn[] = null;
bodybytes = new byte[307]; //包体
headbytes = new byte[12]; //包头
pos = 299; //指向Reserve项目的位置
CommandID = 4;
TotalLength = 307 + 12; //包大小(假设短消息的长度为160)
this.sock = sock;
//conn.seq ++;
SequenceId = 0;
//MsgId = 1;
PkTotal = 0;
PkNumber = 0;
RegisteredDelivery = 1;
MsgLevel = 1;
ServiceId = "";
FeeUserType = 1;
feeterminalid = "";
tppid = 0;
tpudhi = 0;
MsgFmt = 8;
MsgSrc = "";
FeeType = "";
FeeCode = "";
ValidTime = "";
AtTime = "";
SrcTerminalId = "";
DestUsrTl = 1;
DestTerminalId = "";
MsgLength = 160;
MsgContent = new byte[160];
Reverse = "";
/*设置包头*/
CmppCommon.BytesCopy(CmppCommon.IntToBytes4(TotalLength), headbytes, 0, 3,
0);
CmppCommon.BytesCopy(CmppCommon.IntToBytes4(CommandID), headbytes, 0, 3, 4);
CmppCommon.BytesCopy(CmppCommon.IntToBytes4(SequenceId), headbytes, 0, 3, 8);
int cur_pos = 0; //位置指针
/*设置包体*/
MsgId = new byte[8];
CmppCommon.BytesCopy(MsgId, bodybytes, 0, 7, cur_pos);
cur_pos += 8;
bodybytes[cur_pos] = (byte) PkTotal;
cur_pos++;
bodybytes[cur_pos] = (byte) PkNumber;
cur_pos++;
bodybytes[cur_pos] = (byte) RegisteredDelivery;
cur_pos++;
bodybytes[cur_pos] = (byte) MsgLevel;
cur_pos++;
byte tempbytes[] = new byte[10];
ServiceId.getBytes(0, ServiceId.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 9, cur_pos);
cur_pos += 10;
bodybytes[cur_pos] = (byte) FeeUserType;
cur_pos++;
tempbytes = new byte[21];
feeterminalid.getBytes(0, feeterminalid.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 20, cur_pos);
cur_pos += 21;
bodybytes[cur_pos] = (byte) tppid;
cur_pos++;
bodybytes[cur_pos] = (byte) tpudhi;
cur_pos++;
bodybytes[cur_pos] = (byte) MsgFmt;
cur_pos++;
tempbytes = new byte[6];
MsgSrc.getBytes(0, MsgSrc.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 5, cur_pos);
cur_pos += 6;
tempbytes = new byte[2];
FeeType.getBytes(0, FeeType.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 1, cur_pos);
cur_pos += 2;
tempbytes = new byte[6];
FeeCode.getBytes(0, FeeCode.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 5, cur_pos);
cur_pos += 6;
tempbytes = new byte[17];
ValidTime.getBytes(0, ValidTime.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 16, cur_pos);
cur_pos += 17;
tempbytes = new byte[17];
AtTime.getBytes(0, AtTime.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 16, cur_pos);
cur_pos += 17;
tempbytes = new byte[21];
SrcTerminalId.getBytes(0, SrcTerminalId.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 20, cur_pos);
cur_pos += 21;
bodybytes[cur_pos] = (byte) DestUsrTl;
cur_pos++;
int len = 21 * DestUsrTl;
tempbytes = new byte[len];
DestTerminalId.getBytes(0, DestTerminalId.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, len - 1, cur_pos);
cur_pos += len;
bodybytes[cur_pos] = (byte) MsgLength;
cur_pos++;
CmppCommon.BytesCopy(MsgContent, bodybytes, 0, MsgLength - 1, cur_pos);
cur_pos += MsgLength;
}
/*名称:sendCmppSubmit
* 功能:发送submit包
* 输入参数:无
*
* 输出参数:无
*
* 返回值:0:成功,-1:失败
*/
public int sendCmppSubmit()
{
try
{
sock.bout.write(headbytes);
byte tmp[] = new byte[TotalLength - 12];
CmppCommon.BytesCopy(bodybytes, tmp, 0, TotalLength - 13, 0);
sock.bout.write(tmp);
sock.bout.flush();
return 0;
}
catch (IOException e)
{
return -1;
}
catch (NullPointerException npe)
{
return -2;
}
}
/*名称:setSequenceId
* 功能:设置SequenceId项目
* 输入参数:SequenceId
*
* 输出参数:无
*
* 返回值:无
*/
public void setSequenceId(int SequenceId)
{
this.SequenceId = SequenceId;
CmppCommon.BytesCopy(CmppCommon.IntToBytes4(SequenceId), headbytes, 0, 3, 8);
}
/*名称:setMsgId
* 功能:设置Msg_id项目
* 输入参数:MsgId
*
* 输出参数:无
*
* 返回值:无
*/
public void setMsgId(byte[] MsgId)
{
this.MsgId = MsgId;
CmppCommon.BytesCopy(MsgId, bodybytes, 0, 7, 0);
}
/*名称:setPkTotal
* 功能:设置Pk_tatal项目
* 输入参数:PkTotal
*
* 输出参数:无
*
* 返回值:无
*/
public void setPkTotal(int PkTotal)
{
this.PkTotal = PkTotal;
bodybytes[8] = (byte) PkTotal;
}
/*名称:setPkNumber
* 功能:设置Pk_number项目
* 输入参数:PkNumber
*
* 输出参数:无
*
* 返回值:无
*/
public void setPkNumber(int PkNumber)
{
this.PkNumber = PkNumber;
bodybytes[9] = (byte) PkNumber;
}
/*名称:setRegisteredDelivery
* 功能:设置Registered_Delivery项目
* 输入参数:RegisteredDelivery
*
* 输出参数:无
*
* 返回值:无
*/
public void setRegisteredDelivery(int RegisteredDelivery)
{
this.RegisteredDelivery = RegisteredDelivery;
bodybytes[10] = (byte) RegisteredDelivery;
}
/*名称:setMsgLevel
* 功能:设置Msg_Level项目
* 输入参数:MsgLevel
*
* 输出参数:无
*
* 返回值:无
*/
public void setMsgLevel(int MsgLevel)
{
this.MsgLevel = MsgLevel;
bodybytes[11] = (byte) MsgLevel;
}
/*名称:setServiceId
* 功能:设置Service_Id项目
* 输入参数:ServiceId
*
* 输出参数:无
*
* 返回值:无
*/
public void setServiceId(String ServiceId)
{
this.ServiceId = ServiceId;
byte tempbytes[] = new byte[10];
ServiceId.getBytes(0, ServiceId.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 9, 12);
}
/*名称:setFeeUserType
* 功能:设置FeeUserType项目
* 输入参数:FeeUserType
*
* 输出参数:无
*
* 返回值:无
*/
public void setFeeUserType(int FeeUserType)
{
this.FeeUserType = FeeUserType;
bodybytes[22] = (byte) FeeUserType;
}
/*名称:setFeeterminalid
* 功能:设置fee_terminalid项目
* 输入参数:feeterminalid
*
* 输出参数:无
*
* 返回值:无
*/
public void setFeeterminalid(String feeterminalid)
{
this.feeterminalid = feeterminalid;
byte tempbytes[] = new byte[21];
feeterminalid.getBytes(0, feeterminalid.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 20, 23);
}
/*名称:setTppid
* 功能:设置tp_pid项目
* 输入参数:tppid
*
* 输出参数:无
*
* 返回值:无
*/
public void setTppid(int tppid)
{
this.tppid = tppid;
bodybytes[44] = (byte) tppid;
}
/*名称:setTpudhi
* 功能:设置tp_pid项目
* 输入参数:tppid
*
* 输出参数:无
*
* 返回值:无
*/
public void setTpudhi(int tpudhi)
{
this.tpudhi = tpudhi;
bodybytes[45] = (byte) tpudhi;
}
/*名称:setTpudhi
* 功能:设置tp_pid项目
* 输入参数:tppid
*
* 输出参数:无
*
* 返回值:无
*/
public void setMsgFmt(int MsgFmt)
{
this.MsgFmt = MsgFmt;
bodybytes[46] = (byte) MsgFmt;
}
/*名称:setMsgSrc
* 功能:设置Msg_Src项目
* 输入参数:MsgSrc
*
* 输出参数:无
*
* 返回值:无
*/
public void setMsgSrc(String MsgSrc)
{
this.MsgSrc = MsgSrc;
byte tempbytes[] = new byte[6];
MsgSrc.getBytes(0, MsgSrc.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 5, 47);
}
/*名称:setFeeType
* 功能:设置Fee_Type项目
* 输入参数:FeeType
*
* 输出参数:无
*
* 返回值:无
*/
public void setFeeType(String FeeType)
{
this.FeeType = FeeType;
byte tempbytes[] = new byte[2];
FeeType.getBytes(0, FeeType.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 1, 53);
}
/*名称:setFeeCode
* 功能:设置Fee_Code项目
* 输入参数:FeeCode
*
* 输出参数:无
*
* 返回值:无
*/
public void setFeeCode(String FeeCode)
{
this.FeeCode = FeeCode;
byte tempbytes[] = new byte[6];
FeeCode.getBytes(0, FeeCode.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 5, 55);
}
/*名称:setValidTime
* 功能:设置Valid_Time项目
* 输入参数:ValidTime
*
* 输出参数:无
*
* 返回值:无
*/
public void setValidTime(String ValidTime)
{
this.ValidTime = ValidTime;
byte tempbytes[] = new byte[17];
ValidTime.getBytes(0, ValidTime.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 16, 61);
}
/*名称:setAtTime
* 功能:设置At_Time项目
* 输入参数:AtTime
*
* 输出参数:无
*
* 返回值:无
*/
public void setAtTime(String AtTime)
{
this.AtTime = AtTime;
byte tempbytes[] = new byte[17];
AtTime.getBytes(0, AtTime.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 16, 78);
}
/*名称:setAtTime
* 功能:设置At_Time项目
* 输入参数:AtTime
*
* 输出参数:无
*
* 返回值:无
*/
public void setSrcTerminalId(String SrcTerminalId)
{
this.SrcTerminalId = SrcTerminalId;
byte tempbytes[] = new byte[21];
SrcTerminalId.getBytes(0, SrcTerminalId.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 20, 95);
}
/*名称:setRequiredItems
* 功能:设置Msg_Fmt,Src_TerminalId,Dest_Terminal_Id,Msg_Length,Msg_Content必须项目
* 输入参数:MsgFmt,SrcTerminalId,DestTerminalId,MsgLength,MsgContent
*
* 输出参数:无
*
* 返回值:无
*/
public void setRequiredItems(String DestTerminalId, int MsgLength,
byte[] MsgContent)
{
byte temp_chn[] = null;
byte tempbytes[] = null;
this.MsgContent = MsgContent;
this.MsgLength = MsgContent.length;
this.DestTerminalId = DestTerminalId;
byte tmp_con[] = new byte[MsgContent.length];
for (int i = 0; i < MsgContent.length; i++)
{
tmp_con[i] = MsgContent[i];
}
TotalLength = 147 + MsgLength + 12; //计算实际包大小
/*设置包头实际包大小*/
CmppCommon.BytesCopy(CmppCommon.IntToBytes4(TotalLength), headbytes, 0, 3,
0);
/*设置实际包体*/
tempbytes = new byte[21];
DestTerminalId.getBytes(0, DestTerminalId.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 20, 117);
bodybytes[138] = (byte) MsgLength;
CmppCommon.BytesCopy(tmp_con, bodybytes, 0, MsgLength - 1, 139);
tempbytes = new byte[8];
Reverse.getBytes(0, Reverse.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 7, 139 + MsgLength);
pos = 139 + MsgLength;
}
/*名称:setReverse
* 功能:设置Reverse项目
* 输入参数:Reverse
*
* 输出参数:无
*
* 返回值:无
*/
public void setReverse(String Reverse)
{
this.Reverse = Reverse;
int cur_pos = pos;
byte tempbytes[] = new byte[8];
Reverse.getBytes(0, Reverse.length(), tempbytes, 0);
CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 7, cur_pos);
cur_pos += 8;
}
/*名称:getTotalLength
* 功能:返回包总长度
* 输入参数:
*
* 输出参数:无
*
* 返回值:包总长度
*/
public int getTotalLength()
{
return TotalLength;
}
byte[] MsgId;
int PkTotal;
int PkNumber;
int RegisteredDelivery;
int MsgLevel;
String ServiceId;
int FeeUserType;
String feeterminalid;
int tppid;
int tpudhi;
int MsgFmt;
String MsgSrc;
String FeeType;
String FeeCode;
String ValidTime;
String AtTime;
String SrcTerminalId;
int DestUsrTl = 1;
String DestTerminalId;
int MsgLength;
byte[] MsgContent;
String Reverse;
private int TotalLength; //包总长
private int CommandID; //包类型
private int SequenceId; //包序列号
public byte bodybytes[]; //包体
public byte headbytes[]; //包头
CmppSocket sock; //socket链路
int pos = 299; //包体指向Reverse的位置
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -