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

📄 mm7receiveservlet.java

📁 中国移动彩信中心MM7接口统一API mm7api
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
        if(Config.getLogLevel()>0)
          WriteLog(MMSCID);
      }
      catch (SOAPDecodeException e) {
        System.err.println(e);
      }
    }
    catch (IOException ioe) {
      //System.out.println("Error in SimpleWebServer: " + ioe);
      SevereBuffer.append("Error in SimpleWebServer: " + ioe);
    }
  }

  public void send(HttpServletResponse rsp,MM7VASPRes mm7VASPRes)
  {
    StringBuffer sb = new StringBuffer();
    StringBuffer entityBody = new StringBuffer();
    ServletOutputStream sender = null;
    try
    {
      sender = rsp.getOutputStream();
      //rsp.addHeader("Connection","Keep-Alive");
      rsp.addHeader("Content-Type","text/xml;charset=\""+Config.getCharSet()+"\"");
//      rsp.addHeader("Content-Type","text/xml;charset=\"US-ASCII\"");
      //设置鉴权
      byte[] bcontent = getContent(mm7VASPRes);
      //设置消息体长度
      rsp.addHeader("Content-Length",Integer.toString(bcontent.length));
      //rsp.addHeader("Mime-Version","1.0");
      //rsp.addHeader("SOAPAction","");
      entityBody.append(new String(bcontent));
      sb.append(entityBody);
//      System.out.println("**********send res *********");
//      System.out.println(sb.toString());
      sender.write(sb.toString().getBytes());
      sender.flush();
      SevereBuffer.append("end sending ack!\r\n");
      return;
    }
    catch(InterruptedIOException iioe)
    {
      return;
    }
    catch(Exception e){
      return;
    }
  }

  private byte[] getContent(MM7VASPRes mm7VASPRes)
  {
    byte[] b = null;

    b = encodeMessage(mm7VASPRes);
    String strMessage = new String(b);
    int index = strMessage.indexOf(MMConstants.BEGINXMLFLAG);
    strEnvelope = strMessage.substring(index);
    return b;
  }

  private byte[] encodeMessage(MM7VASPRes mm7VASPRes)
  {
    ByteArrayOutputStream byteOutput = new ByteArrayOutputStream();
    StringBuffer sb = new StringBuffer();

    sb.append("<?xml version=\"1.0\"?><env:Envelope xmlns:env=\"http://schemas.xmlsoap.org/soap/envelope/\"><env:Header>");//
    if(mm7VASPRes.isTransactionIDExist())  //
      sb.append("<mm7:TransactionID xmlns:mm7=\"http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0\">"+mm7VASPRes.getTransactionID()+"</mm7:TransactionID>");
    else
      System.err.println("TransactionID 不许为空!");
    sb.append("</env:Header><env:Body>");
    /*if(mm7VaspReq.isMM7VersionExist())
      sb.append("<MM7Version>"+mm7VaspReq.getMM7Version()+"</MM7Version>");*/

    /**
     * 若发送的消息为MM7SubmitReq
     * */
    if(mm7VASPRes instanceof MM7DeliverRes){
      MM7DeliverRes deliverRes = (MM7DeliverRes) mm7VASPRes;
      sb.append("<DeliverRsp xmlns=\"http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0\">");
      if(deliverRes.isMM7VersionExist()){
        sb.append("<MM7Version>"+deliverRes.getMM7Version()+"</MM7Version>");
      }else{
        System.err.println("MM7Version 不许为空!");
      }

      if(deliverRes.isServiceCodeExist()){
         sb.append("<ServiceCode>" + deliverRes.getServiceCode() + "</ServiceCode>");
      }

      sb.append("<Status>");
      if(deliverRes.isStatusCodeExist()){
        sb.append("<StatusCode>" + deliverRes.getStatusCode() + "</StatusCode>");
      }else{
        System.err.println("StatusCode 不许为空");
      }

      if(deliverRes.isStatusTextExist()){
        sb.append("<StatusText>" + deliverRes.getStatusText() + "</StatusText>");
      }
      if(deliverRes.isStatusDetailExist()){
        sb.append("<Details>" + deliverRes.getStatusDetail() + "</Details>");
      }
      sb.append("</Status>");

      sb.append("</DeliverRsp>");
      sb.append("</env:Body></env:Envelope>");
      sb.append("\r\n");
    }else if(mm7VASPRes instanceof MM7DeliveryReportRes){
      MM7DeliveryReportRes deliveryReportRes = (MM7DeliveryReportRes)mm7VASPRes;
      sb.append("<DeliveryReportRsp xmlns=\"http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0\">");
      if(deliveryReportRes.isMM7VersionExist()){
        sb.append("<MM7Version>"+deliveryReportRes.getMM7Version()+"</MM7Version>");
      }else{
        System.err.println("MM7Version 不许为空!");
      }

      sb.append("<Status>");
      if(deliveryReportRes.isStatusCodeExist()){
        sb.append("<StatusCode>" + deliveryReportRes.getStatusCode() + "</StatusCode>");
      }else{
        System.err.println("StatusCode 不许为空");
      }

      if(deliveryReportRes.isStatusTextExist()){
        sb.append("<StatusText>" + deliveryReportRes.getStatusText() + "</StatusText>");
      }
      if(deliveryReportRes.isStatusDetailExist()){
        sb.append("<Details>" + deliveryReportRes.getStatusDetail() + "</Details>");
      }
      sb.append("</Status>");

      sb.append("</DeliveryReportRsp>");
      sb.append("</env:Body></env:Envelope>");
      sb.append("\r\n");
    }else if(mm7VASPRes instanceof MM7ReadReplyRes){
      MM7ReadReplyRes readReplyRes = (MM7ReadReplyRes) mm7VASPRes;
      sb.append("<ReadReplyRsp xmlns=\"http://www.3gpp.org/ftp/Specs/archive/23_series/23.140/schema/REL-6-MM7-1-0\">");
      if(readReplyRes.isMM7VersionExist()){
        sb.append("<MM7Version>"+readReplyRes.getMM7Version()+"</MM7Version>");
      }else{
        System.err.println("MM7Version 不许为空!");
      }

      sb.append("<Status>");
      if(readReplyRes.isStatusCodeExist()){
        sb.append("<StatusCode>" + readReplyRes.getStatusCode() + "</StatusCode>");
      }else{
        System.err.println("StatusCode 不许为空");
      }

      if(readReplyRes.isStatusTextExist()){
        sb.append("<StatusText>" + readReplyRes.getStatusText() + "</StatusText>");
      }
      if(readReplyRes.isStatusDetailExist()){
        sb.append("<Details>" + readReplyRes.getStatusDetail() + "</Details>");
      }
      sb.append("</Status>");

      sb.append("</ReadReplyRsp>");
      sb.append("</env:Body></env:Envelope>");
      sb.append("\r\n");
    }
    try{
      byteOutput.write(sb.toString().getBytes());
    }catch(Exception e){
      System.err.println(e);
    }

    return byteOutput.toByteArray();
  }

  private boolean basicAuth(HttpServletResponse rsp,ByteArrayOutputStream baos)
  {
    int index1 = 0,index2 = 0,index3 = 0;
    String auth = "Authorization";
    String basic,temp;

    index1 = baos.toString().indexOf(auth);
    index2 = baos.toString().indexOf("\r\n",index1);
    int index = index1+auth.length()+1;
    if(index1 == -1 || index2 == -1)
    {
      sendBasicReq(rsp);
      return false;
    }
    basic = baos.toString().substring(index,index2);

    if(basic.indexOf("Basic") == -1)
    {
      sendBasicReq(rsp);
      return false;
    }
    if(basic.indexOf(getBASE64(Config.getUserName() + ":" + Config.getPassword())) == -1)
    {
      sendBasicReq(rsp);
      return false;
    }

    return true;
  }

  private void sendBasicReq(HttpServletResponse rsp)
  {
    StringBuffer sb = new StringBuffer();
    ServletOutputStream sender = null;

    rsp.setStatus(401,"Authorization Required");
    rsp.addHeader("WWW-Authenticate","Basic realm=\"" + MMConstants.REALM + "\"");

    try
    {
      sender = rsp.getOutputStream();
      sender.write("".getBytes());
      sender.flush();
    }
    catch(Exception e)
    {
      System.err.println(e);
    }
  }

  private boolean digestAuth(HttpServletResponse rsp,ByteArrayOutputStream baos,int nc)
  {
    int index1 = 0,index2 = 0;
    String digest,temp;
    String username,realm,qop,nonce,ncValue,cnonce,response,uri;
    String MD5A1,MD5A2;
    index1 = baos.toString().indexOf("Authorization");
    index2 = baos.toString().indexOf("\r\n",index1);
    if(index1 == -1 || index2 == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    index1 = index1+"Authorization".length()+1;
    digest = baos.toString().substring(index1,index2);

    if(digest.indexOf("Digest") == -1)
    {
      sendDigestReq(rsp);
      return false;
    }

    /*校验username*/
    if((index1 = digest.indexOf("username=\"")) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    index1 = index1 + new String("username=\"").length();
    if((index2 = digest.indexOf("\"",index1)) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    username = digest.substring(index1,index2);
    if(!username.equals(Config.getUserName()))
    {
      sendDigestReq(rsp);
      return false;
    }

    /*校验realm*/
    if((index1 = digest.indexOf("realm=\"")) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    index1 = index1 + new String("realm=\"").length();
    if((index2 = digest.indexOf("\"",index1)) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    realm = digest.substring(index1,index2);
    if(!realm.equals(MMConstants.REALM))
    {
      //System.out.println("realm错误");
      sendDigestReq(rsp);
      return false;
    }

    /*校验qop*/
    if((index1 = digest.indexOf("qop=\"")) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    index1 = index1 + new String("qop=\"").length();
    if((index2 = digest.indexOf("\"",index1)) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    qop = digest.substring(index1,index2);
    if(!qop.equals("auth"))
    {
      sendDigestReq(rsp);
      return false;
    }

    /*取得uri*/
    if((index1 = digest.indexOf("uri=\"")) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    index1 = index1 + new String("uri=\"").length();
    if((index2 = digest.indexOf("\"",index1)) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    uri = digest.substring(index1,index2);
    /*校验nonce*/
    if((index1 = digest.indexOf("nonce=\"")) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    index1 = index1 + new String("nonce=\"").length();
    if((index2 = digest.indexOf("\"",index1)) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    nonce = digest.substring(index1,index2);
    if(!nonce.equals(getBASE64("--NextPart_0_2817_24856")))
    {
      sendDigestReq(rsp);
      return false;
    }

    /*校验nc*/
    if((index1 = digest.indexOf("nc=")) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    index1 = index1 + new String("nc").length()+1;
    if((index2 = digest.indexOf(",",index1)) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    ncValue = digest.substring(index1,index2);
    if(Integer.parseInt(ncValue) != nc)
    {
      sendDigestReq(rsp);
      return false;
    }

    /*取得cnonce*/
    if((index1 = digest.indexOf("cnonce=\"")) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    index1 = index1 + new String("cnonce=\"").length();
    if((index2 = digest.indexOf("\"",index1)) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    cnonce = digest.substring(index1,index2);
    /*校验response*/
    if((index1 = digest.indexOf("response=\"")) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    index1 = index1 + new String("response=\"").length();
    if((index2 = digest.indexOf("\"",index1)) == -1)
    {
      sendDigestReq(rsp);
      return false;
    }
    response = digest.substring(index1,index2).trim();
    MD5A1 = calcMD5(Config.getUserName() + ":" + MMConstants.REALM + ":" + Config.getPassword());
    MD5A2 = calcMD5("POST" + ":" + uri);
    temp = calcMD5(MD5A1 + ":" + nonce + ":" + ncValue + ":" + cnonce + ":" + qop + ":" + MD5A2);
    if(!temp.trim().equals(response))
    {
      sendDigestReq(rsp);
      return false;
    }

    return true;
  }


  private void sendDigestReq(HttpServletResponse rsp)
  {
    StringBuffer auth = new StringBuffer();
    ServletOutputStream sender = null;

    rsp.setStatus(401,"Authorization Required");
    auth.append("Digest ");
    auth.append("realm=\"" + MMConstants.REALM + "\", ");
    auth.append("nonce=\"" + getBASE64("--NextPart_0_2817_24856") + "\", ");
    auth.append("algorithm=MD5, qop=\"auth\"");
    rsp.setHeader("WWW-Authenticate:",auth.toString());

    try
    {
      sender = rsp.getOutputStream();
      sender.write("".getBytes());
      sender.flush();
    }
    catch(Exception e)
    {
      System.err.println(e);
    }
  }

  public static String getBASE64(String value)
  {
    if(value == null)
      return null;
    BASE64Encoder BaseEncode = new BASE64Encoder();
    return(BaseEncode.encode(value.getBytes()));
  }

  private String calcMD5(String str)
  {
    try {
      MessageDigest alga = MessageDigest.getInstance("MD5");
      alga.update(str.getBytes());
      byte[] digesta = alga.digest();
      return byte2hex(digesta);
    }
    catch (NoSuchAlgorithmException ex) {
      //System.out.println("出错了!!");
    }
    return "NULL";
  }

//byte[]数组转成字符串
  public String byte2hex(byte[] b)
  {
    String hs = "";
    String stmp = "";
    for (int n = 0; n < b.length; n++) {
      stmp = (Integer.toHexString(b[n] & 0XFF));
      if (stmp.length() == 1)
        hs = hs + "0" + stmp;
      else
        hs = hs + stmp;
      if (n < b.length - 1)
        hs = hs + "";
    }
    return hs;
  }
}

⌨️ 快捷键说明

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