📄 cmccmm7recvservlet.java
字号:
/*
* Created on 2005-3-18
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package com.rainbow.mms.gateway;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.Date;
import java.util.List;
import java.util.Timer;
import javax.servlet.ServletConfig;
import javax.sql.DataSource;
import log.DailyMessageLog;
import org.apache.log4j.Logger;
import org.apache.log4j.PropertyConfigurator;
import org.hibernate.Session;
import org.hibernate.Transaction;
import com.cmcc.mm7.vasp.common.MMConstants;
import com.cmcc.mm7.vasp.common.MMContent;
import com.cmcc.mm7.vasp.conf.MM7Config;
import com.cmcc.mm7.vasp.message.MM7DeliverReq;
import com.cmcc.mm7.vasp.message.MM7DeliverRes;
import com.cmcc.mm7.vasp.message.MM7DeliveryReportReq;
import com.cmcc.mm7.vasp.message.MM7DeliveryReportRes;
import com.cmcc.mm7.vasp.message.MM7ReadReplyReq;
import com.cmcc.mm7.vasp.message.MM7ReadReplyRes;
import com.cmcc.mm7.vasp.message.MM7VASPRes;
import com.cmcc.mm7.vasp.service.MM7ReceiveServlet;
import com.rainbow.mms.common.CMCCMM7DeliverMsg;
import com.rainbow.mms.common.MimeContent;
import com.rainbow.mms.common.MmsContent;
import com.rainbow.mms.common.MmsGatewayInfo;
import com.rainbow.mms.common.QueryMimeContentSaveStrategy;
import com.rainbow.util.tools.HibernateUtil;
import com.rainbow.util.tools.TimeOperate;
/**
* 处理收到的彩信
* @author Rainbow MMS Group Leader —— TrWorks
*
*/
public class CMCCMM7RecvServlet extends MM7ReceiveServlet {
/**
* 数据库的数据源
*/
private DataSource ds = null;
/**
* 接收帐单
*/
private static DailyMessageLog bill = new DailyMessageLog();
/**
* 日志
*/
private Logger log = Logger.getLogger(CMCCMM7RecvServlet.class);
/**
* 统计使用的定时器
*/
private Timer staticTimer = null;
/**
* MM7配置文件路径
*/
private String mm7ConfigFilePath = null;
/**
* 接收网关的配置信息
*/
private List gateWayInfos = null;
/**
* 初始化Servlet
*/
public void init(ServletConfig config) {
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
// 设置帐单名称
try {
String billPath = (String) config.getInitParameter("billPath");
String logConfigPath = (String)config.getInitParameter("logConfigPath");
PropertyConfigurator.configure(logConfigPath);
log.info("初始化接收型网关的Servlet");
bill.setLogFile(billPath);
mm7ConfigFilePath = (String) config
.getInitParameter("mm7ConfigFilePath");
System.out.println("MM7ConfigFile:" + mm7ConfigFilePath);
System.out.println("billPath:" + billPath);
System.out.println("logConfigPath:" + billPath);
Config = new MM7Config(mm7ConfigFilePath);
// 取数据库的网关配置信息
Session sess = HibernateUtil.currentSession();
try{
gateWayInfos = sess.createCriteria(MmsGatewayInfo.class).list();
}
catch(Exception e){
e.printStackTrace();
}
finally{
HibernateUtil.closeSession();
}
RecverStaticInfo staticInfo = RecverStaticInfo.getInstance();
staticTimer = new Timer();
staticTimer.schedule(staticInfo, 0, (60*60*1000));
} catch (Exception e) {
e.printStackTrace();
log.error("读取数据库和网关的连接信息时出现异常");
}
System.out.println("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
}
public void destroy()
{
System.out.println("------------------------------------------------------------");
System.out.println("------------------------------------------------------------");
}
/**
* 处理收到的普通的Deliver消息,并回复应答消息
*/
public MM7VASPRes doDeliver(MM7DeliverReq request) {
if (request == null) {
return null;
}
// 累加统计计数器
RecverStaticInfo.getInstance().addDeliverNum();
// 取出符合接入号码的目的号码
String dstNum = getValidDstNum(request);
// 将收到的Deliver消息在界面上打印出来
StringBuffer buffer = new StringBuffer();
//System.out.println("------收到Deliver消息------");
buffer.append("------收到Deliver消息------");
buffer.append("\n");
buffer.append("MMSCID:" + request.getMMSRelayServerID() + "\n");
buffer.append("recvTime: " + TimeOperate.getNowTime() + "\n");
buffer.append("srcNum: " + request.getSender() + "\n");
buffer.append("dstNum: " + dstNum + "\n");
buffer.append("subject: " + request.getSubject() + "\n");
buffer.append("transactionID: " + request.getTransactionID() + "\n");
//buffer.append("gatewayID: " + this.gwGateWayID + "\n");
buffer.append("priority: " + request.getPriority() + "\n");
buffer.append("linkID: " + request.getLinkedID() + "\n");
buffer.append("replyCharging: " + request.getReplyChargingID() + "\n");
System.out.println(buffer.toString());
// 将收到的Deliver消息保存到帐单中
bill.log(buffer.toString());
if (dstNum == null) {
log.warn("收到的目的号码不符合我们的接入号码");
} else {
// 处理收到的请求消息
doDeliverMsg(request, dstNum);
}
// 回复应答消息
MM7DeliverRes mm7DeliverRes = new MM7DeliverRes();
mm7DeliverRes.setStatusCode(MMConstants.RequestStatus.SUCCESS);
mm7DeliverRes.setTransactionID(request.getTransactionID());
//mm7DeliverRes.setServiceCode(gwServiceID);
// 在界面上打印出应答消息
StringBuffer resOutput = new StringBuffer();
resOutput.append("------发送Deliver应答消息------\n");
resOutput.append(" transactionID: " + mm7DeliverRes.getTransactionID()
+ "\n");
resOutput.append(" statusCode: " + mm7DeliverRes.getStatusCode() + "\n");
/* resOutput.append("serviceCode: " + mm7DeliverRes.getServiceCode()
+ "\n");*/
System.out.println(resOutput.toString());
return (MM7VASPRes) mm7DeliverRes;
}
/**
* 处理收到的普通的Deliver消息,将消息放入到数据库中
*
* @param request
*/
protected void doDeliverMsg(MM7DeliverReq request, String dstNum) {
if (request == null || dstNum == null) {
return;
}
int gwGateWayID = 0;
for (int i = 0; i < gateWayInfos.size(); i++){
MmsGatewayInfo gw = (MmsGatewayInfo)gateWayInfos.get(i);
if (request.getMMSRelayServerID().equalsIgnoreCase(gw.getMmscId())){
gwGateWayID = gw.getGatewayID();
}
}
if (gwGateWayID == 0){
log.error("没有找到符合彩信中心编号的网关配置信息.");
}
Session sess = HibernateUtil.currentSession();
int deliverID = 0;
try {
Connection con = sess.connection();
CallableStatement s = con.prepareCall("select tnGateWayId from MMS_TSysComConfigGateway where tcMmscID = (?)");
CMCCMM7DeliverMsg deliverMsg = new CMCCMM7DeliverMsg();
deliverMsg.setContentType(0);
deliverMsg.setDstNum(dstNum);
deliverMsg.setGateWayId(gwGateWayID);
deliverMsg.setLinkId(request.getLinkedID());
deliverMsg.setMmscId(request.getMMSRelayServerID());
deliverMsg.setMsgId(request.getTransactionID());
deliverMsg.setRecvTime(new Date());
deliverMsg.setSrcNum(request.getSender());
deliverMsg.setWantRead(0);
deliverMsg.setWantReport(0);
MmsContent mmsContent = new MmsContent();
mmsContent.setCreateFrom(1);
mmsContent.setCreaterMemo("user");
mmsContent.setCreateTime(new Date());
mmsContent.setSubject(request.getSubject());
Transaction tx = sess.beginTransaction();
// 请求消息内有多媒体内容
if (request.isContentExist() == true) {
//System.out.println("Has MMS Content");
MMContent parentContent = request.getContent();
MMContent c = parentContent;
// 多媒体内容是由多个多媒体元素组成的
if (parentContent.isMultipart()) {
//System.out.println("Has Many MMS Content");
List listElements = parentContent.getSubContents();
for (int i = 0; i < listElements.size(); i++) {
c = (MMContent) listElements.get(i);
MimeContent e = new MimeContent();
e.setMimeType(c.getContentType().getPrimaryType() + "/"
+ c.getContentType().getSubType());
e.setMimeContentName(c.getContentID());
e.setCreateTime(new Date());
// 按照文本格式保存
if (QueryMimeContentSaveStrategy.getSaveStrategy(e
.getMimeType(), sess) == 1) {
e.setCharacterContent(c.getContentAsString());
} else { // 按照二进制格式保存
e.setBinaryContent(c.getContent());
}
//System.out.println(e.toString());
// 保存该多媒体元素
sess.save(e);
// 将该多媒体元素加入到彩信内容体中
mmsContent.getMmsContentElments().add(e);
}
} else {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -