<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/> <meta http-equiv="X-UA-Compatible" content="IE=9"/> <title>libgadu: Dokumentacja pliku resolver.c</title> <link href="tabs.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="jquery.js"></script> <script type="text/javascript" src="dynsections.js"></script> <link href="search/search.css" rel="stylesheet" type="text/css"/> <script type="text/javascript" src="search/search.js"></script> <script type="text/javascript"> $(document).ready(function() { searchBox.OnSelectItem(0); }); </script> <link href="doxygen.css" rel="stylesheet" type="text/css" /> </head> <body> <div id="top"><!-- do not remove this div, it is closed by doxygen! --> <div id="titlearea"> <table cellspacing="0" cellpadding="0"> <tbody> <tr style="height: 56px;"> <td style="padding-left: 0.5em;"> <div id="projectname">libgadu  <span id="projectnumber">1.11.2</span> </div> </td> </tr> </tbody> </table> </div> <!-- end header part --> <!-- Wygenerowano przez Doxygen 1.8.1.1 --> <script type="text/javascript"> var searchBox = new SearchBox("searchBox", "search",false,'Szukaj'); </script> <div id="navrow1" class="tabs"> <ul class="tablist"> <li><a href="index.html"><span>Strona główna</span></a></li> <li><a href="pages.html"><span>Dodatkowe strony</span></a></li> <li><a href="modules.html"><span>Moduły</span></a></li> <li><a href="annotated.html"><span>Struktury Danych</span></a></li> <li class="current"><a href="files.html"><span>Pliki</span></a></li> <li> <div id="MSearchBox" class="MSearchBoxInactive"> <span class="left"> <img id="MSearchSelect" src="search/mag_sel.png" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" alt=""/> <input type="text" id="MSearchField" value="Szukaj" accesskey="S" onfocus="searchBox.OnSearchFieldFocus(true)" onblur="searchBox.OnSearchFieldFocus(false)" onkeyup="searchBox.OnSearchFieldChange(event)"/> </span><span class="right"> <a id="MSearchClose" href="javascript:searchBox.CloseResultsWindow()"><img id="MSearchCloseImg" border="0" src="search/close.png" alt=""/></a> </span> </div> </li> </ul> </div> <div id="navrow2" class="tabs2"> <ul class="tablist"> <li><a href="files.html"><span>Lista plików</span></a></li> <li><a href="globals.html"><span>Globalne</span></a></li> </ul> </div> <!-- window showing the filter options --> <div id="MSearchSelectWindow" onmouseover="return searchBox.OnSearchSelectShow()" onmouseout="return searchBox.OnSearchSelectHide()" onkeydown="return searchBox.OnSearchSelectKey(event)"> <a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(0)"><span class="SelectionMark"> </span>All</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(1)"><span class="SelectionMark"> </span>Struktury Danych</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(2)"><span class="SelectionMark"> </span>Pliki</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(3)"><span class="SelectionMark"> </span>Funkcje</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(4)"><span class="SelectionMark"> </span>Zmienne</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(5)"><span class="SelectionMark"> </span>Definicje typów</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(6)"><span class="SelectionMark"> </span>Wyliczenia</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(7)"><span class="SelectionMark"> </span>Wartości wyliczeń</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(8)"><span class="SelectionMark"> </span>Definicje</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(9)"><span class="SelectionMark"> </span>Grupay</a><a class="SelectItem" href="javascript:void(0)" onclick="searchBox.OnSelectItem(10)"><span class="SelectionMark"> </span>Strony</a></div> <!-- iframe showing the search results (closed by default) --> <div id="MSearchResultsWindow"> <iframe src="javascript:void(0)" frameborder="0" name="MSearchResults" id="MSearchResults"> </iframe> </div> <div id="nav-path" class="navpath"> <ul> <li class="navelem"><a class="el" href="dir_99d2dc560f84dde124e930de108007a7.html">builddir</a></li><li class="navelem"><a class="el" href="dir_f6883469d6f26503444921bb15d930e9.html">build</a></li><li class="navelem"><a class="el" href="dir_37d5b7668ae03bfa373b2267d602ea0e.html">BUILD</a></li><li class="navelem"><a class="el" href="dir_23aa8c29e51b88cd9236d9274e0869f2.html">libgadu-1.11.2</a></li><li class="navelem"><a class="el" href="dir_46b75c00015342f62abbdde21422cdae.html">src</a></li> </ul> </div> </div><!-- top --> <div class="header"> <div class="summary"> <a href="#nested-classes">Struktury danych</a> | <a href="#func-members">Funkcje</a> | <a href="#var-members">Zmienne</a> </div> <div class="headertitle"> <div class="title">Dokumentacja pliku resolver.c</div> </div> </div><!--header--> <div class="contents"> <p>Funkcje rozwiązywania nazw. <a href="#details">Więcej...</a></p> <table class="memberdecls"> <tr class="heading"><td colspan="2"><h2><a name="nested-classes"></a> Struktury danych</h2></td></tr> <tr class="memitem:"><td class="memItemLeft" align="right" valign="top">struct  </td><td class="memItemRight" valign="bottom"><a class="el" href="structgg__resolver__fork__data.html">gg_resolver_fork_data</a></td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2><a name="func-members"></a> Funkcje</h2></td></tr> <tr class="memitem:a2cf32a6da46b0f24563cb8cc4e5a5134"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#a2cf32a6da46b0f24563cb8cc4e5a5134">gg_gethostbyname_real</a> (const char *hostname, struct in_addr **result, int *count, int pthread)</td></tr> <tr class="memitem:a9fa917bb08470d67b3ae41760e29d1d6"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#a9fa917bb08470d67b3ae41760e29d1d6">gg_resolver_run</a> (int fd, const char *hostname)</td></tr> <tr class="memitem:ab07e80a4c1a9634d9446112ccd79eeba"><td class="memItemLeft" align="right" valign="top">struct in_addr * </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#ab07e80a4c1a9634d9446112ccd79eeba">gg_gethostbyname</a> (const char *hostname)</td></tr> <tr class="memitem:ab5450590bea02fbd4c3dfb3e2d3f3d87"><td class="memItemLeft" align="right" valign="top">static int </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#ab5450590bea02fbd4c3dfb3e2d3f3d87">gg_resolver_fork_start</a> (int *fd, void **priv_data, const char *hostname)</td></tr> <tr class="memitem:a84c98cb841b37fdaf527445ea747bb18"><td class="memItemLeft" align="right" valign="top">static void </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#a84c98cb841b37fdaf527445ea747bb18">gg_resolver_fork_cleanup</a> (void **priv_data, int force)</td></tr> <tr class="memitem:aace0683350d5568a28fa42d5e52d86eb"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#aace0683350d5568a28fa42d5e52d86eb">gg_session_set_resolver</a> (struct <a class="el" href="structgg__session.html">gg_session</a> *gs, <a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> type)</td></tr> <tr class="memdesc:aace0683350d5568a28fa42d5e52d86eb"><td class="mdescLeft"> </td><td class="mdescRight">Ustawia sposób rozwiązywania nazw w sesji. <a href="#aace0683350d5568a28fa42d5e52d86eb"></a><br/></td></tr> <tr class="memitem:af97e676cfaaae70465410b10bda4dc69"><td class="memItemLeft" align="right" valign="top"><a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#af97e676cfaaae70465410b10bda4dc69">gg_session_get_resolver</a> (struct <a class="el" href="structgg__session.html">gg_session</a> *gs)</td></tr> <tr class="memdesc:af97e676cfaaae70465410b10bda4dc69"><td class="mdescLeft"> </td><td class="mdescRight">Zwraca sposób rozwiązywania nazw w sesji. <a href="#af97e676cfaaae70465410b10bda4dc69"></a><br/></td></tr> <tr class="memitem:a8f9b507ccd6aaa7af9b1b43aa4add69f"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#a8f9b507ccd6aaa7af9b1b43aa4add69f">gg_session_set_custom_resolver</a> (struct <a class="el" href="structgg__session.html">gg_session</a> *gs, int(*resolver_start)(int *, void **, const char *), void(*resolver_cleanup)(void **, int))</td></tr> <tr class="memdesc:a8f9b507ccd6aaa7af9b1b43aa4add69f"><td class="mdescLeft"> </td><td class="mdescRight">Ustawia własny sposób rozwiązywania nazw w sesji. <a href="#a8f9b507ccd6aaa7af9b1b43aa4add69f"></a><br/></td></tr> <tr class="memitem:a921cf79728358d2f0428db34a8a9848a"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#a921cf79728358d2f0428db34a8a9848a">gg_http_set_resolver</a> (struct <a class="el" href="structgg__http.html">gg_http</a> *gh, <a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> type)</td></tr> <tr class="memdesc:a921cf79728358d2f0428db34a8a9848a"><td class="mdescLeft"> </td><td class="mdescRight">Ustawia sposób rozwiązywania nazw połączenia HTTP. <a href="#a921cf79728358d2f0428db34a8a9848a"></a><br/></td></tr> <tr class="memitem:a4708b9f610cf71fa6a4e18552b012845"><td class="memItemLeft" align="right" valign="top"><a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#a4708b9f610cf71fa6a4e18552b012845">gg_http_get_resolver</a> (struct <a class="el" href="structgg__http.html">gg_http</a> *gh)</td></tr> <tr class="memdesc:a4708b9f610cf71fa6a4e18552b012845"><td class="mdescLeft"> </td><td class="mdescRight">Zwraca sposób rozwiązywania nazw połączenia HTTP. <a href="#a4708b9f610cf71fa6a4e18552b012845"></a><br/></td></tr> <tr class="memitem:ada0b54e0dc210489df81b3242b870bf5"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#ada0b54e0dc210489df81b3242b870bf5">gg_http_set_custom_resolver</a> (struct <a class="el" href="structgg__http.html">gg_http</a> *gh, int(*resolver_start)(int *, void **, const char *), void(*resolver_cleanup)(void **, int))</td></tr> <tr class="memdesc:ada0b54e0dc210489df81b3242b870bf5"><td class="mdescLeft"> </td><td class="mdescRight">Ustawia własny sposób rozwiązywania nazw połączenia HTTP. <a href="#ada0b54e0dc210489df81b3242b870bf5"></a><br/></td></tr> <tr class="memitem:acf8f4941ad20d3ac4f68486205af26db"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#acf8f4941ad20d3ac4f68486205af26db">gg_global_set_resolver</a> (<a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> type)</td></tr> <tr class="memdesc:acf8f4941ad20d3ac4f68486205af26db"><td class="mdescLeft"> </td><td class="mdescRight">Ustawia sposób rozwiązywania nazw globalnie dla biblioteki. <a href="#acf8f4941ad20d3ac4f68486205af26db"></a><br/></td></tr> <tr class="memitem:a66c644f4c1ae6d2475033f1c5142e24d"><td class="memItemLeft" align="right" valign="top"><a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#a66c644f4c1ae6d2475033f1c5142e24d">gg_global_get_resolver</a> (void)</td></tr> <tr class="memdesc:a66c644f4c1ae6d2475033f1c5142e24d"><td class="mdescLeft"> </td><td class="mdescRight">Zwraca sposób rozwiązywania nazw globalnie dla biblioteki. <a href="#a66c644f4c1ae6d2475033f1c5142e24d"></a><br/></td></tr> <tr class="memitem:a38af79bcadc046a261666464fe7c3413"><td class="memItemLeft" align="right" valign="top">int </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#a38af79bcadc046a261666464fe7c3413">gg_global_set_custom_resolver</a> (int(*resolver_start)(int *, void **, const char *), void(*resolver_cleanup)(void **, int))</td></tr> <tr class="memdesc:a38af79bcadc046a261666464fe7c3413"><td class="mdescLeft"> </td><td class="mdescRight">Ustawia własny sposób rozwiązywania nazw globalnie dla biblioteki. <a href="#a38af79bcadc046a261666464fe7c3413"></a><br/></td></tr> </table><table class="memberdecls"> <tr class="heading"><td colspan="2"><h2><a name="var-members"></a> Zmienne</h2></td></tr> <tr class="memitem:a47bfdb3465a551a091c89b42293b32a5"><td class="memItemLeft" align="right" valign="top">static <a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#a47bfdb3465a551a091c89b42293b32a5">gg_global_resolver_type</a> = <a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931a7f5ea2a1b07fd128f5c2d57338c49153">GG_RESOLVER_DEFAULT</a></td></tr> <tr class="memdesc:a47bfdb3465a551a091c89b42293b32a5"><td class="mdescLeft"> </td><td class="mdescRight">Sposób rozwiązywania nazw serwerów. <a href="#a47bfdb3465a551a091c89b42293b32a5"></a><br/></td></tr> <tr class="memitem:a30bb480a1d6a690fb03aea70c853c997"><td class="memItemLeft" align="right" valign="top">static int(* </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#a30bb480a1d6a690fb03aea70c853c997">gg_global_resolver_start</a> )(int *fd, void **private_data, const char *hostname)</td></tr> <tr class="memdesc:a30bb480a1d6a690fb03aea70c853c997"><td class="mdescLeft"> </td><td class="mdescRight">Funkcja rozpoczynająca rozwiązywanie nazwy. <a href="#a30bb480a1d6a690fb03aea70c853c997"></a><br/></td></tr> <tr class="memitem:a0aaaffa82f88440c919874ff5714e4c0"><td class="memItemLeft" align="right" valign="top">static void(* </td><td class="memItemRight" valign="bottom"><a class="el" href="resolver_8c.html#a0aaaffa82f88440c919874ff5714e4c0">gg_global_resolver_cleanup</a> )(void **private_data, int force)</td></tr> <tr class="memdesc:a0aaaffa82f88440c919874ff5714e4c0"><td class="mdescLeft"> </td><td class="mdescRight">Funkcja zwalniająca zasoby po rozwiązaniu nazwy. <a href="#a0aaaffa82f88440c919874ff5714e4c0"></a><br/></td></tr> </table> <hr/><a name="details" id="details"></a><h2>Opis szczegółowy</h2> <div class="textblock"><p>Funkcje rozwiązywania nazw. </p> </div><hr/><h2>Dokumentacja funkcji</h2> <a class="anchor" id="a2cf32a6da46b0f24563cb8cc4e5a5134"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int gg_gethostbyname_real </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>hostname</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">struct in_addr ** </td> <td class="paramname"><em>result</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int * </td> <td class="paramname"><em>count</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>pthread</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Odpowiednik <code>gethostbyname</code> zapewniający współbieżność.</p> <p>Jeśli dany system dostarcza <code>gethostbyname_r</code>, używa się tej wersji, jeśli nie, to zwykłej <code>gethostbyname</code>. Wynikiem jest tablica adresów zakończona wartością INADDR_NONE, którą należy zwolnić po użyciu.</p> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">hostname</td><td>Nazwa serwera </td></tr> <tr><td class="paramname">result</td><td>Wskaźnik na wskaźnik z tablicą adresów zakończoną INADDR_NONE </td></tr> <tr><td class="paramname">count</td><td>Wskaźnik na zmienną, do ktorej zapisze się liczbę wyników </td></tr> <tr><td class="paramname">pthread</td><td>Flaga blokowania unicestwiania wątku podczas alokacji pamięci</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Zwraca:</dt><dd>0 jeśli się powiodło, -1 w przypadku błędu </dd></dl> </div> </div> <a class="anchor" id="a9fa917bb08470d67b3ae41760e29d1d6"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int gg_resolver_run </td> <td>(</td> <td class="paramtype">int </td> <td class="paramname"><em>fd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>hostname</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Rozwiązuje nazwę i zapisuje wynik do podanego desktyptora.</p> <dl class="section note"><dt>Nota:</dt><dd>Użycie logowania w tej funkcji może mieć negatywny wpływ na aplikacje jednowątkowe korzystające.</dd></dl> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">fd</td><td>Deskryptor </td></tr> <tr><td class="paramname">hostname</td><td>Nazwa serwera</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Zwraca:</dt><dd>0 jeśli się powiodło, -1 w przypadku błędu </dd></dl> </div> </div> <a class="anchor" id="ab07e80a4c1a9634d9446112ccd79eeba"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">struct in_addr* gg_gethostbyname </td> <td>(</td> <td class="paramtype">const char * </td> <td class="paramname"><em>hostname</em></td><td>)</td> <td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">read</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Odpowiednik <code>gethostbyname</code> zapewniający współbieżność.</p> <p>Jeśli dany system dostarcza <code>gethostbyname_r</code>, używa się tej wersji, jeśli nie, to zwykłej <code>gethostbyname</code>. Funkcja służy do zachowania zgodności ABI i służy do pobierania tylko pierwszego adresu – pozostałe mogą zostać zignorowane przez aplikację.</p> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">hostname</td><td>Nazwa serwera</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Zwraca:</dt><dd>Zaalokowana struktura <code>in_addr</code> lub NULL w przypadku błędu. </dd></dl> </div> </div> <a class="anchor" id="ab5450590bea02fbd4c3dfb3e2d3f3d87"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static int gg_resolver_fork_start </td> <td>(</td> <td class="paramtype">int * </td> <td class="paramname"><em>fd</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void ** </td> <td class="paramname"><em>priv_data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">const char * </td> <td class="paramname"><em>hostname</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Rozwiązuje nazwę serwera w osobnym procesie.</p> <p>Połączenia asynchroniczne nie mogą blokować procesu w trakcie rozwiązywania nazwy serwera. W tym celu tworzony jest potok, nowy proces i dopiero w nim przeprowadzane jest rozwiązywanie nazwy. Deskryptor strony do odczytu zapisuje się w strukturze sieci i czeka na dane w postaci struktury <code>in_addr</code>. Jeśli nie znaleziono nazwy, zwracana jest <code>INADDR_NONE</code>.</p> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">fd</td><td>Wskaźnik na zmienną, gdzie zostanie umieszczony deskryptor potoku </td></tr> <tr><td class="paramname">priv_data</td><td>Wskaźnik na zmienną, gdzie zostanie umieszczony wskaźnik do numeru procesu potomnego rozwiązującego nazwę </td></tr> <tr><td class="paramname">hostname</td><td>Nazwa serwera do rozwiązania</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Zwraca:</dt><dd>0 jeśli się powiodło, -1 w przypadku błędu </dd></dl> </div> </div> <a class="anchor" id="a84c98cb841b37fdaf527445ea747bb18"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">static void gg_resolver_fork_cleanup </td> <td>(</td> <td class="paramtype">void ** </td> <td class="paramname"><em>priv_data</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int </td> <td class="paramname"><em>force</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Usuwanie zasobów po procesie rozwiązywaniu nazwy.</p> <p>Funkcja wywoływana po zakończeniu rozwiązanywania nazwy lub przy zwalnianiu zasobów sesji podczas rozwiązywania nazwy.</p> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">priv_data</td><td>Wskaźnik na zmienną przechowującą wskaźnik do prywatnych danych </td></tr> <tr><td class="paramname">force</td><td>Flaga usuwania zasobów przed zakończeniem działania </td></tr> </table> </dd> </dl> </div> </div> <a class="anchor" id="aace0683350d5568a28fa42d5e52d86eb"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int gg_session_set_resolver </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structgg__session.html">gg_session</a> * </td> <td class="paramname"><em>gs</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> </td> <td class="paramname"><em>type</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Ustawia sposób rozwiązywania nazw w sesji. </p> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">gs</td><td>Struktura sesji </td></tr> <tr><td class="paramname">type</td><td>Sposób rozwiązywania nazw (patrz <a class="el" href="group__build.html#build-resolver">Rozwiązywanie nazw</a>)</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Zwraca:</dt><dd>0 jeśli się powiodło, -1 w przypadku błędu </dd></dl> </div> </div> <a class="anchor" id="af97e676cfaaae70465410b10bda4dc69"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> gg_session_get_resolver </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structgg__session.html">gg_session</a> * </td> <td class="paramname"><em>gs</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Zwraca sposób rozwiązywania nazw w sesji. </p> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">gs</td><td>Struktura sesji</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Zwraca:</dt><dd>Sposób rozwiązywania nazw </dd></dl> </div> </div> <a class="anchor" id="a8f9b507ccd6aaa7af9b1b43aa4add69f"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int gg_session_set_custom_resolver </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structgg__session.html">gg_session</a> * </td> <td class="paramname"><em>gs</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int(*)(int *, void **, const char *) </td> <td class="paramname"><em>resolver_start</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void(*)(void **, int) </td> <td class="paramname"><em>resolver_cleanup</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Ustawia własny sposób rozwiązywania nazw w sesji. </p> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">gs</td><td>Struktura sesji </td></tr> <tr><td class="paramname">resolver_start</td><td>Funkcja rozpoczynająca rozwiązywanie nazwy </td></tr> <tr><td class="paramname">resolver_cleanup</td><td>Funkcja zwalniająca zasoby</td></tr> </table> </dd> </dl> <p>Parametry funkcji rozpoczynającej rozwiązywanie nazwy wyglądają następująco:</p> <ul> <li><code>"int *fd"</code> — wskaźnik na zmienną, gdzie zostanie umieszczony deskryptor potoku</li> <li><code>"void **priv_data"</code> — wskaźnik na zmienną, gdzie można umieścić wskaźnik do prywatnych danych na potrzeby rozwiązywania nazwy</li> <li><code>"const char *name"</code> — nazwa serwera do rozwiązania</li> </ul> <p>Parametry funkcji zwalniającej zasoby wyglądają następująco:</p> <ul> <li><code>"void **priv_data"</code> — wskaźnik na zmienną przechowującą wskaźnik do prywatnych danych, należy go ustawić na <code>NULL</code> po zakończeniu</li> <li><code>"int force"</code> — flaga mówiąca o tym, że zasoby są zwalniane przed zakończeniem rozwiązywania nazwy, np. z powodu zamknięcia sesji.</li> </ul> <p>Własny kod rozwiązywania nazwy powinien stworzyć potok, parę gniazd lub inny deskryptor pozwalający na co najmniej jednostronną komunikację i przekazać go w parametrze <code>fd</code>. Po zakończeniu rozwiązywania nazwy, powinien wysłać otrzymany adres IP w postaci sieciowej (big-endian) do deskryptora. Jeśli rozwiązywanie nazwy się nie powiedzie, należy wysłać <code>INADDR_NONE</code>. Następnie zostanie wywołana funkcja zwalniająca zasoby z parametrem <code>force</code> równym <code>0</code>. Gdyby sesja została zakończona przed rozwiązaniem nazwy, np. za pomocą funkcji <code><a class="el" href="group__login.html#ga415c0e5527711d9ddb2be6c7f5eff9fc" title="Kończy połączenie z serwerem.">gg_logoff()</a></code>, funkcja zwalniająca zasoby zostanie wywołana z parametrem <code>force</code> równym <code>1</code>.</p> <dl class="section return"><dt>Zwraca:</dt><dd>0 jeśli się powiodło, -1 w przypadku błędu </dd></dl> </div> </div> <a class="anchor" id="a921cf79728358d2f0428db34a8a9848a"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int gg_http_set_resolver </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structgg__http.html">gg_http</a> * </td> <td class="paramname"><em>gh</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype"><a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> </td> <td class="paramname"><em>type</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Ustawia sposób rozwiązywania nazw połączenia HTTP. </p> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">gh</td><td>Struktura połączenia </td></tr> <tr><td class="paramname">type</td><td>Sposób rozwiązywania nazw (patrz <a class="el" href="group__build.html#build-resolver">Rozwiązywanie nazw</a>)</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Zwraca:</dt><dd>0 jeśli się powiodło, -1 w przypadku błędu </dd></dl> </div> </div> <a class="anchor" id="a4708b9f610cf71fa6a4e18552b012845"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> gg_http_get_resolver </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structgg__http.html">gg_http</a> * </td> <td class="paramname"><em>gh</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Zwraca sposób rozwiązywania nazw połączenia HTTP. </p> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">gh</td><td>Struktura połączenia</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Zwraca:</dt><dd>Sposób rozwiązywania nazw </dd></dl> </div> </div> <a class="anchor" id="ada0b54e0dc210489df81b3242b870bf5"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int gg_http_set_custom_resolver </td> <td>(</td> <td class="paramtype">struct <a class="el" href="structgg__http.html">gg_http</a> * </td> <td class="paramname"><em>gh</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">int(*)(int *, void **, const char *) </td> <td class="paramname"><em>resolver_start</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void(*)(void **, int) </td> <td class="paramname"><em>resolver_cleanup</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Ustawia własny sposób rozwiązywania nazw połączenia HTTP. </p> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">gh</td><td>Struktura sesji </td></tr> <tr><td class="paramname">resolver_start</td><td>Funkcja rozpoczynająca rozwiązywanie nazwy </td></tr> <tr><td class="paramname">resolver_cleanup</td><td>Funkcja zwalniająca zasoby</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Zwraca:</dt><dd>0 jeśli się powiodło, -1 w przypadku błędu </dd></dl> </div> </div> <a class="anchor" id="acf8f4941ad20d3ac4f68486205af26db"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int gg_global_set_resolver </td> <td>(</td> <td class="paramtype"><a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> </td> <td class="paramname"><em>type</em></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Ustawia sposób rozwiązywania nazw globalnie dla biblioteki. </p> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">type</td><td>Sposób rozwiązywania nazw (patrz <a class="el" href="group__build.html#build-resolver">Rozwiązywanie nazw</a>)</td></tr> </table> </dd> </dl> <dl class="section return"><dt>Zwraca:</dt><dd>0 jeśli się powiodło, -1 w przypadku błędu </dd></dl> </div> </div> <a class="anchor" id="a66c644f4c1ae6d2475033f1c5142e24d"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname"><a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> gg_global_get_resolver </td> <td>(</td> <td class="paramtype">void </td> <td class="paramname"></td><td>)</td> <td></td> </tr> </table> </div><div class="memdoc"> <p>Zwraca sposób rozwiązywania nazw globalnie dla biblioteki. </p> <dl class="section return"><dt>Zwraca:</dt><dd>Sposób rozwiązywania nazw </dd></dl> </div> </div> <a class="anchor" id="a38af79bcadc046a261666464fe7c3413"></a> <div class="memitem"> <div class="memproto"> <table class="memname"> <tr> <td class="memname">int gg_global_set_custom_resolver </td> <td>(</td> <td class="paramtype">int(*)(int *, void **, const char *) </td> <td class="paramname"><em>resolver_start</em>, </td> </tr> <tr> <td class="paramkey"></td> <td></td> <td class="paramtype">void(*)(void **, int) </td> <td class="paramname"><em>resolver_cleanup</em> </td> </tr> <tr> <td></td> <td>)</td> <td></td><td></td> </tr> </table> </div><div class="memdoc"> <p>Ustawia własny sposób rozwiązywania nazw globalnie dla biblioteki. </p> <dl class="params"><dt>Parametry:</dt><dd> <table class="params"> <tr><td class="paramname">resolver_start</td><td>Funkcja rozpoczynająca rozwiązywanie nazwy </td></tr> <tr><td class="paramname">resolver_cleanup</td><td>Funkcja zwalniająca zasoby</td></tr> </table> </dd> </dl> <p>Patrz <a class="el" href="libgadu_8h.html#a8f9b507ccd6aaa7af9b1b43aa4add69f">gg_session_set_custom_resolver</a>.</p> <dl class="section return"><dt>Zwraca:</dt><dd>0 jeśli się powiodło, -1 w przypadku błędu </dd></dl> </div> </div> <hr/><h2>Dokumentacja zmiennych</h2> <a class="anchor" id="a47bfdb3465a551a091c89b42293b32a5"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname"><a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931">gg_resolver_t</a> gg_global_resolver_type = <a class="el" href="libgadu_8h.html#a7bb365d8dbaef300a442a8a29adca931a7f5ea2a1b07fd128f5c2d57338c49153">GG_RESOLVER_DEFAULT</a></td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Sposób rozwiązywania nazw serwerów. </p> </div> </div> <a class="anchor" id="a30bb480a1d6a690fb03aea70c853c997"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">int(* gg_global_resolver_start)(int *fd, void **private_data, const char *hostname)</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Funkcja rozpoczynająca rozwiązywanie nazwy. </p> </div> </div> <a class="anchor" id="a0aaaffa82f88440c919874ff5714e4c0"></a> <div class="memitem"> <div class="memproto"> <table class="mlabels"> <tr> <td class="mlabels-left"> <table class="memname"> <tr> <td class="memname">void(* gg_global_resolver_cleanup)(void **private_data, int force)</td> </tr> </table> </td> <td class="mlabels-right"> <span class="mlabels"><span class="mlabel">static</span></span> </td> </tr> </table> </div><div class="memdoc"> <p>Funkcja zwalniająca zasoby po rozwiązaniu nazwy. </p> </div> </div> </div><!-- contents --> <!-- start footer part --> <hr class="footer"/><address class="footer"><small> Wygenerowano przez  <a href="http://www.doxygen.org/index.html"> <img class="footer" src="doxygen.png" alt="doxygen"/> </a> 1.8.1.1 </small></address> </body> </html>