summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--.scons2ninja.conf6
-rw-r--r--3rdParty/Lua/SConscript4
-rw-r--r--3rdParty/Lua/src/lua.hpp5
-rw-r--r--Sluift/ClientHelpers.cpp50
-rw-r--r--Sluift/ClientHelpers.h18
-rw-r--r--Sluift/Lua/Value.cpp2
-rw-r--r--Sluift/SConscript18
-rw-r--r--Sluift/SluiftException.h70
-rw-r--r--Sluift/sluift.cpp114
-rw-r--r--Sluift/sluift.h11
-rw-r--r--Swiftob/LuaCommands.h4
-rw-r--r--Swiftob/SConscript2
-rw-r--r--Swiftob/linit.c (renamed from Swiftob/linit.cpp)0
13 files changed, 105 insertions, 199 deletions
diff --git a/.scons2ninja.conf b/.scons2ninja.conf
index f6c470e..9a5e68c 100644
--- a/.scons2ninja.conf
+++ b/.scons2ninja.conf
@@ -15,2 +15,8 @@ def ninja_post(ninja) :
else :
ninja.build(['Swift', 'swift'], 'phony', re.compile('Swift/QtUI/Swift\.app/(.*)'))
+
+ # Sluift
+ if sys.platform == 'win32' :
+ ninja.build(['Sluift', 'sluift'], 'phony', ['Sluift/sluift.exe', 'Sluift/sluift.dll'])
+ elif sys.platform in ['posix', 'darwin'] :
+ ninja.build(['Sluift', 'sluift'], 'phony', ['Sluift/sluift', 'Sluift/sluift.so'])
diff --git a/3rdParty/Lua/SConscript b/3rdParty/Lua/SConscript
index acb2fba..f73286f 100644
--- a/3rdParty/Lua/SConscript
+++ b/3rdParty/Lua/SConscript
@@ -32,8 +32,4 @@ if env.get("LUA_BUNDLED", False) :
if env["SCONS_STAGE"] == "build" :
myenv = env.Clone()
- if env["PLATFORM"] == "win32" :
- myenv.Append(CFLAGS = ["/TP"])
- else :
- myenv.Append(CFLAGS = ["-x", "c++"])
# Remove warn flags
diff --git a/3rdParty/Lua/src/lua.hpp b/3rdParty/Lua/src/lua.hpp
new file mode 100644
index 0000000..5060a4e
--- /dev/null
+++ b/3rdParty/Lua/src/lua.hpp
@@ -0,0 +1,5 @@
+extern "C" {
+#include "lua.h"
+#include "lualib.h"
+#include "lauxlib.h"
+}
diff --git a/Sluift/ClientHelpers.cpp b/Sluift/ClientHelpers.cpp
new file mode 100644
index 0000000..8e07112
--- /dev/null
+++ b/Sluift/ClientHelpers.cpp
@@ -0,0 +1,50 @@
+/*
+ * Copyright (c) 2013 Remko Tronçon
+ * Licensed under the GNU General Public License.
+ * See the COPYING file for more information.
+ */
+
+#include <Sluift/ClientHelpers.h>
+
+#include <Swiften/Client/ClientError.h>
+
+using namespace Swift;
+
+std::string Swift::getClientErrorString(const ClientError& error) {
+ std::string reason = "Disconnected: ";
+ switch(error.getType()) {
+ case ClientError::UnknownError: reason += "Unknown Error"; break;
+ case ClientError::DomainNameResolveError: reason += "Unable to find server"; break;
+ case ClientError::ConnectionError: reason += "Error connecting to server"; break;
+ case ClientError::ConnectionReadError: reason += "Error while receiving server data"; break;
+ case ClientError::ConnectionWriteError: reason += "Error while sending data to the server"; break;
+ case ClientError::XMLError: reason += "Error parsing server data"; break;
+ case ClientError::AuthenticationFailedError: reason += "Login/password invalid"; break;
+ case ClientError::CompressionFailedError: reason += "Error while compressing stream"; break;
+ case ClientError::ServerVerificationFailedError: reason += "Server verification failed"; break;
+ case ClientError::NoSupportedAuthMechanismsError: reason += "Authentication mechanisms not supported"; break;
+ case ClientError::UnexpectedElementError: reason += "Unexpected response"; break;
+ case ClientError::ResourceBindError: reason += "Error binding resource"; break;
+ case ClientError::RevokedError: reason += "Certificate got revoked"; break;
+ case ClientError::RevocationCheckFailedError: reason += "Failed to do revokation check"; break;
+ case ClientError::SessionStartError: reason += "Error starting session"; break;
+ case ClientError::StreamError: reason += "Stream error"; break;
+ case ClientError::TLSError: reason += "Encryption error"; break;
+ case ClientError::ClientCertificateLoadError: reason += "Error loading certificate (Invalid password?)"; break;
+ case ClientError::ClientCertificateError: reason += "Certificate not authorized"; break;
+ case ClientError::UnknownCertificateError: reason += "Unknown certificate"; break;
+ case ClientError::CertificateCardRemoved: reason += "Certificate card removed"; break;
+ case ClientError::CertificateExpiredError: reason += "Certificate has expired"; break;
+ case ClientError::CertificateNotYetValidError: reason += "Certificate is not yet valid"; break;
+ case ClientError::CertificateSelfSignedError: reason += "Certificate is self-signed"; break;
+ case ClientError::CertificateRejectedError: reason += "Certificate has been rejected"; break;
+ case ClientError::CertificateUntrustedError: reason += "Certificate is not trusted"; break;
+ case ClientError::InvalidCertificatePurposeError: reason += "Certificate cannot be used for encrypting your connection"; break;
+ case ClientError::CertificatePathLengthExceededError: reason += "Certificate path length constraint exceeded"; break;
+ case ClientError::InvalidCertificateSignatureError: reason += "Invalid certificate signature"; break;
+ case ClientError::InvalidCAError: reason += "Invalid Certificate Authority"; break;
+ case ClientError::InvalidServerIdentityError: reason += "Certificate does not match the host identity"; break;
+ }
+ return reason;
+}
+
diff --git a/Sluift/ClientHelpers.h b/Sluift/ClientHelpers.h
new file mode 100644
index 0000000..eb78ba6
--- /dev/null
+++ b/Sluift/ClientHelpers.h
@@ -0,0 +1,18 @@
+/*
+ * Copyright (c) 2013 Remko Tronçon
+ * Licensed under the GNU General Public License.
+ * See the COPYING file for more information.
+ */
+
+#pragma once
+
+#include <Swiften/Base/Override.h>
+#include <Swiften/Base/API.h>
+
+#include <string>
+
+namespace Swift {
+ class ClientError;
+
+ std::string getClientErrorString(const ClientError& error);
+}
diff --git a/Sluift/Lua/Value.cpp b/Sluift/Lua/Value.cpp
index 817cbf3..4f8078e 100644
--- a/Sluift/Lua/Value.cpp
+++ b/Sluift/Lua/Value.cpp
@@ -7,5 +7,7 @@
#include "Value.h"
+extern "C" {
#include <lualib.h>
+}
#include <boost/variant/apply_visitor.hpp>
#include <boost/numeric/conversion/cast.hpp>
diff --git a/Sluift/SConscript b/Sluift/SConscript
index 2c247d8..af3cf8c 100644
--- a/Sluift/SConscript
+++ b/Sluift/SConscript
@@ -9,15 +9,11 @@ if env["SCONS_STAGE"] == "build" and not GetOption("help") and not env.get("HAVE
elif env["SCONS_STAGE"] == "build" :
- lib_env = env.Clone()
- lib_env.UseFlags(env["LUA_FLAGS"])
- lib_env.UseFlags(env["SWIFTEN_FLAGS"])
- lib_env.UseFlags(env["SWIFTEN_DEP_FLAGS"])
- sluift_lib = lib_env.StaticLibrary("SluiftCore", [
+ sluift_sources = [
"Lua/Value.cpp",
+ "ClientHelpers.cpp",
"sluift.cpp"
- ]);
+ ]
myenv = env.Clone()
- myenv.Append(LIBS = sluift_lib)
myenv.UseFlags(env.get("LUA_FLAGS", {}))
myenv.UseFlags(env["SWIFTEN_FLAGS"])
@@ -28,8 +24,4 @@ elif env["SCONS_STAGE"] == "build" :
elif myenv["PLATFORM"] == "darwin" :
myenv["SHLIBSUFFIX"] = ".so"
- if env["PLATFORM"] == "win32" :
- myenv.Append(CFLAGS = ["/TP"])
- else :
- myenv.Append(CFLAGS = ["-x", "c++"])
myenv["SLUIFT_VERSION"] = Version.getBuildVersion(env.Dir("#").abspath, "sluift")
@@ -52,5 +44,5 @@ elif env["SCONS_STAGE"] == "build" :
myenv.Append(CPPDEFINES = ["LUA_USE_READLINE"])
myenv.MergeFlags(myenv["READLINE_FLAGS"])
- env["SLUIFT"] = myenv.Program("sluift", [
+ env["SLUIFT"] = myenv.Program("sluift", sluift_sources + [
"lua.c",
"linit.c",
@@ -58,5 +50,5 @@ elif env["SCONS_STAGE"] == "build" :
myenv.WriteVal("dll.c", myenv.Value(""))
- myenv.SharedLibrary("sluift", ["dll.c"])
+ myenv.SharedLibrary("sluift", sluift_sources + ["dll.c"])
if env["PLATFORM"] == "win32" :
diff --git a/Sluift/SluiftException.h b/Sluift/SluiftException.h
deleted file mode 100644
index 6964523..0000000
--- a/Sluift/SluiftException.h
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (c) 2011 Remko Tronçon
- * Licensed under the GNU General Public License v3.
- * See Documentation/Licenses/GPLv3.txt for more information.
- */
-
-#pragma once
-
-#include <string>
-
-#include <Swiften/Client/ClientError.h>
-
-namespace Swift {
- class SluiftException : public std::exception {
- public:
- virtual ~SluiftException() throw() {}
-
- SluiftException(const std::string& reason) : reason(reason) {
- }
-
- SluiftException(const ClientError& error) {
- reason = "Disconnected: ";
- switch(error.getType()) {
- case ClientError::UnknownError: reason += "Unknown Error"; break;
- case ClientError::DomainNameResolveError: reason += "Unable to find server"; break;
- case ClientError::ConnectionError: reason += "Error connecting to server"; break;
- case ClientError::ConnectionReadError: reason += "Error while receiving server data"; break;
- case ClientError::ConnectionWriteError: reason += "Error while sending data to the server"; break;
- case ClientError::XMLError: reason += "Error parsing server data"; break;
- case ClientError::AuthenticationFailedError: reason += "Login/password invalid"; break;
- case ClientError::CompressionFailedError: reason += "Error while compressing stream"; break;
- case ClientError::ServerVerificationFailedError: reason += "Server verification failed"; break;
- case ClientError::NoSupportedAuthMechanismsError: reason += "Authentication mechanisms not supported"; break;
- case ClientError::UnexpectedElementError: reason += "Unexpected response"; break;
- case ClientError::ResourceBindError: reason += "Error binding resource"; break;
- case ClientError::RevokedError: reason += "Certificate got revoked"; break;
- case ClientError::RevocationCheckFailedError: reason += "Failed to do revokation check"; break;
- case ClientError::SessionStartError: reason += "Error starting session"; break;
- case ClientError::StreamError: reason += "Stream error"; break;
- case ClientError::TLSError: reason += "Encryption error"; break;
- case ClientError::ClientCertificateLoadError: reason += "Error loading certificate (Invalid password?)"; break;
- case ClientError::ClientCertificateError: reason += "Certificate not authorized"; break;
- case ClientError::UnknownCertificateError: reason += "Unknown certificate"; break;
- case ClientError::CertificateCardRemoved: reason += "Certificate card removed"; break;
- case ClientError::CertificateExpiredError: reason += "Certificate has expired"; break;
- case ClientError::CertificateNotYetValidError: reason += "Certificate is not yet valid"; break;
- case ClientError::CertificateSelfSignedError: reason += "Certificate is self-signed"; break;
- case ClientError::CertificateRejectedError: reason += "Certificate has been rejected"; break;
- case ClientError::CertificateUntrustedError: reason += "Certificate is not trusted"; break;
- case ClientError::InvalidCertificatePurposeError: reason += "Certificate cannot be used for encrypting your connection"; break;
- case ClientError::CertificatePathLengthExceededError: reason += "Certificate path length constraint exceeded"; break;
- case ClientError::InvalidCertificateSignatureError: reason += "Invalid certificate signature"; break;
- case ClientError::InvalidCAError: reason += "Invalid Certificate Authority"; break;
- case ClientError::InvalidServerIdentityError: reason += "Certificate does not match the host identity"; break;
- }
- }
-
- const std::string& getReason() const {
- return reason;
- }
-
- virtual const char* what() const throw() {
- return getReason().c_str();
- }
-
-
- private:
- std::string reason;
- };
-}
diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp
index 0a653bb..397d7f3 100644
--- a/Sluift/sluift.cpp
+++ b/Sluift/sluift.cpp
@@ -1,4 +1,4 @@
/*
- * Copyright (c) 2011 Remko Tronçon
+ * Copyright (c) 2011-2013 Remko Tronçon
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
@@ -18,7 +18,7 @@
#include "Watchdog.h"
-#include "SluiftException.h"
#include "ResponseSink.h"
#include "Lua/Value.h"
+#include "ClientHelpers.h"
using namespace Swift;
@@ -43,5 +43,5 @@ static BoostNetworkFactories networkFactories(&eventLoop);
class SluiftClient {
public:
- SluiftClient(const JID& jid, const std::string& password) : tracer(NULL) {
+ SluiftClient(const JID& jid, const std::string& password, lua_State* L) : L(L), tracer(NULL) {
client = new Client(jid, password, &networkFactories);
client->setAlwaysTrustCertificates();
@@ -86,5 +86,5 @@ class SluiftClient {
if (watchdog.getTimedOut()) {
client->disconnect();
- throw SluiftException("Timeout while connecting");
+ luaL_error(L, "Timeout while connecting");
}
}
@@ -184,9 +184,10 @@ class SluiftClient {
void handleDisconnected(const boost::optional<ClientError>& error) {
if (error) {
- throw SluiftException(*error);
+ luaL_error(L, getClientErrorString(*error).c_str());
}
}
private:
+ lua_State* L;
Client* client;
ClientOptions options;
@@ -206,5 +207,4 @@ static inline SluiftClient* getClient(lua_State* L) {
static int sluift_client_connect(lua_State *L) {
- try {
SluiftClient* client = getClient(L);
std::string host;
@@ -221,28 +221,14 @@ static int sluift_client_connect(lua_State *L) {
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_async_connect(lua_State *L) {
- try {
getClient(L)->connect();
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_wait_connected(lua_State *L) {
- try {
getClient(L)->waitConnected();
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_is_connected(lua_State *L) {
@@ -252,15 +238,9 @@ static int sluift_client_is_connected(lua_State *L) {
static int sluift_client_disconnect(lua_State *L) {
- try {
getClient(L)->disconnect();
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_set_version(lua_State *L) {
- try {
eventLoop.runOnce();
@@ -278,11 +258,6 @@ static int sluift_client_set_version(lua_State *L) {
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_get_contacts(lua_State *L) {
- try {
eventLoop.runOnce();
@@ -309,11 +284,6 @@ static int sluift_client_get_contacts(lua_State *L) {
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_get_version(lua_State *L) {
- try {
SluiftClient* client = getClient(L);
int timeout = -1;
@@ -359,11 +329,6 @@ static int sluift_client_get_version(lua_State *L) {
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_send_message(lua_State *L) {
- try {
eventLoop.runOnce();
@@ -372,11 +337,6 @@ static int sluift_client_send_message(lua_State *L) {
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_send_presence(lua_State *L) {
- try {
eventLoop.runOnce();
@@ -385,11 +345,6 @@ static int sluift_client_send_presence(lua_State *L) {
return 0;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_get(lua_State *L) {
- try {
SluiftClient* client = getClient(L);
JID jid;
@@ -418,11 +373,6 @@ static int sluift_client_get(lua_State *L) {
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_set(lua_State *L) {
- try {
SluiftClient* client = getClient(L);
JID jid;
@@ -451,11 +401,6 @@ static int sluift_client_set(lua_State *L) {
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_send(lua_State *L) {
- try {
eventLoop.runOnce();
@@ -464,8 +409,4 @@ static int sluift_client_send(lua_State *L) {
return 0;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_set_options(lua_State* L) {
@@ -510,5 +451,4 @@ static void pushEvent(lua_State* L, Stanza::ref event) {
static int sluift_client_for_event(lua_State *L) {
- try {
eventLoop.runOnce();
@@ -541,11 +481,6 @@ static int sluift_client_for_event(lua_State *L) {
}
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_get_next_event(lua_State *L) {
- try {
eventLoop.runOnce();
@@ -558,12 +493,7 @@ static int sluift_client_get_next_event(lua_State *L) {
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_add_contact(lua_State* L) {
- try {
eventLoop.runOnce();
SluiftClient* client = getClient(L);
@@ -622,11 +552,6 @@ static int sluift_client_add_contact(lua_State* L) {
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_remove_contact(lua_State* L) {
- try {
eventLoop.runOnce();
SluiftClient* client = getClient(L);
@@ -645,11 +570,6 @@ static int sluift_client_remove_contact(lua_State* L) {
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_confirm_subscription(lua_State* L) {
- try {
eventLoop.runOnce();
SluiftClient* client = getClient(L);
@@ -658,11 +578,6 @@ static int sluift_client_confirm_subscription(lua_State* L) {
return 0;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_cancel_subscription(lua_State* L) {
- try {
eventLoop.runOnce();
SluiftClient* client = getClient(L);
@@ -671,8 +586,4 @@ static int sluift_client_cancel_subscription(lua_State* L) {
return 0;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_client_gc (lua_State *L) {
@@ -712,5 +623,5 @@ static const luaL_reg sluift_client_functions[] = {
static int sluift_new_client(lua_State *L) {
- try {
+ luaL_checkstring(L, 1);
JID jid(std::string(luaL_checkstring(L, 1)));
std::string password(luaL_checkstring(L, 2));
@@ -720,11 +631,7 @@ static int sluift_new_client(lua_State *L) {
lua_setmetatable(L, -2);
- *client = new SluiftClient(jid, password);
+ *client = new SluiftClient(jid, password, L);
return 1;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_jid_to_bare(lua_State *L) {
@@ -753,5 +660,4 @@ static int sluift_jid_resource(lua_State *L) {
static int sluift_sleep(lua_State *L) {
- try {
eventLoop.runOnce();
@@ -764,8 +670,4 @@ static int sluift_sleep(lua_State *L) {
return 0;
}
- catch (const SluiftException& e) {
- return luaL_error(L, e.getReason().c_str());
- }
-}
static int sluift_index(lua_State *L) {
diff --git a/Sluift/sluift.h b/Sluift/sluift.h
index 27b4eab..4e0f5ee 100644
--- a/Sluift/sluift.h
+++ b/Sluift/sluift.h
@@ -1,4 +1,4 @@
/*
- * Copyright (c) 2011 Remko Tronçon
+ * Copyright (c) 2011-2013 Remko Tronçon
* Licensed under the GNU General Public License v3.
* See Documentation/Licenses/GPLv3.txt for more information.
@@ -10,8 +10,15 @@
#define SLUIFT_API __declspec(dllexport)
#else
-#define SLUIFT_API extern
+#define SLUIFT_API
#endif
+#if defined(__cplusplus)
+#include <lua.hpp>
+#else
#include <lua.h>
+#endif
+#if defined(__cplusplus)
+extern "C"
+#endif
SLUIFT_API int (luaopen_sluift)(lua_State *L);
diff --git a/Swiftob/LuaCommands.h b/Swiftob/LuaCommands.h
index 97ea87c..c5f959d 100644
--- a/Swiftob/LuaCommands.h
+++ b/Swiftob/LuaCommands.h
@@ -10,7 +10,5 @@
#include <vector>
-#include <lua.h>
-#include <lauxlib.h>
-#include <lualib.h>
+#include <lua.hpp>
#include <boost/filesystem/fstream.hpp>
#include <boost/noncopyable.hpp>
diff --git a/Swiftob/SConscript b/Swiftob/SConscript
index 424ae72..a830b84 100644
--- a/Swiftob/SConscript
+++ b/Swiftob/SConscript
@@ -14,5 +14,5 @@ elif env["SCONS_STAGE"] == "build":
myenv.UseFlags(myenv["SWIFTEN_DEP_FLAGS"])
sources = [
- "linit.cpp",
+ "linit.c",
"Swiftob.cpp",
"Users.cpp",
diff --git a/Swiftob/linit.cpp b/Swiftob/linit.c
index 13c5b09..13c5b09 100644
--- a/Swiftob/linit.cpp
+++ b/Swiftob/linit.c