diff options
author | Remko Tronçon <git@el-tramo.be> | 2013-08-16 21:11:56 (GMT) |
---|---|---|
committer | Remko Tronçon <git@el-tramo.be> | 2013-08-17 09:32:03 (GMT) |
commit | 92ffd5b909badeafabbf73b73a6946a5440c8be5 (patch) | |
tree | a33a6086ace038c63751403ae29573ae161846b2 | |
parent | ac6ff12e174b832326c6d89784d4c5e53044eecf (diff) | |
download | swift-contrib-92ffd5b909badeafabbf73b73a6946a5440c8be5.zip swift-contrib-92ffd5b909badeafabbf73b73a6946a5440c8be5.tar.bz2 |
Fix building sluift as .dll on Mac OS X.
Change-Id: Ia8043d66ef676048e7fe1d0347b65e8d64aa3bd5
-rw-r--r-- | .scons2ninja.conf | 6 | ||||
-rw-r--r-- | 3rdParty/Lua/SConscript | 4 | ||||
-rw-r--r-- | 3rdParty/Lua/src/lua.hpp | 5 | ||||
-rw-r--r-- | Sluift/ClientHelpers.cpp | 50 | ||||
-rw-r--r-- | Sluift/ClientHelpers.h | 18 | ||||
-rw-r--r-- | Sluift/Lua/Value.cpp | 2 | ||||
-rw-r--r-- | Sluift/SConscript | 18 | ||||
-rw-r--r-- | Sluift/SluiftException.h | 70 | ||||
-rw-r--r-- | Sluift/sluift.cpp | 114 | ||||
-rw-r--r-- | Sluift/sluift.h | 11 | ||||
-rw-r--r-- | Swiftob/LuaCommands.h | 4 | ||||
-rw-r--r-- | Swiftob/SConscript | 2 | ||||
-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 |