summaryrefslogtreecommitdiffstats
path: root/Sluift
diff options
context:
space:
mode:
Diffstat (limited to 'Sluift')
-rw-r--r--Sluift/sluift.cpp8
1 files changed, 7 insertions, 1 deletions
diff --git a/Sluift/sluift.cpp b/Sluift/sluift.cpp
index 5e837c1..bef2e3d 100644
--- a/Sluift/sluift.cpp
+++ b/Sluift/sluift.cpp
@@ -314,71 +314,77 @@ SLUIFT_LUA_FUNCTION(JID, resource) {
SLUIFT_LUA_FUNCTION(JID, escape_node) {
lua_pushstring(L, JID::getEscapedNode(Lua::checkString(L, 1)).c_str());
return 1;
}
/*******************************************************************************
* Base64 Functions
******************************************************************************/
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;
}
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;
}
/*******************************************************************************
* IDN Functions
******************************************************************************/
SLUIFT_LUA_FUNCTION(IDN, encode) {
IDNConverter* converter = Sluift::globals.networkFactories.getIDNConverter();
- lua_pushstring(L, converter->getIDNAEncoded(Lua::checkString(L, 1)).c_str());
+ 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;
}
/*******************************************************************************
* iTunes Functions
******************************************************************************/