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

📄 mm7receiveservlet.java

📁 彩信网关程序,SP程序,包含移动彩信代码和电信彩信代码!供学习之用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/**File Name:MM7ReceiverServlet.java
 * Company:  中国移动集团公司
 * Date  :   2004-2-17
 * */

package com.hxyh.sanny.mms.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.hxyh.sanny.mms.cmcc.mm7.vasp.message.*;
import com.hxyh.sanny.mms.cmcc.mm7.vasp.conf.*;
import com.hxyh.sanny.mms.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());

⌨️ 快捷键说明

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