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

📄 cmpp2submit.java

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