📄 cmpp3submit.java
字号:
package com.khan.sms.cmpp3;
import java.util.Vector;
import java.io.UnsupportedEncodingException;
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 Cmpp3Submit extends Cmpp3Data {
/*
Msg_Id 8 Unsigned Integer 信息标识。
Pk_total 1 Unsigned Integer 相同Msg_Id的信息总条数,从1开始。
Pk_number 1 Unsigned Integer 相同Msg_Id的信息序号,从1开始。
Registered_Delivery 1 Unsigned Integer 是否要求返回状态确认报告:
0:不需要;
1:需要。
Msg_level 1 Unsigned Integer 信息级别。
Service_Id 10 Octet String 业务标识,是数字、字母和符号的组合。
Fee_UserType 1 Unsigned Integer 计费用户类型字段:
0:对目的终端MSISDN计费;
1:对源终端MSISDN计费;
2:对SP计费;
3:表示本字段无效,对谁计费参见Fee_terminal_Id字段。
Fee_terminal_Id 32 Octet String 被计费用户的号码,当Fee_UserType为3时该值有效,当Fee_UserType为0、1、2时该值无意义。
Fee_terminal_type 1 Unsigned Integer 被计费用户的号码类型,0:真实号码;1:伪码。
TP_pId 1 Unsigned Integer GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.9。
TP_udhi 1 Unsigned Integer GSM协议类型。详细是解释请参考GSM03.40中的9.2.3.23,仅使用1位,右对齐。
Msg_Fmt 1 Unsigned Integer 信息格式:
0:ASCII串;
3:短信写卡操作;
4:二进制信息;
8:UCS2编码;
15:含GB汉字。。。。。。
Msg_src 6 Octet String 信息内容来源(SP_Id)。
FeeType 2 Octet String 资费类别:
01:对“计费用户号码”免费;
02:对“计费用户号码”按条计信息费;
03:对“计费用户号码”按包月收取信息费。
FeeCode 6 Octet String 资费代码(以分为单位)。
ValId_Time 17 Octet String 存活有效期,格式遵循SMPP3.3协议。
At_Time 17 Octet String 定时发送时间,格式遵循SMPP3.3协议。
Src_Id 21 Octet String 源号码。SP的服务代码或前缀为服务代码的长号码, 网关将该号码完整的填到SMPP协议Submit_SM消息相应的source_addr字段,该号码最终在用户手机上显示为短消息的主叫号码。
DestUsr_tl 1 Unsigned Integer 接收信息的用户数量(小于100个用户)。
Dest_terminal_Id 32*DestUsr_tl Octet String 接收短信的MSISDN号码。
Dest_terminal_type 1 Unsigned Integer 接收短信的用户的号码类型,0:真实号码;1:伪码。
Msg_Length 1 Unsigned Integer 信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节),取值大于或等于0。
Msg_Content Msg_length Octet String 信息内容。
LinkID 20 Octet String 点播业务使用的LinkID,非点播类业务的MT流程不使用该字段。
*/
/**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 被计费用户的号码类型,0:真实号码;1:伪码。*/
byte Fee_terminal_type = 0x00;
/**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 接收短信的用户的号码类型,0:真实号码;1:伪码。*/
byte Dest_terminal_type = 0x00;
/**1 Unsigned Integer 信息长度(Msg_Fmt值为0时:<160个字节;其它<=140个字节)*/
byte Msg_Length = 0x01;
/**Msg_length Octet String 信息内容*/
String Msg_Content = "";
/**8 Octet String 保留*/
byte[] LinkID = {0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00};
public Cmpp3Submit(byte Pk_total, byte Pk_number,
byte Registered_Delivery, byte Msg_level,
String Service_Id, byte Fee_UserType,
byte Fee_terminal_type, 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 Dest_terminal_type,
byte Msg_Length, String Msg_Content,
String LinkID) {
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.Fee_terminal_type = Fee_terminal_type;
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.Dest_terminal_type = Dest_terminal_type;
this.Msg_Length = Msg_Length;
this.Msg_Content = Msg_Content;
this.LinkID = LinkID.getBytes();
}
/**
* decodeCmpp
*
* @return Cmpp3Data
* @todo Implement this com.khan.sms.cmpp3.Cmpp3Data method
*/
public Cmpp3Data decodeCmpp() {
return this;
}
/**
* encodeCmpp
*
* @return byte[]
* @todo Implement this com.khan.sms.cmpp3.Cmpp3Data method
*/
public byte[] encodeCmpp() {
byte[] szTmp = new byte[4096];
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.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 += 32;
szTmp[ioffset++] = Fee_terminal_type;
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 += 32;
}
szTmp[ioffset++] = Dest_terminal_type;
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(LinkID, 0, szTmp, ioffset, LinkID.length);
ioffset += 20;
Data = new byte[ioffset];
System.arraycopy(szTmp, 0, Data, 0, Data.length);
byte[] tmp = null;
this.TotalLen = ioffset + 12;
this.CommandID = Cmpp3Command.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 "CMPP3_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)
+ ",Dest_terminal_type=" + Dest_terminal_type
+ ",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
+ ",Dest_terminal_type=" + Dest_terminal_type
+ ",Msg_Length=" + Msg_Length
+ ",Msg_Content=" + Msg_Content;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -