diff options
Diffstat (limited to 'src/main/java/com/juick/xmpp/s2s/Connection.java')
-rw-r--r-- | src/main/java/com/juick/xmpp/s2s/Connection.java | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/src/main/java/com/juick/xmpp/s2s/Connection.java b/src/main/java/com/juick/xmpp/s2s/Connection.java new file mode 100644 index 00000000..699e52bf --- /dev/null +++ b/src/main/java/com/juick/xmpp/s2s/Connection.java @@ -0,0 +1,99 @@ +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 += ">...</" + parser.getName() + ">\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("</stream:stream>"); + } 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(); + } +} |