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 java.util.logging.Logger; import javax.crypto.Mac; import javax.crypto.spec.SecretKeySpec; import org.xmlpull.mxp1.MXParser; import org.xmlpull.v1.XmlPullParser; /** * * @author ugnich */ public class Connection { protected static final Logger LOGGER = Logger.getLogger(Connection.class.getName()); 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 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"; LOGGER.fine(tag); } public void sendStanza(String xml) throws IOException { if (streamID != null) { LOGGER.fine("OUT: " + xml + "\n"); } writer.write(xml); writer.flush(); tsLocalData = System.currentTimeMillis(); bytesLocal += xml.length(); packetsLocal++; } void closeConnection() { if (streamID != null) { LOGGER.info(String.format("CLOSING STREAM %s", streamID)); } 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(); } }