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

📄 mm7receiveservlet.java

📁 中国移动彩信中心MM7接口统一API mm7api
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**File Name:MM7ReceiverServlet.java
 * Company:  中国移动集团公司
 * Date  :   2004-2-17
 * */

package com.cmcc.mm7.vasp.service;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
import java.text.*;
import java.util.*;
import sun.misc.*;
import java.security.*;
import com.cmcc.mm7.vasp.message.*;
import com.cmcc.mm7.vasp.conf.*;
import com.cmcc.mm7.vasp.common.*;

public class MM7ReceiveServlet extends HttpServlet implements MM7AbstractReceiver
{
  protected MM7Config Config = null;
  private String logFileName;
  private String strEnvelope;
  private int N;
  private DecimalFormat df;
  private ByteArrayOutputStream Finerbaos;
  private StringBuffer TempBuffer;
  private StringBuffer SevereBuffer;
  private StringBuffer InfoBuffer;
  private StringBuffer FinerBuffer;
  private SimpleDateFormat sdf;
  private SimpleDateFormat Recordsdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  private long LogTimeBZ;
  private long SameMinuteTime;
  private int SameMMSCID;
  private String MMSCID;

  private void reset()
  {
    Finerbaos = new ByteArrayOutputStream();
    TempBuffer = new StringBuffer();
    SevereBuffer = new StringBuffer();
    InfoBuffer = new StringBuffer();
    FinerBuffer = new StringBuffer();
    LogTimeBZ = System.currentTimeMillis();
    SameMinuteTime = System.currentTimeMillis();
    sdf = new SimpleDateFormat("yyyyMMddHHmm");
    df = new DecimalFormat("0000");
    N = 0;
    SameMMSCID = 0;
    logFileName = "";
    strEnvelope = "";
    Recordsdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  }

  public MM7ReceiveServlet()  //构造方法
  {
    reset();
  }

  //处理到VASP的传送(deliver)多媒体消息
  public MM7VASPRes doDeliver(MM7DeliverReq mm7DeliverReq) {
    MM7DeliverRes res = new MM7DeliverRes();
    res.setTransactionID(mm7DeliverReq.getTransactionID());
    res.setStatusCode(1000);
    return res;
  }

  //处理到VASP的发送报告
  public MM7VASPRes doDeliveryReport(MM7DeliveryReportReq
                                               mm7DeliveryReportReq) {
    MM7DeliveryReportRes res = new MM7DeliveryReportRes();
    return res;
  }

  //处理到VASP的读后回复报告
  public MM7VASPRes doReadReply(MM7ReadReplyReq mm7ReadReplyReq) {
    MM7ReadReplyRes res = new MM7ReadReplyRes();
    return res;
  }

  private void WriteLog(String MMSCID)
  {
    int LogLevel = Config.getLogLevel();
    String LogPath = Config.getLogPath();
    int LogNum = Config.getLogNum();
    int LogInterval = Config.getLogInterval();
    int LogSize = Config.getLogSize();
    FileOutputStream fos = null;
    SimpleDateFormat simpledf = new SimpleDateFormat("yyyyMMddHHmm");
    String temptime = simpledf.format(new Date(System.currentTimeMillis()));
    long timeNow = 0;
    try{
      timeNow = simpledf.parse(temptime).getTime();
    }catch(ParseException pe){
      pe.printStackTrace();
    }
    if(logFileName.length() > 0)
    {
      File logFile = new File(logFileName);
      int index1 = logFileName.indexOf(MMSCID+"_");
      int index11 = index1 + MMSCID.length()+1;
      int index2 = logFileName.indexOf(".",index11+1);
      String strtimeFile = logFileName.substring(index11,index2);
      long timeFile = 0;
      try{
        timeFile = simpledf.parse(strtimeFile).getTime();
      }catch(ParseException pe){
        pe.printStackTrace();
      }
      if((timeNow-timeFile) > (long)LogInterval * 60 * 1000)
      {
        N = 1;
        this.deleteFile(LogPath, LogNum,MMSCID);
        logFileName = LogPath + "/" + MMSCID + "_" + temptime + "." +df.format(N) + ".log";
        try{
          fos = new FileOutputStream(logFileName);
        }catch(FileNotFoundException fnfe){
          fnfe.printStackTrace();
        }
      }
      else
      {
        if (logFile.length() >= LogSize * 1024) {
          if (N < LogNum)
            N++;
          else
            N = 1;
          this.deleteFile(LogPath, LogNum, MMSCID);
          logFileName = LogPath + "/" + MMSCID + "_" + temptime + "." +
              df.format(N) + ".log";
          try {
            fos = new FileOutputStream(logFileName);
          }
          catch (FileNotFoundException fnfe) {
            fnfe.printStackTrace();
          }
        }
        else {
          this.deleteFile(LogPath, LogNum, MMSCID);
          try {
            fos = new FileOutputStream(logFileName, true);
          }
          catch (FileNotFoundException fnfe) {
            fnfe.printStackTrace();
          }
        }
      }
    }
    else
    {
      N = 1;
      this.deleteFile(LogPath, LogNum,MMSCID);
      logFileName = LogPath + "/" + MMSCID + "_" + temptime + "." +df.format(N) + ".log";
      try{
        File logFile = new File(logFileName);
        fos = new FileOutputStream(logFile);
      }catch(FileNotFoundException fnfe){
        fnfe.printStackTrace();
      }
    }
    try{
      switch (LogLevel) {
        case 1: {
          if(SevereBuffer.length() > 0)
            fos.write(SevereBuffer.toString().getBytes());
          fos.close();
          SevereBuffer = new StringBuffer();
          break;
        }
        case 2:
          break;
        case 3: {
          if(SevereBuffer.length() > 0)
            fos.write(SevereBuffer.toString().getBytes());
          if(InfoBuffer.length() > 0)
            fos.write(InfoBuffer.toString().getBytes());
          fos.close();
          SevereBuffer = new StringBuffer();
          InfoBuffer = new StringBuffer();
          break;
        }
        case 4:
          break;
        case 5:
          break;
        case 6: {
          if(SevereBuffer.length() > 0)
            fos.write(SevereBuffer.toString().getBytes());
          if(InfoBuffer.length() > 0)
            fos.write(InfoBuffer.toString().getBytes());
          if(Finerbaos.size() > 0)
            fos.write(Finerbaos.toByteArray());
          fos.close();
          SevereBuffer = new StringBuffer();
          InfoBuffer = new StringBuffer();
          Finerbaos = new ByteArrayOutputStream();
          break;
        }
        case 7:
          break;
        default:
          break;
      }
    }
    catch (IOException ioe) {
      ioe.printStackTrace();
    }
  }

  private void deleteFile(String logpath,int lognum,String MMSCID)
  {
    File parfile = new File(logpath);
    if(parfile.isDirectory())
    {
      File[] subfile = parfile.listFiles();
      List list = new ArrayList();
      for (int i = 0; i < subfile.length; i++) {
        String name = subfile[i].getName();
        if (name.indexOf(MMSCID) >= 0) {
          list.add(name);
        }
      }
      if(list.size() >= lognum)
      {
        int deleteLength = list.size()-lognum+1;
        Comparator comp = Collections.reverseOrder();
        Collections.sort(list, comp);
        for (int i = list.size()-deleteLength; i < list.size(); i++) {
          String strfile = (String) list.get(i);
          File ff = new File(logpath + "/" + strfile);
          ff.delete();
        }
      }
    }
  }


  protected void service(HttpServletRequest req, HttpServletResponse rsp) throws
      IOException, ServletException
  {
    ServletInputStream in = req.getInputStream();
    int length = 0;
    String sLength = null;
    String sContentType = null;
    SevereBuffer = new StringBuffer();
    InfoBuffer = new StringBuffer();
    FinerBuffer = new StringBuffer();
    Finerbaos = new ByteArrayOutputStream();

    if(Config == null)
    {
      //System.out.println("读取默认配置文件失败");
      SevereBuffer.append("read Config file failure");
      return;
    }


    if((sLength = req.getHeader("content-length")) == null)
    {
      rsp.sendError(404);
      return;
    }
    length = Integer.parseInt(sLength);

    if((sContentType = req.getHeader("Content-Type")) == null)
    {
      rsp.sendError(404);
      return;
    }
    try
    {
      ByteArrayOutputStream baos = new ByteArrayOutputStream();
      byte[] b = new byte[1024];
      int readlen = 0;
      int totallen = 0;
      int nc = 1;

      baos.write(sContentType.getBytes());
      baos.write("\r\n".getBytes());
      while(totallen < length)   //word = in.read()
      {
        //System.out.println("开始");
        readlen = in.read(b);
        baos.write(b,0,readlen);
        totallen = totallen + readlen;

        //System.out.println("totallen="+totallen);
      }
   //   System.out.println("-----receive http body-----");
   SevereBuffer.append("-----receive http body-----");
//      System.out.println(baos.toString());

      if (Config.getAuthenticationMode() == 1)
      {
        if (basicAuth(rsp, baos) == false)
        {
          return;
        }
      }
      else if (Config.getAuthenticationMode() == 2)
      {
        if (digestAuth(rsp, baos, nc) == false)
        {
          return;
        }
      }

      SOAPDecoder soapDecoder = null;
      soapDecoder = new SOAPDecoder();
      soapDecoder.setMessage(baos);
      try {
        soapDecoder.decodeMessage();
        MM7RSReq rsReq = soapDecoder.getMessage();
        if (rsReq == null) {
          rsp.sendError(404);
          return;
        }
        if (soapDecoder.getMessageName().equals(MMConstants.DELIVERREQ)) {
          //System.out.println("DeliverReq");
          MM7DeliverReq deliverReq = (MM7DeliverReq) rsReq;
          InfoBuffer.append("\r\n\r\n["+Recordsdf.format(new Date(
              System.currentTimeMillis()))+"][3]");
          TempBuffer.append("[TransactionID="+deliverReq.getTransactionID()+"]");
          TempBuffer.append("[Message_Type=MM7DeliverReq]");
          TempBuffer.append("[Sender_Address="+deliverReq.getSender()+"]");
          TempBuffer.append("[Recipient_Address={");
          if (deliverReq.isToExist()) {
            TempBuffer.append("To={");
            List to = new ArrayList();
            to = deliverReq.getTo();
            for (int i = 0; i < to.size(); i++)
            TempBuffer.append( (String) to.get(i) + ",");
            TempBuffer.append("}");
          }
          if (deliverReq.isCcExist()) {
            TempBuffer.append("Cc={");
            List cc = new ArrayList();
            cc = deliverReq.getCc();
            for (int i = 0; i < cc.size(); i++)
              TempBuffer.append( (String) cc.get(i) + ",");
            TempBuffer.append("}");
          }
          if (deliverReq.isBccExist()) {
            TempBuffer.append("Bcc={");
            List bcc = new ArrayList();
            bcc = deliverReq.getBcc();
            for (int i = 0; i < bcc.size(); i++)
              TempBuffer.append( (String) bcc.get(i) + ",");
            TempBuffer.append("}");
          }
          TempBuffer.append("}]");
          InfoBuffer.append(TempBuffer);
          InfoBuffer.append("\r\n"+soapDecoder.getEnvelope());  //Envelope消息
          String timelevel = "\r\n\r\n["+Recordsdf.format(new Date(
              System.currentTimeMillis()))+"][6]";
          Finerbaos.write(timelevel.getBytes());
          Finerbaos.write(TempBuffer.toString().getBytes());
          Finerbaos.write("\r\n".getBytes());
          Finerbaos.write(soapDecoder.getSoapStream().toByteArray());
          TempBuffer = new StringBuffer();

          MM7DeliverRes deliverRes = (MM7DeliverRes) doDeliver(deliverReq);
          InfoBuffer.append("\r\n\r\n"+"["+Recordsdf.format(new Date(
              System.currentTimeMillis()))+"]"+"[3]");
          String tempres = "\r\n\r\n["+Recordsdf.format(new Date(
              System.currentTimeMillis()))+"][6]";
          Finerbaos.write(tempres.getBytes());
          TempBuffer.append("[Message_Type=MM7DeliverRes]");
          TempBuffer.append("[Comments={" + deliverRes.getStatusCode() +
                    ";"+deliverRes.getStatusText()+"}]\r\n");
          InfoBuffer.append(TempBuffer);
          Finerbaos.write(TempBuffer.toString().getBytes());
          TempBuffer = new StringBuffer();
          Finerbaos.write("\r\n".getBytes());
          send(rsp, deliverRes);
          //System.out.println("发送DeliverRes完毕");
          SevereBuffer.append("发送DeliverRes完毕");
        }
        else if (soapDecoder.getMessageName().equals(MMConstants.
            DELIVERYREPORTREQ)) {
          //System.out.println("DeliverReportReq");
          MM7DeliveryReportReq deliverReportReq = (MM7DeliveryReportReq) rsReq;
          InfoBuffer.append("\r\n\r\n["+Recordsdf.format(new Date(
              System.currentTimeMillis()))+"][3]");
          TempBuffer.append("[TransactionID="+deliverReportReq.getTransactionID()+"]");
          TempBuffer.append("[Message_Type=MM7DeliveryReportReq]");
          TempBuffer.append("[Sender_Address="+deliverReportReq.getSender()+"]");
          InfoBuffer.append(TempBuffer);
          InfoBuffer.append("\r\n"+soapDecoder.getEnvelope());  //Envelope消息
          String timelevel = "\r\n\r\n["+Recordsdf.format(new Date(
              System.currentTimeMillis()))+"][6]";
          Finerbaos.write(timelevel.getBytes());
          Finerbaos.write(TempBuffer.toString().getBytes());
          Finerbaos.write("\r\n".getBytes());
          Finerbaos.write(soapDecoder.getSoapStream().toByteArray());
          TempBuffer = new StringBuffer();

          MM7DeliveryReportRes deliverReportRes = (MM7DeliveryReportRes)
              doDeliveryReport(deliverReportReq);
          InfoBuffer.append("\r\n\r\n"+"["+Recordsdf.format(new Date(
              System.currentTimeMillis()))+"]"+"[3]");
          String tempres = "\r\n\r\n["+Recordsdf.format(new Date(
              System.currentTimeMillis()))+"][6]";
          Finerbaos.write(tempres.getBytes());
          TempBuffer.append("[Message_Type=MM7DeliverRes]");
          TempBuffer.append("[Comments={" + deliverReportRes.getStatusCode() +
                    ";"+deliverReportRes.getStatusText()+"}]\r\n");
          InfoBuffer.append(TempBuffer);
          Finerbaos.write(TempBuffer.toString().getBytes());
          TempBuffer = new StringBuffer();
          Finerbaos.write("\r\n".getBytes());

          send(rsp, deliverReportRes);
          //System.out.println("发送deliveryReportRes完毕");
          SevereBuffer.append("发送deliveryReportRes完毕");
        }
        else if (soapDecoder.getMessageName().equals(MMConstants.READREPLYREQ)) {
          MM7ReadReplyReq readReplyReq = (MM7ReadReplyReq) rsReq;
          InfoBuffer.append("\r\n\r\n["+Recordsdf.format(new Date(
              System.currentTimeMillis()))+"][3]");
          TempBuffer.append("[TransactionID="+readReplyReq.getTransactionID()+"]");
          TempBuffer.append("[Message_Type=MM7ReadReplyReq]");
          TempBuffer.append("[Sender_Address="+readReplyReq.getSender()+"]");
          InfoBuffer.append(TempBuffer);
          InfoBuffer.append("\r\n"+soapDecoder.getEnvelope());  //Envelope消息
          String timelevel = "\r\n\r\n["+Recordsdf.format(new Date(
              System.currentTimeMillis()))+"][6]";
          Finerbaos.write(timelevel.getBytes());
          Finerbaos.write(TempBuffer.toString().getBytes());
          Finerbaos.write("\r\n".getBytes());
          Finerbaos.write(soapDecoder.getSoapStream().toByteArray());
          TempBuffer = new StringBuffer();

          MM7ReadReplyRes readReplyRes = (MM7ReadReplyRes) doReadReply(
              readReplyReq);
          InfoBuffer.append("\r\n\r\n"+"["+Recordsdf.format(new Date(
             System.currentTimeMillis()))+"]"+"[3]");
         String tempres = "\r\n\r\n[" + Recordsdf.format(new Date(
             System.currentTimeMillis())) + "][6]";
         Finerbaos.write(tempres.getBytes());
         TempBuffer.append("[Message_Type=MM7DeliverRes]");
         TempBuffer.append("[Comments={" + readReplyRes.getStatusCode() +
                           ";" + readReplyRes.getStatusText() + "}]\r\n");
         InfoBuffer.append(TempBuffer);
         Finerbaos.write(TempBuffer.toString().getBytes());
         TempBuffer = new StringBuffer();
         Finerbaos.write("\r\n".getBytes());
         send(rsp, readReplyRes);
        }
        InfoBuffer.append(strEnvelope);
        Finerbaos.write(strEnvelope.getBytes());
        String time = "[" + Recordsdf.format(new Date(System.currentTimeMillis())) + "]";
        SevereBuffer.insert(0, "\r\n\r\n" +time + "[1]");  //
        MMSCID = Config.getMmscId();

⌨️ 快捷键说明

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