static int l_easy_setopt_strings(lua_State *L) { l_easy_private *privatep = luaL_checkudata(L, 1, LUACURL_EASYMETATABLE); CURL *curl = privatep->curl; CURLoption *optionp = LUACURL_OPTIONP_UPVALUE(L, 1); struct curl_slist *headerlist = NULL; int i = 1; /* free previous slist for this option */ l_easy_setopt_free_slist(privatep, *optionp); if (lua_isstring(L, 2)) *l_easy_setopt_get_slist(privatep, *optionp) = curl_slist_append(headerlist, lua_tostring(L, 2)); else { if (lua_type(L, 2) != LUA_TTABLE) luaL_error(L, "wrong argument (%s): expected string or table", lua_typename(L, 2)); lua_rawgeti(L, 2, i++); while (!lua_isnil(L, -1)) { struct curl_slist *current_slist = *l_easy_setopt_get_slist(privatep, *optionp); struct curl_slist *new_slist = curl_slist_append(current_slist, lua_tostring(L, -1)); *l_easy_setopt_get_slist(privatep, *optionp) = new_slist; lua_pop(L, 1); lua_rawgeti(L, 2, i++); } lua_pop(L, 1); } if (curl_easy_setopt(curl, *optionp, *l_easy_setopt_get_slist(privatep, *optionp)) != CURLE_OK) luaL_error(L, "%s", privatep->error); /* memory leak: we need to free this in __gc */ /* curl_slist_free_all(headerlist); */ return 0; }
static int l_easy_setopt_proxytype(lua_State *L) { l_easy_private *privatep = luaL_checkudata(L, 1, LUACURL_EASYMETATABLE); CURL *curl = privatep->curl; CURLoption *optionp = LUACURL_OPTIONP_UPVALUE(L, 1); const char *value = luaL_checkstring(L, 2); /* check for valid OPTION: */ curl_proxytype type; if (!strcmp("HTTP", value)) type = CURLPROXY_HTTP; else if (!strcmp("SOCKS4", value)) type = CURLPROXY_SOCKS4; else if (!strcmp("SOCKS5", value)) type = CURLPROXY_SOCKS5; else luaL_error(L, "Invalid proxytype: %s", value); if (curl_easy_setopt(curl, *optionp, type) != CURLE_OK) { lua_pushnil(L); lua_pushfstring(L, "%s", privatep->error); return 2; } return 0; }
static int l_easy_setopt_httpauth(lua_State *L) { l_easy_private *privatep = luaL_checkudata(L, 1, LUACURL_EASYMETATABLE); CURL *curl = privatep->curl; CURLoption *optionp = LUACURL_OPTIONP_UPVALUE(L, 1); const char *value = luaL_checkstring(L, 2); long type; if (!strcmp("NONE", value)) type = CURLAUTH_NONE; else if (!strcmp("BASIC", value)) type = CURLAUTH_BASIC; else if (!strcmp("DIGEST", value)) type = CURLAUTH_DIGEST; else if (!strcmp("GSSNEGOTIATE", value)) type = CURLAUTH_GSSNEGOTIATE; else if (!strcmp("NTLM", value)) type = CURLAUTH_NTLM; else if (!strcmp("CURLAUTH_ANY", value)) type = CURLAUTH_ANY; else if (!strcmp("ANYSAFE", value)) type = CURLAUTH_ANYSAFE; else luaL_error(L, "Invalid httpauth: %s", value); if (curl_easy_setopt(curl, *optionp, type) != CURLE_OK) luaL_error(L, "%s", privatep->error); return 0; }
static int l_easy_setopt_string(lua_State *L) { l_easy_private *privatep = luaL_checkudata(L, 1, LUACURL_EASYMETATABLE); CURL *curl = privatep->curl; CURLoption *optionp = LUACURL_OPTIONP_UPVALUE(L, 1); const char *value = luaL_checkstring(L, 2); if (curl_easy_setopt(curl, *optionp, value) != CURLE_OK) luaL_error(L, "%s", privatep->error); return 0; }
static int l_easy_setopt_share(lua_State *L) { l_easy_private *privatep = luaL_checkudata(L, 1, LUACURL_EASYMETATABLE); CURL *curl = privatep->curl; CURLoption *optionp = LUACURL_OPTIONP_UPVALUE(L, 1); CURLSH *curlsh = ((l_share_userdata*) luaL_checkudata(L, 2, LUACURL_SHAREMETATABLE))->curlsh; if (curl_easy_setopt(curl, CURLOPT_SHARE, curlsh) != CURLE_OK) luaL_error(L, "%s", privatep->error); return 0; }