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;
}
示例#2
0
文件: curl.c 项目: CDSoft/bonaluna
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;
}
示例#3
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;
}