📄 cmpp2submit.java
字号:
package com.khan.sms.cmpp2;
import java.util.*;
import java.io.*;
import com.khan.sms.MsgID;
import com.khan.util.SocketCommon;
/**
* <p>Title: </p>
*
* <p>Description: </p>
*
* <p>Copyright: Copyright (c) 2006</p>
*
* <p>Company: </p>
*
* @author not attributable
* @version 1.0
*/
public class Cmpp2Submit extends Cmpp2Data {
/**8byte Unsigned Integer 信息标识,由SP侧短信网关本身产生,本处填空。*/
byte[] Msg_Id = {0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00};
/**1byte Unsigned Integer 相同Msg_Id的信息总条数,从1开始*/
byte Pk_total = 0x01;
/**1byte Unsigned Integer 相同Msg_Id的信息序号,从1开始*/
byte Pk_number = 0x01;
/**1byte Unsigned Integer 是否要求返回状态确认报告:
* 0:不需要
* 1:需要
* 2:产生SMC话单 (该类型短信仅供网关计费使用,不发送给目的终端)*/
byte Registered_Delivery = 0x00;
/**
* 1byte Unsigned Integer 信息级别*/
byte Msg_level = 0x00;
/**Octet String 业务类型,是数字、字母和符号的组合。*/
byte[] Service_Id = null;
/**
* 1byte Unsigned Integer 计费用户类型字段
* 0:对目的终端MSISDN计费;
* 1:对源终端MSISDN计费;
* 2:对SP计费;
* 3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。*/
byte Fee_UserType = 0x00;
/**Unsigned Integer 被计费用户的号码
* (如本字节填空,则表示本字段无效,
* 对谁计费参见Fee_UserType字段,
* 本字段与Fee_UserType字段互斥)*/
byte[] Fee_terminal_Id = null;
/**1 Unsigned Integer GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9*/
byte TP_pId = 0x00;
/**1 Unsigned Integer GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐*/
byte TP_udhi = 0x00;
/**Unsigned Integer 信息格式
* 0:ASCII串
* 3:短信写卡操作
* 4:二进制信息
* 8:UCS2编码
* 15:含GB汉字 。。。。。。 */
byte Msg_Fmt = 0x01;
/**6 Octet String 信息内容来源(SP_Id)*/
byte[] Msg_src = null;
/**2 Octet String 资费类别
* 01:对“计费用户号码”免费
* 02:对“计费用户号码”按条计信息费
* 03:对“计费用户号码”按包月收取信息费
* 04:对“计费用户号码”的信息费封顶
* 05:对“计费用户号码”的收费是由SP实现*/
byte[] FeeType = null;
/**6 Octet String 资费代码(以分为单位)*/
byte[] FeeCode = null;
/**17 Octet String 存活有效期,格式遵循SMPP3.3协议*/
byte[] ValId_Time = {0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00};
/**17 Octet String 定时发送时间,格式遵循SMPP3.3协议*/
byte[] At_Time = {0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,
0x00,0x00};
/**21 Octet String 源号码
* SP的服务代码或前缀为服务代码的长号码,
* 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,
* 该号码最终在用户手机上显示为短消息的主叫号码*/
byte[] Src_Id = null;
/**1 Unsigned Integer 接收信息的用户数量(小于100个用户)*/
byte DestUsr_tl = 0x01;
/**21*DestUsr_tl Octet String 接收短信的MSISDN号码*/
Vector Dest_terminal_Id = null;
/**1 Unsigned Integer 信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节)*/
byte Msg_Length = 0x01;
/**Msg_length Octet String 信息内容*/
String Msg_Content = "";
/**8 Octet String 保留*/
byte[] Reserve = {0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00};
/**
* 默认构造器
*/
public Cmpp2Submit(){}
/**
* 构造器
* @param Pk_total byte 消息条数
* @param Pk_number byte 消息序号
* @param Registered_Delivery byte 是否需要状态报告
* @param Msg_level byte 消息级别
* @param Service_Id String 业务代码
* @param Fee_UserType byte 计费用户类型字段
* @param Fee_terminal_Id String 计费号码
* @param TP_pId byte 见gsm字段 默认填0
* @param TP_udhi byte 见gsm字段 默认为0
* @param Msg_Fmt byte 消息编码格式
* @param Msg_src String 登录帐户名
* @param FeeType FeeType
* @param FeeCode String
* @param Src_Id String
* @param DestUsr_tl byte
* @param Dest_terminal_Id Vector
* @param Msg_Length byte
* @param Msg_Content String
*/
public Cmpp2Submit(byte Pk_total , byte Pk_number,
byte Registered_Delivery, byte Msg_level,
String Service_Id, byte Fee_UserType,
String Fee_terminal_Id, byte TP_pId,
byte TP_udhi, byte Msg_Fmt ,
String Msg_src, String FeeType,
String FeeCode, String Src_Id,
byte DestUsr_tl, Vector Dest_terminal_Id,
byte Msg_Length, String Msg_Content)
{
this.Pk_total = Pk_total;
this.Pk_number = Pk_number;
this.Registered_Delivery = Registered_Delivery;
this.Msg_level = Msg_level;
this.Service_Id = Service_Id.getBytes();
this.Fee_UserType = Fee_UserType;
this.Fee_terminal_Id = Fee_terminal_Id.getBytes();
this.TP_pId = TP_pId;
this.TP_udhi = TP_udhi;
this.Msg_Fmt = Msg_Fmt;
this.Msg_src = Msg_src.getBytes();
this.FeeType = FeeType.getBytes();
this.FeeCode = FeeCode.getBytes();
this.Src_Id = Src_Id.getBytes();
this.DestUsr_tl = DestUsr_tl;
this.Dest_terminal_Id = Dest_terminal_Id;
this.Msg_Length = Msg_Length;
this.Msg_Content = Msg_Content;
}
/**
* decodeCmpp
* @return Cmpp2Data
*/
public Cmpp2Data decodeCmpp() {
return this;
}
/**
* encodeCmpp
* @return byte[]
*/
public byte[] encodeCmpp() {
byte[] szTmp = new byte[4096];
SocketCommon.FillChar(szTmp, (byte)0x0);
int ioffset =0;
System.arraycopy(Msg_Id, 0, szTmp, ioffset, Msg_Id.length);
ioffset += 8;
szTmp[ioffset ++] = Pk_total;
szTmp[ioffset ++] = Pk_number;
szTmp[ioffset ++] = Registered_Delivery;
szTmp[ioffset ++] = Msg_level;
//System.err.println("ServiceID:"+new String(Service_Id)+" length:"+Service_Id.length +" ioffset:"+ioffset);
System.arraycopy(Service_Id, 0, szTmp, ioffset, Service_Id.length);
ioffset += 10;
szTmp[ioffset ++] = Fee_UserType;
System.arraycopy(Fee_terminal_Id, 0, szTmp, ioffset, Fee_terminal_Id.length);
ioffset += 21;
szTmp[ioffset ++] = TP_pId;
szTmp[ioffset ++] = TP_udhi;
szTmp[ioffset ++] = Msg_Fmt;
System.arraycopy(Msg_src, 0, szTmp, ioffset, Msg_src.length);
ioffset += 6;
System.arraycopy(FeeType, 0, szTmp, ioffset, FeeType.length);
ioffset += 2;
System.arraycopy(FeeCode, 0, szTmp, ioffset, FeeCode.length);
ioffset += 6;
System.arraycopy(ValId_Time, 0, szTmp, ioffset, ValId_Time.length);
ioffset += 17;
System.arraycopy(At_Time, 0, szTmp, ioffset, At_Time.length);
ioffset += 17;
System.arraycopy(Src_Id, 0, szTmp, ioffset, Src_Id.length);
ioffset += 21;
szTmp[ioffset ++] = DestUsr_tl;
for (int i = 0; i < Dest_terminal_Id.size(); i++) {
byte[] MobileNo = ((String) (Dest_terminal_Id.get(i))).getBytes();
System.arraycopy(MobileNo, 0, szTmp, ioffset, MobileNo.length);
ioffset += 21;
}
int t = ioffset;
szTmp[ioffset++] = Msg_Length;
//int t = ioffset;
try {
switch (Msg_Fmt) {
case 8: { //UCS2
byte[] Message = Msg_Content.getBytes("unicodebigunmarked");
szTmp[ioffset] = (byte) (Message.length);
System.arraycopy(Message, 0, szTmp, ioffset, Message.length);
ioffset += Message.length;
Msg_Length = (byte)Message.length;
szTmp[t] = Msg_Length;
}
break;
case 15: { //GB2312
byte[] Message = Msg_Content.getBytes("GB2312");
szTmp[ioffset] = (byte) (Message.length);
System.arraycopy(Message, 0, szTmp, ioffset, Message.length);
ioffset += Message.length;
Msg_Length = (byte)Message.length;
szTmp[t] = Msg_Length;
}
break;
default:
byte[] Message = Msg_Content.getBytes();
szTmp[ioffset] = (byte) (Message.length);
System.arraycopy(Message, 0, szTmp, ioffset, Message.length);
ioffset += Message.length;
Msg_Length = (byte)Message.length;
szTmp[t] = Msg_Length;
break;
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
System.arraycopy(Reserve, 0, szTmp, ioffset, Reserve.length);
ioffset += 8;
Data = new byte[ioffset];
System.arraycopy(szTmp,0, Data, 0, Data.length);
byte[] tmp = null;
this.TotalLen = ioffset + 12;
this.CommandID = Cmpp2Command.CMPP_SUBMIT;
byte[] szCmppData = new byte[TotalLen];
ioffset = 0;
tmp = SocketCommon.toByteArray( TotalLen);
System.arraycopy(tmp, 0, szCmppData, ioffset, tmp.length);
ioffset += tmp.length;
tmp = SocketCommon.toByteArray(CommandID);
System.arraycopy(tmp, 0, szCmppData, ioffset, tmp.length);
ioffset += tmp.length;
tmp = SocketCommon.toByteArray(SeqID);
System.arraycopy(tmp, 0, szCmppData, ioffset, tmp.length);
ioffset += tmp.length;
tmp = Data;
System.arraycopy(tmp, 0, szCmppData, ioffset, tmp.length);
ioffset += tmp.length;
return szCmppData;
}
public String toString() {
return "CMPP2_SUBMIT:seqID=" + getSeqID()
+",Pk_total= " + Pk_total
+",Pk_number=" + Pk_number
+",Registered_Delivery=" + Registered_Delivery
+",Msg_level=" + Msg_level
+",Service_Id=" + new String(Service_Id)
+",Fee_UserType=" + Fee_UserType
+",Fee_terminal_Id=" + new String(Fee_terminal_Id)
+",TP_pId=" + TP_pId
+",TP_udhi=" + TP_udhi
+",Msg_Fmt=" + Msg_Fmt
+",Msg_src=" + new String(Msg_src)
+",FeeType=" + new String(FeeType)
+",FeeCode=" + new String(FeeCode)
+",Src_Id=" + new String(Src_Id)
+",DestUsr_tl=" + DestUsr_tl
+",Dest_terminal_Id=" + Dest_terminal_Id
+",Msg_Length=" + Msg_Length
+",Msg_Content=" + Msg_Content;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -