\hypertarget{ecore_fd_handler_gnutls_example_8c-example}{}\doxysection{ecore\+\_\+fd\+\_\+handler\+\_\+gnutls\+\_\+example.\+c}
Shows how to use fd handlers.

Shows how to use fd handlers.


\begin{DoxyCodeInclude}{0}
\DoxyCodeLine{\textcolor{comment}{//Compile\ with:}}
\DoxyCodeLine{\textcolor{comment}{//\ gcc\ -\/o\ ecore\_fd\_handler\_gnutls\_example\ ecore\_fd\_handler\_gnutls\_example.c\ `pkg-\/config\ -\/-\/cflags\ -\/-\/libs\ ecore\ gnutls`}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{preprocessor}{\#ifdef\ HAVE\_CONFIG\_H}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include\ "{}config.h"{}}}
\DoxyCodeLine{\textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{preprocessor}{\#include\ <fcntl.h>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#ifdef\ HAVE\_NETINET\_TCP\_H}}
\DoxyCodeLine{\textcolor{preprocessor}{\#\ include\ <netinet/tcp.h>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\textcolor{preprocessor}{\#ifdef\ HAVE\_NETINET\_IN\_H}}
\DoxyCodeLine{\textcolor{preprocessor}{\#\ include\ <netinet/in.h>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\textcolor{preprocessor}{\#ifdef\ HAVE\_SYS\_SOCKET\_H}}
\DoxyCodeLine{\textcolor{preprocessor}{\#\ include\ <sys/socket.h>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\textcolor{preprocessor}{\#ifdef\ HAVE\_ARPA\_INET\_H}}
\DoxyCodeLine{\textcolor{preprocessor}{\#\ include\ <arpa/inet.h>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include\ <stdio.h>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include\ <errno.h>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include\ <unistd.h>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include\ <gnutls/gnutls.h>}}
\DoxyCodeLine{\textcolor{preprocessor}{\#include\ <Ecore.h>}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{comment}{/*\ Ecore\_Fd\_Handler\ example}}
\DoxyCodeLine{\textcolor{comment}{\ *\ 2010\ Mike\ Blumenkrantz}}
\DoxyCodeLine{\textcolor{comment}{\ *\ compile\ with\ gcc\ \$(pkgconfig\ -\/-\/cflags\ -\/-\/libs\ gnutls\ ecore)}}
\DoxyCodeLine{\textcolor{comment}{\ */}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{preprocessor}{\#define\ print(...)\ \(\backslash\)}}
\DoxyCodeLine{\textcolor{preprocessor}{do\ \{\ \(\backslash\)}}
\DoxyCodeLine{\textcolor{preprocessor}{\ \ fprintf(stderr,\ "{}line\ \%i:\ "{}},\ \_\_LINE\_\_);\ \(\backslash\)}
\DoxyCodeLine{\ \ fprintf(stderr,\ \_\_VA\_ARGS\_\_);\ \(\backslash\)}
\DoxyCodeLine{\ \ fprintf(stderr,\ "{}\(\backslash\)n"{});\(\backslash\)}
\DoxyCodeLine{\}\ while(0)}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ done\ =\ 0;}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static}\ \textcolor{keywordtype}{void}}
\DoxyCodeLine{tls\_log\_func(\textcolor{keywordtype}{int}\ level,\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *str)}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \ fprintf(stderr,\ \textcolor{stringliteral}{"{}|<\%d>|\ \%s"{}},\ level,\ str);}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static}\ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *}
\DoxyCodeLine{SSL\_GNUTLS\_PRINT\_HANDSHAKE\_STATUS(gnutls\_handshake\_description\_t\ status)}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{switch}\ (status)}
\DoxyCodeLine{\ \ \ \ \ \{}
\DoxyCodeLine{\ \ \ \ \ \ \textcolor{keywordflow}{case}\ GNUTLS\_HANDSHAKE\_HELLO\_REQUEST:}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Hello\ request"{}};}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ \ \ \textcolor{keywordflow}{case}\ GNUTLS\_HANDSHAKE\_CLIENT\_HELLO:}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Client\ hello"{}};}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ \ \ \textcolor{keywordflow}{case}\ GNUTLS\_HANDSHAKE\_SERVER\_HELLO:}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Server\ hello"{}};}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ \ \ \textcolor{keywordflow}{case}\ GNUTLS\_HANDSHAKE\_CERTIFICATE\_PKT:}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Certificate\ packet"{}};}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ \ \ \textcolor{keywordflow}{case}\ GNUTLS\_HANDSHAKE\_SERVER\_KEY\_EXCHANGE:}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Server\ key\ exchange"{}};}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ \ \ \textcolor{keywordflow}{case}\ GNUTLS\_HANDSHAKE\_CERTIFICATE\_REQUEST:}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Certificate\ request"{}};}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ \ \ \textcolor{keywordflow}{case}\ GNUTLS\_HANDSHAKE\_SERVER\_HELLO\_DONE:}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Server\ hello\ done"{}};}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ \ \ \textcolor{keywordflow}{case}\ GNUTLS\_HANDSHAKE\_CERTIFICATE\_VERIFY:}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Certificate\ verify"{}};}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ \ \ \textcolor{keywordflow}{case}\ GNUTLS\_HANDSHAKE\_CLIENT\_KEY\_EXCHANGE:}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Client\ key\ exchange"{}};}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ \ \ \textcolor{keywordflow}{case}\ GNUTLS\_HANDSHAKE\_FINISHED:}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Finished"{}};}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ \ \ \textcolor{keywordflow}{case}\ GNUTLS\_HANDSHAKE\_SUPPLEMENTAL:}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Supplemental"{}};}
\DoxyCodeLine{\ \ \ \ \ \ \textcolor{keywordflow}{default}:}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{return}\ \textcolor{stringliteral}{"{}Uncaught\ state"{}};}
\DoxyCodeLine{\ \ \ \ \ \}}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{return}\ NULL;}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{comment}{/*\ Connects\ to\ the\ peer\ and\ returns\ a\ socket}}
\DoxyCodeLine{\textcolor{comment}{\ *\ descriptor.}}
\DoxyCodeLine{\textcolor{comment}{\ */}}
\DoxyCodeLine{\textcolor{keyword}{static}\ \textcolor{keywordtype}{int}}
\DoxyCodeLine{tcp\_connect(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *PORT\ =\ \textcolor{stringliteral}{"{}443"{}};}
\DoxyCodeLine{\ \ \ \textcolor{keyword}{const}\ \textcolor{keywordtype}{char}\ *SERVER\ =\ \textcolor{stringliteral}{"{}69.58.181.89"{}};\ \textcolor{comment}{//verisign.com}}
\DoxyCodeLine{\ \ \ \textcolor{keywordtype}{int}\ err,\ sd;}
\DoxyCodeLine{\ \ \ \textcolor{keywordtype}{int}\ flag\ =\ 1,\ curstate\ =\ 0;}
\DoxyCodeLine{\ \ \ \textcolor{keyword}{struct\ }sockaddr\_in\ sa;}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \textcolor{comment}{/*\ sets\ some\ fd\ options\ such\ as\ nonblock\ */}}
\DoxyCodeLine{\ \ \ sd\ =\ socket(AF\_INET,\ SOCK\_STREAM,\ 0);}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{if}\ (sd\ <\ 0)\ abort();}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{if}\ (\mbox{\hyperlink{group__Evil_ga454bde45f2e42a909a704d160869aad5}{fcntl}}(sd,\ F\_SETFL,\ O\_NONBLOCK)\ <\ 0)\ perror(\textcolor{stringliteral}{"{}fcntl"{}});}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Eina__File__Group_ga858aff49902b2278be3e59aff989ed46}{eina\_file\_close\_on\_exec}}(sd,\ \mbox{\hyperlink{group__Eina__Types__Group_ga05c12dacc8b4058994df842b41be85fc}{EINA\_TRUE}});}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{if}\ (setsockopt(sd,\ SOL\_SOCKET,\ SO\_REUSEADDR,\ (\textcolor{keyword}{const}\ \textcolor{keywordtype}{void}\ *)\&curstate,\ \textcolor{keyword}{sizeof}(curstate))\ <\ 0)\ perror(\textcolor{stringliteral}{"{}setsockopt"{}});}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{if}\ (setsockopt(sd,\ IPPROTO\_TCP,\ TCP\_NODELAY,\ (\textcolor{keywordtype}{char}\ *)\&flag,\ \textcolor{keyword}{sizeof}(\textcolor{keywordtype}{int}))\ <\ 0)\ perror(\textcolor{stringliteral}{"{}setsockopt"{}});}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ memset(\&sa,\ \textcolor{charliteral}{'\(\backslash\)0'},\ \textcolor{keyword}{sizeof}\ (sa));}
\DoxyCodeLine{\ \ \ sa.sin\_family\ =\ AF\_INET;}
\DoxyCodeLine{\ \ \ sa.sin\_port\ =\ eina\_htons(atoi(PORT));}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{if}\ (inet\_pton(AF\_INET,\ SERVER,\ \&sa.sin\_addr))\ perror(\textcolor{stringliteral}{"{}inet\_pton"{}});}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \textcolor{comment}{/*\ connects\ to\ server}}
\DoxyCodeLine{\textcolor{comment}{\ \ \ \ */}}
\DoxyCodeLine{\ \ \ err\ =\ connect(sd,\ (\textcolor{keyword}{struct}\ sockaddr\ *)\&sa,\ \textcolor{keyword}{sizeof}\ (sa));}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{if}\ ((err\ <\ 0)\ \&\&\ (errno\ !=\ EINPROGRESS))}
\DoxyCodeLine{\ \ \ \ \ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ print(\textcolor{stringliteral}{"{}Connect\ error\(\backslash\)n"{}});}
\DoxyCodeLine{\ \ \ \ \ \ \ \ exit(1);}
\DoxyCodeLine{\ \ \ \ \ \}}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{return}\ sd;}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{comment}{/*\ closes\ the\ given\ socket\ descriptor.}}
\DoxyCodeLine{\textcolor{comment}{\ */}}
\DoxyCodeLine{\textcolor{keyword}{static}\ \textcolor{keywordtype}{void}}
\DoxyCodeLine{tcp\_close(\textcolor{keywordtype}{int}\ sd)}
\DoxyCodeLine{\{}
\DoxyCodeLine{\textcolor{preprocessor}{\#ifdef\ \_WIN32}}
\DoxyCodeLine{\ \ \ shutdown(sd,\ SD\_BOTH);\ \ \ \ \ \textcolor{comment}{/*\ no\ more\ receptions\ */}}
\DoxyCodeLine{\ \ \ closesocket(sd);}
\DoxyCodeLine{\textcolor{preprocessor}{\#else}}
\DoxyCodeLine{\ \ \ shutdown(sd,\ SHUT\_RDWR);\ \ \ \ \ \textcolor{comment}{/*\ no\ more\ receptions\ */}}
\DoxyCodeLine{\ \ \ close(sd);}
\DoxyCodeLine{\textcolor{preprocessor}{\#endif}}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keyword}{static}\ \mbox{\hyperlink{group__Eina__Types__Group_ga3fe0caf72e93b1bab1ca8ee3ccf3f226}{Eina\_Bool}}}
\DoxyCodeLine{\_process\_data(gnutls\_session\_t\ client,\ \mbox{\hyperlink{group__Ecore__FD__Handler__Group_ga225121ed2123da4b52b76aa08d78c220}{Ecore\_Fd\_Handler}}\ *fd\_handler)}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{int}\ ret,\ lastret;}
\DoxyCodeLine{\ \ \ \textcolor{keyword}{static}\ \textcolor{keywordtype}{unsigned}\ \textcolor{keywordtype}{int}\ count\ =\ 0;}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{if}\ (!done)}
\DoxyCodeLine{\ \ \ \ \ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ lastret\ =\ ret;}
\DoxyCodeLine{\ \ \ \ \ \ \ \ ret\ =\ gnutls\_handshake(client);}
\DoxyCodeLine{\ \ \ \ \ \ \ \ count++;}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (gnutls\_record\_get\_direction(client))}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{group__Ecore__FD__Handler__Group_gac7d30608fdd863ebde9a7870e2e7f1ff}{ecore\_main\_fd\_handler\_active\_set}}(fd\_handler,\ \mbox{\hyperlink{group__Ecore__FD__Handler__Group_ggab5644f471dfa3bd182619601d9b60608a654f7e6af4875742c5349c2cc55d1bab}{ECORE\_FD\_WRITE}});}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{else}}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \mbox{\hyperlink{group__Ecore__FD__Handler__Group_gac7d30608fdd863ebde9a7870e2e7f1ff}{ecore\_main\_fd\_handler\_active\_set}}(fd\_handler,\ \mbox{\hyperlink{group__Ecore__FD__Handler__Group_ggab5644f471dfa3bd182619601d9b60608a1699f804eccf88e7e169a4a20f1d44e7}{ECORE\_FD\_READ}});}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{comment}{/*\ avoid\ printing\ messages\ infinity\ times\ */}}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (lastret\ !=\ ret)}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ print(\textcolor{stringliteral}{"{}gnutls\ returned\ with:\ \%s\ -\/\ \%s"{}},\ gnutls\_strerror\_name(ret),\ gnutls\_strerror(ret));}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ ((ret\ ==\ GNUTLS\_E\_WARNING\_ALERT\_RECEIVED)\ ||\ (ret\ ==\ GNUTLS\_E\_FATAL\_ALERT\_RECEIVED))}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ \ \ print(\textcolor{stringliteral}{"{}Also\ received\ alert:\ \%s"{}},\ gnutls\_alert\_get\_name(gnutls\_alert\_get(client)));}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ print(\textcolor{stringliteral}{"{}last\ out:\ \%s"{}},\ SSL\_GNUTLS\_PRINT\_HANDSHAKE\_STATUS(gnutls\_handshake\_get\_last\_out(client)));}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ print(\textcolor{stringliteral}{"{}last\ in:\ \%s"{}},\ SSL\_GNUTLS\_PRINT\_HANDSHAKE\_STATUS(gnutls\_handshake\_get\_last\_in(client)));}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \textcolor{keywordflow}{if}\ (gnutls\_error\_is\_fatal(ret))}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ print(\textcolor{stringliteral}{"{}yarrr\ this\ be\ an\ error!"{}});}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \ \ \ exit(1);}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \ \ \}}
\DoxyCodeLine{\ \ \ \ \ \}}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{if}\ (ret\ ==\ GNUTLS\_E\_SUCCESS)}
\DoxyCodeLine{\ \ \ \ \ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ done\ =\ 1;}
\DoxyCodeLine{\ \ \ \ \ \ \ \ print(\textcolor{stringliteral}{"{}Handshake\ successful\ in\ \%u\ handshake\ calls!"{}},\ count);}
\DoxyCodeLine{\ \ \ \ \ \ \ \ \mbox{\hyperlink{group__Ecore__Main__Loop__Group_ga95cf8e97dff0716433c2c5474d606a98}{ecore\_main\_loop\_quit}}();}
\DoxyCodeLine{\ \ \ \ \ \}}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{return}\ \mbox{\hyperlink{group__Ecore__Main__Loop__Group_ga1ee9db07f9a46a8b20fb83e1c6dbed09}{ECORE\_CALLBACK\_RENEW}};}
\DoxyCodeLine{\}}
\DoxyCodeLine{}
\DoxyCodeLine{\textcolor{keywordtype}{int}}
\DoxyCodeLine{main(\textcolor{keywordtype}{void})}
\DoxyCodeLine{\{}
\DoxyCodeLine{\ \ \ \textcolor{comment}{/*\ credentials\ */}}
\DoxyCodeLine{\ \ \ gnutls\_anon\_client\_credentials\_t\ c\_anoncred;}
\DoxyCodeLine{\ \ \ gnutls\_certificate\_credentials\_t\ c\_certcred;}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ gnutls\_session\_t\ client;}
\DoxyCodeLine{\ \ \ \textcolor{keywordtype}{int}\ sd;}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \textcolor{comment}{/*\ General\ init.\ */}}
\DoxyCodeLine{\ \ \ gnutls\_global\_init();}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Ecore__Init__Group_ga77757609684a2c922dc5ec398274751b}{ecore\_init}}();}
\DoxyCodeLine{\ \ \ gnutls\_global\_set\_log\_function(tls\_log\_func);}
\DoxyCodeLine{\ \ \ gnutls\_global\_set\_log\_level(6);}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \textcolor{comment}{/*\ Init\ client\ */}}
\DoxyCodeLine{\ \ \ gnutls\_anon\_allocate\_client\_credentials(\&c\_anoncred);}
\DoxyCodeLine{\ \ \ gnutls\_certificate\_allocate\_credentials(\&c\_certcred);}
\DoxyCodeLine{\ \ \ gnutls\_init(\&client,\ GNUTLS\_CLIENT);}
\DoxyCodeLine{\ \ \ \textcolor{comment}{/*\ set\ very\ specific\ priorities\ */}}
\DoxyCodeLine{\ \ \ gnutls\_priority\_set\_direct(client,\ \textcolor{stringliteral}{"{}NONE:\%VERIFY\_ALLOW\_X509\_V1\_CA\_CRT:+RSA:+DHE-\/RSA:+DHE-\/DSS:+ANON-\/DH:+COMP-\/DEFLATE:+COMP-\/NULL:+CTYPE-\/X509:+SHA1:+SHA256:+SHA384:+SHA512:+AES-\/256-\/CBC:+AES-\/128-\/CBC:+3DES-\/CBC:+VERS-\/TLS1.2:+VERS-\/TLS1.1:+VERS-\/TLS1.0:+VERS-\/SSL3.0"{}},\ NULL);}
\DoxyCodeLine{\ \ \ gnutls\_credentials\_set(client,\ GNUTLS\_CRD\_ANON,\ c\_anoncred);}
\DoxyCodeLine{\ \ \ gnutls\_credentials\_set(client,\ GNUTLS\_CRD\_CERTIFICATE,\ c\_certcred);}
\DoxyCodeLine{\ \ \ gnutls\_server\_name\_set(client,\ GNUTLS\_NAME\_DNS,\ \textcolor{stringliteral}{"{}www.verisign.com"{}},\ strlen(\textcolor{stringliteral}{"{}www.verisign.com"{}}));}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \textcolor{comment}{/*\ connect\ to\ the\ peer}}
\DoxyCodeLine{\textcolor{comment}{\ \ \ \ */}}
\DoxyCodeLine{\ \ \ sd\ =\ tcp\_connect();}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \textcolor{comment}{/*\ associate\ gnutls\ with\ socket\ */}}
\DoxyCodeLine{\ \ \ gnutls\_transport\_set\_ptr(client,\ (gnutls\_transport\_ptr\_t)(uintptr\_t)sd);}
\DoxyCodeLine{\ \ \ \textcolor{comment}{/*\ add\ a\ callback\ for\ data\ being\ available\ for\ send/receive\ on\ socket\ */}}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{if}\ (!\mbox{\hyperlink{group__Ecore__FD__Handler__Group_gaf8483e27f0c9fd4a2a7c97fa5539a55f}{ecore\_main\_fd\_handler\_add}}(sd,\ \mbox{\hyperlink{group__Ecore__FD__Handler__Group_ggab5644f471dfa3bd182619601d9b60608a1699f804eccf88e7e169a4a20f1d44e7}{ECORE\_FD\_READ}}\ |\ \mbox{\hyperlink{group__Ecore__FD__Handler__Group_ggab5644f471dfa3bd182619601d9b60608a654f7e6af4875742c5349c2cc55d1bab}{ECORE\_FD\_WRITE}},\ (\mbox{\hyperlink{group__Ecore__FD__Handler__Group_ga233a4c637db3fe2257c08ef64ca42b4a}{Ecore\_Fd\_Cb}})\_process\_data,\ client,\ NULL,\ NULL))}
\DoxyCodeLine{\ \ \ \ \ \{}
\DoxyCodeLine{\ \ \ \ \ \ \ \ print(\textcolor{stringliteral}{"{}could\ not\ create\ fd\ handler!"{}});}
\DoxyCodeLine{\ \ \ \ \ \ \ \ exit(1);}
\DoxyCodeLine{\ \ \ \ \ \}}
\DoxyCodeLine{\ \ \ \textcolor{comment}{/*\ begin\ main\ loop\ */}}
\DoxyCodeLine{\ \ \ \mbox{\hyperlink{group__Ecore__Main__Loop__Group_gaf103b9f668bb3e4fed12e52c6180132d}{ecore\_main\_loop\_begin}}();}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ gnutls\_bye(client,\ GNUTLS\_SHUT\_RDWR);}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ gnutls\_deinit(client);}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ tcp\_close(sd);}
\DoxyCodeLine{}
\DoxyCodeLine{\ \ \ \textcolor{keywordflow}{return}\ 0;}
\DoxyCodeLine{\}}
\DoxyCodeLine{}

\end{DoxyCodeInclude}
 