summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: bccb6da)
raw | patch | inline | side by side (parent: bccb6da)
author | ishmal <ishmal@users.sourceforge.net> | |
Mon, 29 May 2006 01:05:11 +0000 (01:05 +0000) | ||
committer | ishmal <ishmal@users.sourceforge.net> | |
Mon, 29 May 2006 01:05:11 +0000 (01:05 +0000) |
src/pedro/Makefile.mingw | patch | blob | history | |
src/pedro/pedroconfig.cpp | [new file with mode: 0644] | patch | blob |
src/pedro/pedroconfig.h | [new file with mode: 0644] | patch | blob |
src/pedro/pedrogui.cpp | patch | blob | history | |
src/pedro/pedrogui.h | patch | blob | history |
index 693dfca891ef8406540e7674a5519579cc78deed..53b1d8e85889622425535b09752280c230ff21e3 100644 (file)
--- a/src/pedro/Makefile.mingw
+++ b/src/pedro/Makefile.mingw
CFLAGS = -g -Wall -DHAVE_SSL
INC = -I. -I$(GTK)/include -I$(SSL)/include
-LIBS = -mwindows -L$(GTK)/lib -L$(SSL) -lssl -lcrypto -lgdi32 -lws2_32
+
+
+LIBSC = -mconsole -L$(GTK)/lib -L$(SSL) -lssl -lcrypto -lgdi32 -lws2_32
+LIBS = -mwindows -L$(GTK)/lib -L$(SSL) -lssl -lcrypto -lgdi32 -lws2_32
+
RM = del
CP = copy
S = $(BSLASH)
OBJ = \
pedrodom.o \
-pedroxmpp.o
+pedroxmpp.o \
+pedroconfig.o
GUIOBJ = \
pedrogui.o \
work/groupchat.o
test.exe: libpedro.a work/test.o
- $(CXX) -o $@ work/test.o libpedro.a $(LIBS)
+ $(CXX) -o $@ work/test.o libpedro.a $(LIBSC)
test: libpedro.a work/test.o
- $(CXX) -o $@ work/test.o libpedro.a $(LIBS)
+ $(CXX) -o $@ work/test.o libpedro.a $(LIBSC)
filesend.exe: libpedro.a work/filesend.o
- $(CXX) -o $@ work/filesend.o libpedro.a $(LIBS)
+ $(CXX) -o $@ work/filesend.o libpedro.a $(LIBSC)
filesend: libpedro.a work/filesend.o
- $(CXX) -o $@ work/filesend.o libpedro.a $(LIBS)
+ $(CXX) -o $@ work/filesend.o libpedro.a $(LIBSC)
filerec.exe: libpedro.a work/filerec.o
- $(CXX) -o $@ work/filerec.o libpedro.a $(LIBS)
+ $(CXX) -o $@ work/filerec.o libpedro.a $(LIBSC)
filerec: libpedro.a work/filerec.o
- $(CXX) -o $@ work/filerec.o libpedro.a $(LIBS)
+ $(CXX) -o $@ work/filerec.o libpedro.a $(LIBSC)
groupchat.exe: libpedro.a work/groupchat.o
- $(CXX) -o $@ work/groupchat.o libpedro.a $(LIBS)
+ $(CXX) -o $@ work/groupchat.o libpedro.a $(LIBSC)
groupchat: libpedro.a work/groupchat.o
- $(CXX) -o $@ work/groupchat.o libpedro.a $(LIBS)
+ $(CXX) -o $@ work/groupchat.o libpedro.a $(LIBSC)
pedro.exe: libpedro.a pedromain.o pedrogui.o
$(CXX) -o $@ pedromain.o pedrogui.o libpedro.a $(GTKLIBS) $(LIBS)
diff --git a/src/pedro/pedroconfig.cpp b/src/pedro/pedroconfig.cpp
--- /dev/null
@@ -0,0 +1,230 @@
+/*
+ * Implementation the Pedro mini-XMPP client
+ *
+ * Authors:
+ * Bob Jamison
+ *
+ * Copyright (C) 2005-2006 Bob Jamison
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+/*
+====================================================
+We are expecting an xml file with this format:
+
+<pedro>
+
+ <!-- zero to many of these -->
+ <account>
+ <name>Jabber's Main Server</name>
+ <host>jabber.org</host>
+ <port>5222</port>
+ <username>myname</username>
+ <password>mypassword</password>
+ </account>
+
+</pedro>
+
+
+====================================================
+*/
+
+
+
+#include "pedroconfig.h"
+#include "pedrodom.h"
+
+#include <stdio.h>
+
+namespace Pedro
+{
+
+
+static long getInt(const DOMString &s)
+{
+ char *start = (char *) s.c_str();
+ char *end;
+ long val = strtol(start, &end, 10);
+ if (end == start) // did we read more than 1 digit?
+ val = 0L;
+ return val;
+}
+
+
+
+bool XmppConfig::read(const DOMString &buffer)
+{
+ Parser parser;
+
+ Element *root = parser.parse(buffer);
+
+ if (!root)
+ {
+ error("Error in configuration syntax");
+ return false;
+ }
+
+ accounts.clear();
+
+ std::vector<Element *> accountElems = root->findElements("account");
+
+ for (unsigned int i=0 ; i<accountElems .size() ; i++)
+ {
+ XmppAccount account;
+ Element *elem = accountElems [i];
+
+ DOMString str = elem ->getTagValue("name");
+ if (str.size()==0)
+ str = "unnamed account";
+ account.setName(str);
+
+ str = elem->getTagValue("host");
+ if (str.size()==0)
+ str = "jabber.org";
+ account.setName(str);
+
+ str = elem->getTagValue("port");
+ int port = (int) getInt(str);
+ if (port == 0)
+ port = 5222;
+ account.setPort(port);
+
+ str = elem->getTagValue("username");
+ if (str.size()==0)
+ str = "noname";
+ account.setUsername(str);
+
+ str = elem->getTagValue("password");
+ if (str.size()==0)
+ str = "nopass";
+ account.setPassword(str);
+
+ accounts.push_back(account);
+ }
+
+
+ delete root;
+
+ return true;
+}
+
+
+
+
+
+
+bool XmppConfig::readFile(const DOMString &fileName)
+{
+
+ FILE *f = fopen(fileName.c_str(), "rb");
+ if (!f)
+ {
+ error("Could not open configuration file '%s' for reading",
+ fileName.c_str());
+ return false;
+ }
+
+ DOMString buffer;
+ while (!feof(f))
+ {
+ char ch = (char) fgetc(f);
+ buffer.push_back(ch);
+ }
+ fclose(f);
+
+ if (!read(buffer))
+ return false;
+
+ return true;
+}
+
+
+DOMString XmppConfig::toXmlBuffer()
+{
+
+ DOMString buf;
+
+ char fmtbuf[32];
+
+ buf.append("<pedro>\n");
+
+ for (unsigned int i = 0 ; i<accounts.size() ; i++)
+ {
+ XmppAccount acc = accounts[i];
+ buf.append(" <account>\n");
+ buf.append(" <name>");
+ buf.append(acc.getName());
+ buf.append("</name>\n");
+ buf.append(" <host>");
+ buf.append(acc.getHost());
+ buf.append("</host>\n");
+ buf.append(" <port>");
+ snprintf(fmtbuf, 31, "%d", acc.getPort());
+ buf.append(fmtbuf);
+ buf.append("</port>\n");
+ buf.append(" <username>");
+ buf.append(acc.getUsername());
+ buf.append("</username>\n");
+ buf.append(" <password>");
+ buf.append(acc.getPassword());
+ buf.append("</password>\n");
+ buf.append(" </account>\n");
+ }
+
+ buf.append("</pedro>\n");
+
+ return buf;
+}
+
+
+
+
+bool XmppConfig::writeFile(const DOMString &fileName)
+{
+
+ FILE *f = fopen(fileName.c_str(), "wb");
+ if (!f)
+ {
+ error("Could not open configuration file '%s' for writing",
+ fileName.c_str());
+ return false;
+ }
+
+ DOMString buffer = toXmlBuffer();
+ char *s = (char *)buffer.c_str();
+ size_t len = (size_t) strlen(s); //in case we have wide chars
+
+ if (fwrite(s, 1, len, f) != len)
+ {
+ return false;
+ }
+ fclose(f);
+
+ if (!read(buffer))
+ return false;
+
+ return true;
+}
+
+
+
+
+
+} //namespace Pedro
+//########################################################################
+//# E N D O F F I L E
+//########################################################################
diff --git a/src/pedro/pedroconfig.h b/src/pedro/pedroconfig.h
--- /dev/null
+++ b/src/pedro/pedroconfig.h
@@ -0,0 +1,249 @@
+#ifndef __PEDROCONFIG_H__
+#define __PEDROCONFIG_H__
+/*
+ * Implementation the Pedro mini-XMPP client
+ *
+ * Authors:
+ * Bob Jamison
+ *
+ * Copyright (C) 2005-2006 Bob Jamison
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+
+
+#include "pedrodom.h"
+#include "pedroxmpp.h"
+
+#include <vector>
+
+
+
+namespace Pedro
+{
+
+
+/**
+ * Individual account record
+ */
+class XmppAccount
+{
+
+public:
+
+ /**
+ *
+ */
+ XmppAccount()
+ { init(); }
+
+ /**
+ *
+ */
+ XmppAccount(const XmppAccount &other)
+ { assign(other); }
+
+ /**
+ *
+ */
+ XmppAccount operator=(const XmppAccount &other)
+ { assign(other); return *this; }
+
+ /**
+ *
+ */
+ virtual ~XmppAccount()
+ {}
+
+
+ /**
+ *
+ */
+ virtual DOMString getName()
+ { return name; }
+
+ /**
+ *
+ */
+ virtual void setName(const DOMString &val)
+ { name = val; }
+
+ /**
+ *
+ */
+ virtual DOMString getHost()
+ { return host; }
+
+ /**
+ *
+ */
+ virtual void setHost(const DOMString &val)
+ { host = val; }
+
+ /**
+ *
+ */
+ virtual int getPort()
+ { return port; }
+
+ /**
+ *
+ */
+ virtual void setPort(int val)
+ { port = val; }
+
+ /**
+ *
+ */
+ virtual DOMString getUsername()
+ { return username; }
+
+ /**
+ *
+ */
+ virtual void setUsername(const DOMString &val)
+ { username = val; }
+
+ /**
+ *
+ */
+ virtual DOMString getPassword()
+ { return password; }
+
+ /**
+ *
+ */
+ virtual void setPassword(const DOMString &val)
+ { password = val; }
+
+
+
+private:
+
+ void init()
+ {
+ name = "noname";
+ host = "jabber.org";
+ port = 5222;
+ username = "nobody";
+ password = "nopass";
+ }
+
+ void assign(const XmppAccount &other)
+ {
+ name = other.name;
+ host = other.host;
+ port = other.port;
+ username = other.username;
+ password = other.password;
+ }
+
+ DOMString name;
+ DOMString host;
+ int port;
+ DOMString username;
+ DOMString password;
+
+};
+
+
+
+/**
+ * Configuration record
+ */
+class XmppConfig : XmppEventTarget
+{
+
+public:
+
+ /**
+ *
+ */
+ XmppConfig()
+ { init(); }
+
+ /**
+ *
+ */
+ XmppConfig(const XmppConfig &other)
+ { assign(other); }
+
+ /**
+ *
+ */
+ virtual XmppConfig &operator=(const XmppConfig &other)
+ { assign(other); return *this; }
+
+ /**
+ *
+ */
+ virtual ~XmppConfig()
+ {}
+
+
+ /**
+ * Parse a configuration xml chunk from a memory buffer
+ */
+ virtual bool read(const DOMString &buffer);
+
+ /**
+ * Parse a configuration file
+ */
+ virtual bool readFile(const DOMString &fileName);
+
+ /**
+ * Ouputs this object as a string formatted in XML
+ */
+ virtual DOMString toXmlBuffer();
+
+ /**
+ * Write a configuration file
+ */
+ virtual bool writeFile(const DOMString &fileName);
+
+ /**
+ *
+ */
+ virtual std::vector<XmppAccount> &getAccounts()
+ { return accounts; }
+
+
+
+private:
+
+ void init()
+ {
+ }
+
+ void assign(const XmppConfig &other)
+ {
+ accounts = other.accounts;
+ }
+
+ std::vector<XmppAccount> accounts;
+
+};
+
+
+
+
+} //namespace Pedro
+
+#endif /* __PEDROCONFIG_H__ */
+
+//########################################################################
+//# E N D O F F I L E
+//########################################################################
diff --git a/src/pedro/pedrogui.cpp b/src/pedro/pedrogui.cpp
index eb02c3e5637d1a67971b8bae0353a20b5311d136..267e47ff9f5bc7032b0013fcd0530f84ac59a8f9 100644 (file)
--- a/src/pedro/pedrogui.cpp
+++ b/src/pedro/pedrogui.cpp
Glib::signal_timeout().connect(
sigc::mem_fun(*this, &PedroGui::checkEventQueue), 20 );
+ config.readFile("pedro.ini");
+
//client.addXmppEventListener(*this);
client.eventQueueEnable(true);
diff --git a/src/pedro/pedrogui.h b/src/pedro/pedrogui.h
index b4655bec16ee293674fb67650fb799152728c007..3b25946d3eaa6291b3fb851a90df68a4e9cf008b 100644 (file)
--- a/src/pedro/pedrogui.h
+++ b/src/pedro/pedrogui.h
#include <gtkmm.h>
#include "pedroxmpp.h"
+#include "pedroconfig.h"
namespace Pedro
virtual ~PedroGui();
- //Let everyone share this
+ //Let everyone share these
XmppClient client;
+ XmppConfig config;
virtual void error(const char *fmt, ...);