1. SSLSocket
SSLContext context;
javax.net.ssl.SSLSocketFactory factory = null;
context = SSLContext.getInstance("TLS");
context.init(null, new TrustManager[] { tm }, new SecureRandom());
factory = context.getSocketFactory();
SSLSocket sslSocket = (SSLSocket) factory.createSocket(serverAddress, serverPort);
private static String MD5(String sourceStr) {
String result = "";
try {
MessageDigest md = MessageDigest.getInstance("MD5");
md.update(sourceStr.getBytes());
byte b[] = md.digest();
int i;
StringBuffer buf = new StringBuffer("");
for (int offset = 0; offset < b.length; offset++) {
i = b[offset];
if (i < 0)
i += 256;
if (i < 16)
buf.append("0");
buf.append(Integer.toHexString(i));
}
result = buf.toString();
} catch (NoSuchAlgorithmException e) {
//System.out.println(e);
}
return result;
}
3.校验
String uri = "sip:"+MainClass.serverAddress+":"+MainClass.serverPort+"";
String str1 = name + ":" + realm + ":" + pwd;
String hash1 = MD5(str1);
String str2 = "REGISTER:" + uri;
String hash2 = MD5(str2);
String str3 = hash1 + ":" + nonce + ":" + hash2;
String hash3 = MD5(str3);
4.最大的坑啊 printWrite输入的行后面带的回车符是\n, 而Astisk要求的是\r\n, 坑了我整整一天!!!!
PrintWriter pw = new PrintWriter(new OutputStreamWriter(sslSocket.getOutputStream()));
String xx = "REGISTER sip:" + MainClass.serverAddress + ":"+MainClass.serverPort+" SIP/2.0\r\n";
xx+="Via: SIP/2.0/TLS " + address + ":" + port + ";alias;branch=z9hG4bKhfYKNAg7r7;rport\r\n";
xx+="From: <sip:" + name + "@" + MainClass.serverAddress + ">;tag=uXpl3fxe1G\r\n";
xx+="To: sip:" + name + "@" + MainClass.serverAddress+"\r\n";
xx+="CSeq: "+(time+1)+" REGISTER\r\n";
xx+="Call-ID: awf"+name.hashCode()+"KT\r\n";
xx+="Max-Forwards: 70\r\n";
xx+="Supported: replaces, outbound\r\n";
xx+="Accept: application/sdp\r\n";
xx+="Accept: text/plain\r\n";
//xx+="Accept: application/vnd.gsma.rcs-ft-http+xml");
xx+="Contact: <sip:" + name + "@" + address + ":" + port + ";transport=tls>;+sip.instance=\"<urn:uuid:aa11ae5c-b87c-44d8-8bb2-ae04c1" + name + ">\"\r\n";
xx+="Expires: 660\r\n";
xx+="User-Agent: Justek/1.0 (belle-sip/1.4.2)\r\n";
xx+="Content-Length: 0\r\n";
xx+="Authorization: Digest realm=\"" + realm + "\", nonce=\"" + nonce
+ "\", algorithm=MD5, username=\"" + name + "\", uri=\"" + uri + "\", response=\""
+ hash3 + "\"\r\n\r\n";
pw.write(xx);
pw.flush();