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

📄 cmppapis.java

📁 短信系统SMS:支持普通短信、长短信和wap push短信的发送。
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
      return -2;
    }
    CmppActiveTestRep activeTestRep = new CmppActiveTestRep(sock);
    activeTestRep.setSequenceId(precActiveRep.nSeqId);
    activeTestRep.setSuccessId(precActiveRep.ucSuccId);
    int rescode = activeTestRep.sendcmppActivetestRep();

    return rescode;
  }

  public int nCMPP_getPacket(CmppPacket $usPacket)
  {
    int i = -1;
    if ($usPacket == null)
    {
      return -1;
    }
    int rescode = $usPacket.readPacket();
    if (rescode < 0)
    {
      return rescode;
    }
    i = $usPacket.getCommandID();
    return i;
  }

  public int nCMPP_ParseDeliver(CmppPacket usPkgRecv, RecCDeliver precDeliver,
                                RecCDeliverRcpt precReceipt)
  {
    int i = -1;

    if ( (usPkgRecv == null) || (precDeliver == null) || (precReceipt == null))
    {
      return i;
    }

    CmppDeliver deliver = new CmppDeliver(usPkgRecv.getPacketBody(),
                                          usPkgRecv.getPacketBody().length);
    int isReceipt = deliver.getRegisteredDelivery();

    if (isReceipt == 0)
    {
      precDeliver.nSeqId = usPkgRecv.getSequenceId();
      precDeliver.usMsgId = deliver.getMsgId();
      precDeliver.sDstAddr = deliver.getDestnationId();
      precDeliver.sServiceId = deliver.getServiceId();
      precDeliver.ucTpPid = deliver.getTPpid();
      precDeliver.ucTpUdhi = deliver.getTPudhi();
      precDeliver.ucMsgFmt = deliver.getMsgFmt();
      precDeliver.sSrcAddr = BuffMemoUtil.removeMobilePrefix86(deliver.getSrcTerminalId());
      precDeliver.ucRegister = isReceipt;
      precDeliver.ucMsgLen = deliver.getMsgLength();
      precDeliver.usMsgContent = deliver.getMsgContent();
      //处理长短信
      StringBuffer sbLongSMSPrefix = new StringBuffer(10);
      int nOffset = 0;
      if (precDeliver.ucTpUdhi == 1)
      {
        nOffset = precDeliver.usMsgContent[0] + 1;
        try
        {
          sbLongSMSPrefix.append("(").append(precDeliver.usMsgContent[nOffset - 2])
              .append("/").append(precDeliver.usMsgContent[nOffset -1]).append(")");
        }
        catch (Exception ex)
        {
          ex.printStackTrace();
        }
      }
      //处理编码问题!
      if (precDeliver.ucMsgFmt == 8)
      {
        try
        {
          precDeliver.sMsgContent = new String(precDeliver.usMsgContent,
                                               nOffset, precDeliver.ucMsgLen- nOffset,
                                               "UnicodeBigUnmarked");
        }
        catch (Exception e)
        {
          e.printStackTrace();
        }
      }
      else
      {
        precDeliver.sMsgContent = new String(precDeliver.usMsgContent, nOffset,
                                             precDeliver.ucMsgLen- nOffset);
      }
      precDeliver.sMsgContent = precDeliver.sMsgContent + sbLongSMSPrefix.toString();
      precDeliver.usReserve = deliver.getReverse();
    }

    if (isReceipt == 1)
    {
      //System.out.println("&&&&&&&&&&usPkgRecv.getSequenceId():"+usPkgRecv.getSequenceId());
      precReceipt.nSeqId = usPkgRecv.getSequenceId();

      //System.out.println("&&&&&&&&&&deliver.getReceiptMsgId():"+deliver.getReceiptMsgId());
      precReceipt.usMsgId = deliver.getReceiptMsgId();

      //System.out.println("&&&&&&&&&&deliver.getReceiptStat():"+deliver.getReceiptStat());
      precReceipt.sStat = deliver.getReceiptStat();

      //System.out.println("&&&&&&&&&&deliver.getReceiptSubmitTime():"+deliver.getReceiptSubmitTime());
      precReceipt.sSubmitTime = deliver.getReceiptSubmitTime();

      //System.out.println("&&&&&&&&&&deliver.getReceiptDoneTime():"+deliver.getReceiptDoneTime());
      precReceipt.sDoneTime = deliver.getReceiptDoneTime();

      //System.out.println("&&&&&&&&&&deliver.getReceiptDestTerminalId():"+deliver.getReceiptDestTerminalId());
      precReceipt.sDstAddr = deliver.getReceiptDestTerminalId();

      //System.out.println("&&&&&&&&&&deliver.getReceiptSMSCSequence():"+deliver.getReceiptSMSCSequence());
      precReceipt.nSmscSeqId = deliver.getReceiptSMSCSequence();
    }
    return isReceipt;
  }

  public int nCMPP_ParseSubmitRep(CmppPacket usPkgRecv,
                                  RecCSubmitRep precSubmitRep)
  {
    int i = -1;
    if ( (usPkgRecv == null) || (precSubmitRep == null))
    {
      return i;
    }
    i = usPkgRecv.getSequenceId();
    CmppSubmitRep subRep = new CmppSubmitRep(usPkgRecv.getPacketBody(),
                                             usPkgRecv.getPacketBody().length);
    precSubmitRep.nSeqId = i;
    precSubmitRep.usMsgId = subRep.getMsgId();
    precSubmitRep.ucResult = subRep.getResult();
    return i;
  }

  public int nCMPP_ParseActiveRep(CmppPacket usPkgRecv,
                                  RecCActiveTestRep precActiveRep)
  {
    int i = -1;

    if ( (usPkgRecv == null) || (precActiveRep == null))
    {
      return i;
    }

    i = usPkgRecv.getSequenceId();
    CmppActiveTestRep atestRep = new CmppActiveTestRep(usPkgRecv.getPacketBody(),
        usPkgRecv.getPacketBody().length);
    precActiveRep.nSeqId = i;
    precActiveRep.ucSuccId = atestRep.getSuccessId();
    return i;
  }

  public int nCMPP_ParseActive(CmppPacket usPkgRecv, RecCActiveTest precActive)
  {
    int i = -1;

    if ( (usPkgRecv == null) || (precActive == null))
    {
      return i;
    }

    i = usPkgRecv.getSequenceId();
    precActive.nSeqId = i;

    return i;
  }

  public int nCMPP_ParseTerminate(CmppPacket usPkgRecv)
  {
    int i = -1;

    if (usPkgRecv == null)
    {
      return i;
    }

    i = usPkgRecv.getSequenceId();

    return i;
  }

  public int nCMPP_ReplyTerminate(RecCTerminateRep precPkg)
  {
    int i = -1;

    if (precPkg == null)
    {
      return i;
    }
    CmppTerminateRep termRep = new CmppTerminateRep(sock);
    termRep.setSequenceId(precPkg.nSeqId);
    int code = termRep.sendTerminateRep();
    if (code < 0)
    {
      return code;
    }
    return i;
  }

  /*名称:nCMPP_GetApiVersion
   * 功能:查询当前CMPP API执行的CMPP协议版本
   * 输入参数:
   *
   * 输出参数:
   *
   * 返回值:当前CMPP API执行的CMPP协议版本
   */
  public int nCMPP_GetApiVersion(RecCVerInfo $versInfo)
  {
    if ($versInfo == null)
    {
      return -1;
    }
    $versInfo.sVerDesc = "Program cmppapi.jar( Java ) for CMPP20";
    $versInfo.ApiVerInfo = 18;
    return 0;
  }

  /*名称:nCMPP_GetApiCmppVersion
   * 功能:查询当前CMPP API执行的CMPP协议版本
   * 输入参数:
   *
   * 输出参数:
   *
   * 返回值:当前CMPP API执行的CMPP协议版本
   */
  public int nCMPP_GetHostVersion()
  {
    return sversion;
  }

  /*名称:nCMPP_SendQuery
   * 功能:向ISMG发送的CMPP_Query包
   * 输入参数:
   * 	precQuery:查询条件,参照recCQuery的定义
   *
   * 输出参数:
   *
   * 返回值:-1:参数为空 -5:发送包失败 >0 包序列号
   */
  public int nCMPP_SendQuery(RecCQuery precQuery)
  {
    int i = -1;

    if (precQuery == null)
    {
      return i;
    }

    CmppQuery query = new CmppQuery(sock);

    synchronized (sock)
    {
      i = sock.seq;
      query.setSequenceId(sock.seq);
      sock.seq++;
      if (sock.seq == 2147483647)
      {
        sock.seq = 2;
      }
    }
    query.setcmppQuerys(precQuery.sTime, precQuery.ucQueryType,
                        precQuery.sQueryCode, precQuery.usReserve);

    int code = query.sendcmppQuery();

    if (code < 0)
    {
      return code;
    }

    return i;
  }

  /*名称:nCMPP_ParseQueryRep
   * 功能:解析从ISMG返回的CMPP_Query_Rep包
   * 输入参数:
   * 	usPkgRecv:通过调用 nCMPP_RecvPacket 读取的CMPP_Query_Rep包
   *
   * 输出参数:
   * 	$precQueryRep: 参照recCQueryRep的定义
   *
   * 返回值:-1:参数为空   >0:包序列号
   */
  public int nCMPP_ParseQueryRep(CmppPacket usPkgRecv,
                                 RecCQueryRep $precQueryRep)
  {
    int i = -1;

    if ( (usPkgRecv == null) || ($precQueryRep == null))
    {
      return i;
    }

    i = usPkgRecv.getSequenceId();
    CmppQueryRep queryRep = new CmppQueryRep(usPkgRecv.getPacketBody(),
                                             usPkgRecv.getPacketBody().length);
    System.out.println("Body Length:" + usPkgRecv.getPacketBody().length);
    $precQueryRep.nSeqId = i;
    $precQueryRep.sTime = queryRep.getTime();
    $precQueryRep.ucQueryType = queryRep.getQueryType();
    $precQueryRep.sQueryCode = queryRep.getQueryCode();
    $precQueryRep.nMtTlMsg = queryRep.getMTTLMsg();
    $precQueryRep.nMtTlUsr = queryRep.getMTTlusr();
    $precQueryRep.nMtScs = queryRep.getMTScs();
    $precQueryRep.nMtWt = queryRep.getMTWT();
    $precQueryRep.nMtFl = queryRep.getMTFL();
    $precQueryRep.nMoScs = queryRep.getMOScs();
    $precQueryRep.nMoWt = queryRep.getMOWT();
    $precQueryRep.nMoFl = queryRep.getMOFL();

    return i;
  }

  /*名称:nCMPP_SendCancel
   * 功能:向ISMG发送的CMPP_Cance包
   * 输入参数:
   * 	msgId:短消息标识码
   *
   * 输出参数:
   *
   * 返回值:-1:参数为空 -5:发送包失败 >0 包序列号
   */
  public int nCMPP_SendCancel(RecCCancel $preCancel)
  {
    int i = -1;

    if ($preCancel == null)
    {
      return i;
    }

    CmppCancel cancel = new CmppCancel(sock);
    synchronized (sock)
    {
      i = sock.seq;
      $preCancel.nSeqId = i;
      cancel.setSequenceId(sock.seq);
      sock.seq++;
      if (sock.seq == 2147483647)
      {
        sock.seq = 2;
      }
    }
    cancel.setMsgId($preCancel.usMsgId);

    int code = cancel.sendcmppCancel();

    if (code < 0)
    {
      return code;
    }

    return i;
  }

  /*名称:nCMPP_ParseCancelRep
   * 功能:解析从ISMG返回的CMPP_Cance_Rep包
   * 输入参数:
   * 	usPkgRecv:通过调用 nCMPP_RecvPacket 读取的CMPP_Cancel_Rep包
   *
   * 输出参数:
   * 	$precCancelRep:
   *		$precCancelRep.SequenceId:包序列号
   *		$precCancelRep.SuccessId:取消结果,按CMPP1.2协议 0:成功 1:失败
   * 返回值:-1:参数为空 1: 取消失败 0:取消成功
   */
  public int nCMPP_ParseCancelRep(CmppPacket usPkgRecv,
                                  RecCCancelRep precCancelRep)
  {
    int i = -1;

    if ( (usPkgRecv == null) || (precCancelRep == null))
    {
      return i;
    }
    i = usPkgRecv.getSequenceId();
    precCancelRep.nSeqId = i;
    CmppCancelRep cancelRep = new CmppCancelRep(usPkgRecv.getPacketBody(),
                                                usPkgRecv.getPacketBody().
                                                length);
    precCancelRep.ucSuccId = cancelRep.getSuccessId();

    return i;
  }

  public int nCMPP_SendPacket(RecCCmppPacket precPkg)
  {
    if (null == precPkg)
    {
      return -1;
    }

    int code = -1;
    switch (precPkg.nCmdId)
    {
      case 0x00000001:
        code = nCMPP_Connect();
        break;
      case 0x00000002:
        code = nCMPP_Terminate();
        break;
      case 0x00000004:
        code = nCMPP_SendSubmit(precPkg.recSubmit, precPkg.recSubmit.sValidTime,
                                precPkg.recSubmit.sDstTermId,
                                precPkg.recSubmit.ucMsgLen,
                                precPkg.recSubmit.usMsgContent);
        break;
      case 0x80000005:
        code = nCMPP_SendDeliverRep(precPkg.recDeliverRep);
        break;
      case 0x00000006:
        if (precPkg == null)
        {
          System.out.println("precPkg is null");
        }
        code = nCMPP_SendQuery(precPkg.recQuery);
        break;
      case 0x00000007:
        code = nCMPP_SendCancel(precPkg.recCancel);
        break;
      case 0x00000008:
        code = nCMPP_SendActive();
        break;
      case 0x80000008:
        code = nCMPP_SendActiveRep(precPkg.recActiveTestRep);
        break;
      default:
        break;
    }
    return code;
  }

  /**
   *
   * @param precPkg RecCCmppPacket
   * @return int -1:读包错误; >=0:包序号
   */
  public int nCMPP_RecvPacket(RecCCmppPacket precPkg)
  {
    int i = -1;
    if (precPkg == null)
    {
      return i;
    }

    int code = -1;
    CmppPacket usPacket = new CmppPacket(sock);
    int command = nCMPP_getPacket(usPacket);

    precPkg.nCmdId = command;
    code = command;
    switch (command)
    {
      case 0x00000002:
        code = nCMPP_ParseTerminate(usPacket);

        RecCTerminate terminate = new
            RecCTerminate();
        precPkg.recTerminate = terminate;
        precPkg.recTerminate.nSeqId = code;
        break;
      case 0x80000004:
        RecCSubmitRep subRep = new RecCSubmitRep();
        precPkg.recSubmitRep = subRep;
        code = nCMPP_ParseSubmitRep(usPacket, precPkg.recSubmitRep);
        break;
      case 0x00000005:
        RecCDeliver precDeliver = new
            RecCDeliver();
        precPkg.recDeliver = precDeliver;
        RecCDeliverRcpt precDeliverReceipt = new RecCDeliverRcpt();
        precPkg.recReceipt = precDeliverReceipt;
        code = nCMPP_ParseDeliver(usPacket, precPkg.recDeliver,
                                  precPkg.recReceipt);
        break;
      case 0x80000006:
        RecCQueryRep queryRep = new
            RecCQueryRep();
        precPkg.recQueryRep = queryRep;
        code = nCMPP_ParseQueryRep(usPacket, precPkg.recQueryRep);
        break;
      case 0x80000007:
        RecCCancelRep cancelRep = new
            RecCCancelRep();
        precPkg.recCancelRep = cancelRep;
        code = nCMPP_ParseCancelRep(usPacket, precPkg.recCancelRep);
        break;
      case 0x00000008:
        RecCActiveTest active = new
            RecCActiveTest();
        precPkg.recActiveTest = active;
        code = nCMPP_ParseActive(usPacket, precPkg.recActiveTest);
        break;
      case 0x80000008:
        RecCActiveTestRep activeRep = new
            RecCActiveTestRep();
        precPkg.recActiveTestRep = activeRep;
        code = nCMPP_ParseActiveRep(usPacket, precPkg.recActiveTestRep);
        break;
      default:
        code = command;
        break;
    }

    return code;
  }

  public int getTimeout()
  {
    return timeout;
  }

  public void setTimeout(int timeout)
  {
    this.timeout = timeout;
  }

  private int timeout = 2000; //单位毫秒!
  public String SPID;
  public String CorpID;
  public String SPPassword;
  public String hostIp = "";
  public int port;
  public int sendSpeed = 16;
  private int version; //CMPP API 的CMPP协议版本
  private int sversion; //服务器端CMPP协议版本
  public static int maxMsgLenAscii = 159;
  public static int maxMsgLenOther = 140;

  public CmppSocket sock;
}

⌨️ 快捷键说明

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