📄 mm7receiveservlet.java
字号:
/**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 + -