📄 cmpp.java
字号:
//打包MT消息报头
packHead(dataOutStream);
//返回消息的字节流
dataPack = byteArrayOutStream.toByteArray();
return this.dataPack;
}catch(Exception e){
e.printStackTrace();
System.out.println("[CMPP] makeActiveMsgPack.pack() error : "+e.getMessage());
return null;
}
}
/**取得CMPP CMPP_ACTIVE_TEST_RESP的消息包
* 7.4.7.1 CMPP_ACTIVE_TEST_RESP定义(SP -> ISMG或ISMG->SP)
**/
private byte[] makeActiveRespMsgPack(){
ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream();
DataOutputStream dataOutStream = new DataOutputStream(byteArrayOutStream);
try{
//MT消息长度
this.Total_Length = 12 + 1;
//打包MT消息报头
packHead(dataOutStream);
//打包消息体
dataOutStream.writeByte(ActiveReserved);
//返回消息的字节流
dataPack = byteArrayOutStream.toByteArray();
return this.dataPack;
}catch(Exception e){
e.printStackTrace();
System.out.println("[CMPP] makeActiveRespMsgPack.pack() error : "+e.getMessage());
return null;
}
}
/**取得CMPP CMPP_CONNECT的消息包
* 7.4.1.1 CMPP_CONNECT消息定义(SP->ISMG)
**/
private byte[] makeConnectMsgPack(){
ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream();
DataOutputStream dataOutStream = new DataOutputStream(byteArrayOutStream);
try{
//MT消息长度
this.Total_Length = 12 + 27;
this.Source_Addr = CMPParameter.SP_Id;
String strTimestamp = PublicFunction.getTimeStamp();
this.Timestamp = Integer.parseInt(strTimestamp);
this.AuthenticatorSource = Source_Addr +"\0\0\0\0\0\0\0\0\0"+CMPParameter.SP_Pwd+strTimestamp;
MD5 md5 = new MD5();
this.AuthenticatorSource = md5.encrypt(this.AuthenticatorSource);
//打包MT消息报头
packHead(dataOutStream);
//打包消息体
writeString(dataOutStream,Source_Addr,6); //写入源地址
writeString(dataOutStream,AuthenticatorSource,16); //写入用于鉴别源地址的数据
dataOutStream.writeByte(Version); //写入双方协商的版本号
dataOutStream.writeInt(Timestamp); //写入时间戳的明文
//返回消息的字节流
dataPack = byteArrayOutStream.toByteArray();
return this.dataPack;
}catch(Exception e){
e.printStackTrace();
System.out.println("[CMPP] makeConnectMsgPack.pack() error : "+e.getMessage());
return null;
}
}
/**取得CMPP CMPP_CONNECT_RESP的消息包
* 7.4.1.2 CMPP_CONNECT_RESP消息定义(ISMG -> SP)
**/
private byte[] makeConnectRespMsgPack(){
ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream();
DataOutputStream dataOutStream = new DataOutputStream(byteArrayOutStream);
try{
//MT消息长度
this.Total_Length = 12 + 27;
//打包MT消息报头
packHead(dataOutStream);
//打包消息体
dataOutStream.writeByte(Status); //写入连接状态
writeString(dataOutStream,AuthenticatorISMG,16); //写入用于鉴别源地址的数据
dataOutStream.writeByte(Version); //写入双方协商的版本号
//返回消息的字节流
dataPack = byteArrayOutStream.toByteArray();
return this.dataPack;
}catch(Exception e){
e.printStackTrace();
System.out.println("[CMPP] makeConnectRespMsgPack.pack() error : "+e.getMessage());
return null;
}
}
/**取得CMPP CMPP_CONNECT_RESP的消息包
* 7.4.1.2 CMPP_CONNECT_RESP消息定义(ISMG -> SP)
**/
private byte[] makeDeliverRespMsgPack(){
ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream();
DataOutputStream dataOutStream = new DataOutputStream(byteArrayOutStream);
try{
//MT消息长度
if(Version == 48) this.Total_Length = 12 + 12;
if(Version == 32) this.Total_Length = 12 + 9;
//打包MT消息报头
packHead(dataOutStream);
//打包消息体
dataOutStream.writeLong(this.Msg_Id); //写入信息标识
if(Version == 48) dataOutStream.writeInt(this.Result); //写入结果
if(Version == 32) dataOutStream.writeByte(this.Result); //写入结果
//返回消息的字节流
dataPack = byteArrayOutStream.toByteArray();
return this.dataPack;
}catch(Exception e){
e.printStackTrace();
System.out.println("[CMPP]makeDeliverRespMsgPack.pack() error : "+e.getMessage());
return null;
}
}
/** 打包CMPP_SUBMIT 消息
* 8.4.3.1 CMPP_SUBMIT消息定义(SP->ISMG)
**/
private byte[] makeSubmitMsgPack(){
ByteArrayOutputStream byteArrayOutStream = new ByteArrayOutputStream();
DataOutputStream dataOutStream = new DataOutputStream(byteArrayOutStream);
try{
//MT消息长度
String str = Msg_Content;
int i = 0;
// if(this.Msg_Fmt == 15){
// i = new String(str.getBytes("gb2312")).getBytes().length;
// while(i>126){
// str = str.substring(0,str.length() -1);
// i = new String(str.getBytes("gb2312")).getBytes().length;
// }
// Msg_Content = new String(str.getBytes("gb2312"));
// }
// else
// if(this.Msg_Fmt == 24){
// i = new String(str.getBytes("UnicodeBigUnmarked")).getBytes().length;
// while(i>126){
// str = str.substring(0,str.length() -1);
// i = new String(str.getBytes("UnicodeBigUnmarked")).getBytes().length;
// }
// Msg_Content = new String(str.getBytes("UnicodeBigUnmarked"));
// }
//2006-10-23修改,增加wap push功能
if(Msg_Fmt ==4 || Msg_Fmt ==8 ){
WapMsg pt = new WapMsg();
String url = "202.103.96.111";
String subject = "您好啊啊啊啊啊啊";
String pushMsg = pt.getSMSPush(Msg_Content);
Msg_Content = pushMsg;
TP_udhi=1;
TP_pid =0;
}
else
if(this.Msg_Fmt == 15){
i = new String(str.getBytes("gb2312"),-4).getBytes().length;
while(i>126){
str = str.substring(0,str.length() -1);
i = new String(str.getBytes("gb2312"),-4).getBytes().length;
}
Msg_Content = new String(str.getBytes("gb2312"), -4);
}
else
if(this.Msg_Fmt == 24){
i = new String(str.getBytes("UnicodeBigUnmarked"),-4).getBytes().length;
while(i>126){
str = str.substring(0,str.length() -1);
i = new String(str.getBytes("UnicodeBigUnmarked"),-4).getBytes().length;
}
Msg_Content = new String(str.getBytes("UnicodeBigUnmarked"), -4);
}
//Msg_Content.getBytes().length;
int iLength = 0;
if(Msg_Fmt == 4) {
iLength = Msg_Content.getBytes().length / 2;
}
else{
iLength = Msg_Content.getBytes().length ;
}
if(Version == 48) this.Total_Length = 12 + 183 + iLength;
if(Version == 32) this.Total_Length = 12 + 147 + iLength;
this.Sequence_Id = (int)Msg_Id;
//打包MT消息报头
packHead(dataOutStream);
//打包消息体
Debug.outDebug("Msg_Id = " + Msg_Id + ",this.Total_Length ="+this.Total_Length
+" MsgLength:"+iLength + " SPID:"+ CMPParameter.SP_Id + "Fee_UserType:"
+Fee_UserType + " Service_Id:"+Service_Id+" Fee_terminal_type:"+Fee_terminal_type
+" Fee_terminal_Id:"+Fee_terminal_Id +" FeeType:"+FeeType+ " FeeCode:"+FeeCode
+" Dest_terminal_Id:"+Dest_terminal_Id + " Dest_terminal_type:"+Dest_terminal_type);
dataOutStream.writeLong(Msg_Id);
dataOutStream.writeByte(Pk_total);
dataOutStream.writeByte(Pk_number);
dataOutStream.writeByte(Registered_Delivery);
dataOutStream.writeByte(Msg_level);
writeString(dataOutStream,Service_Id,10);
dataOutStream.writeByte(Fee_UserType);
if(Version == 48) {
writeString(dataOutStream, Fee_terminal_Id, 32);
dataOutStream.writeByte(Fee_terminal_type);
}
else
if(Version == 32) writeString(dataOutStream,Fee_terminal_Id,21);
dataOutStream.writeByte(TP_pid);
dataOutStream.writeByte(TP_udhi);
dataOutStream.writeByte(Msg_Fmt);
writeString(dataOutStream,CMPParameter.SP_Id,6);
writeString(dataOutStream,FeeType,2);
writeString(dataOutStream,FeeCode,6);
writeString(dataOutStream,ValId_Time,17);
writeString(dataOutStream,At_Time,17);
writeString(dataOutStream,Src_terminal_Id,21);
dataOutStream.writeByte(DestUsr_tl);
if(Version == 48) {
writeString(dataOutStream, Dest_terminal_Id, 32);
dataOutStream.writeByte(Dest_terminal_type);
}
else
if(Version == 32) {
writeString(dataOutStream, Dest_terminal_Id, 21);
}
if(this.Msg_Fmt ==4 ){
dataOutStream.writeByte(Msg_Content.length()/2);
for (int g = 0; g < Msg_Content.length() / 2; g++) {
//System.out.print(Integer.parseInt(Msg_Content.substring(g * 2, g * 2 + 2), 16) + " ");
dataOutStream.write(Integer.parseInt(Msg_Content.substring(g * 2, g * 2 + 2), 16));
}
}
else{
dataOutStream.writeByte(iLength);
writeString(dataOutStream,Msg_Content,iLength);
}
if(Version == 48) writeString(dataOutStream,LinkID,20); //写入结果
if(Version == 32) writeString(dataOutStream,Reserved,8);
//返回消息的字节流
dataPack = byteArrayOutStream.toByteArray();
return this.dataPack;
}catch(Exception e){
e.printStackTrace();
System.out.println("[CMPP]makeSubmitMsgPack.pack() error : "+e.getMessage());
return null;
}
}
/**
* 打包消息头
* @param dataOutStream 由调用者传送来的数据输出流
*/
private void packHead( DataOutputStream dataOutStream ) throws Exception
{
try {
dataOutStream.writeInt(Total_Length); //写入包长度
dataOutStream.writeInt(Command_Id); //写入命令或响应类型
dataOutStream.writeInt(Sequence_Id); //写入消息流水号
} catch(IOException e) {
System.out.println("[CMPP] CMPP.packHead() thrown IOException"+e);
throw e;
}
}
/**
* 解吸接受到的数据包,转换成CMPP MSG
* @param recvPack
* @return
*/
public void parsePack(byte[] recvPack) throws Exception{
ByteArrayInputStream byteStream = new ByteArrayInputStream(recvPack);
DataInputStream dataInStream = new DataInputStream(byteStream);
//读取消息头
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -