aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/com/juick/xmpp/s2s/Connection.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/com/juick/xmpp/s2s/Connection.java')
-rw-r--r--src/main/java/com/juick/xmpp/s2s/Connection.java99
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();
+ }
+}