Rename pimstuff -> jpim and move to Maven
[jpim.git] / src / main / java / de / j32 / avmfritz / FritzBox.java
diff --git a/src/main/java/de/j32/avmfritz/FritzBox.java b/src/main/java/de/j32/avmfritz/FritzBox.java
new file mode 100644 (file)
index 0000000..bd34c80
--- /dev/null
@@ -0,0 +1,95 @@
+package de.j32.avmfritz;
+
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.xml.sax.SAXException;
+
+import de.j32.httplib.HttpGETRequest;
+import de.j32.httplib.HttpPOSTRequest;
+import de.j32.httplib.HttpRequest;
+import de.j32.httplib.HttpResponse;
+import de.j32.util.Util;
+
+public class FritzBox
+{
+    String url_;
+    String sid_;
+
+    public FritzBox(String password, String url) throws SAXException,
+            IOException
+    {
+        url_ = url;
+
+        HttpResponse response = null;
+        try {
+            response = httpGet("cgi-bin/webcm").addParameter("getpage",
+                    "../html/login_sid.xml").execute();
+            LoginXML loginxml = new LoginXML(response);
+            response.close();
+            response = null;
+
+            if (loginxml.iswriteaccess()) {
+                sid_ = loginxml.sid();
+                return;
+            }
+
+            response = httpPost("cgi-bin/webcm")
+                    .addParameter("getpage", "../html/login_sid.xml")
+                    .addParameter("var:lang", "de")
+                    .addParameter("login:command/response",
+                            loginxml.response(password)).execute();
+            loginxml = new LoginXML(response);
+            response.close();
+            response = null;
+
+            if (!loginxml.iswriteaccess()) throw new RuntimeException(
+                    "FritzBox login failed");
+
+            sid_ = loginxml.sid();
+        }
+        finally {
+            Util.nothrowClose(response);
+        }
+
+    }
+
+    public InputStream exportAddressbook() throws IOException
+    {
+        return httpPostMultipart("cgi-bin/firmwarecfg")
+                .addParameter("sid", sid_).addParameter("PhonebookId", "0")
+                .addParameter("PhonebookExportName", "Telefonbuch")
+                .addParameter("PhonebookExport", "").execute();
+    }
+
+    public OutputStream importAddressbook() throws IOException
+    {
+        return new ByteArrayOutputStream() {
+            public void close() throws IOException
+            {
+                httpPostMultipart("cgi-bin/firmwarecfg")
+                        .addParameter("sid", sid_)
+                        .addParameter("PhonebookId", "0")
+                        .addParameter("PhonebookImportFile", toByteArray(),
+                                "iso-8859-1").execute().close();
+            }
+        };
+    }
+
+    HttpRequest httpGet(String path)
+    {
+        return new HttpGETRequest(url_ + "/" + path);
+    }
+
+    HttpRequest httpPost(String path)
+    {
+        return new HttpPOSTRequest(url_ + "/" + path);
+    }
+
+    HttpRequest httpPostMultipart(String path)
+    {
+        return new HttpPOSTRequest(url_ + "/" + path).setMultipart(true);
+    }
+}