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

📄 cmpp.java

📁 对于cmpp3.0 开发有一定的帮助,请大家下载下来进行研究.
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
      //打包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 + -