Mercurial > pidgin.yaz
diff libpurple/protocols/gg/lib/pubdir.c @ 29938:6359fde67f4c
Update our internal libgadu to 1.9.0-rc2. This does not yet build on Windows.
Refs #10542. The Windows build errors are the only reason this isn't on
`im.pidgin.pidgin` already.
author | John Bailey <rekkanoryo@rekkanoryo.org> |
---|---|
date | Sun, 21 Feb 2010 16:52:42 +0000 |
parents | 259bbfb423d4 |
children | db6735e579f8 |
line wrap: on
line diff
--- a/libpurple/protocols/gg/lib/pubdir.c Sun Feb 21 00:11:56 2010 +0000 +++ b/libpurple/protocols/gg/lib/pubdir.c Sun Feb 21 16:52:42 2010 +0000 @@ -1,8 +1,9 @@ -/* $Id: pubdir.c 16856 2006-08-19 01:13:25Z evands $ */ +/* $Id: pubdir.c 502 2008-01-10 23:25:17Z wojtekka $ */ /* - * (C) Copyright 2001-2002 Wojtek Kaniewski <wojtekka@irc.pl> + * (C) Copyright 2001-2006 Wojtek Kaniewski <wojtekka@irc.pl> * Dawid Jarosz <dawjar@poczta.onet.pl> + * Adam Wysocki <gophi@ekg.chmurka.net> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License Version @@ -15,11 +16,15 @@ * * You should have received a copy of the GNU Lesser General Public * License along with this program; if not, write to the Free Software - * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301, + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307, * USA. */ -#include "libgadu.h" +/** + * \file pubdir.c + * + * \brief ObsÅ‚uga katalogu publicznego + */ #include <ctype.h> #include <errno.h> @@ -29,20 +34,22 @@ #include <string.h> #include <unistd.h> -/* - * gg_register3() +#include "libgadu.h" + +/** + * Rejestruje nowego użytkownika. * - * rozpoczyna rejestracjê u¿ytkownika protoko³em GG 6.0. wymaga wcze¶niejszego - * pobrania tokenu za pomoc± funkcji gg_token(). + * Wymaga wczeÅ›niejszego pobrania tokenu za pomocÄ… \c gg_token(). * - * - email - adres e-mail klienta - * - password - has³o klienta - * - tokenid - identyfikator tokenu - * - tokenval - warto¶æ tokenu - * - async - po³±czenie asynchroniczne + * \param email Adres e-mail + * \param password HasÅ‚o + * \param tokenid Identyfikator tokenu + * \param tokenval Zawartość tokenu + * \param async Flaga poÅ‚Ä…czenia asynchronicznego * - * zaalokowana struct gg_http, któr± po¼niej nale¿y zwolniæ - * funkcj± gg_register_free(), albo NULL je¶li wyst±pi³ b³±d. + * \return Struktura \c gg_http lub \c NULL w przypadku bÅ‚Ä™du + * + * \ingroup register */ struct gg_http *gg_register3(const char *email, const char *password, const char *tokenid, const char *tokenval, int async) { @@ -121,19 +128,59 @@ return h; } -/* - * gg_unregister3() +#ifdef DOXYGEN + +/** + * Funkcja wywoÅ‚ywana po zaobserwowaniu zmian na deskryptorze poÅ‚Ä…czenia. + * + * Operacja bÄ™dzie zakoÅ„czona, gdy pole \c state bÄ™dzie równe \c GG_STATE_DONE. + * JeÅ›li wystÄ…pi bÅ‚Ä…d, \c state bÄ™dzie równe \c GG_STATE_ERROR, a kod bÅ‚Ä™du + * znajdzie siÄ™ w polu \c error. + * + * \note W rzeczywistoÅ›ci funkcja jest makrem rozwijanym do + * \c gg_pubdir_watch_fd(). * - * usuwa konto u¿ytkownika z serwera protoko³em GG 6.0 + * \param h Struktura poÅ‚Ä…czenia + * + * \return 0 jeÅ›li siÄ™ powiodÅ‚o, -1 w przypadku bÅ‚Ä™du + * + * \ingroup register + */ +int gg_register_watch_fd(struct gg_httpd *h) +{ + return gg_pubdir_watch_fd(h); +} + +/** + * Zwalnia zasoby po operacji. * - * - uin - numerek GG - * - password - has³o klienta - * - tokenid - identyfikator tokenu - * - tokenval - warto¶æ tokenu - * - async - po³±czenie asynchroniczne + * \note W rzeczywistoÅ›ci funkcja jest makrem rozwijanym do \c gg_pubdir_free(). + * + * \param h Struktura poÅ‚Ä…czenia * - * zaalokowana struct gg_http, któr± po¼niej nale¿y zwolniæ - * funkcj± gg_unregister_free(), albo NULL je¶li wyst±pi³ b³±d. + * \ingroup register + */ +void gg_register_free(struct gg_http *h) +{ + return gg_pubdir_free(h); +} + +#endif /* DOXYGEN */ + +/** + * Usuwa użytkownika. + * + * Wymaga wczeÅ›niejszego pobrania tokenu za pomocÄ… \c gg_token(). + * + * \param uin Numer Gadu-Gadu + * \param password HasÅ‚o + * \param tokenid Identyfikator tokenu + * \param tokenval Zawartość tokenu + * \param async Flaga poÅ‚Ä…czenia asynchronicznego + * + * \return Struktura \c gg_http lub \c NULL w przypadku bÅ‚Ä™du + * + * \ingroup unregister */ struct gg_http *gg_unregister3(uin_t uin, const char *password, const char *tokenid, const char *tokenval, int async) { @@ -145,7 +192,7 @@ errno = EFAULT; return NULL; } - + __pwd = gg_saprintf("%ld", random()); __fmpwd = gg_urlencode(password); __tokenid = gg_urlencode(tokenid); @@ -210,22 +257,61 @@ return h; } -/* - * gg_change_passwd4() +#ifdef DOXYGEN + +/** + * Funkcja wywoÅ‚ywana po zaobserwowaniu zmian na deskryptorze poÅ‚Ä…czenia. + * + * Operacja bÄ™dzie zakoÅ„czona, gdy pole \c state bÄ™dzie równe \c GG_STATE_DONE. + * JeÅ›li wystÄ…pi bÅ‚Ä…d, \c state bÄ™dzie równe \c GG_STATE_ERROR, a kod bÅ‚Ä™du + * znajdzie siÄ™ w polu \c error. + * + * \note W rzeczywistoÅ›ci funkcja jest makrem rozwijanym do + * \c gg_pubdir_watch_fd(). + * + * \param h Struktura poÅ‚Ä…czenia * - * wysy³a ¿±danie zmiany has³a zgodnie z protoko³em GG 6.0. wymaga - * wcze¶niejszego pobrania tokenu za pomoc± funkcji gg_token(). + * \return 0 jeÅ›li siÄ™ powiodÅ‚o, -1 w przypadku bÅ‚Ä™du + * + * \ingroup unregister + */ +int gg_unregister_watch_fd(struct gg_httpd *h) +{ + return gg_pubdir_watch_fd(h); +} + +/** + * Zwalnia zasoby po operacji. + * + * \note W rzeczywistoÅ›ci funkcja jest makrem rozwijanym do \c gg_pubdir_free(). * - * - uin - numer - * - email - adres e-mail - * - passwd - stare has³o - * - newpasswd - nowe has³o - * - tokenid - identyfikator tokenu - * - tokenval - warto¶æ tokenu - * - async - po³±czenie asynchroniczne + * \param h Struktura poÅ‚Ä…czenia + * + * \ingroup unregister + */ +void gg_unregister_free(struct gg_http *h) +{ + return gg_pubdir_free(h); +} + +#endif /* DOXYGEN */ + +/** + * Zmienia hasÅ‚o użytkownika. * - * zaalokowana struct gg_http, któr± po¼niej nale¿y zwolniæ - * funkcj± gg_change_passwd_free(), albo NULL je¶li wyst±pi³ b³±d. + * Wymaga wczeÅ›niejszego pobrania tokenu za pomocÄ… \c gg_token(). + * + * \param uin Numer Gadu-Gadu + * \param email Adres e-mail + * \param passwd Obecne hasÅ‚o + * \param newpasswd Nowe hasÅ‚o + * \param tokenid Identyfikator tokenu + * \param tokenval Zawartość tokenu + * \param async Flaga poÅ‚Ä…czenia asynchronicznego + * + * \return Struktura \c gg_http lub \c NULL w przypadku bÅ‚Ä™du + * + * \ingroup passwd */ struct gg_http *gg_change_passwd4(uin_t uin, const char *email, const char *passwd, const char *newpasswd, const char *tokenid, const char *tokenval, int async) { @@ -309,19 +395,59 @@ return h; } -/* - * gg_remind_passwd3() +#ifdef DOXYGEN + +/** + * Funkcja wywoÅ‚ywana po zaobserwowaniu zmian na deskryptorze poÅ‚Ä…czenia. + * + * Operacja bÄ™dzie zakoÅ„czona, gdy pole \c state bÄ™dzie równe \c GG_STATE_DONE. + * JeÅ›li wystÄ…pi bÅ‚Ä…d, \c state bÄ™dzie równe \c GG_STATE_ERROR, a kod bÅ‚Ä™du + * znajdzie siÄ™ w polu \c error. + * + * \note W rzeczywistoÅ›ci funkcja jest makrem rozwijanym do + * \c gg_pubdir_watch_fd(). * - * wysy³a ¿±danie przypomnienia has³a e-mailem. + * \param h Struktura poÅ‚Ä…czenia + * + * \return 0 jeÅ›li siÄ™ powiodÅ‚o, -1 w przypadku bÅ‚Ä™du + * + * \ingroup passwd + */ +int gg_change_passwd_watch_fd(struct gg_httpd *h) +{ + return gg_pubdir_watch_fd(h); +} + +/** + * Zwalnia zasoby po operacji. * - * - uin - numer - * - email - adres e-mail taki, jak ten zapisany na serwerze - * - async - po³±czenie asynchroniczne - * - tokenid - identyfikator tokenu - * - tokenval - warto¶æ tokenu + * \note W rzeczywistoÅ›ci funkcja jest makrem rozwijanym do \c gg_pubdir_free(). + * + * \param h Struktura poÅ‚Ä…czenia * - * zaalokowana struct gg_http, któr± po¼niej nale¿y zwolniæ - * funkcj± gg_remind_passwd_free(), albo NULL je¶li wyst±pi³ b³±d. + * \ingroup passwd + */ +void gg_change_passwd_free(struct gg_http *h) +{ + return gg_pubdir_free(h); +} + +#endif /* DOXYGEN */ + +/** + * WysyÅ‚a hasÅ‚o użytkownika na e-mail. + * + * Wymaga wczeÅ›niejszego pobrania tokenu za pomocÄ… \c gg_token(). + * + * \param uin Numer Gadu-Gadu + * \param email Adres e-mail (podany przy rejestracji) + * \param tokenid Identyfikator tokenu + * \param tokenval Zawartość tokenu + * \param async Flaga poÅ‚Ä…czenia asynchronicznego + * + * \return Struktura \c gg_http lub \c NULL w przypadku bÅ‚Ä™du + * + * \ingroup remind */ struct gg_http *gg_remind_passwd3(uin_t uin, const char *email, const char *tokenid, const char *tokenval, int async) { @@ -396,17 +522,55 @@ return h; } -/* - * gg_pubdir_watch_fd() +#ifdef DOXYGEN + +/** + * Funkcja wywoÅ‚ywana po zaobserwowaniu zmian na deskryptorze poÅ‚Ä…czenia. * - * przy asynchronicznych operacjach na katalogu publicznym nale¿y wywo³ywaæ - * tê funkcjê przy zmianach na obserwowanym deskryptorze. + * Operacja bÄ™dzie zakoÅ„czona, gdy pole \c state bÄ™dzie równe \c GG_STATE_DONE. + * JeÅ›li wystÄ…pi bÅ‚Ä…d, \c state bÄ™dzie równe \c GG_STATE_ERROR, a kod bÅ‚Ä™du + * znajdzie siÄ™ w polu \c error. + * + * \note W rzeczywistoÅ›ci funkcja jest makrem rozwijanym do + * \c gg_pubdir_watch_fd(). + * + * \param h Struktura poÅ‚Ä…czenia + * + * \return 0 jeÅ›li siÄ™ powiodÅ‚o, -1 w przypadku bÅ‚Ä™du * - * - h - struktura opisuj±ca po³±czenie + * \ingroup remind + */ +int gg_remind_watch_fd(struct gg_httpd *h) +{ + return gg_pubdir_watch_fd(h); +} + +/** + * Zwalnia zasoby po operacji. + * + * \note W rzeczywistoÅ›ci funkcja jest makrem rozwijanym do \c gg_pubdir_free(). + * + * \param h Struktura poÅ‚Ä…czenia * - * je¶li wszystko posz³o dobrze to 0, inaczej -1. operacja bêdzie - * zakoñczona, je¶li h->state == GG_STATE_DONE. je¶li wyst±pi jaki¶ - * b³±d, to bêdzie tam GG_STATE_ERROR i odpowiedni kod b³êdu w h->error. + * \ingroup remind + */ +void gg_remind_free(struct gg_http *h) +{ + return gg_pubdir_free(h); +} + +#endif /* DOXYGEN */ + +/** + * Funkcja wywoÅ‚ywana po zaobserwowaniu zmian na deskryptorze poÅ‚Ä…czenia. + * + * Operacja bÄ™dzie zakoÅ„czona, gdy pole \c state bÄ™dzie równe \c GG_STATE_DONE. + * JeÅ›li wystÄ…pi bÅ‚Ä…d, \c state bÄ™dzie równe \c GG_STATE_ERROR, a kod bÅ‚Ä™du + * znajdzie siÄ™ w polu \c error. + * + * \param h Struktura poÅ‚Ä…czenia + * + * \return 0 jeÅ›li siÄ™ powiodÅ‚o, -1 w przypadku bÅ‚Ä™du */ int gg_pubdir_watch_fd(struct gg_http *h) { @@ -447,7 +611,11 @@ gg_debug(GG_DEBUG_MISC, "=> pubdir, let's parse \"%s\"\n", h->body); - if ((tmp = strstr(h->body, "success")) || (tmp = strstr(h->body, "results"))) { + if ((tmp = strstr(h->body, "Tokens okregisterreply_packet.reg.dwUserId="))) { + p->success = 1; + p->uin = strtol(tmp + sizeof("Tokens okregisterreply_packet.reg.dwUserId=") - 1, NULL, 0); + gg_debug(GG_DEBUG_MISC, "=> pubdir, success (okregisterreply, uin=%d)\n", p->uin); + } else if ((tmp = strstr(h->body, "success")) || (tmp = strstr(h->body, "results"))) { p->success = 1; if (tmp[7] == ':') p->uin = strtol(tmp + 8, NULL, 0); @@ -458,12 +626,10 @@ return 0; } -/* - * gg_pubdir_free() +/** + * Zwalnia zasoby po operacji na katalogu publicznym. * - * zwalnia pamiêæ po efektach operacji na katalogu publicznym. - * - * - h - zwalniana struktura + * \param h Struktura poÅ‚Ä…czenia */ void gg_pubdir_free(struct gg_http *h) { @@ -474,14 +640,17 @@ gg_http_free(h); } -/* - * gg_token() +/** + * Pobiera token do autoryzacji operacji na katalogu publicznym. + * + * Token jest niezbÄ™dny do tworzenia nowego i usuwania użytkownika, + * zmiany hasÅ‚a itd. * - * pobiera z serwera token do autoryzacji zak³adania konta, usuwania - * konta i zmiany has³a. + * \param async Flaga poÅ‚Ä…czenia asynchronicznego * - * zaalokowana struct gg_http, któr± po¼niej nale¿y zwolniæ - * funkcj± gg_token_free(), albo NULL je¶li wyst±pi³ b³±d. + * \return Struktura \c gg_http lub \c NULL w przypadku bÅ‚Ä™du + * + * \ingroup token */ struct gg_http *gg_token(int async) { @@ -511,17 +680,18 @@ return h; } -/* - * gg_token_watch_fd() - * - * przy asynchronicznych operacjach zwi±zanych z tokenem nale¿y wywo³ywaæ - * tê funkcjê przy zmianach na obserwowanym deskryptorze. +/** + * Funkcja wywoÅ‚ywana po zaobserwowaniu zmian na deskryptorze poÅ‚Ä…czenia. * - * - h - struktura opisuj±ca po³±czenie + * Operacja bÄ™dzie zakoÅ„czona, gdy pole \c state bÄ™dzie równe \c GG_STATE_DONE. + * JeÅ›li wystÄ…pi bÅ‚Ä…d, \c state bÄ™dzie równe \c GG_STATE_ERROR, a kod bÅ‚Ä™du + * znajdzie siÄ™ w polu \c error. * - * je¶li wszystko posz³o dobrze to 0, inaczej -1. operacja bêdzie - * zakoñczona, je¶li h->state == GG_STATE_DONE. je¶li wyst±pi jaki¶ - * b³±d, to bêdzie tam GG_STATE_ERROR i odpowiedni kod b³êdu w h->error. + * \param h Struktura poÅ‚Ä…czenia + * + * \return 0 jeÅ›li siÄ™ powiodÅ‚o, -1 w przypadku bÅ‚Ä™du + * + * \ingroup token */ int gg_token_watch_fd(struct gg_http *h) { @@ -547,8 +717,8 @@ if (h->state != GG_STATE_PARSING) return 0; - /* je¶li h->data jest puste, to ¶ci±gali¶my tokenid i url do niego, - * ale je¶li co¶ tam jest, to znaczy, ¿e mamy drugi etap polegaj±cy + /* jeÅ›li h->data jest puste, to Å›ciÄ…galiÅ›my tokenid i url do niego, + * ale jeÅ›li coÅ› tam jest, to znaczy, że mamy drugi etap polegajÄ…cy * na pobieraniu tokenu. */ if (!h->data) { int width, height, length; @@ -573,8 +743,8 @@ return -1; } - /* dostali¶my tokenid i wszystkie niezbêdne informacje, - * wiêc pobierzmy obrazek z tokenem */ + /* dostaliÅ›my tokenid i wszystkie niezbÄ™dne informacje, + * wiÄ™c pobierzmy obrazek z tokenem */ if (strncmp(url, "http://", 7)) { path = gg_saprintf("%s?tokenid=%s", url, tokenid); @@ -623,6 +793,8 @@ free(path); free(url); + gg_http_free_fields(h); + memcpy(h, h2, sizeof(struct gg_http)); free(h2); @@ -652,12 +824,12 @@ return 0; } -/* - * gg_token_free() +/** + * Zwalnia zasoby po operacji pobierania tokenu. * - * zwalnia pamiêæ po efektach pobierania tokenu. + * \param h Struktura poÅ‚Ä…czenia * - * - h - zwalniana struktura + * \ingroup token */ void gg_token_free(struct gg_http *h) {