This is a simple example that shows how to make a custom request using \mbox{\hyperlink{group__Ecore__Con__Url__Group_gad928193ae403bd05c1ce5ba48a1d52ea}{Ecore\+\_\+\+Con\+\_\+\+Url}}. The full source code for this example can be found at \mbox{\hyperlink{ecore_con_url_headers_example_8c-example}{ecore\+\_\+con\+\_\+url\+\_\+headers\+\_\+example.\+c}}.

The first part of the example is setting the callbacks to be called when an \mbox{\hyperlink{group__Ecore__Con__Events__Group_ga6ebe51236dac1bc1255b5b390cc9e6e3}{E\+C\+O\+R\+E\+\_\+\+C\+O\+N\+\_\+\+E\+V\+E\+N\+T\+\_\+\+U\+R\+L\+\_\+\+D\+A\+TA}} or \mbox{\hyperlink{group__Ecore__Con__Events__Group_gae90b9b857e1e0adc0c7f24e7ccecb44b}{E\+C\+O\+R\+E\+\_\+\+C\+O\+N\+\_\+\+E\+V\+E\+N\+T\+\_\+\+U\+R\+L\+\_\+\+C\+O\+M\+P\+L\+E\+TE}} event is received. These are the callbacks that are going to be used with this\+:

 
\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{\textcolor{keyword}{static} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}}}
\DoxyCodeLine{\_url\_data\_cb(\textcolor{keywordtype}{void} *data \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \textcolor{keywordtype}{int} type \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \textcolor{keywordtype}{void} *event\_info)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \mbox{\hyperlink{struct__Ecore__Con__Event__Url__Data}{Ecore\_Con\_Event\_Url\_Data}} *url\_data = event\_info;}
\DoxyCodeLine{   \textcolor{keywordtype}{int} i;}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{for} (i = 0; i < url\_data-\/>\mbox{\hyperlink{struct__Ecore__Con__Event__Url__Data_a1d4725aa77f3875cc3405597a5fbff91}{size}}; i++)}
\DoxyCodeLine{     printf(\textcolor{stringliteral}{"\%c"}, url\_data-\/>\mbox{\hyperlink{struct__Ecore__Con__Event__Url__Data_aaa4c4dbc6575b071164f8152a7808268}{data}}[i]);}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}};}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static} \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}}}
\DoxyCodeLine{\_url\_complete\_cb(\textcolor{keywordtype}{void} *data \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \textcolor{keywordtype}{int} type \mbox{\hyperlink{group__Eina__Types__Group_ga82d751be730f849719ca292f9558be87}{EINA\_UNUSED}}, \textcolor{keywordtype}{void} *event\_info)}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \mbox{\hyperlink{struct__Ecore__Con__Event__Url__Complete}{Ecore\_Con\_Event\_Url\_Complete}} *url\_complete = event\_info;}
\DoxyCodeLine{   \textcolor{keyword}{const} \mbox{\hyperlink{struct__Eina__List}{Eina\_List}} *headers, *l;}
\DoxyCodeLine{   \textcolor{keywordtype}{char} *str;}
\DoxyCodeLine{}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"\(\backslash\)n"});}
\DoxyCodeLine{   printf(\textcolor{stringliteral}{"download completed with status code: \%d\(\backslash\)n"}, url\_complete-\/>\mbox{\hyperlink{struct__Ecore__Con__Event__Url__Complete_ab842caa1615a911c3578e0dfeae5f773}{status}});}
\DoxyCodeLine{}
\DoxyCodeLine{   headers = \mbox{\hyperlink{group__Ecore__Con__Url__Group_gad368c1a684e52720116de4b923b04a82}{ecore\_con\_url\_response\_headers\_get}}(url\_complete-\/>\mbox{\hyperlink{struct__Ecore__Con__Event__Url__Complete_a58335ec0eac21f9c0828695922807039}{url\_con}});}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__List__Group_gac6efafc19f526d916cdb9757240a8773}{EINA\_LIST\_FOREACH}}(headers, l, str)}
\DoxyCodeLine{     printf(\textcolor{stringliteral}{"header: \%s\(\backslash\)n"}, str);}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Main__Loop__Group_ga95cf8e97dff0716433c2c5474d606a98}{ecore\_main\_loop\_quit}}();}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{return} \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}};}
\DoxyCodeLine{\}}

\end{DoxyCodeInclude}


The {\ttfamily main} code is as simple as the \mbox{\hyperlink{group__Ecore__Con__Url__Group_gad928193ae403bd05c1ce5ba48a1d52ea}{Ecore\+\_\+\+Con\+\_\+\+Url}} example. It contains some checks for the arguments to see if a G\+ET or P\+O\+ST request is required\+:


\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{int}}
\DoxyCodeLine{main(\textcolor{keywordtype}{int} argc, \textcolor{keyword}{const} \textcolor{keywordtype}{char} *argv[])}
\DoxyCodeLine{\{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Con__Url__Group_gad928193ae403bd05c1ce5ba48a1d52ea}{Ecore\_Con\_Url}} *ec\_url = NULL;}
\DoxyCodeLine{   \textcolor{keyword}{const} \textcolor{keywordtype}{char} *type, *post\_data = \textcolor{stringliteral}{""};}
\DoxyCodeLine{   \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}} r;}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (argc < 3)}
\DoxyCodeLine{     \{}
\DoxyCodeLine{        printf(\textcolor{stringliteral}{"need at least two parameters: < POST|GET >  <url1> [post-\/data]\(\backslash\)n"});}
\DoxyCodeLine{        \textcolor{keywordflow}{return} -\/1;}
\DoxyCodeLine{     \}}

\end{DoxyCodeInclude}


Then we start our required libraries and configure a global option to use pipelined requests\+:


\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{}
\DoxyCodeLine{   type = argv[1];}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (strcmp(type, \textcolor{stringliteral}{"POST"}) \&\& (strcmp(type, \textcolor{stringliteral}{"GET"})))}
\DoxyCodeLine{     \{}
\DoxyCodeLine{        printf(\textcolor{stringliteral}{"only POST or GET are supported by this example.\(\backslash\)n"});}
\DoxyCodeLine{        \textcolor{keywordflow}{return} -\/1;}
\DoxyCodeLine{     \}}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (argc > 3) post\_data = argv[3];}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Init__Group_ga77757609684a2c922dc5ec398274751b}{ecore\_init}}();}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Con__Lib__Group_gacf5ecf42c516bb9c8b6759721e9559bd}{ecore\_con\_init}}();}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Con__Url__Group_gac3fbeaf9cde529362e4567fc37e45c9f}{ecore\_con\_url\_init}}();}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{comment}{// check if requests are being pipelined, and set them if not:}}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (!\mbox{\hyperlink{group__Ecore__Con__Url__Group_ga1abb9bf94b5d36f19b0809bb8639e17b}{ecore\_con\_url\_pipeline\_get}}())}
\DoxyCodeLine{     \mbox{\hyperlink{group__Ecore__Con__Url__Group_ga39a8588deb7f759d7808496c477fe28e}{ecore\_con\_url\_pipeline\_set}}(\mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}});}

\end{DoxyCodeInclude}


Now we create our request object, but using \mbox{\hyperlink{group__Ecore__Con__Url__Group_ga2baf5b650b0926f6abd9bd50871ec8eb}{ecore\+\_\+con\+\_\+url\+\_\+custom\+\_\+new()}} to use a P\+O\+ST or G\+ET method depending on the command line arguments. And we also add the event handlers for our callbacks\+:


\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{}
\DoxyCodeLine{   ec\_url = \mbox{\hyperlink{group__Ecore__Con__Url__Group_ga2baf5b650b0926f6abd9bd50871ec8eb}{ecore\_con\_url\_custom\_new}}(argv[2], type);}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (!ec\_url)}
\DoxyCodeLine{     \{}
\DoxyCodeLine{        printf(\textcolor{stringliteral}{"error when creating ecore con url object.\(\backslash\)n"});}
\DoxyCodeLine{        \textcolor{keywordflow}{goto} end;}
\DoxyCodeLine{     \}}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Event__Group_gae75b0b1b2c50e73b8e42afc628b00a62}{ecore\_event\_handler\_add}}(\mbox{\hyperlink{group__Ecore__Con__Events__Group_ga6ebe51236dac1bc1255b5b390cc9e6e3}{ECORE\_CON\_EVENT\_URL\_DATA}}, \_url\_data\_cb, NULL);}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Event__Group_gae75b0b1b2c50e73b8e42afc628b00a62}{ecore\_event\_handler\_add}}(\mbox{\hyperlink{group__Ecore__Con__Events__Group_gae90b9b857e1e0adc0c7f24e7ccecb44b}{ECORE\_CON\_EVENT\_URL\_COMPLETE}}, \_url\_complete\_cb, NULL);}

\end{DoxyCodeInclude}


In order to demonstrate our A\+PI, some options are set to this request before actually performing it\+:


\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Con__Url__Group_ga1f9939c84aa5128d5197f1939d8cffeb}{ecore\_con\_url\_additional\_header\_add}}(ec\_url, \textcolor{stringliteral}{"User-\/Agent"}, \textcolor{stringliteral}{"blablabla"});}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Con__Url__Group_ga45a962a3b08b35fb5c1468ebe643ea2b}{ecore\_con\_url\_verbose\_set}}(ec\_url, \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}});}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Con__Url__Group_ga9834a4bf039957602a8966ae4d628ffb}{ecore\_con\_url\_httpauth\_set}}(ec\_url, \textcolor{stringliteral}{"user"}, \textcolor{stringliteral}{"password"}, \mbox{\hyperlink{group__Eina__Types__Group_ga1feb115f8e9913e806e090d9bd5a7301}{EINA\_FALSE}});}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Con__Url__Group_gac93f0e4c37e17b87e95212887a097f26}{ecore\_con\_url\_time}}(ec\_url, \mbox{\hyperlink{group__Ecore__Con__Url__Group_gga7fd1cb32a295b11143fb1660dc8bcd6bad3aba66e3ab06bb1c66942641a0b2d29}{ECORE\_CON\_URL\_TIME\_IFMODSINCE}}, 0);}

\end{DoxyCodeInclude}


Depending on what kind of request was asked (G\+ET or P\+O\+ST), we use one of the specific functions to perform it\+:


\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (!strcmp(type, \textcolor{stringliteral}{"GET"}))}
\DoxyCodeLine{     r = \mbox{\hyperlink{group__Ecore__Con__Url__Group_ga46f75358256eec26bd99eef96b25ffa8}{ecore\_con\_url\_get}}(ec\_url);}
\DoxyCodeLine{   \textcolor{keywordflow}{else}}
\DoxyCodeLine{     r = \mbox{\hyperlink{group__Ecore__Con__Url__Group_gaa9da5f3b9c091cf1a755136c5797d39c}{ecore\_con\_url\_post}}(ec\_url, post\_data, strlen(post\_data), NULL);}

\end{DoxyCodeInclude}


After that, we just check for errors, start the main loop, free resources and finally exit\+:


\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{if} (!r)}
\DoxyCodeLine{     \{}
\DoxyCodeLine{        printf(\textcolor{stringliteral}{"could not realize request.\(\backslash\)n"});}
\DoxyCodeLine{        \textcolor{keywordflow}{goto} free\_ec\_url;}
\DoxyCodeLine{     \}}
\DoxyCodeLine{}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Main__Loop__Group_gaf103b9f668bb3e4fed12e52c6180132d}{ecore\_main\_loop\_begin}}();}
\DoxyCodeLine{}
\DoxyCodeLine{free\_ec\_url:}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Con__Url__Group_ga711510886aaece16f5dee6903c603fb2}{ecore\_con\_url\_free}}(ec\_url);}
\DoxyCodeLine{end:}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Con__Url__Group_ga0da252aa2c919722894dd41cc6549435}{ecore\_con\_url\_shutdown}}();}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Con__Lib__Group_gaccfd8dd2a1187b71339b5cc39dc83938}{ecore\_con\_shutdown}}();}
\DoxyCodeLine{   \mbox{\hyperlink{group__Ecore__Init__Group_ga768298b932f18d7e7593a447493e5cde}{ecore\_shutdown}}();}
\DoxyCodeLine{}
\DoxyCodeLine{   \textcolor{keywordflow}{return} 0;}
\DoxyCodeLine{\}}

\end{DoxyCodeInclude}
 