Table of Contents

Connectivity Menu


Basic usage of Ecore_Con_Url

The Ecore URL connection library is an HTTP abstraction. It makes it easy to perform HTTP requests like POST, GET, …

Table of Contents

Initialisation and URL set

First, we need to initialise the Ecore URL connection library and create a Ecore_Con_Url object.

The Ecore_Con library shall also be initialized as described in the previous chapter.
Ecore_Con_Url *ec_url = NULL;
// Initiate Ecore Url connection library.
ecore_con_url_init();
// Create the Ecore_Con_Url object passing the URL that will receive the
// requests as an argument.
ec_url = ecore_con_url_new("http://www.enlightenment.org");
ecore_con_url_new() will return NULL on error, so be careful to check the returned object before using it.

The URL can be modified using ecore_con_url_url_set(). Here we will set it to https://docs.enlightenment.org/efl/1.15.0/index.html.

Eina_Bool ret = ecore_con_url_url_set(ec_url, "https://docs.enlightenment.org/efl/1.15.0/index.html");

The return value will contain EINA_FALSE if the new URL cannot be set.

Download a file

To download a file, we first need to create a local file and open it with write access. We can then give the file descriptor to the Ecore URL connection library so that it can write to it.

We can then register a callback on the following events:

ECORE_CON_EVENT_URL_PROGRESS happens when the URL object transfer has made progress.
It gives the total and current data status of the transfer (upload and download).
ECORE_CON_EVENT_URL_COMPLETE happens when the URL object has completed a transfer.
It returns the HTTP status code of the operation.
ECORE_CON_EVENT_URL_DATA happens when the URL object has received data.
It gives the size of the received data and a buffer containing the data.
ECORE_CON_EVENT_URL_DATA event will not be emitted if a file has been set to receive the response data with ecore_con_url_fd_set().

Here we only register callbacks for the complete and progress events.

static Eina_Bool
_url_progress_cb(void *data __UNUSED__, int type __UNUSED__, void *event_info)
{
   Ecore_Con_Event_Url_Progress *url_progress = event_info;
   printf("Download progress : %d\n", (url_progress->down.now / url_progress->down.total) * 100);
   return EINA_TRUE;
}
 
static Eina_Bool
_url_complete_cb(void *data __UNUSED__, int type __UNUSED__, void *event_info)
{
   Ecore_Con_Event_Url_Complete *url_complete = event_info;
   printf("Download completed with status: %d\n", url_complete->status);
   return EINA_TRUE;
}
 
ecore_event_handler_add(ECORE_CON_EVENT_URL_PROGRESS, _url_progress_cb, NULL);
ecore_event_handler_add(ECORE_CON_EVENT_URL_COMPLETE, _url_complete_cb, NULL);

Once the URL is set up and the callbacks are registered, we can launch the GET request.

ecore_con_url_get(ec_url);

The status of the request will be shown in the _url_complete_cb() and the progress will be reported by the _url_progress_cb() function.

Ecore File usage

The Ecore File library provides an abstraction of the Ecore URL connection library. All that we described previously can be done with one function call.

Ecore_File_Download_Job *jobret;
ecore_file_download(http://www.enlightenment.org,
                    file:
                    _url_complete_cb,
                    _url_progress_cb,
                    NULL,
                    &job_ret);

We first pass the url string we want to download, the local filename where it needs to be written, then the complete and progress callbacks with the data to pass to them (here NULL). Finally, it takes a Ecore_File_Download_Job structure that is filled by the function and which can be used with ecore_file_download_abort() to cancel the current download.


Connectivity Menu