⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 cmpp3submit.java

📁 java支持的短信平台
💻 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 + -