static int callback (void *data, int argc, char **argv, char **colname) { SoupCookie *cookie = NULL; SoupCookieJar *jar = SOUP_COOKIE_JAR (data); char *name, *value, *host, *path; time_t max_age, now; gboolean http_only = FALSE, secure = FALSE; now = time (NULL); name = argv[COL_NAME]; value = argv[COL_VALUE]; host = argv[COL_HOST]; path = argv[COL_PATH]; max_age = strtoul (argv[COL_EXPIRY], NULL, 10) - now; if (max_age <= 0) return 0; http_only = (strcmp (argv[COL_HTTP_ONLY], "1") == 0); secure = (strcmp (argv[COL_SECURE], "1") == 0); cookie = soup_cookie_new (name, value, host, path, max_age); if (secure) soup_cookie_set_secure (cookie, TRUE); if (http_only) soup_cookie_set_http_only (cookie, TRUE); soup_cookie_jar_add_cookie (jar, cookie); return 0; }
static SoupCookie* parse_cookie (char *line, time_t now) { char **result; SoupCookie *cookie = NULL; gboolean http_only; gulong expire_time; int max_age; char *host, *path, *secure, *expires, *name, *value; if (g_str_has_prefix (line, "#HttpOnly_")) { http_only = TRUE; line += strlen ("#HttpOnly_"); } else if (*line == '#' || g_ascii_isspace (*line)) return cookie; else http_only = FALSE; result = g_strsplit (line, "\t", -1); if (g_strv_length (result) != 7) goto out; /* Check this first */ expires = result[4]; expire_time = strtoul (expires, NULL, 10); if (now >= expire_time) goto out; max_age = (expire_time - now <= G_MAXINT ? expire_time - now : G_MAXINT); host = result[0]; /* result[1] is not used because it's redundat; it's a boolean * value regarding whether the cookie should be used for * sub-domains of the domain that is set for the cookie. It is * TRUE if host starts with '.', and FALSE otherwise. */ path = result[2]; secure = result[3]; name = result[5]; value = result[6]; cookie = soup_cookie_new (name, value, host, path, max_age); if (strcmp (secure, "FALSE") != 0) soup_cookie_set_secure (cookie, TRUE); if (http_only) soup_cookie_set_http_only (cookie, TRUE); out: g_strfreev (result); return cookie; }
static SoupCookie* toSoupCookie(const Cookie& cookie) { SoupCookie* soupCookie = soup_cookie_new(cookie.name.utf8().data(), cookie.value.utf8().data(), cookie.domain.utf8().data(), cookie.path.utf8().data(), -1); soup_cookie_set_http_only(soupCookie, cookie.httpOnly); soup_cookie_set_secure(soupCookie, cookie.secure); if (!cookie.session) { SoupDate* date = msToSoupDate(cookie.expires); soup_cookie_set_expires(soupCookie, date); soup_date_free(date); } return soupCookie; }
/* Cookie jar saving to Mozilla format Copyright (C) 2008 Xan Lopez <*****@*****.**> Copyright (C) 2008 Dan Winship <*****@*****.**> Mostly copied from libSoup 2.24, coding style adjusted */ static SoupCookie* parse_cookie (gchar* line, time_t now) { gchar** result; SoupCookie *cookie = NULL; gboolean http_only; time_t max_age; gchar* host/*, *is_domain*/, *path, *secure, *expires, *name, *value; if (g_str_has_prefix (line, "#HttpOnly_")) { http_only = TRUE; line += strlen ("#HttpOnly_"); } else if (*line == '#' || g_ascii_isspace (*line)) return cookie; else http_only = FALSE; result = g_strsplit (line, "\t", -1); if (g_strv_length (result) != 7) goto out; /* Check this first */ expires = result[4]; max_age = strtoul (expires, NULL, 10) - now; if (max_age <= 0) goto out; host = result[0]; /* is_domain = result[1]; */ path = result[2]; secure = result[3]; name = result[5]; value = result[6]; cookie = soup_cookie_new (name, value, host, path, max_age); if (strcmp (secure, "FALSE")) soup_cookie_set_secure (cookie, TRUE); if (http_only) soup_cookie_set_http_only (cookie, TRUE); out: g_strfreev (result); return cookie; }
static SoupCookie* cookie_new_from_table(lua_State *L, gint idx, gchar **error) { SoupCookie *cookie = NULL; SoupDate *date; const gchar *name, *value, *domain, *path; name = value = domain = path = NULL; gboolean secure, http_only; gint expires; /* correct relative index */ if (idx < 0) idx = lua_gettop(L) + idx + 1; /* check for cookie table */ if (!lua_istable(L, idx)) { *error = g_strdup_printf("invalid cookie table, got %s", lua_typename(L, lua_type(L, idx))); return NULL; } #define IS_STRING (lua_isstring(L, -1) || lua_isnumber(L, -1)) #define IS_BOOLEAN (lua_isboolean(L, -1) || lua_isnil(L, -1)) #define IS_NUMBER (lua_isnumber(L, -1)) #define GET_PROP(prop, typname, typexpr, typfunc) \ lua_pushliteral(L, #prop); \ lua_rawget(L, idx); \ if ((typexpr)) { \ prop = typfunc(L, -1); \ lua_pop(L, 1); \ } else { \ *error = g_strdup_printf("invalid cookie." #prop " type, expected " \ #typname ", got %s", lua_typename(L, lua_type(L, -1))); \ return NULL; \ } /* get cookie properties */ GET_PROP(name, string, IS_STRING, lua_tostring) GET_PROP(value, string, IS_STRING, lua_tostring) GET_PROP(domain, string, IS_STRING, lua_tostring) GET_PROP(path, string, IS_STRING, lua_tostring) GET_PROP(secure, boolean, IS_BOOLEAN, lua_toboolean) GET_PROP(http_only, boolean, IS_BOOLEAN, lua_toboolean) GET_PROP(expires, number, IS_NUMBER, lua_tonumber) #undef IS_STRING #undef IS_BOOLEAN #undef IS_NUMBER #undef GET_PROP /* create soup cookie */ if ((cookie = soup_cookie_new(name, value, domain, path, expires))) { soup_cookie_set_secure(cookie, secure); soup_cookie_set_http_only(cookie, http_only); /* set real expiry date from unixtime */ if (expires > 0) { date = soup_date_new_from_time_t((time_t) expires); soup_cookie_set_expires(cookie, date); soup_date_free(date); } return cookie; } /* soup cookie creation failed */ *error = g_strdup_printf("soup cookie creation failed"); return NULL; }