package com.juick.xmpp.s2s; import java.io.FileWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.net.Socket; import java.util.Date; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.xmlpull.mxp1.MXParser; import org.xmlpull.v1.XmlPullParser; /** * * @author ugnich */ public class Connection { public String streamID; public long tsCreated = 0; public long tsLocalData = 0; public long bytesLocal = 0; public long packetsLocal = 0; Socket socket; final XmlPullParser parser = new MXParser(); OutputStreamWriter writer; public Connection() { tsCreated = System.currentTimeMillis(); } public void logXml(String xml) { try { FileWriter logFile = new FileWriter(XMPPComponent.LOGFILE, true); logFile.write(new Date().toString() + "\t" + streamID + "\t" + xml); logFile.close(); } catch (IOException e) { } } public void logParser() { if (streamID == null) { return; } String tag = "IN: <" + parser.getName(); for (int i = 0; i < parser.getAttributeCount(); i++) { tag += " " + parser.getAttributeName(i) + "=\"" + parser.getAttributeValue(i) + "\""; } tag += ">...\n"; logXml(tag); } public void sendStanza(String xml) throws IOException { if (XMPPComponent.LOGFILE != null && streamID != null) { logXml("OUT: " + xml + "\n"); } writer.write(xml); writer.flush(); tsLocalData = System.currentTimeMillis(); bytesLocal += xml.length(); packetsLocal++; } void closeConnection() { if (XMPPComponent.LOGFILE != null && streamID != null) { logXml("CLOSING STREAM\n"); } try { writer.write(""); } catch (Exception e) { } try { writer.close(); } catch (Exception e) { } try { socket.close(); } catch (Exception e) { } } static String generateDialbackKey(String to, String from, String id) throws Exception { Mac hmacSha256 = Mac.getInstance("hmacSHA256"); SecretKeySpec secret_key = new SecretKeySpec("$UppPerSeCCret4".getBytes(), "SHA-256"); hmacSha256.init(secret_key); byte key[] = hmacSha256.doFinal((to + " " + from + " " + id).getBytes()); StringBuilder hexkey = new StringBuilder(); for (int i = 0; i < key.length; i++) { hexkey.append(Integer.toHexString(0xFF & key[i])); } return hexkey.toString(); } }