📄 mm7sender.java
字号:
if (ConnectionFlag
.trim()
.toLowerCase()
.equals(
"keep-alive")) {
pool
.setNonceCount(Integer
.toString(Integer
.parseInt(
pool
.getNonceCount(),
8) + 1));
connWrap
.setDigestInfor(setDigestAuth(authInfor));
continue;
}
}
}
// 开始接收http体
if (totalresline == httpseper
+ contlen3 + 4) {
/*
* if(this.TimeOutFlag==true){
* SevereBuffer.append("baos.tostring()=="+baos.toString()); }
*/
if (pool.getKeepAlive().equals(
"off")) {
sender.close();
receiver.close();
client.close();
} else {
connWrap
.setUserfulFlag(true);
connWrap.setFree(true);
}
flag = true;
bReceive = true;
break;
}
}
} else if (baos.toString().indexOf("Basic") != -1) {
if (ResendCount < mm7Config
.getReSendCount()) {
ResendCount = ResendCount + 1;
receiveMessge();
} else {
bReceive = false;
break;
}
}
} else {
bReceive = false;
break;
}
} else {
int index1 = baos.toString().toLowerCase()
.indexOf(MMConstants.CONTENT_LENGTH);
int index2 = baos.toString().indexOf("\r",
index1);
int contlength = 0;
if (index1 == -1 || index2 == -1) {
int encodingindex = baos.toString()
.toLowerCase().indexOf(
"transfer-encoding:");
if (encodingindex >= 0) {
int encodingend = baos.toString()
.indexOf("\r\n", encodingindex);
if (encodingend >= 0) {
String strenc = baos
.toString()
.substring(
encodingindex
+ "transfer-encoding:"
.length(),
encodingend).trim();
if (strenc
.equalsIgnoreCase("chunked")) {
// //在这里可以增加chunked的处理
int endencindex2 = baos
.toString()
.indexOf("\r\n",
encodingend + 1);
if (endencindex2 >= 0) {
int xmlbeg = baos
.toString()
.indexOf(
MMConstants.BEGINXMLFLAG,
endencindex2 + 1);
if (xmlbeg > 0) {
String strTempContLen = baos
.toString()
.substring(
endencindex2,
xmlbeg)
.trim();
contlength = Integer
.parseInt(
strTempContLen,
16);
}
}
} else {
bReceive = false;
break;
}
} else {
bReceive = false;
break;
}
} else {
continue;
}
if (totalline >= httpsepindex + contlength
+ 8) {
SevereBuffer.append("receive end");
SevereBuffer.append("baos.toString()=="
+ baos.toString());
if (pool.getKeepAlive().equals("off")) {
sender.close();
receiver.close();
client.close();
} else {
connWrap.setUserfulFlag(true);
connWrap.setFree(true);
}
bReceive = true;
break;
}
} else {
contlength = Integer
.parseInt(baos
.toString()
.substring(
(index1
+ MMConstants.CONTENT_LENGTH
.length() + 1),
index2).trim());
// 开始接收http体
if (totalline == httpsepindex + contlength
+ 4) {
// System.out.println("正常接收结束");
// add by hudm to test 104 problem
// 2004-06-09
if (this.TimeOutFlag == true)
SevereBuffer
.append("baos.tostring()=="
+ baos.toString());
// end add by hudm
if (pool.getKeepAlive().equals("off")) {
sender.close();
receiver.close();
client.close();
} else {
connWrap.setUserfulFlag(true);
connWrap.setFree(true);
}
bReceive = true;
break;
}
}
}
} else {
bReceive = false;
break;
}
}
}
/*
* else { //System.out.println("第1083行。"); this.TimeOutFlag =
* true; sendBaos = getSendMessage(this.TimeOutbCount); if
* (sendBaos != null) { //System.out.println("第1087行。"); res =
* SendandReceiveMessage(sendBaos); if(res != null) {
* this.TimeOutFlag = false; return true; } } else return false; }
*/
}
return bReceive;
} catch (SocketTimeoutException ste) {
// System.out.println("第1100行。");
this.TimeOutFlag = true;
ReadTimeOutCount++;
if (ReadTimeOutCount < mm7Config.getReSendCount()) {
sendBaos = getSendMessage(this.TimeOutbCount);
if (sendBaos != null) {
res = SendandReceiveMessage(sendBaos);
if (res != null) {
this.TimeOutFlag = false;
return true;
}
/*
* if (res.getStatusCode() ==
* MMConstants.RequestStatus.SUCCESS) { this.TimeOutFlag =
* false; return true; }
*/
} else
return false;
}
this.TimeOutFlag = false;
res.setStatusCode(-101);
res.setStatusText("超时发送失败!");
SevereBuffer
.append("[Comments={-101;" + res.getStatusText() + "}]");
ReadTimeOutCount = 0;
return false;
}
}
/** 输入string,输出经过MD5编码的String */
public 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 String setDigestAuth(String authinfor) {
String auth = authinfor + "\r\n";
int equal = -1;
int comma = -1;
StringBuffer authBuffer = new StringBuffer();
authBuffer.append("Authorization: Digest ");
String qopValue;
String MD5A2;
String algValue;
String cnonceValue = "";
String ncValue;
String responseValue;
String uri = mm7Config.getMMSCURL();
if (uri == null)
uri = "";
String username = mm7Config.getUserName();
authBuffer.append("uri=\"" + uri + "\",");
authBuffer.append("username=\"" + username + "\",");
String passwd = mm7Config.getPassword();
// 获得realm的值
int realmindex = auth.indexOf(MMConstants.REALM);
equal = auth.indexOf("=", realmindex + 1);
comma = auth.indexOf("\"", equal + 2);
String realmValue = auth.substring(equal + 1, comma);
if (realmValue.startsWith("\""))
realmValue = realmValue.substring(1, realmValue.length());
authBuffer.append("realm=\"" + realmValue + "\",");
String MD5A1;
// 取得nonce的值
int nonceindex = auth.indexOf(MMConstants.NONCE);
equal = auth.indexOf("=", nonceindex + 1);
comma = auth.indexOf("\"", equal + 2);
String nonceValue = auth.substring(equal + 1, comma);
if (nonceValue.startsWith("\""))
nonceValue = nonceValue.substring(1, nonceValue.length());
authBuffer.append("nonce=\"" + nonceValue + "\",");
// 判断有没有opaque,若有,则原封不动地返回给服务器
int opaqueindex = auth.indexOf(MMConstants.OPAQUE);
if (opaqueindex > 0) {
equal = auth.indexOf("=", opaqueindex + 1);
comma = auth.indexOf("\"", equal + 2);
authBuffer.append("opaque=" + auth.substring(equal + 1, comma + 1));
}
// 取得algorithm的值
int algindex = auth.indexOf(MMConstants.ALGORITHM);
if (algindex > 0) {
equal = auth.indexOf("=", algindex);
comma = auth.indexOf(",", equal + 2);
if (comma >= 0) {
algValue = auth.substring(equal + 1, comma);
if (algValue.startsWith("\""))
algValue = algValue.substring(1, algValue.length() - 1);
} else {
comma = auth.indexOf("/r", equal);
algValue = auth.substring(equal + 1, comma);
if (algValue.startsWith("\""))
algValue = algValue.substring(1, algValue.length());
}
} else {
algValue = "MD5";
}
// 取得qop的值
int qopindex = auth.indexOf(MMConstants.QOP);
if (algValue.equals("MD5") || algValue.equals("MD5-sess")) {
MD5A1 = calcMD5(username + ":" + realmValue + ":" + passwd);
// 服务器存在qop这个字段
if (qopindex > 0) {
equal = auth.indexOf("=", qopindex);
comma = auth.indexOf("\"", equal + 2);
qopValue = auth.substring(equal + 1, comma);
if (qopValue.startsWith("\""))
qopValue = qopValue.substring(1, qopValue.length());
/**
* 表明服务器给出了两种qop,为auth和auth-int, 这是应该是客户端自己选择采用哪种方式进行鉴权
*/
if (qopValue.indexOf(",") > 0) {
if (mm7Config.getDigest().equals("auth-int")) {
MD5A2 = calcMD5("POST" + ":" + uri + ":"
+ calcMD5(entityBody.toString()));
} else {
MD5A2 = calcMD5("POST" + ":" + uri);
}
ncValue = String.valueOf(pool.getNonceCount());
cnonceValue = getBASE64(ncValue);
responseValue = calcMD5(MD5A1 + ":" + nonceValue + ":"
+ ncValue + ":" + cnonceValue + ":" + qopValue
+ ":" + MD5A2);
authBuffer.append("qop=\"" + mm7Config.getDigest() + "\",");
authBuffer.append("nc=" + ncValue + ",");
authBuffer.append("cnonce=\"" + cnonceValue + "\",");
authBuffer.append("response=\"" + responseValue + "\",");
}
// 服务器端只有一种qop方式。
else {
if (qopValue.equals("auth-int")) {
MD5A2 = calcMD5("POST" + ":" + uri + ":"
+ calcMD5(entityBody.toString()));
} else
MD5A2 = calcMD5("POST" + ":" + uri);
ncValue = String.valueOf(pool.getNonceCount());
cnonceValue = getBASE64(ncValue);
responseValue = calcMD5(MD5A1 + ":" + nonceValue + ":"
+ ncValue + ":" + cnonceValue + ":" + qopValue
+ ":" + MD5A2);
authBuffer.append("qop=\"" + qopValue + "\",");
authBuffer.append("nc=" + ncValue + ",");
authBuffer.append("cnonce=\"" + cnonceValue + "\",");
authBuffer.append("response=\"" + responseValue + "\",");
}
}
// 服务器端不存在对qop的方式的选择
else {
MD5A2 = calcMD5("POST" + ":" + uri);
responseValue = calcMD5(MD5A1 + ":" + nonceValue + ":" + MD5A2);
authBuffer.append("response=\"" + responseValue + "\",");
}
}
// 去掉最后一个逗号
int lastcommaindex = authBuffer.lastIndexOf(",");
authBuffer.delete(lastcommaindex, lastcommaindex + 1);
authBuffer.append("\r\n");
return authBuffer.toString();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -