ecore/ecore_con - add more reference doc to some functions.

Also add description to the examples.



SVN revision: 61161
This commit is contained in:
Rafael Antognolli 2011-07-08 18:06:19 +00:00
parent 8c3c7f0dac
commit 0a61ad17b6
3 changed files with 230 additions and 68 deletions

View File

@ -494,6 +494,104 @@
* @include ecore_con_lookup_example.c
*/
/**
* @page ecore_con_url_download_example_c Ecore_Con_Url - downloading a file
*
* This is a simple example that shows how to download a file using @ref
* Ecore_Con_Url. The full source code for this example can be found at @ref
* ecore_con_url_download_example.c.
*
* First we are setting some callbacks for events that will be sent when data
* arrives in our connection (the data is the content of the file being
* downloaded), and when the download is completed. The @c _url_progress_cb and
* @c _url_complete_cb are these callbacks:
*
* @dontinclude ecore_con_url_download_example.c
* @skip struct
* @until main_loop_quit
* @until }
*
* Notice that we also declared a struct that will hold how many bytes were
* downloaded through this object. It will be set in the @c main function using
* ecore_con_url_data_set().
*
* In the next step, on the @c main function, we open a file where we are going
* to save the content being downloaded:
*
* @until open(
* @until }
*
* With the file successfully open, let's create our @ref Ecore_Con_Url object.
* For this, we initialize the libraries and create the object:
*
* @until }
*
* Then we allocate and set the data struct to the connection object, and set a
* file descriptor from our previously open file to it. We also add the event
* handlers (callbacks) to the events that will be emitted on data being
* received and download complete:
*
* @until complete_cb
*
* Finally we start our request, and run the main loop:
*
* @until return 0
* @until }
*
* The rest of this code was just freeing resources, with some labels to be used
* for error handling.
*/
/**
* @page ecore_con_url_headers_example_c Ecore_Con_Url - customizing a request
*
* This is a simple example that shows how to make a custom request using @ref
* Ecore_Con_Url. The full source code for this example can be found at @ref
* ecore_con_url_headers_example.c.
*
* The first part of the example is setting the callbacks to be called when an
* #ECORE_CON_EVENT_URL_DATA or #ECORE_CON_EVENT_URL_COMPLETE event is received.
* These are the callbacks that are going to be used with this:
*
* @dontinclude ecore_con_url_headers_example.c
* @skip static
* @until main_loop_quit
* @until }
*
* The @c main code is as simple as the @ref Ecore_Con_Url example. It contains
* some checks for the arguments to see if a GET or POST request is required:
*
* @until GET
* @until }
*
* Then we start our required libraries and configure a global option to use
* pipelined requests:
*
* @until pipeline_set
*
* Now we create our request object, but using ecore_con_url_custom_new() to use
* a POST or GET method depending on the command line arguments. And we also add
* the event handlers for our callbacks:
*
* @until complete_cb
*
* In order to demonstrate our API, some options are set to this request before
* actually performing it:
*
* @until url_time
*
* Depending on what kind of request was asked (GET or POST), we use one of the
* specific functions to perform it:
*
* @until url_post
*
* After that, we just check for errors, start the main loop, free resources and
* finally exit:
*
* @until return
* @until }
*/
/**
* @example ecore_idler_example.c
* This example shows when @ref Ecore_Idler, @ref Ecore_Idle_Enterer and @ref
@ -548,6 +646,19 @@
* at @ref ecore_con_lookup_example_c
*/
/**
* @example ecore_con_url_download_example.c
* Shows how to download a file using an @ref Ecore_Con_Url object. See the
* complete example description at @ref ecore_con_url_download_example_c
*/
/**
* @example ecore_con_url_headers_example.c
* Shows how to make GET or POST requests using an @ref Ecore_Con_Url object,
* and make use of most of its API. See the complete example description at
* @ref ecore_con_headers_example_c
*/
/**
* @page tutorial_ecore_pipe_gstreamer_example
*

View File

@ -466,6 +466,9 @@ typedef enum _Ecore_Con_Type
* Initialises the Ecore_Con library.
* @return Number of times the library has been initialised without being
* shut down.
*
* @note This function already calls ecore_init() internally, so you don't need
* to call it explicitly.
*/
EAPI int ecore_con_init(void);
@ -473,6 +476,8 @@ EAPI int ecore_con_init(void);
* Shuts down the Ecore_Con library.
* @return Number of times the library has been initialised without being
* shut down.
* @note This function already calls ecore_shutdown() internally, so you don't
* need to call it explicitly unless you called ecore_init() explicitly too.
*/
EAPI int ecore_con_shutdown(void);
@ -590,7 +595,61 @@ EAPI int ecore_con_client_port_get(Ecore_Con_Client *cl);
* Utility functions that set up, use and shut down the Ecore URL
* Connection library.
*
* @todo write detailed description of Ecore_Con_Url
* These functions are a shortcut to make it easy to perform http requests
* (POST, GET, etc).
*
* Brief usage:
* 1. Create an Ecore_Con_Url object with ecore_con_url_new(url);
* 2. Register to receive the #ECORE_CON_EVENT_URL_COMPLETE event
* (and optionally the #ECORE_CON_EVENT_URL_DATA and
* #ECORE_CON_EVENT_URL_PROGRESS event to receive
* the response, e.g. for HTTP/FTP downloads)
* 3. Perform the operation with ecore_con_url_get(...);
*
* Note that it is good to reuse @ref Ecore_Con_Url objects wherever possible,
* but bear in mind that each one can only perform one operation at a time. You
* need to wait for the #ECORE_CON_EVENT_URL_COMPLETE event before re-using or
* destroying the object.
*
* If it's necessary to change the @ref Ecore_Con_Url object url, use
* ecore_con_url_url_set().
*
* Simple Usage 1 (HTTP GET):
* @code
* ecore_con_url_url_set(url_con, "http://www.google.com");
* ecore_con_url_get(url_con);
* @endcode
*
* Simple usage 2 (HTTP POST):
* @code
* ecore_con_url_url_set(url_con, "http://www.example.com/post_handler.cgi");
* ecore_con_url_post(url_con, data, data_length, "multipart/form-data");
* @endcode
*
* Simple Usage 3 (FTP download):
* @code
* fd = creat(filename, 0644)
* ecore_con_url_url_set(url_con, "ftp://ftp.example.com/pub/myfile");
* ecore_con_url_fd_set(url_con, fd);
* ecore_con_url_get(url_con);
* @endcode
*
* Simple Usage 4 (FTP upload as ftp://ftp.example.com/file):
* @code
* ecore_con_url_url_set(url_con, "ftp://ftp.example.com");
* ecore_con_url_ftp_upload(url_con, "/tmp/file", "user", "pass", NULL);
* @endcode
*
* Simple Usage 5 (FTP upload as ftp://ftp.example.com/dir/file):
* @code
* ecore_con_url_url_set(url_con, "ftp://ftp.example.com");
* ecore_con_url_ftp_upload(url_con, "/tmp/file", "user", "pass","dir");
* @endcode
*
* These are complete examples for the API:
* @li @ref ecore_con_url_download_example.c "Downloading a file"
* @li @ref ecore_con_url_headers_example.c "Setting many options for the
* connection"
*
* @{
*/
@ -643,25 +702,37 @@ EAPI int ecore_con_url_shutdown(void);
/**
* Enable or disable HTTP 1.1 pipelining.
* @param enable EINA_TRUE will turn it on, EINA_FALSE will disable it.
*
* Pipelining allows to send one request after another one, without having to
* wait for the reply of the first request. The respective replies are received
* in the order that the requests were sent.
*
* Enabling this feature will be valid for all requests done using @c
* ecore_con_url.
*
* See http://en.wikipedia.org/wiki/HTTP_pipelining for more info.
*
* @see ecore_con_url_pipeline_get()
*/
EAPI void ecore_con_url_pipeline_set(Eina_Bool enable);
/**
* Is HTTP 1.1 pipelining enable ?
* @return EINA_TRUE if it is enable.
*
* @see ecore_con_url_pipeline_set()
*/
EAPI Eina_Bool ecore_con_url_pipeline_get(void);
/**
* Creates and initializes a new Ecore_Con_Url connection object.
*
* Creates and initializes a new Ecore_Con_Url connection object that can be
* uesd for sending requests.
*
* @param url URL that will receive requests. Can be changed using
* ecore_con_url_url_set.
*
* @return NULL on error, a new Ecore_Con_Url on success.
*
* Creates and initializes a new Ecore_Con_Url connection object that can be
* used for sending requests.
*
* @see ecore_con_url_custom_new()
* @see ecore_con_url_url_set()
@ -670,15 +741,14 @@ EAPI Ecore_Con_Url * ecore_con_url_new(const char *url);
/**
* Creates a custom connection object.
*
* Creates and initializes a new Ecore_Con_Url for a custom request (e.g. HEAD,
* SUBSCRIBE and other obscure HTTP requests). This object should be used like
* one created with ecore_con_url_new().
*
* @param url URL that will receive requests
* @param custom_request Custom request (e.g. GET, POST, HEAD, PUT, etc)
*
* @return NULL on error, a new Ecore_Con_Url on success.
*
* Creates and initializes a new Ecore_Con_Url for a custom request (e.g. HEAD,
* SUBSCRIBE and other obscure HTTP requests). This object should be used like
* one created with ecore_con_url_new().
*
* @see ecore_con_url_new()
* @see ecore_con_url_url_set()
@ -707,12 +777,11 @@ EAPI Eina_Bool ecore_con_url_url_set(Ecore_Con_Url *url_con,
/**
* Associates data with a connection object.
*
* Associates data with a connection object, which can be retrieved later with
* ecore_con_url_data_get()).
*
* @param url_con Connection object to associate data.
* @param data Data to be set.
*
* Associates data with a connection object, which can be retrieved later with
* ecore_con_url_data_get()).
*
* @see ecore_con_url_data_get()
*/
@ -721,13 +790,12 @@ EAPI void ecore_con_url_data_set(Ecore_Con_Url *url_con,
/**
* Retrieves data associated with a Ecore_Con_Url connection object.
*
* Retrieves data associated with a Ecore_Con_Url connection object (previously
* set with ecore_con_url_data_set()).
*
* @param url_con Connection object to retrieve data from.
*
* @return Data associated with the given object.
*
* Retrieves data associated with a Ecore_Con_Url connection object (previously
* set with ecore_con_url_data_set()).
*
* @see ecore_con_url_data_set()
*/
@ -735,13 +803,15 @@ EAPI void * ecore_con_url_data_get(Ecore_Con_Url *url_con);
/**
* Adds an additional header to the request connection object.
*
* Adds an additional header to the request connection object. This addition
* will be valid for only one ecore_con_url_get() or ecore_con_url_post() call.
*
* @param url_con Connection object
* @param key Header key
* @param value Header value
*
* Adds an additional header (User-Agent, Content-Type, etc.) to the request
* connection object. This addition will be valid for only one
* ecore_con_url_get() or ecore_con_url_post() call.
*
* Some functions like ecore_con_url_time() also add headers to the request.
*
* @see ecore_con_url_get()
* @see ecore_con_url_post()
@ -753,11 +823,10 @@ EAPI void ecore_con_url_additional_header_add(Ecore_Con_Url *url_co
/**
* Cleans additional headers.
*
* Cleans additional headers associated with a connection object (previously
* added with ecore_con_url_additional_header_add()).
*
* @param url_con Connection object to clean additional headers.
*
* Cleans additional headers associated with a connection object (previously
* added with ecore_con_url_additional_header_add()).
*
* @see ecore_con_url_additional_header_add()
* @see ecore_con_url_get()
@ -767,27 +836,28 @@ EAPI void ecore_con_url_additional_headers_clear(Ecore_Con_Url *url
/**
* Retrieves headers from last request sent.
*
* @param url_con Connection object to retrieve response headers from.
*
* Retrieves a list containing the response headers. This function should be
* used after an ECORE_CON_EVENT_URL_COMPLETE event (headers should normally be
* ready at that time).
*
* @param url_con Connection object to retrieve response headers from.
*
* @return List of response headers. This list must not be modified by the user.
*
*/
EAPI const Eina_List * ecore_con_url_response_headers_get(Ecore_Con_Url *url_con);
/**
* Setup a file for receiving response data.
*
* Sets up a file to have response data written into. Note that
* ECORE_CON_EVENT_URL_DATA events will not be emitted if a file has been set to
* receive the response data.
*
* @param url_con Connection object to set file
* @param fd File descriptor associated with the file. A negative value will
* unset any previously set fd.
*
* Sets up a file to have response data written into. Note that
* ECORE_CON_EVENT_URL_DATA events will not be emitted if a file has been set to
* receive the response data.
*
* This call can be used to easily setup a file where the downloaded data will
* be saved.
*/
EAPI void ecore_con_url_fd_set(Ecore_Con_Url *url_con, int fd);
/**
@ -800,14 +870,12 @@ EAPI void ecore_con_url_fd_set(Ecore_Con_Url *url_con, int fd);
*
* @return Number of bytes received on request.
*
*
* @see ecore_con_url_get()
* @see ecore_con_url_post()
*/
EAPI int ecore_con_url_received_bytes_get(Ecore_Con_Url *url_con);
/**
* Sets url_con to use http auth, with given username and password, "safely" or not.
* ATTENTION: requires libcurl >= 7.19.1 to work, otherwise will always return 0.
*
* @param url_con Connection object to perform a request on, previously created
* with ecore_con_url_new() or ecore_con_url_custom_new().
@ -817,6 +885,7 @@ EAPI int ecore_con_url_received_bytes_get(Ecore_Con_Url *url_con);
*
* @return #EINA_TRUE on success, #EINA_FALSE on error.
*
* ATTENTION: requires libcurl >= 7.19.1 to work, otherwise will always return 0.
*/
EAPI Eina_Bool ecore_con_url_httpauth_set(Ecore_Con_Url *url_con,
const char *username,
@ -856,6 +925,10 @@ EINA_DEPRECATED EAPI Eina_Bool ecore_con_url_send(Ecore_Con_Url *url_con
*
* @return #EINA_TRUE on success, #EINA_FALSE on error.
*
* The request is performed immediately, but you need to setup event handlers
* for #ECORE_CON_EVENT_URL_DATA, #ECORE_CON_EVENT_URL_COMPLETE or
* #ECORE_CON_EVENT_URL_PROGRESS to get more information about its result.
*
* @see ecore_con_url_custom_new()
* @see ecore_con_url_additional_headers_clear()
* @see ecore_con_url_additional_header_add()
@ -871,13 +944,20 @@ EAPI Eina_Bool ecore_con_url_get(Ecore_Con_Url *url_con);
*
* @param url_con Connection object to perform a request on, previously created
* with ecore_con_url_new() or ecore_con_url_custom_new().
* @param data Payload (data sent on the request)
* @param data Payload (data sent on the request). Can be @c NULL.
* @param length Payload length. If @c -1, rely on automatic length
* calculation via @c strlen() on @p data.
* @param content_type Content type of the payload (e.g. text/xml)
* @param content_type Content type of the payload (e.g. text/xml). Can be @c
* NULL.
*
* @return #EINA_TRUE on success, #EINA_FALSE on error.
*
* The request starts immediately, but you need to setup event handlers
* for #ECORE_CON_EVENT_URL_DATA, #ECORE_CON_EVENT_URL_COMPLETE or
* #ECORE_CON_EVENT_URL_PROGRESS to get more information about its result.
*
* This call won't block your main loop.
*
* @see ecore_con_url_custom_new()
* @see ecore_con_url_additional_headers_clear()
* @see ecore_con_url_additional_header_add()
@ -898,6 +978,10 @@ EAPI Eina_Bool ecore_con_url_post(Ecore_Con_Url *url_con,
* @param condition Condition to use for HTTP requests.
* @param timestamp Time since 1 Jan 1970 to use in the condition.
*
* This function may set the header "If-Modified-Since" or
* "If-Unmodified-Since", depending on the value of @p time_condition, with the
* value @p timestamp.
*
* @sa ecore_con_url_get()
* @sa ecore_con_url_post()
*/
@ -924,12 +1008,12 @@ EAPI Eina_Bool ecore_con_url_ftp_upload(Ecore_Con_Url *url_con,
/**
* Toggle libcurl's verbose output.
*
* @param url_con Ecore_Con_Url instance which will be acted upon.
* @param verbose Whether or not to enable libcurl's verbose output.
*
* If @p verbose is @c EINA_TRUE, libcurl will output a lot of verbose
* information about its operations, which is useful for
* debugging. The verbose information will be sent to stderr.
*
* @param url_con Ecore_Con_Url instance which will be acted upon.
* @param verbose Whether or not to enable libcurl's verbose output.
*/
EAPI void ecore_con_url_verbose_set(Ecore_Con_Url *url_con,
Eina_Bool verbose);

View File

@ -4,40 +4,7 @@
*/
/*
* Brief usage:
* 1. Create an Ecore_Con_Url object
* 2. Register to receive the ECORE_CON_EVENT_URL_COMPLETE event
* (and optionally the ECORE_CON_EVENT_URL_DATA event to receive
* the response, e.g. for HTTP/FTP downloads)
* 3. Set the URL with ecore_con_url_url_set(...);
* 4. Perform the operation with ecore_con_url_get(...);
*
* Note that it is good to reuse Ecore_Con_Url objects wherever possible, but
* bear in mind that each one can only perform one operation at a time.
* You need to wait for the ECORE_CON_EVENT_URL_COMPLETE event before re-using
* or destroying the object.
*
* Example Usage 1 (HTTP GET):
* ecore_con_url_url_set(url_con, "http://www.google.com");
* ecore_con_url_get(url_con);
*
* Example usage 2 (HTTP POST):
* ecore_con_url_url_set(url_con, "http://www.example.com/post_handler.cgi");
* ecore_con_url_post(url_con, data, data_length, "multipart/form-data");
*
* Example Usage 3 (FTP download):
* ecore_con_url_url_set(url_con, "ftp://ftp.example.com/pub/myfile");
* ecore_con_url_get(url_con);
*
* Example Usage 4 (FTP upload as ftp://ftp.example.com/file):
* ecore_con_url_url_set(url_con, "ftp://ftp.example.com");
* ecore_con_url_ftp_upload(url_con, "/tmp/file", "user", "pass", NULL);
*
* Example Usage 5 (FTP upload as ftp://ftp.example.com/dir/file):
* ecore_con_url_url_set(url_con, "ftp://ftp.example.com");
* ecore_con_url_ftp_upload(url_con, "/tmp/file", "user", "pass","dir");
*
* FIXME: Support more CURL features: Progress callbacks and more...
* FIXME: Support more CURL features...
*/
#ifdef HAVE_CONFIG_H