summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Sluift/sluift.cpp')
-rw-r--r--Sluift/sluift.cpp622
1 files changed, 311 insertions, 311 deletions
diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp
index 9b82602..aff4533 100644
--- a/Sluift/sluift.cpp
+++ b/Sluift/sluift.cpp
@@ -44,20 +44,20 @@
using namespace Swift;
namespace Swift {
- namespace Sluift {
- SluiftGlobals globals;
- }
+ namespace Sluift {
+ SluiftGlobals globals;
+ }
}
extern "C" const char core_lua[];
extern "C" size_t core_lua_size;
static inline bool getGlobalDebug(lua_State* L) {
- lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.moduleLibIndex);
- lua_getfield(L, -1, "debug");
- int result = lua_toboolean(L, -1);
- lua_pop(L, 2);
- return result;
+ lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.moduleLibIndex);
+ lua_getfield(L, -1, "debug");
+ int result = lua_toboolean(L, -1);
+ lua_pop(L, 2);
+ return result;
}
@@ -66,157 +66,157 @@ static inline bool getGlobalDebug(lua_State* L) {
******************************************************************************/
SLUIFT_LUA_FUNCTION_WITH_HELP(
- Sluift, new_client,
+ Sluift, new_client,
- "Creates a new client.\n\nReturns a @{Client} object.\n",
+ "Creates a new client.\n\nReturns a @{Client} object.\n",
- "jid The JID to connect as\n"
- "passphrase The passphrase to use\n",
+ "jid The JID to connect as\n"
+ "passphrase The passphrase to use\n",
- ""
+ ""
) {
- Lua::checkString(L, 1);
- JID jid(std::string(Lua::checkString(L, 1)));
- std::string password(Lua::checkString(L, 2));
+ Lua::checkString(L, 1);
+ JID jid(std::string(Lua::checkString(L, 1)));
+ std::string password(Lua::checkString(L, 2));
- SluiftClient** client = reinterpret_cast<SluiftClient**>(lua_newuserdata(L, sizeof(SluiftClient*)));
+ SluiftClient** client = reinterpret_cast<SluiftClient**>(lua_newuserdata(L, sizeof(SluiftClient*)));
- lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex);
- lua_getfield(L, -1, "Client");
- lua_setmetatable(L, -3);
- lua_pop(L, 1);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex);
+ lua_getfield(L, -1, "Client");
+ lua_setmetatable(L, -3);
+ lua_pop(L, 1);
- *client = new SluiftClient(jid, password, &Sluift::globals.networkFactories, &Sluift::globals.eventLoop);
- (*client)->setTraceEnabled(getGlobalDebug(L));
- return 1;
+ *client = new SluiftClient(jid, password, &Sluift::globals.networkFactories, &Sluift::globals.eventLoop);
+ (*client)->setTraceEnabled(getGlobalDebug(L));
+ return 1;
}
SLUIFT_LUA_FUNCTION_WITH_HELP(
- Sluift, new_component,
+ Sluift, new_component,
- "Creates a new component.\n\nReturns a @{Component} object.\n",
+ "Creates a new component.\n\nReturns a @{Component} object.\n",
- "jid The JID to connect as\n"
- "passphrase The passphrase to use\n",
+ "jid The JID to connect as\n"
+ "passphrase The passphrase to use\n",
- ""
+ ""
) {
- Lua::checkString(L, 1);
- JID jid(std::string(Lua::checkString(L, 1)));
- std::string password(Lua::checkString(L, 2));
+ Lua::checkString(L, 1);
+ JID jid(std::string(Lua::checkString(L, 1)));
+ std::string password(Lua::checkString(L, 2));
- SluiftComponent** component = reinterpret_cast<SluiftComponent**>(lua_newuserdata(L, sizeof(SluiftComponent*)));
+ SluiftComponent** component = reinterpret_cast<SluiftComponent**>(lua_newuserdata(L, sizeof(SluiftComponent*)));
- lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex);
- lua_getfield(L, -1, "Component");
- lua_setmetatable(L, -3);
- lua_pop(L, 1);
+ lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex);
+ lua_getfield(L, -1, "Component");
+ lua_setmetatable(L, -3);
+ lua_pop(L, 1);
- *component = new SluiftComponent(jid, password, &Sluift::globals.networkFactories, &Sluift::globals.eventLoop);
- (*component)->setTraceEnabled(getGlobalDebug(L));
- return 1;
+ *component = new SluiftComponent(jid, password, &Sluift::globals.networkFactories, &Sluift::globals.eventLoop);
+ (*component)->setTraceEnabled(getGlobalDebug(L));
+ return 1;
}
SLUIFT_LUA_FUNCTION_WITH_HELP(
- Sluift, sha1,
- "Compute the SHA-1 hash of given data",
- "data the data to hash",
- ""
+ Sluift, sha1,
+ "Compute the SHA-1 hash of given data",
+ "data the data to hash",
+ ""
) {
- static boost::shared_ptr<CryptoProvider> crypto(PlatformCryptoProvider::create());
- if (!lua_isstring(L, 1)) {
- throw Lua::Exception("Expected string");
- }
- size_t len;
- const char* data = lua_tolstring(L, 1, &len);
- ByteArray result = crypto->getSHA1Hash(createByteArray(data, len));
- lua_pushlstring(L, reinterpret_cast<char*>(vecptr(result)), result.size());
- return 1;
+ static boost::shared_ptr<CryptoProvider> crypto(PlatformCryptoProvider::create());
+ if (!lua_isstring(L, 1)) {
+ throw Lua::Exception("Expected string");
+ }
+ size_t len;
+ const char* data = lua_tolstring(L, 1, &len);
+ ByteArray result = crypto->getSHA1Hash(createByteArray(data, len));
+ lua_pushlstring(L, reinterpret_cast<char*>(vecptr(result)), result.size());
+ return 1;
}
SLUIFT_LUA_FUNCTION_WITH_HELP(
- Sluift, sleep,
- "Sleeps for the given time.",
- "milliseconds the amount of milliseconds to sleep",
- ""
+ Sluift, sleep,
+ "Sleeps for the given time.",
+ "milliseconds the amount of milliseconds to sleep",
+ ""
) {
- Sluift::globals.eventLoop.runOnce();
- int timeout = Lua::checkIntNumber(L, 1);
- Watchdog watchdog(timeout, Sluift::globals.networkFactories.getTimerFactory());
- while (!watchdog.getTimedOut()) {
- Swift::sleep(boost::numeric_cast<unsigned int>(std::min(100, timeout)));
- Sluift::globals.eventLoop.runOnce();
- }
- return 0;
+ Sluift::globals.eventLoop.runOnce();
+ int timeout = Lua::checkIntNumber(L, 1);
+ Watchdog watchdog(timeout, Sluift::globals.networkFactories.getTimerFactory());
+ while (!watchdog.getTimedOut()) {
+ Swift::sleep(boost::numeric_cast<unsigned int>(std::min(100, timeout)));
+ Sluift::globals.eventLoop.runOnce();
+ }
+ return 0;
}
SLUIFT_LUA_FUNCTION_WITH_HELP(
- Sluift, new_uuid,
- "Generates a new UUID", "", ""
+ Sluift, new_uuid,
+ "Generates a new UUID", "", ""
) {
- lua_pushstring(L, IDGenerator().generateID().c_str());
- return 1;
+ lua_pushstring(L, IDGenerator().generateID().c_str());
+ return 1;
}
SLUIFT_LUA_FUNCTION_WITH_HELP(
- Sluift, from_xml,
- "Convert a raw XML string into a structured representation.",
- "string the string to convert",
- ""
+ Sluift, from_xml,
+ "Convert a raw XML string into a structured representation.",
+ "string the string to convert",
+ ""
) {
- PayloadsParserTester parser;
- if (!parser.parse(Lua::checkString(L, 1))) {
- throw Lua::Exception("Error in XML");
- }
- return Sluift::globals.elementConvertor.convertToLua(L, parser.getPayload());
+ PayloadsParserTester parser;
+ if (!parser.parse(Lua::checkString(L, 1))) {
+ throw Lua::Exception("Error in XML");
+ }
+ return Sluift::globals.elementConvertor.convertToLua(L, parser.getPayload());
}
SLUIFT_LUA_FUNCTION_WITH_HELP(
- Sluift, to_xml,
- "Convert a structured element into XML.",
- "element the element to convert",
- ""
+ Sluift, to_xml,
+ "Convert a structured element into XML.",
+ "element the element to convert",
+ ""
) {
- static FullPayloadSerializerCollection serializers;
- boost::shared_ptr<Payload> payload = boost::dynamic_pointer_cast<Payload>(Sluift::globals.elementConvertor.convertFromLua(L, 1));
- if (!payload) {
- throw Lua::Exception("Unrecognized XML");
- }
- PayloadSerializer* serializer = serializers.getPayloadSerializer(payload);
- if (!payload) {
- throw Lua::Exception("Unrecognized XML");
- }
- lua_pushstring(L, serializer->serialize(payload).c_str());
- return 1;
+ static FullPayloadSerializerCollection serializers;
+ boost::shared_ptr<Payload> payload = boost::dynamic_pointer_cast<Payload>(Sluift::globals.elementConvertor.convertFromLua(L, 1));
+ if (!payload) {
+ throw Lua::Exception("Unrecognized XML");
+ }
+ PayloadSerializer* serializer = serializers.getPayloadSerializer(payload);
+ if (!payload) {
+ throw Lua::Exception("Unrecognized XML");
+ }
+ lua_pushstring(L, serializer->serialize(payload).c_str());
+ return 1;
}
SLUIFT_LUA_FUNCTION_WITH_HELP(
- Sluift, hexify,
- "Convert binary data into hexadecimal format.",
- "data the data to convert",
- ""
+ Sluift, hexify,
+ "Convert binary data into hexadecimal format.",
+ "data the data to convert",
+ ""
) {
- if (!lua_isstring(L, 1)) {
- throw Lua::Exception("Expected string");
- }
- size_t len;
- const char* data = lua_tolstring(L, 1, &len);
- lua_pushstring(L, Hexify::hexify(createByteArray(data, len)).c_str());
- return 1;
+ if (!lua_isstring(L, 1)) {
+ throw Lua::Exception("Expected string");
+ }
+ size_t len;
+ const char* data = lua_tolstring(L, 1, &len);
+ lua_pushstring(L, Hexify::hexify(createByteArray(data, len)).c_str());
+ return 1;
}
SLUIFT_LUA_FUNCTION_WITH_HELP(
- Sluift, unhexify,
- "Convert hexadecimal data into binary data.",
- "data the data in hexadecimal format",
- ""
+ Sluift, unhexify,
+ "Convert hexadecimal data into binary data.",
+ "data the data in hexadecimal format",
+ ""
) {
- if (!lua_isstring(L, 1)) {
- throw Lua::Exception("Expected string");
- }
- ByteArray result = Hexify::unhexify(lua_tostring(L, 1));
- lua_pushlstring(L, reinterpret_cast<char*>(vecptr(result)), result.size());
- return 1;
+ if (!lua_isstring(L, 1)) {
+ throw Lua::Exception("Expected string");
+ }
+ ByteArray result = Hexify::unhexify(lua_tostring(L, 1));
+ lua_pushlstring(L, reinterpret_cast<char*>(vecptr(result)), result.size());
+ return 1;
}
/*******************************************************************************
@@ -224,34 +224,34 @@ SLUIFT_LUA_FUNCTION_WITH_HELP(
******************************************************************************/
SLUIFT_LUA_FUNCTION_WITH_HELP(
- Crypto, new_certificate,
- "Creates a new X.509 certificate from DER data.\n",
+ Crypto, new_certificate,
+ "Creates a new X.509 certificate from DER data.\n",
- "der the DER-encoded certificate data",
+ "der the DER-encoded certificate data",
- "") {
- ByteArray certData(Lua::checkByteArray(L, 1));
- Certificate::ref cert(Sluift::globals.tlsFactories.getCertificateFactory()->createCertificateFromDER(certData));
- lua_createtable(L, 0, 0);
- lua_pushstring(L, cert->getSubjectName().c_str());
- lua_setfield(L, -2, "subject_name");
- lua_pushstring(L, Certificate::getSHA1Fingerprint(cert, Sluift::globals.networkFactories.getCryptoProvider()).c_str());
- lua_setfield(L, -2, "sha1_fingerprint");
+ "") {
+ ByteArray certData(Lua::checkByteArray(L, 1));
+ Certificate::ref cert(Sluift::globals.tlsFactories.getCertificateFactory()->createCertificateFromDER(certData));
+ lua_createtable(L, 0, 0);
+ lua_pushstring(L, cert->getSubjectName().c_str());
+ lua_setfield(L, -2, "subject_name");
+ lua_pushstring(L, Certificate::getSHA1Fingerprint(cert, Sluift::globals.networkFactories.getCryptoProvider()).c_str());
+ lua_setfield(L, -2, "sha1_fingerprint");
- Lua::pushStringArray(L, cert->getCommonNames());
- lua_setfield(L, -2, "common_names");
+ Lua::pushStringArray(L, cert->getCommonNames());
+ lua_setfield(L, -2, "common_names");
- Lua::pushStringArray(L, cert->getSRVNames());
- lua_setfield(L, -2, "srv_names");
+ Lua::pushStringArray(L, cert->getSRVNames());
+ lua_setfield(L, -2, "srv_names");
- Lua::pushStringArray(L, cert->getDNSNames());
- lua_setfield(L, -2, "dns_names");
+ Lua::pushStringArray(L, cert->getDNSNames());
+ lua_setfield(L, -2, "dns_names");
- Lua::pushStringArray(L, cert->getXMPPAddresses());
- lua_setfield(L, -2, "xmpp_addresses");
+ Lua::pushStringArray(L, cert->getXMPPAddresses());
+ lua_setfield(L, -2, "xmpp_addresses");
- Lua::registerTableToString(L, -1);
- return 1;
+ Lua::registerTableToString(L, -1);
+ return 1;
}
/*******************************************************************************
@@ -259,30 +259,30 @@ SLUIFT_LUA_FUNCTION_WITH_HELP(
******************************************************************************/
SLUIFT_LUA_FUNCTION(FS, list) {
- boost::filesystem::path dir(std::string(Lua::checkString(L, 1)));
- if (!boost::filesystem::exists(dir) || !boost::filesystem::is_directory(dir)) {
- lua_pushnil(L);
- lua_pushstring(L, "Argument is not an existing directory");
- return 2;
- }
-
- boost::filesystem::directory_iterator i(dir);
- std::vector<boost::filesystem::path> items(
- i, boost::filesystem::directory_iterator());
-
- lua_createtable(L, boost::numeric_cast<int>(items.size()), 0);
- for (size_t i = 0; i < items.size(); ++i) {
- lua_pushstring(L, items[i].string().c_str());
- lua_rawseti(L, -2, boost::numeric_cast<int>(i+1));
- }
- Lua::registerTableToString(L, -1);
- return 1;
+ boost::filesystem::path dir(std::string(Lua::checkString(L, 1)));
+ if (!boost::filesystem::exists(dir) || !boost::filesystem::is_directory(dir)) {
+ lua_pushnil(L);
+ lua_pushstring(L, "Argument is not an existing directory");
+ return 2;
+ }
+
+ boost::filesystem::directory_iterator i(dir);
+ std::vector<boost::filesystem::path> items(
+ i, boost::filesystem::directory_iterator());
+
+ lua_createtable(L, boost::numeric_cast<int>(items.size()), 0);
+ for (size_t i = 0; i < items.size(); ++i) {
+ lua_pushstring(L, items[i].string().c_str());
+ lua_rawseti(L, -2, boost::numeric_cast<int>(i+1));
+ }
+ Lua::registerTableToString(L, -1);
+ return 1;
}
SLUIFT_LUA_FUNCTION(FS, is_file) {
- boost::filesystem::path file(std::string(Lua::checkString(L, 1)));
- lua_pushboolean(L, boost::filesystem::is_regular_file(file));
- return 1;
+ boost::filesystem::path file(std::string(Lua::checkString(L, 1)));
+ lua_pushboolean(L, boost::filesystem::is_regular_file(file));
+ return 1;
}
@@ -291,32 +291,32 @@ SLUIFT_LUA_FUNCTION(FS, is_file) {
******************************************************************************/
SLUIFT_LUA_FUNCTION(JID, to_bare) {
- JID jid(std::string(Lua::checkString(L, 1)));
- lua_pushstring(L, jid.toBare().toString().c_str());
- return 1;
+ JID jid(std::string(Lua::checkString(L, 1)));
+ lua_pushstring(L, jid.toBare().toString().c_str());
+ return 1;
}
SLUIFT_LUA_FUNCTION(JID, node) {
- JID jid(std::string(Lua::checkString(L, 1)));
- lua_pushstring(L, jid.getNode().c_str());
- return 1;
+ JID jid(std::string(Lua::checkString(L, 1)));
+ lua_pushstring(L, jid.getNode().c_str());
+ return 1;
}
SLUIFT_LUA_FUNCTION(JID, domain) {
- JID jid(std::string(Lua::checkString(L, 1)));
- lua_pushstring(L, jid.getDomain().c_str());
- return 1;
+ JID jid(std::string(Lua::checkString(L, 1)));
+ lua_pushstring(L, jid.getDomain().c_str());
+ return 1;
}
SLUIFT_LUA_FUNCTION(JID, resource) {
- JID jid(std::string(Lua::checkString(L, 1)));
- lua_pushstring(L, jid.getResource().c_str());
- return 1;
+ JID jid(std::string(Lua::checkString(L, 1)));
+ lua_pushstring(L, jid.getResource().c_str());
+ return 1;
}
SLUIFT_LUA_FUNCTION(JID, escape_node) {
- lua_pushstring(L, JID::getEscapedNode(Lua::checkString(L, 1)).c_str());
- return 1;
+ lua_pushstring(L, JID::getEscapedNode(Lua::checkString(L, 1)).c_str());
+ return 1;
}
/*******************************************************************************
@@ -324,22 +324,22 @@ SLUIFT_LUA_FUNCTION(JID, escape_node) {
******************************************************************************/
SLUIFT_LUA_FUNCTION(Base64, encode) {
- if (!lua_isstring(L, 1)) {
- throw Lua::Exception("Expected string");
- }
- size_t len;
- const char* data = lua_tolstring(L, 1, &len);
- lua_pushstring(L, Base64::encode(createByteArray(data, len)).c_str());
- return 1;
+ if (!lua_isstring(L, 1)) {
+ throw Lua::Exception("Expected string");
+ }
+ size_t len;
+ const char* data = lua_tolstring(L, 1, &len);
+ lua_pushstring(L, Base64::encode(createByteArray(data, len)).c_str());
+ return 1;
}
SLUIFT_LUA_FUNCTION(Base64, decode) {
- if (!lua_isstring(L, 1)) {
- throw Lua::Exception("Expected string");
- }
- ByteArray result = Base64::decode(lua_tostring(L, 1));
- lua_pushlstring(L, reinterpret_cast<char*>(vecptr(result)), result.size());
- return 1;
+ if (!lua_isstring(L, 1)) {
+ throw Lua::Exception("Expected string");
+ }
+ ByteArray result = Base64::decode(lua_tostring(L, 1));
+ lua_pushlstring(L, reinterpret_cast<char*>(vecptr(result)), result.size());
+ return 1;
}
/*******************************************************************************
@@ -347,43 +347,43 @@ SLUIFT_LUA_FUNCTION(Base64, decode) {
******************************************************************************/
SLUIFT_LUA_FUNCTION(IDN, encode) {
- IDNConverter* converter = Sluift::globals.networkFactories.getIDNConverter();
- boost::optional<std::string> encoded = converter->getIDNAEncoded(Lua::checkString(L, 1));
- if (!encoded) {
- lua_pushnil(L);
- lua_pushstring(L, "Error encoding domain name");
- return 2;
- }
- lua_pushstring(L, encoded->c_str());
- return 1;
+ IDNConverter* converter = Sluift::globals.networkFactories.getIDNConverter();
+ boost::optional<std::string> encoded = converter->getIDNAEncoded(Lua::checkString(L, 1));
+ if (!encoded) {
+ lua_pushnil(L);
+ lua_pushstring(L, "Error encoding domain name");
+ return 2;
+ }
+ lua_pushstring(L, encoded->c_str());
+ return 1;
}
SLUIFT_LUA_FUNCTION(IDN, stringprep) {
- IDNConverter* converter = Sluift::globals.networkFactories.getIDNConverter();
- IDNConverter::StringPrepProfile profile;
- std::string profileString = Lua::checkString(L, 2);
- if (profileString == "nameprep") {
- profile = IDNConverter::NamePrep;
- }
- else if (profileString == "xmpp_nodeprep") {
- profile = IDNConverter::XMPPNodePrep;
- }
- else if (profileString == "xmpp_resourceprep") {
- profile = IDNConverter::XMPPResourcePrep;
- }
- else if (profileString == "saslprep") {
- profile = IDNConverter::SASLPrep;
- }
- else {
- throw Lua::Exception("Invalid profile");
- }
- try {
- lua_pushstring(L, converter->getStringPrepared(Lua::checkString(L, 1), profile).c_str());
- }
- catch (const std::exception&) {
- throw Lua::Exception("Error");
- }
- return 1;
+ IDNConverter* converter = Sluift::globals.networkFactories.getIDNConverter();
+ IDNConverter::StringPrepProfile profile;
+ std::string profileString = Lua::checkString(L, 2);
+ if (profileString == "nameprep") {
+ profile = IDNConverter::NamePrep;
+ }
+ else if (profileString == "xmpp_nodeprep") {
+ profile = IDNConverter::XMPPNodePrep;
+ }
+ else if (profileString == "xmpp_resourceprep") {
+ profile = IDNConverter::XMPPResourcePrep;
+ }
+ else if (profileString == "saslprep") {
+ profile = IDNConverter::SASLPrep;
+ }
+ else {
+ throw Lua::Exception("Invalid profile");
+ }
+ try {
+ lua_pushstring(L, converter->getStringPrepared(Lua::checkString(L, 1), profile).c_str());
+ }
+ catch (const std::exception&) {
+ throw Lua::Exception("Error");
+ }
+ return 1;
}
/*******************************************************************************
@@ -392,26 +392,26 @@ SLUIFT_LUA_FUNCTION(IDN, stringprep) {
#ifdef HAVE_ITUNES
SLUIFT_LUA_FUNCTION(iTunes, get_current_track) {
- boost::optional<ITunesInterface::Track> track = Sluift::globals.iTunes.getCurrentTrack();
- if (!track) {
- return 0;
- }
- lua_createtable(L, 0, 0);
- lua_pushstring(L, track->artist.c_str());
- lua_setfield(L, -2, "artist");
- lua_pushstring(L, track->name.c_str());
- lua_setfield(L, -2, "name");
- lua_pushstring(L, track->album.c_str());
- lua_setfield(L, -2, "album");
- lua_pushinteger(L, track->trackNumber);
- lua_setfield(L, -2, "track_number");
- lua_pushnumber(L, track->duration);
- lua_setfield(L, -2, "duration");
- lua_pushinteger(L, track->rating);
- lua_setfield(L, -2, "rating");
- Lua::registerTableToString(L, -1);
- Lua::registerTableEquals(L, -1);
- return 1;
+ boost::optional<ITunesInterface::Track> track = Sluift::globals.iTunes.getCurrentTrack();
+ if (!track) {
+ return 0;
+ }
+ lua_createtable(L, 0, 0);
+ lua_pushstring(L, track->artist.c_str());
+ lua_setfield(L, -2, "artist");
+ lua_pushstring(L, track->name.c_str());
+ lua_setfield(L, -2, "name");
+ lua_pushstring(L, track->album.c_str());
+ lua_setfield(L, -2, "album");
+ lua_pushinteger(L, track->trackNumber);
+ lua_setfield(L, -2, "track_number");
+ lua_pushnumber(L, track->duration);
+ lua_setfield(L, -2, "duration");
+ lua_pushinteger(L, track->rating);
+ lua_setfield(L, -2, "rating");
+ Lua::registerTableToString(L, -1);
+ Lua::registerTableEquals(L, -1);
+ return 1;
}
#endif
@@ -422,81 +422,81 @@ SLUIFT_LUA_FUNCTION(iTunes, get_current_track) {
static const luaL_Reg sluift_functions[] = { {NULL, NULL} };
SLUIFT_API int luaopen_sluift(lua_State* L) {
- // Initialize & store the module table
- luaL_register(L, lua_tostring(L, 1), sluift_functions);
- lua_pushinteger(L, -1);
- lua_setfield(L, -2, "timeout");
- lua_pushboolean(L, 0);
- lua_setfield(L, -2, "debug");
-
- lua_pushvalue(L, -1);
- Sluift::globals.moduleLibIndex = luaL_ref(L, LUA_REGISTRYINDEX);
-
- // Load core lib code
- if (luaL_loadbuffer(L, core_lua, core_lua_size, "core.lua") != 0) {
- lua_error(L);
- }
- lua_pushvalue(L, -2);
- lua_call(L, 1, 1);
- Sluift::globals.coreLibIndex = luaL_ref(L, LUA_REGISTRYINDEX);
-
- // Register functions
- Lua::FunctionRegistry::getInstance().addFunctionsToTable(L, "Sluift");
- Lua::FunctionRegistry::getInstance().createFunctionTable(L, "JID");
- lua_setfield(L, -2, "jid");
- Lua::FunctionRegistry::getInstance().createFunctionTable(L, "Base64");
- lua_setfield(L, -2, "base64");
- Lua::FunctionRegistry::getInstance().createFunctionTable(L, "IDN");
- lua_setfield(L, -2, "idn");
- Lua::FunctionRegistry::getInstance().createFunctionTable(L, "Crypto");
- lua_setfield(L, -2, "crypto");
- Lua::FunctionRegistry::getInstance().createFunctionTable(L, "FS");
- lua_setfield(L, -2, "fs");
+ // Initialize & store the module table
+ luaL_register(L, lua_tostring(L, 1), sluift_functions);
+ lua_pushinteger(L, -1);
+ lua_setfield(L, -2, "timeout");
+ lua_pushboolean(L, 0);
+ lua_setfield(L, -2, "debug");
+
+ lua_pushvalue(L, -1);
+ Sluift::globals.moduleLibIndex = luaL_ref(L, LUA_REGISTRYINDEX);
+
+ // Load core lib code
+ if (luaL_loadbuffer(L, core_lua, core_lua_size, "core.lua") != 0) {
+ lua_error(L);
+ }
+ lua_pushvalue(L, -2);
+ lua_call(L, 1, 1);
+ Sluift::globals.coreLibIndex = luaL_ref(L, LUA_REGISTRYINDEX);
+
+ // Register functions
+ Lua::FunctionRegistry::getInstance().addFunctionsToTable(L, "Sluift");
+ Lua::FunctionRegistry::getInstance().createFunctionTable(L, "JID");
+ lua_setfield(L, -2, "jid");
+ Lua::FunctionRegistry::getInstance().createFunctionTable(L, "Base64");
+ lua_setfield(L, -2, "base64");
+ Lua::FunctionRegistry::getInstance().createFunctionTable(L, "IDN");
+ lua_setfield(L, -2, "idn");
+ Lua::FunctionRegistry::getInstance().createFunctionTable(L, "Crypto");
+ lua_setfield(L, -2, "crypto");
+ Lua::FunctionRegistry::getInstance().createFunctionTable(L, "FS");
+ lua_setfield(L, -2, "fs");
#ifdef HAVE_ITUNES
- Lua::FunctionRegistry::getInstance().createFunctionTable(L, "iTunes");
- lua_setfield(L, -2, "itunes");
+ Lua::FunctionRegistry::getInstance().createFunctionTable(L, "iTunes");
+ lua_setfield(L, -2, "itunes");
#endif
- // Register convenience functions
- lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex);
- std::vector<std::string> coreLibExports = boost::assign::list_of
- ("tprint")("disco")("help")("get_help")("copy")("with")("read_file")("create_form");
- foreach (const std::string& coreLibExport, coreLibExports) {
- lua_getfield(L, -1, coreLibExport.c_str());
- lua_setfield(L, -3, coreLibExport.c_str());
- }
- lua_pop(L, 1);
-
- // Load client metatable
- lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex);
- std::vector<std::string> tables = boost::assign::list_of("Client");
- foreach(const std::string& table, tables) {
- lua_getfield(L, -1, table.c_str());
- Lua::FunctionRegistry::getInstance().addFunctionsToTable(L, table);
- lua_pop(L, 1);
- }
- lua_pop(L, 1);
-
- // Load component metatable
- lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex);
- std::vector<std::string> comp_tables = boost::assign::list_of("Component");
- foreach(const std::string& table, comp_tables) {
- lua_getfield(L, -1, table.c_str());
- Lua::FunctionRegistry::getInstance().addFunctionsToTable(L, table);
- lua_pop(L, 1);
- }
- lua_pop(L, 1);
-
- // Register documentation for all elements
- foreach (boost::shared_ptr<LuaElementConvertor> convertor, Sluift::globals.elementConvertor.getConvertors()) {
- boost::optional<LuaElementConvertor::Documentation> documentation = convertor->getDocumentation();
- if (documentation) {
- Lua::registerClassHelp(L, documentation->className, documentation->description);
- }
- }
-
- // Register global documentation
- Lua::registerExtraHelp(L, -1, "sluift");
-
- return 1;
+ // Register convenience functions
+ lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex);
+ std::vector<std::string> coreLibExports = boost::assign::list_of
+ ("tprint")("disco")("help")("get_help")("copy")("with")("read_file")("create_form");
+ foreach (const std::string& coreLibExport, coreLibExports) {
+ lua_getfield(L, -1, coreLibExport.c_str());
+ lua_setfield(L, -3, coreLibExport.c_str());
+ }
+ lua_pop(L, 1);
+
+ // Load client metatable
+ lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex);
+ std::vector<std::string> tables = boost::assign::list_of("Client");
+ foreach(const std::string& table, tables) {
+ lua_getfield(L, -1, table.c_str());
+ Lua::FunctionRegistry::getInstance().addFunctionsToTable(L, table);
+ lua_pop(L, 1);
+ }
+ lua_pop(L, 1);
+
+ // Load component metatable
+ lua_rawgeti(L, LUA_REGISTRYINDEX, Sluift::globals.coreLibIndex);
+ std::vector<std::string> comp_tables = boost::assign::list_of("Component");
+ foreach(const std::string& table, comp_tables) {
+ lua_getfield(L, -1, table.c_str());
+ Lua::FunctionRegistry::getInstance().addFunctionsToTable(L, table);
+ lua_pop(L, 1);
+ }
+ lua_pop(L, 1);
+
+ // Register documentation for all elements
+ foreach (boost::shared_ptr<LuaElementConvertor> convertor, Sluift::globals.elementConvertor.getConvertors()) {
+ boost::optional<LuaElementConvertor::Documentation> documentation = convertor->getDocumentation();
+ if (documentation) {
+ Lua::registerClassHelp(L, documentation->className, documentation->description);
+ }
+ }
+
+ // Register global documentation
+ Lua::registerExtraHelp(L, -1, "sluift");
+
+ return 1;
}