CLuaInstCurl: Add script functions

- encodeUri
 - decodeUri
 - setUriData
 - Set Lua api version to 1.78


Origin commit data
------------------
Branch: ni/coolstream
Commit: 9feb8efd23
Author: Michael Liebmann <tuxcode.bbg@gmail.com>
Date: 2017-10-23 (Mon, 23 Oct 2017)



------------------
This commit was generated by Migit
This commit is contained in:
Michael Liebmann
2017-10-23 07:52:32 +02:00
parent 31b8da10bc
commit d1c1a544f3
3 changed files with 113 additions and 4 deletions

View File

@@ -4,4 +4,4 @@
* to luainstance.h changes * to luainstance.h changes
*/ */
#define LUA_API_VERSION_MAJOR 1 #define LUA_API_VERSION_MAJOR 1
#define LUA_API_VERSION_MINOR 77 #define LUA_API_VERSION_MINOR 78

View File

@@ -52,9 +52,12 @@ CLuaCurl *CLuaInstCurl::CurlCheckData(lua_State *L, int n)
void CLuaInstCurl::LuaCurlRegister(lua_State *L) void CLuaInstCurl::LuaCurlRegister(lua_State *L)
{ {
luaL_Reg meth[] = { luaL_Reg meth[] = {
{ "new", CLuaInstCurl::CurlNew }, { "new", CLuaInstCurl::CurlNew },
{ "download", CLuaInstCurl::CurlDownload }, { "download", CLuaInstCurl::CurlDownload },
{ "__gc", CLuaInstCurl::CurlDelete }, { "encodeUri", CLuaInstCurl::CurlEncodeUri },
{ "decodeUri", CLuaInstCurl::CurlDecodeUri },
{ "setUriData", CLuaInstCurl::CurlSetUriData },
{ "__gc", CLuaInstCurl::CurlDelete },
{ NULL, NULL } { NULL, NULL }
}; };
@@ -374,6 +377,108 @@ Example:
return 2; return 2;
} }
std::string CLuaInstCurl::CurlUriInternal(std::string data, bool decode)
{
std::string retString = "";
CURL *curl_handle = curl_easy_init();
if (curl_handle) {
int outlength;
char *pfTmp;
if (decode)
pfTmp = curl_easy_unescape(curl_handle, data.c_str(), data.length(), &outlength);
else
pfTmp = curl_easy_escape(curl_handle, data.c_str(), data.length());
if (pfTmp) {
retString = static_cast<std::string>(pfTmp);
curl_free(pfTmp);
}
curl_easy_cleanup(curl_handle);
}
return retString;
}
int CLuaInstCurl::CurlEncodeUri(lua_State *L)
{
CLuaCurl *D = CurlCheckData(L, 1);
if (!D) {
lua_pushnil(L);
return 1;
}
const char *data = luaL_checkstring(L, 2);
if (!data) {
lua_pushnil(L);
return 1;
}
std::string retString = CurlUriInternal(static_cast<std::string>(data), false);
if (retString.empty())
lua_pushnil(L);
else
lua_pushstring(L, retString.c_str());
return 1;
}
int CLuaInstCurl::CurlDecodeUri(lua_State *L)
{
CLuaCurl *D = CurlCheckData(L, 1);
if (!D) {
lua_pushnil(L);
return 1;
}
const char *data = luaL_checkstring(L, 2);
if (!data) {
lua_pushnil(L);
return 1;
}
std::string retString = CurlUriInternal(static_cast<std::string>(data), true);
if (retString.empty())
lua_pushnil(L);
else
lua_pushstring(L, retString.c_str());
return 1;
}
int CLuaInstCurl::CurlSetUriData(lua_State *L)
{
CLuaCurl *D = CurlCheckData(L, 1);
if (!D) {
lua_pushnil(L);
return 1;
}
int numargs = lua_gettop(L);
if (numargs < 3) {
printf("CLuaInstVideo::%s: not enough arguments (%d, expected at least 2)\n", __func__, numargs-1);
lua_pushnil(L);
return 1;
}
const char *key;
const char *data;
std::string retString = "";
for (int i = 2; i < numargs; i += 2) {
key = luaL_checkstring(L, i);
data = luaL_checkstring(L, i+1);
if (key && data && (strlen(key) > 0)) {
if (i > 2)
retString += "&";
retString += static_cast<std::string>(key) + "=";
retString += CurlUriInternal(static_cast<std::string>(data), false);
}
}
if (retString.empty())
lua_pushnil(L);
else
lua_pushstring(L, retString.c_str());
return 1;
}
int CLuaInstCurl::CurlDelete(lua_State *L) int CLuaInstCurl::CurlDelete(lua_State *L)
{ {
CLuaCurl *D = CurlCheckData(L, 1); CLuaCurl *D = CurlCheckData(L, 1);

View File

@@ -47,6 +47,7 @@ class CLuaInstCurl
~CLuaInstCurl() {}; ~CLuaInstCurl() {};
static CLuaInstCurl* getInstance(); static CLuaInstCurl* getInstance();
static void LuaCurlRegister(lua_State *L); static void LuaCurlRegister(lua_State *L);
static std::string CurlUriInternal(std::string data, bool decode);
private: private:
static CLuaCurl *CurlCheckData(lua_State *L, int n); static CLuaCurl *CurlCheckData(lua_State *L, int n);
@@ -57,6 +58,9 @@ class CLuaInstCurl
#endif #endif
static int CurlProgressFunc(void *p, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow); static int CurlProgressFunc(void *p, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow);
static int CurlDownload(lua_State *L); static int CurlDownload(lua_State *L);
static int CurlEncodeUri(lua_State *L);
static int CurlDecodeUri(lua_State *L);
static int CurlSetUriData(lua_State *L);
static int CurlDelete(lua_State *L); static int CurlDelete(lua_State *L);
}; };