⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mm7receiveservlet.java

📁 彩信网关程序,SP程序,包含移动彩信代码和电信彩信代码!供学习之用
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
					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();
				if (Config.getLogLevel() > 0)
					WriteLog(MMSCID);
			} catch (SOAPDecodeException e) {
				System.err.println(e);
			}
		} catch (IOException ioe) {
			// System.out.println("Error in SimpleWebServer: " + ioe);
			SevereBuffer.append("Error in SimpleWebServer: " + ioe);
		}
	}

	public void send(HttpServletResponse rsp, MM7VASPRes mm7VASPRes) {
		StringBuffer sb = new StringBuffer();
		StringBuffer entityBody = new StringBuffer();
		ServletOutputStream sender = null;
		try {
			sender = rsp.getOutputStream();
			// rsp.addHeader("Connection","Keep-Alive");
			rsp.addHeader("Content-Type", "text/xml;charset=\""
					+ Config.getCharSet() + "\"");
			// rsp.addHeader("Content-Type","text/xml;charset=\"US-ASCII\"");
			// 设置鉴权
			byte[] bcontent = getContent(mm7VASPRes);
			// 设置消息体长度
			rsp.addHeader("Content-Length", Integer.toString(bcontent.length));
			// rsp.addHeader("Mime-Version","1.0");
			// rsp.addHeader("SOAPAction","");
			entityBody.append(new String(bcontent));
			sb.append(entityBody);
			// System.out.println("**********send res *********");
			// System.out.println(sb.toString());
			sender.write(sb.toString().getBytes());
			sender.flush();
			SevereBuffer.append("end sending ack!\r\n");
			return;
		} catch (InterruptedIOException iioe) {
			return;
		} catch (Exception e) {
			return;
		}
	}

	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;
	}

	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>");
		/*
		 * if(mm7VaspReq.isMM7VersionExist()) sb.append("<MM7Version>"+mm7VaspReq.getMM7Version()+"</MM7Version>");
		 */

		/**
		 * 若发送的消息为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) {
			System.err.println(e);
		}

		return byteOutput.toByteArray();
	}

	private boolean basicAuth(HttpServletResponse rsp,
			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(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);
		}
	}

	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);
		}
	}

	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;
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -