cmppconnect.java

来自「短信系统SMS:支持普通短信、长短信和wap push短信的发送。」· Java 代码 · 共 171 行

JAVA
171
字号
package com.ekun.sms.cmpp2;

import java.io.*;

public class CmppConnect
{

  public CmppConnect(CmppSocket sock)
  {
    /*初始化*/
    SourceAddr = "";
    AuthenticatorSP = "";
    Version = 1;
    timestamp = "";

    this.sock = sock;
    SequenceId = 0;
    CommandID = 1;

    /*设置CMPP_Connect包长*/
    TotalLength = 39;

    /*分配CMPP_Connect包体*/
    bodybytes = new byte[27];

    /*设置包头*/
    headbytes = new byte[12];
    CmppCommon.BytesCopy(CmppCommon.IntToBytes4(TotalLength), headbytes, 0, 3,
                         0);
    CmppCommon.BytesCopy(CmppCommon.IntToBytes4(CommandID), headbytes, 0, 3, 4);
    CmppCommon.BytesCopy(CmppCommon.IntToBytes4(SequenceId), headbytes, 0, 3, 8);
  }

  /*名称:setcmppConnects
   * 功能:设置CMPP_Connect包项目
   * 输入参数:SourceAddr,AuthenticatorSP,Version,timestamp
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setcmppConnects(String SourceAddr, String SPpassword, int Version,
                              String timestamp)
  {

    byte[] bSourceAddr;
    if (SourceAddr.length() > 6)
    {
      bSourceAddr = new byte[6];
    }
    else
    {
      bSourceAddr = new byte[SourceAddr.length()];
    }

    int cur_pos = 0;
    bSourceAddr = SourceAddr.getBytes();
    CmppCommon.BytesCopy(bSourceAddr, bodybytes, 0, bSourceAddr.length - 1,
                         cur_pos);
    cur_pos += 6;

    byte bzero[] = new byte[9];

    byte bSPpassword[] = new byte[SPpassword.length()];
    bSPpassword = SPpassword.getBytes();

    byte btimestamp[] = timestamp.getBytes();

    byte bmd5[] = new byte[bSourceAddr.length + 9 + bSPpassword.length +
        btimestamp.length];

    int cur = 0;
    CmppCommon.BytesCopy(bSourceAddr, bmd5, 0, bSourceAddr.length - 1, cur);
    cur += bSourceAddr.length;
    CmppCommon.BytesCopy(bzero, bmd5, 0, bzero.length - 1, cur);
    cur += bzero.length;
    CmppCommon.BytesCopy(bSPpassword, bmd5, 0, bSPpassword.length - 1, cur);
    cur += bSPpassword.length;
    CmppCommon.BytesCopy(btimestamp, bmd5, 0, btimestamp.length - 1, cur);

    /*MD5加密*/
    MD5 md5 = new MD5();
    md5.Init();
    md5.Update(bmd5);
    bmd5 = md5.Final();
    CmppCommon.BytesCopy(bmd5, bodybytes, 0, bmd5.length - 1, cur_pos);
    cur_pos += bmd5.length;

    bodybytes[cur_pos] = (byte) Version;
    cur_pos++;

    int timest = Integer.parseInt(timestamp);
    byte tempbytes[] = new byte[4];
    tempbytes = CmppCommon.IntToBytes4(timest);
    CmppCommon.BytesCopy(tempbytes, bodybytes, 0, 3, cur_pos);
  }

  /*名称:sendcmppConnect
   * 功能:发送CMPP_Connect包
   * 输入参数:无
   *
   * 输出参数:无
   *
   * 返回值:>0:包序列号,-1:失败
   */
  public int sendcmppConnect()
  {
    int i = 0;

    try
    {
      sock.bout.write(headbytes);
      sock.bout.write(bodybytes);
      sock.bout.flush();
    }
    catch (IOException e)
    {
      System.out.println(e.toString());
      i = -5;
      return i;
    }
    catch (NullPointerException npe)
    {
      i = -5;
      return -5;
    }

    return i;
  }

  /*名称:getTotalLength
   * 功能:返回包总长度
   * 输入参数:
   *
   * 输出参数:无
   *
   * 返回值:包总长度
   */
  public int getTotalLength()
  {
    return TotalLength;
  }

  /*名称:setSequenceId
   * 功能:设置SequenceId项目
   * 输入参数:SequenceId
   *
   * 输出参数:无
   *
   * 返回值:无
   */
  public void setSequenceId(int SequenceId)
  {
    this.SequenceId = SequenceId;
    CmppCommon.BytesCopy(CmppCommon.IntToBytes4(SequenceId), headbytes, 0, 3, 8);
  }

  public byte bodybytes[]; /*包体*/
  public byte headbytes[]; /*包头*/

  String SourceAddr;
  String AuthenticatorSP;
  int Version;
  String timestamp;

  private int CommandID; //包类型
  private int SequenceId; //包序列号
  int TotalLength;
  CmppSocket sock; //socket链路
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?