📄 mm7receiver.java
字号:
}
catch(Exception e){
SevereBuffer.append("[Exception="+e+"]");
return;
}
}
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>");
/**
* 若发送的消息为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){
SevereBuffer.append("Exception:"+e);
}
return byteOutput.toByteArray();
}
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;
/*
byte[] b = null;
SOAPEncoder encoder = new SOAPEncoder();
encoder.setMessage(mm7VASPRes);
try{
encoder.encodeMessage();
}catch(Exception e){
System.err.println(e);
}
b = encoder.getMessage();
return(b);
*/
}
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;
}
private boolean digestAuth(Socket socket,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(socket);
return false;
}
index1 = index1+"Authorization".length()+1;
digest = baos.toString().substring(index1,index2);
if(digest.indexOf("Digest") == -1)
{
sendDigestReq(socket);
return false;
}
/*校验username*/
if((index1 = digest.indexOf("username=\"")) == -1)
{
sendDigestReq(socket);
return false;
}
index1 = index1 + new String("username=\"").length();
if((index2 = digest.indexOf("\"",index1)) == -1)
{
sendDigestReq(socket);
return false;
}
username = digest.substring(index1,index2);
if(!username.equals(Config.getUserName()))
{
sendDigestReq(socket);
return false;
}
/*校验realm*/
if((index1 = digest.indexOf("realm=\"")) == -1)
{
sendDigestReq(socket);
return false;
}
index1 = index1 + new String("realm=\"").length();
if((index2 = digest.indexOf("\"",index1)) == -1)
{
sendDigestReq(socket);
return false;
}
realm = digest.substring(index1,index2);
if(!realm.equals(MMConstants.REALM))
{
//System.out.println("realm错误");
sendDigestReq(socket);
return false;
}
/*校验qop*/
if((index1 = digest.indexOf("qop=\"")) == -1)
{
sendDigestReq(socket);
return false;
}
index1 = index1 + new String("qop=\"").length();
if((index2 = digest.indexOf("\"",index1)) == -1)
{
sendDigestReq(socket);
return false;
}
qop = digest.substring(index1,index2);
if(!qop.equals("auth"))
{
sendDigestReq(socket);
return false;
}
/*取得uri*/
if((index1 = digest.indexOf("uri=\"")) == -1)
{
sendDigestReq(socket);
return false;
}
index1 = index1 + new String("uri=\"").length();
if((index2 = digest.indexOf("\"",index1)) == -1)
{
sendDigestReq(socket);
return false;
}
uri = digest.substring(index1,index2);
/*校验nonce*/
if((index1 = digest.indexOf("nonce=\"")) == -1)
{
sendDigestReq(socket);
return false;
}
index1 = index1 + new String("nonce=\"").length();
if((index2 = digest.indexOf("\"",index1)) == -1)
{
sendDigestReq(socket);
return false;
}
nonce = digest.substring(index1,index2);
if(!nonce.equals(getBASE64("--NextPart_0_2817_24856")))
{
sendDigestReq(socket);
return false;
}
/*校验nc*/
if((index1 = digest.indexOf("nc=")) == -1)
{
sendDigestReq(socket);
return false;
}
index1 = index1 + new String("nc").length()+1;
if((index2 = digest.indexOf(",",index1)) == -1)
{
sendDigestReq(socket);
return false;
}
ncValue = digest.substring(index1,index2);
if(Integer.parseInt(ncValue) != nc)
{
sendDigestReq(socket);
return false;
}
/*取得cnonce*/
if((index1 = digest.indexOf("cnonce=\"")) == -1)
{
sendDigestReq(socket);
return false;
}
index1 = index1 + new String("cnonce=\"").length();
if((index2 = digest.indexOf("\"",index1)) == -1)
{
sendDigestReq(socket);
return false;
}
cnonce = digest.substring(index1,index2);
/*校验response*/
if((index1 = digest.indexOf("response=\"")) == -1)
{
sendDigestReq(socket);
return false;
}
index1 = index1 + new String("response=\"").length();
if((index2 = digest.indexOf("\"",index1)) == -1)
{
sendDigestReq(socket);
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(socket);
return false;
}
return true;
}
private boolean basicAuth(Socket socket,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(socket);
return false;
}
basic = baos.toString().substring(index,index2);
if(basic.indexOf("Basic") == -1)
{
sendBasicReq(socket);
return false;
}
if(basic.indexOf(getBASE64(Config.getUserName() + ":" + Config.getPassword())) == -1)
{
sendBasicReq(socket);
return false;
}
return true;
}
private void sendBasicReq(Socket socket)
{
StringBuffer sb = new StringBuffer();
sb.append("HTTP/1.1 401 Authorization Required\r\n");
sb.append("WWW-Authenticate: Basic ");
sb.append("realm=\"" + MMConstants.REALM + "\"\r\n\r\n");
try
{
BufferedOutputStream sender = new BufferedOutputStream(socket.getOutputStream());
sender.write(sb.toString().getBytes());
sender.flush();
}
catch(Exception e)
{
System.err.println(e);
}
}
private void sendDigestReq(Socket socket)
{
StringBuffer sb = new StringBuffer();
sb.append("HTTP/1.1 401 Authorization Required\r\n");
sb.append("WWW-Authenticate: Digest ");
sb.append("realm=\"" + MMConstants.REALM + "\", ");
sb.append("nonce=\"" + getBASE64("--NextPart_0_2817_24856") + "\", ");
sb.append("algorithm=MD5, qop=\"auth\"\r\n\r\n");
try
{
BufferedOutputStream sender = new BufferedOutputStream(socket.getOutputStream());
sender.write(sb.toString().getBytes());
sender.flush();
}
catch(Exception e)
{
System.err.println(e);
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -