?? deliver.java
字號(hào):
package com.kelefa.cmpp;
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import org.apache.log4j.Logger;
public class Deliver implements java.io.Serializable
{
private static final Logger log = Logger.getLogger(Deliver.class);
/**
* 信息標(biāo)識(shí)
* 生成算法如下:
* 采用64位(8字節(jié))的整數(shù):
* (1) 時(shí)間(格式為MMDDHHMMSS,即月日時(shí)分秒):bit64~bit39,其中
* bit64~bit61:月份的二進(jìn)制表示;
* bit60~bit56:日的二進(jìn)制表示;
* bit55~bit51:小時(shí)的二進(jìn)制表示;
* bit50~bit45:分的二進(jìn)制表示;
* bit44~bit39:秒的二進(jìn)制表示;
* (2) 短信網(wǎng)關(guān)代碼:bit38~bit17,把短信網(wǎng)關(guān)的代碼轉(zhuǎn)換為整數(shù)填寫(xiě)到該字段中。
* (3) 序列號(hào):bit16~bit1,順序增加,步長(zhǎng)為1,循環(huán)使用。
* 各部分如不能填滿(mǎn),左補(bǔ)零,右對(duì)齊。
*/
byte[] msg_Id = new byte[8];
/**
* 目的號(hào)碼
* SP的服務(wù)代碼,一般4--6位,或者是前綴為服務(wù)代碼的長(zhǎng)號(hào)碼;該號(hào)碼是手機(jī)用戶(hù)短消息的被叫號(hào)碼。
*/
byte[] dest_Id = new byte[21];
/** 業(yè)務(wù)類(lèi)型,是數(shù)字、字母和符號(hào)的組合。 */
byte[] service_Id = new byte[10];
/** GSM協(xié)議類(lèi)型。詳細(xì)解釋請(qǐng)參考GSM03.40中的9.2.3.9 */
byte tp_pid;
/** GSM協(xié)議類(lèi)型。詳細(xì)解釋請(qǐng)參考GSM03.40中的9.2.3.9 */
byte tp_udhi;
/**
* 信息格式
* 0:ASCII串
* 3:短信寫(xiě)卡操作
* 4:二進(jìn)制信息
* 8:UCS2編碼
* 15:含GB漢字
*/
byte msg_Fmt;
/** 源終端MSISDN號(hào)碼(狀態(tài)報(bào)告時(shí)填為CMPP_SUBMIT消息的目的終端號(hào)碼) */
byte[] src_terminal_Id = new byte[21];
/**
* 是否為狀態(tài)報(bào)告
* 0:非狀態(tài)報(bào)告
* 1:狀態(tài)報(bào)告
*/
byte registered_Delivery;
/** 消息長(zhǎng)度 */
int msg_Length;
/** 消息內(nèi)容 */
byte[] msg_Content;
/** 保留項(xiàng) */
byte[] reserved = new byte[8];
public Deliver()
{
}
public void execute( DataInputStream in,DataOutputStream out, Header header )
throws IOException
{
log.debug("reading Deliver...");
in.read(msg_Id);
in.read(dest_Id);
log.debug("dest_Id="+new String(dest_Id));
in.read(service_Id);
log.debug("service_Id="+new String(service_Id));
tp_pid = in.readByte();
tp_udhi = in.readByte();
msg_Fmt = in.readByte();
log.debug("msg_Fmt="+msg_Fmt);
in.read(src_terminal_Id);
registered_Delivery = in.readByte();
byte tmpLen = in.readByte();
msg_Length = tmpLen;
if (msg_Length<0) msg_Length += 256;
log.debug("msg_Length="+msg_Length);
msg_Content = new byte[msg_Length];
in.read(msg_Content);
log.debug("msg_Content:" + getMsg_Content());
in.read(reserved);
// response
Header responseHeader = new Header();
responseHeader.pk_cmd = Const.CMPPE_DELIVER_RESP;
responseHeader.pk_len += 9;
responseHeader.pk_seq = header.pk_seq;
responseHeader.send(out);
out.write(msg_Id);
out.writeByte(0);
}
public String getMsg_Content()
{
try {
if ( msg_Fmt == 8 )
return new String( msg_Content, 0, msg_Length, "UnicodeBigUnmarked" );
else
return new String( msg_Content, 0, msg_Length, "gb2312" );
}
catch ( UnsupportedEncodingException ex ) {
ex.printStackTrace();
return "";
}
}
public String getTerminal_Id()
{
return new String( src_terminal_Id,0,16 );
}
public long getMsg_Id()
{
long v = 0;
for (int i = 0; i < 8; i++)
{
v <<= 1;
v += msg_Id[7-i];
}
return v ;
}
public String getDest_Id()
{
return new String( dest_Id,0,10 );
}
public String getService_Id()
{
return new String( service_Id );
}
public byte getMsg_Fmt()
{
return msg_Fmt;
}
public String getSrc_terminal_Id()
{
return new String( src_terminal_Id );
}
public byte getRegistered_Delivery()
{
return registered_Delivery;
}
}
?? 快捷鍵說(shuō)明
復(fù)制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號(hào)
Ctrl + =
減小字號(hào)
Ctrl + -