📄 mm7receiveservlet.java
字号:
// System.err.println("MM7Version 不许为空!");
log.warn("encodeMessage():MM7Version 不许为空!");
}
sb.append("<Status>");
if (deliveryReportRes.isStatusCodeExist()) {
sb.append("<StatusCode>" + deliveryReportRes.getStatusCode() + "</StatusCode>");
}
else {
// System.err.println("StatusCode 不许为空");
log.warn("encodeMessage():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 不许为空!");
log.warn("encodeMessage():MM7Version 不许为空!");
}
sb.append("<Status>");
if (readReplyRes.isStatusCodeExist()) {
sb.append("<StatusCode>" + readReplyRes.getStatusCode() + "</StatusCode>");
}
else {
// System.err.println("StatusCode 不许为空");
log.warn("encodeMessage():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) {
// System.err.println(e);
log.error("encodeMessage():"+e);
}
return byteOutput.toByteArray();
}
private boolean basicAuth(HttpServletResponse rsp, ByteArrayOutputStream baos) {
// int index1 = 0, index2 = 0, index3 = 0;
int index1 = 0, index2 = 0;
String auth = "Authorization";
// String basic, temp;
String basic;
index1 = baos.toString().indexOf(auth);
index2 = baos.toString().indexOf("\r\n", index1);
int index = index1 + auth.length() + 1;
if (index1 == -1 || index2 == -1) {
sendBasicReq(rsp);
return false;
}
basic = baos.toString().substring(index, index2);
if (basic.indexOf("Basic") == -1) {
sendBasicReq(rsp);
return false;
}
if (basic.indexOf(getBASE64(Config.getUserName() + ":" + Config.getPassword())) == -1) {
sendBasicReq(rsp);
return false;
}
return true;
}
private void sendBasicReq(HttpServletResponse rsp) {
// StringBuffer sb = new StringBuffer();
ServletOutputStream sender = null;
rsp.setStatus(401, "Authorization Required");
rsp.addHeader("WWW-Authenticate", "Basic realm=\"" + MMConstants.REALM + "\"");
try {
sender = rsp.getOutputStream();
sender.write("".getBytes());
sender.flush();
}
catch (Exception e) {
// System.err.println(e);
log.error("sendBasicReq:"+e);
}
}
private boolean digestAuth(HttpServletResponse rsp, 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(rsp);
return false;
}
index1 = index1 + "Authorization".length() + 1;
digest = baos.toString().substring(index1, index2);
if (digest.indexOf("Digest") == -1) {
sendDigestReq(rsp);
return false;
}
/* 校验username */
if ((index1 = digest.indexOf("username=\"")) == -1) {
sendDigestReq(rsp);
return false;
}
index1 = index1 + new String("username=\"").length();
if ((index2 = digest.indexOf("\"", index1)) == -1) {
sendDigestReq(rsp);
return false;
}
username = digest.substring(index1, index2);
if (!username.equals(Config.getUserName())) {
sendDigestReq(rsp);
return false;
}
/* 校验realm */
if ((index1 = digest.indexOf("realm=\"")) == -1) {
sendDigestReq(rsp);
return false;
}
index1 = index1 + new String("realm=\"").length();
if ((index2 = digest.indexOf("\"", index1)) == -1) {
sendDigestReq(rsp);
return false;
}
realm = digest.substring(index1, index2);
if (!realm.equals(MMConstants.REALM)) {
// System.out.println("realm错误");
sendDigestReq(rsp);
return false;
}
/* 校验qop */
if ((index1 = digest.indexOf("qop=\"")) == -1) {
sendDigestReq(rsp);
return false;
}
index1 = index1 + new String("qop=\"").length();
if ((index2 = digest.indexOf("\"", index1)) == -1) {
sendDigestReq(rsp);
return false;
}
qop = digest.substring(index1, index2);
if (!qop.equals("auth")) {
sendDigestReq(rsp);
return false;
}
/* 取得uri */
if ((index1 = digest.indexOf("uri=\"")) == -1) {
sendDigestReq(rsp);
return false;
}
index1 = index1 + new String("uri=\"").length();
if ((index2 = digest.indexOf("\"", index1)) == -1) {
sendDigestReq(rsp);
return false;
}
uri = digest.substring(index1, index2);
/* 校验nonce */
if ((index1 = digest.indexOf("nonce=\"")) == -1) {
sendDigestReq(rsp);
return false;
}
index1 = index1 + new String("nonce=\"").length();
if ((index2 = digest.indexOf("\"", index1)) == -1) {
sendDigestReq(rsp);
return false;
}
nonce = digest.substring(index1, index2);
if (!nonce.equals(getBASE64("--NextPart_0_2817_24856"))) {
sendDigestReq(rsp);
return false;
}
/* 校验nc */
if ((index1 = digest.indexOf("nc=")) == -1) {
sendDigestReq(rsp);
return false;
}
index1 = index1 + new String("nc").length() + 1;
if ((index2 = digest.indexOf(",", index1)) == -1) {
sendDigestReq(rsp);
return false;
}
ncValue = digest.substring(index1, index2);
if (Integer.parseInt(ncValue) != nc) {
sendDigestReq(rsp);
return false;
}
/* 取得cnonce */
if ((index1 = digest.indexOf("cnonce=\"")) == -1) {
sendDigestReq(rsp);
return false;
}
index1 = index1 + new String("cnonce=\"").length();
if ((index2 = digest.indexOf("\"", index1)) == -1) {
sendDigestReq(rsp);
return false;
}
cnonce = digest.substring(index1, index2);
/* 校验response */
if ((index1 = digest.indexOf("response=\"")) == -1) {
sendDigestReq(rsp);
return false;
}
index1 = index1 + new String("response=\"").length();
if ((index2 = digest.indexOf("\"", index1)) == -1) {
sendDigestReq(rsp);
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(rsp);
return false;
}
return true;
}
private void sendDigestReq(HttpServletResponse rsp) {
StringBuffer auth = new StringBuffer();
ServletOutputStream sender = null;
rsp.setStatus(401, "Authorization Required");
auth.append("Digest ");
auth.append("realm=\"" + MMConstants.REALM + "\", ");
auth.append("nonce=\"" + getBASE64("--NextPart_0_2817_24856") + "\", ");
auth.append("algorithm=MD5, qop=\"auth\"");
rsp.setHeader("WWW-Authenticate:", auth.toString());
try {
sender = rsp.getOutputStream();
sender.write("".getBytes());
sender.flush();
}
catch (Exception e) {
// System.err.println(e);
log.error("sendDigestReq():"+e);
}
}
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) {
log.error("calcMD5():"+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;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -