mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-27 15:32:59 +02:00
CLuaInstCurl: Add script functions
- encodeUri - decodeUri - setUriData - Set Lua api version to 1.78
This commit is contained in:
@@ -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
|
||||||
|
@@ -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);
|
||||||
|
@@ -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);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user