On Thu, 6 Jan 2011, Enlightenment SVN wrote:
> Log: > Add basic cookie support to Ecore_Con_Url. we are in feature freeze. This code should be postoned after release Vincent > > This commit adds some simple wrapper functions for libcurl > cookie-related code to Ecore_Con_Url. > > It is now possible to enable the cookie engine, clear cookies and > dump/load them from files. > > Cookies in both HTTP header-style and cookie-jar are supported. > > Patch by Raphael Kubo da Costa <k...@profusion.mobi> > > > > Author: etrunko > Date: 2011-01-06 08:10:38 -0800 (Thu, 06 Jan 2011) > New Revision: 55934 > Trac: http://trac.enlightenment.org/e/changeset/55934 > > Modified: > trunk/ecore/src/lib/ecore_con/Ecore_Con.h > trunk/ecore/src/lib/ecore_con/ecore_con_url.c > > Modified: trunk/ecore/src/lib/ecore_con/Ecore_Con.h > =================================================================== > --- trunk/ecore/src/lib/ecore_con/Ecore_Con.h 2011-01-06 11:48:53 UTC (rev > 55933) > +++ trunk/ecore/src/lib/ecore_con/Ecore_Con.h 2011-01-06 16:10:38 UTC (rev > 55934) > @@ -531,6 +531,17 @@ > EAPI void ecore_con_url_ftp_use_epsv_set(Ecore_Con_Url *url_con, > Eina_Bool use_epsv); > > +EAPI void ecore_con_url_cookies_init(Ecore_Con_Url *url_con); > +EAPI void > ecore_con_url_cookies_ignore_old_session_set(Ecore_Con_Url *url_con, > + > Eina_Bool ignore); > +EAPI void ecore_con_url_cookies_clear(Ecore_Con_Url *url_con); > +EAPI void ecore_con_url_cookies_session_clear(Ecore_Con_Url > *url_con); > +EAPI void ecore_con_url_cookies_file_add(Ecore_Con_Url *url_con, > + const char * const > file_name); > +EAPI Eina_Bool ecore_con_url_cookies_jar_file_set(Ecore_Con_Url > *url_con, > + const char * const > cookiejar_file); > +EAPI void ecore_con_url_cookies_jar_write(Ecore_Con_Url > *url_con); > + > /** > * @} > */ > > Modified: trunk/ecore/src/lib/ecore_con/ecore_con_url.c > =================================================================== > --- trunk/ecore/src/lib/ecore_con/ecore_con_url.c 2011-01-06 11:48:53 UTC > (rev 55933) > +++ trunk/ecore/src/lib/ecore_con/ecore_con_url.c 2011-01-06 16:10:38 UTC > (rev 55934) > @@ -1079,6 +1079,276 @@ > } > > /** > + * Enables the cookie engine for subsequent HTTP requests. > + * > + * After this function is called, cookies set by the server in HTTP responses > + * will be parsed and stored, as well as sent back to the server in new HTTP > + * requests. > + * > + * @note Even though this function is called @c ecore_con_url_cookies_init(), > + * there is no symmetrical shutdown operation. > + * > + * @param url_con Ecore_Con_Url instance which will be acted upon. > + */ > +EAPI void > +ecore_con_url_cookies_init(Ecore_Con_Url *url_con) > +{ > +#ifdef HAVE_CURL > + if (!url_con) > + return; > + > + if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL)) > + { > + ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, > + "ecore_con_url_cookies_init"); > + return; > + } > + > + curl_easy_setopt(url_con->curl_easy, CURLOPT_COOKIEFILE, ""); > +#else > + (void)url_con; > +#endif > +} > + > +/** > + * Controls whether session cookies from previous sessions shall be loaded. > + * > + * Session cookies are cookies with no expire date set, which usually means > + * they are removed after the current session is closed. > + * > + * By default, when Ecore_Con_Url loads cookies from a file, all cookies are > + * loaded, including session cookies, which, most of the time, were supposed > + * to be loaded and valid only for that session. > + * > + * If @p ignore is set to @c EINA_TRUE, when Ecore_Con_Url loads cookies from > + * the files passed to @c ecore_con_url_cookies_file_add(), session cookies > + * will not be loaded. > + * > + * @param url_con Ecore_Con_Url instance which will be acted upon. > + * @param ignore If @c EINA_TRUE, ignore session cookies when loading > cookies > + * from files. If @c EINA_FALSE, all cookies will be loaded. > + * > + * @see ecore_con_url_cookies_file_add() > + */ > +EAPI void > +ecore_con_url_cookies_ignore_old_session_set(Ecore_Con_Url *url_con, > Eina_Bool ignore) > +{ > +#ifdef HAVE_CURL > + if (!url_con) > + return; > + > + if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL)) > + { > + ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, > + "ecore_con_url_cookies_ignore_old_session_set"); > + return; > + } > + > + curl_easy_setopt(url_con->curl_easy, CURLOPT_COOKIESESSION, ignore); > +#else > + (void)url_con; > + (void)ignore; > +#endif > +} > + > +/** > + * Clears currently loaded cookies. > + * > + * The cleared cookies are removed and will not be sent in subsequent HTTP > + * requests, nor will they be written to the cookiejar file set via > + * @c ecore_con_url_cookies_jar_file_set(). > + * > + * @note This function will initialize the cookie engine if it has not been > + * initialized yet. > + * > + * @param url_con Ecore_Con_Url instance which will be acted upon. > + * > + * @see ecore_con_url_cookies_session_clear() > + * @see ecore_con_url_cookies_ignore_old_session_set() > + */ > +EAPI void > +ecore_con_url_cookies_clear(Ecore_Con_Url *url_con) > +{ > +#ifdef HAVE_CURL > + if (!url_con) > + return; > + > + if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL)) > + { > + ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, > + "ecore_con_url_cookies_clear"); > + return; > + } > + > + curl_easy_setopt(url_con->curl_easy, CURLOPT_COOKIELIST, "ALL"); > +#else > + (void)url_con; > +#endif > +} > + > +/** > + * Clears currently loaded session cookies. > + * > + * Session cookies are cookies with no expire date set, which usually means > + * they are removed after the current session is closed. > + * > + * The cleared cookies are removed and will not be sent in subsequent HTTP > + * requests, nor will they be written to the cookiejar file set via > + * @c ecore_con_url_cookies_jar_file_set(). > + * > + * @note This function will initialize the cookie engine if it has not been > + * initialized yet. > + * > + * @param url_con Ecore_Con_Url instance which will be acted upon. > + * > + * @see ecore_con_url_cookies_clear() > + * @see ecore_con_url_cookies_ignore_old_session_set() > + */ > +EAPI void > +ecore_con_url_cookies_session_clear(Ecore_Con_Url *url_con) > +{ > +#ifdef HAVE_CURL > + if (!url_con) > + return; > + > + if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL)) > + { > + ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, > + "ecore_con_url_cookies_session_clear"); > + return; > + } > + > + curl_easy_setopt(url_con->curl_easy, CURLOPT_COOKIELIST, "SESS"); > +#else > + (void)url_con; > +#endif > +} > + > +/** > + * Adds a file to the list of files from which to load cookies. > + * > + * Files must contain cookies defined according to two possible formats: > + * > + * @li HTTP-style header ("Set-Cookie: ..."). > + * @li Netscape/Mozilla cookie data format. > + * > + * Please notice that the file will not be read immediately, but rather added > + * to a list of files that will be loaded and parsed at a later time. > + * > + * @note This function will initialize the cookie engine if it has not been > + * initialized yet. > + * > + * @param url_con Ecore_Con_Url instance which will be acted upon. > + * @param file_name Name of the file that will be added to the list. > + * > + * @see ecore_con_url_cookies_ignore_old_session_set() > + */ > +EAPI void > +ecore_con_url_cookies_file_add(Ecore_Con_Url *url_con, const char * const > file_name) > +{ > +#ifdef HAVE_CURL > + if (!url_con) > + return; > + > + if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL)) > + { > + ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, > + "ecore_con_url_cookies_file_add"); > + return; > + } > + > + curl_easy_setopt(url_con->curl_easy, CURLOPT_COOKIEFILE, file_name); > +#else > + (void)url_con; > + (void)file_name; > +#endif > +} > + > +/** > + * Sets the name of the file to which all current cookies will be written > when > + * either cookies are flushed or Ecore_Con is shut down. > + * > + * Cookies are written following Netscape/Mozilla's data format, also known > as > + * cookie-jar. > + * > + * @note This function will initialize the cookie engine if it has not been > + * initialized yet. > + * > + * @param url_con Ecore_Con_Url instance which will be acted upon. > + * @param cookiejar_file File to which the cookies will be written. > + * > + * @return @c EINA_TRUE is the file name has been set successfully, > + * @c EINA_FALSE otherwise. > + * > + * @see ecore_con_url_cookies_jar_write() > + */ > +EAPI Eina_Bool > +ecore_con_url_cookies_jar_file_set(Ecore_Con_Url *url_con, const char * > const cookiejar_file) > +{ > +#ifdef HAVE_CURL > + CURLcode ret; > + > + if (!url_con) > + return EINA_FALSE; > + > + if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL)) > + { > + ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, > + "ecore_con_url_cookies_jar_file_set"); > + return EINA_FALSE; > + } > + > + ret = curl_easy_setopt(url_con->curl_easy, CURLOPT_COOKIEJAR, > + cookiejar_file); > + if (ret != CURLE_OK) > + { > + ERR("Setting the cookie-jar name failed: %s", > + curl_easy_strerror(ret)); > + return EINA_FALSE; > + } > + > + return EINA_TRUE; > +#else > + return EINA_FALSE; > + (void)url_con; > + (void)cookiejar_file; > +#endif > +} > + > +/** > + * Writes all current cookies to the cookie jar immediately. > + * > + * A cookie-jar file must have been previously set by > + * @c ecore_con_url_jar_file_set, otherwise nothing will be done. > + * > + * @note This function will initialize the cookie engine if it has not been > + * initialized yet. > + * > + * @param url_con Ecore_Con_Url instance which will be acted upon. > + * > + * @see ecore_con_url_cookies_jar_file_set() > + */ > +EAPI void > +ecore_con_url_cookies_jar_write(Ecore_Con_Url *url_con) > +{ > +#ifdef HAVE_CURL > + if (!url_con) > + return; > + > + if (!ECORE_MAGIC_CHECK(url_con, ECORE_MAGIC_CON_URL)) > + { > + ECORE_MAGIC_FAIL(url_con, ECORE_MAGIC_CON_URL, > + "ecore_con_url_cookies_jar_write"); > + return; > + } > + > + curl_easy_setopt(url_con->curl_easy, CURLOPT_COOKIELIST, "FLUSH"); > +#else > + (void)url_con; > +#endif > +} > + > +/** > * Toggle libcurl's verbose output. > * > * If @p verbose is @c EINA_TRUE, libcurl will output a lot of verbose > > > ------------------------------------------------------------------------------ > Learn how Oracle Real Application Clusters (RAC) One Node allows customers > to consolidate database storage, standardize their database environment, and, > should the need arise, upgrade to a full multi-node Oracle RAC database > without downtime or disruption > http://p.sf.net/sfu/oracle-sfdevnl > _______________________________________________ > enlightenment-svn mailing list > enlightenment-...@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/enlightenment-svn > > ------------------------------------------------------------------------------ Learn how Oracle Real Application Clusters (RAC) One Node allows customers to consolidate database storage, standardize their database environment, and, should the need arise, upgrade to a full multi-node Oracle RAC database without downtime or disruption http://p.sf.net/sfu/oracle-sfdevnl _______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel