# HG changeset patch # User John Bailey # Date 1194222907 0 # Node ID 7be910c7cff7d67bc248beab5411db549a01ff76 # Parent 1d92b85ef5d9371e1eb164e49524e0400c2ee37c# Parent 846e6800d956f087d54539a41a2e53287079d434 merge of '20236f54c97e87512b7eb716559a4bd86b73f833' and '756265e6ef8651abedbdc0a1aad9d50cc32e140f' diff -r 1d92b85ef5d9 -r 7be910c7cff7 Makefile.mingw --- a/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ b/Makefile.mingw Mon Nov 05 00:35:07 2007 +0000 @@ -42,19 +42,30 @@ # Any *.dll or *.exe files included in win32-install-dir that we don't compile # should be included in this list so they don't get stripped EXTERNAL_DLLS = \ + comerr32.dll \ freebl3.dll \ + gssapi32.dll \ + k5sprt32.dll \ + krb5_32.dll \ libgtkspell.dll \ libmeanwhile-1.dll \ + libsasl.dll \ libxml2.dll \ nspr4.dll \ nss3.dll \ nssckbi.dll \ plc4.dll \ plds4.dll \ + saslANONYMOUS.dll \ + saslCRAMMD5.dll \ + saslDIGESTMD5.dll \ + saslGSSAPI.dll \ + saslLOGIN.dll \ + saslPLAIN.dll \ silc.dll \ silcclient.dll \ + smime3.dll \ softokn3.dll \ - smime3.dll \ ssl3.dll #build an expression for `find` to use to ignore the above files diff -r 1d92b85ef5d9 -r 7be910c7cff7 configure.ac --- a/configure.ac Sun Nov 04 22:17:45 2007 +0000 +++ b/configure.ac Mon Nov 05 00:35:07 2007 +0000 @@ -2178,66 +2178,34 @@ pidgin/pidgin.pc pidgin/pidgin-uninstalled.pc pidgin/pixmaps/Makefile - pidgin/pixmaps/animations/Makefile - pidgin/pixmaps/animations/16/Makefile - pidgin/pixmaps/buddy_icons/Makefile pidgin/pixmaps/buddy_icons/qq/Makefile - pidgin/pixmaps/dialogs/Makefile pidgin/pixmaps/dialogs/16/Makefile - pidgin/pixmaps/dialogs/16/scalable/Makefile pidgin/pixmaps/dialogs/64/Makefile - pidgin/pixmaps/dialogs/64/scalable/Makefile - pidgin/pixmaps/emblems/Makefile pidgin/pixmaps/emblems/16/Makefile - pidgin/pixmaps/emblems/16/scalable/Makefile - pidgin/pixmaps/emotes/Makefile - pidgin/pixmaps/emotes/default/Makefile pidgin/pixmaps/emotes/default/24/Makefile - pidgin/pixmaps/emotes/default/24/scalable/Makefile pidgin/pixmaps/emotes/none/Makefile - pidgin/pixmaps/icons/Makefile pidgin/pixmaps/icons/16/Makefile - pidgin/pixmaps/icons/16/scalable/Makefile pidgin/pixmaps/icons/22/Makefile - pidgin/pixmaps/icons/22/scalable/Makefile pidgin/pixmaps/icons/24/Makefile - pidgin/pixmaps/icons/24/scalable/Makefile pidgin/pixmaps/icons/32/Makefile - pidgin/pixmaps/icons/32/scalable/Makefile pidgin/pixmaps/icons/48/Makefile - pidgin/pixmaps/icons/48/scalable/Makefile - pidgin/pixmaps/protocols/Makefile pidgin/pixmaps/protocols/16/Makefile - pidgin/pixmaps/protocols/16/scalable/Makefile pidgin/pixmaps/protocols/22/Makefile - pidgin/pixmaps/protocols/22/scalable/Makefile pidgin/pixmaps/protocols/48/Makefile - pidgin/pixmaps/protocols/48/scalable/Makefile - pidgin/pixmaps/status/Makefile pidgin/pixmaps/status/11/Makefile - pidgin/pixmaps/status/11/scalable/Makefile pidgin/pixmaps/status/11/rtl/Makefile pidgin/pixmaps/status/16/Makefile pidgin/pixmaps/status/16/rtl/Makefile - pidgin/pixmaps/status/16/scalable/Makefile pidgin/pixmaps/status/22/Makefile pidgin/pixmaps/status/22/rtl/Makefile - pidgin/pixmaps/status/22/scalable/Makefile pidgin/pixmaps/status/32/Makefile pidgin/pixmaps/status/32/rtl/Makefile - pidgin/pixmaps/status/32/scalable/Makefile pidgin/pixmaps/status/48/Makefile pidgin/pixmaps/status/48/rtl/Makefile - pidgin/pixmaps/toolbar/Makefile pidgin/pixmaps/toolbar/16/Makefile - pidgin/pixmaps/toolbar/16/scalable/Makefile pidgin/pixmaps/toolbar/22/Makefile - pidgin/pixmaps/toolbar/22/scalable/Makefile - pidgin/pixmaps/tray/Makefile pidgin/pixmaps/tray/16/Makefile - pidgin/pixmaps/tray/16/scalable/Makefile pidgin/pixmaps/tray/22/Makefile - pidgin/pixmaps/tray/22/scalable/Makefile pidgin/pixmaps/tray/32/Makefile pidgin/pixmaps/tray/48/Makefile pidgin/plugins/Makefile diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/buddyicon.c --- a/libpurple/buddyicon.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/buddyicon.c Mon Nov 05 00:35:07 2007 +0000 @@ -116,7 +116,7 @@ { purple_debug_error("buddyicon", "Unable to create directory %s: %s\n", - dirname, strerror(errno)); + dirname, g_strerror(errno)); } } @@ -125,7 +125,7 @@ if (!fwrite(purple_imgstore_get_data(img), purple_imgstore_get_size(img), 1, file)) { purple_debug_error("buddyicon", "Error writing %s: %s\n", - path, strerror(errno)); + path, g_strerror(errno)); } else purple_debug_info("buddyicon", "Wrote cache file: %s\n", path); @@ -135,7 +135,7 @@ else { purple_debug_error("buddyicon", "Unable to create file %s: %s\n", - path, strerror(errno)); + path, g_strerror(errno)); g_free(path); return; } @@ -163,7 +163,7 @@ if (g_unlink(path)) { purple_debug_error("buddyicon", "Failed to delete %s: %s\n", - path, strerror(errno)); + path, g_strerror(errno)); } else { @@ -951,7 +951,7 @@ if (!fwrite(icon_data, icon_len, 1, file)) { purple_debug_error("buddyicon", "Error writing %s: %s\n", - path, strerror(errno)); + path, g_strerror(errno)); } else purple_debug_info("buddyicon", "Wrote migrated cache file: %s\n", path); @@ -961,7 +961,7 @@ else { purple_debug_error("buddyicon", "Unable to create file %s: %s\n", - path, strerror(errno)); + path, g_strerror(errno)); g_free(new_filename); g_free(path); @@ -1056,7 +1056,7 @@ { purple_debug_error("buddyicon", "Unable to create directory %s: %s\n", - dirname, strerror(errno)); + dirname, g_strerror(errno)); } } } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/connection.c --- a/libpurple/connection.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/connection.c Mon Nov 05 00:35:07 2007 +0000 @@ -432,7 +432,7 @@ { g_return_val_if_fail(gc != NULL, NULL); - return gc->password; + return gc->password ? gc->password : gc->account->password; } const char * diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/core.c --- a/libpurple/core.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/core.c Mon Nov 05 00:35:07 2007 +0000 @@ -378,7 +378,7 @@ if (g_rename(path, new_name)) { purple_debug_error("core", "Error renaming %s to %s: %s. Please report this at http://developer.pidgin.im\n", - path, new_name, strerror(errno)); + path, new_name, g_strerror(errno)); g_free(new_name); return FALSE; } @@ -391,7 +391,7 @@ if (symlink(new_name, old_name)) { purple_debug_warning("core", "Error symlinking %s to %s: %s. Please report this at http://developer.pidgin.im\n", - old_name, new_name, strerror(errno)); + old_name, new_name, g_strerror(errno)); } g_free(old_name); g_free(new_name); @@ -447,7 +447,7 @@ if (g_mkdir(user_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1) { purple_debug_error("core", "Error creating directory %s: %s. Please report this at http://developer.pidgin.im\n", - user_dir, strerror(errno)); + user_dir, g_strerror(errno)); g_free(status_file); g_free(old_user_dir); return FALSE; @@ -459,7 +459,7 @@ if (!(fp = g_fopen(status_file, "w"))) { purple_debug_error("core", "Error opening file %s for writing: %s. Please report this at http://developer.pidgin.im\n", - status_file, strerror(errno)); + status_file, g_strerror(errno)); g_free(status_file); g_free(old_user_dir); return FALSE; @@ -517,7 +517,7 @@ { char *name_utf8 = g_filename_to_utf8(name, -1, NULL, NULL, NULL); purple_debug_error("core", "Error reading symlink %s: %s. Please report this at http://developer.pidgin.im\n", - name_utf8, strerror(errno)); + name_utf8, g_strerror(errno)); g_free(name_utf8); g_free(name); g_dir_close(dir); @@ -555,7 +555,7 @@ if (symlink(link, logs_dir)) { purple_debug_error("core", "Error symlinking %s to %s: %s. Please report this at http://developer.pidgin.im\n", - logs_dir, link, strerror(errno)); + logs_dir, link, g_strerror(errno)); g_free(link); g_free(name); g_free(logs_dir); @@ -612,7 +612,7 @@ if (g_mkdir(new_icons_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1) { purple_debug_error("core", "Error creating directory %s: %s. Please report this at http://developer.pidgin.im\n", - new_icons_dir, strerror(errno)); + new_icons_dir, g_strerror(errno)); g_free(new_icons_dir); g_dir_close(icons_dir); g_free(name); @@ -675,7 +675,7 @@ if (!(fp = g_fopen(name, "rb"))) { purple_debug_error("core", "Error opening file %s for reading: %s. Please report this at http://developer.pidgin.im\n", - name, strerror(errno)); + name, g_strerror(errno)); g_free(name); g_dir_close(dir); g_free(status_file); @@ -687,7 +687,7 @@ if (!(new_file = g_fopen(new_name, "wb"))) { purple_debug_error("core", "Error opening file %s for writing: %s. Please report this at http://developer.pidgin.im\n", - new_name, strerror(errno)); + new_name, g_strerror(errno)); fclose(fp); g_free(new_name); g_free(name); @@ -706,7 +706,7 @@ if (size != sizeof(buf) && !feof(fp)) { purple_debug_error("core", "Error reading %s: %s. Please report this at http://developer.pidgin.im\n", - name, strerror(errno)); + name, g_strerror(errno)); fclose(new_file); fclose(fp); g_free(new_name); @@ -720,7 +720,7 @@ if (!fwrite(buf, size, 1, new_file) && ferror(new_file) != 0) { purple_debug_error("core", "Error writing %s: %s. Please report this at http://developer.pidgin.im\n", - new_name, strerror(errno)); + new_name, g_strerror(errno)); fclose(new_file); fclose(fp); g_free(new_name); @@ -735,12 +735,12 @@ if (fclose(new_file)) { purple_debug_error("core", "Error writing: %s: %s. Please report this at http://developer.pidgin.im\n", - new_name, strerror(errno)); + new_name, g_strerror(errno)); } if (fclose(fp)) { purple_debug_warning("core", "Error closing %s: %s\n", - name, strerror(errno)); + name, g_strerror(errno)); } g_free(new_name); } @@ -754,7 +754,7 @@ if (g_unlink(status_file)) { purple_debug_error("core", "Error unlinking file %s: %s. Please report this at http://developer.pidgin.im\n", - status_file, strerror(errno)); + status_file, g_strerror(errno)); g_free(status_file); return FALSE; } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/desktopitem.c --- a/libpurple/desktopitem.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/desktopitem.c Mon Nov 05 00:35:07 2007 +0000 @@ -1155,7 +1155,7 @@ dfile = g_fopen(filename, "r"); if (!dfile) { - printf ("Can't open %s: %s", filename, strerror(errno)); + printf ("Can't open %s: %s", filename, g_strerror(errno)); return NULL; } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/dnsquery.c --- a/libpurple/dnsquery.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/dnsquery.c Mon Nov 05 00:35:07 2007 +0000 @@ -346,7 +346,7 @@ /* Create pipes for communicating with the child process */ if (pipe(child_out) || pipe(child_in)) { purple_debug_error("dns", - "Could not create pipes: %s\n", strerror(errno)); + "Could not create pipes: %s\n", g_strerror(errno)); return NULL; } @@ -374,7 +374,7 @@ if (resolver->dns_pid == -1) { purple_debug_error("dns", "Could not create child process for DNS: %s\n", - strerror(errno)); + g_strerror(errno)); purple_dnsquery_resolver_destroy(resolver); return NULL; } @@ -416,7 +416,7 @@ return FALSE; } else if (pid < 0) { purple_debug_warning("dns", "Wait for DNS child %d failed: %s\n", - resolver->dns_pid, strerror(errno)); + resolver->dns_pid, g_strerror(errno)); purple_dnsquery_resolver_destroy(resolver); return FALSE; } @@ -430,7 +430,7 @@ rc = write(resolver->fd_in, &dns_params, sizeof(dns_params)); if (rc < 0) { purple_debug_error("dns", "Unable to write to DNS child %d: %d\n", - resolver->dns_pid, strerror(errno)); + resolver->dns_pid, g_strerror(errno)); purple_dnsquery_resolver_destroy(resolver); return FALSE; } @@ -571,7 +571,7 @@ purple_dnsquery_resolved(query_data, hosts); } else if (rc == -1) { - g_snprintf(message, sizeof(message), _("Error reading from resolver process:\n%s"), strerror(errno)); + g_snprintf(message, sizeof(message), _("Error reading from resolver process:\n%s"), g_strerror(errno)); purple_dnsquery_failed(query_data, message); } else if (rc == 0) { diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/example/nullclient.c --- a/libpurple/example/nullclient.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/example/nullclient.c Mon Nov 05 00:35:07 2007 +0000 @@ -269,6 +269,13 @@ PurpleAccount *account; PurpleSavedStatus *status; + /* libpurple's built-in DNS resolution forks processes to perform + * blocking lookups without blocking the main process. It does not + * handle SIGCHLD itself, so if the UI does not you quickly get an army + * of zombie subprocesses marching around. + */ + signal(SIGCHLD, SIG_IGN); + init_libpurple(); printf("libpurple initialized.\n"); diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/ft.c --- a/libpurple/ft.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/ft.c Mon Nov 05 00:35:07 2007 +0000 @@ -207,15 +207,15 @@ switch(xfer_type) { case PURPLE_XFER_SEND: msg = g_strdup_printf(_("Error reading %s: \n%s.\n"), - utf8, strerror(err)); + utf8, g_strerror(err)); break; case PURPLE_XFER_RECEIVE: msg = g_strdup_printf(_("Error writing %s: \n%s.\n"), - utf8, strerror(err)); + utf8, g_strerror(err)); break; default: msg = g_strdup_printf(_("Error accessing %s: \n%s.\n"), - utf8, strerror(err)); + utf8, g_strerror(err)); break; } g_free(utf8); diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/log.c --- a/libpurple/log.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/log.c Mon Nov 05 00:35:07 2007 +0000 @@ -756,7 +756,7 @@ if (!fwrite(image_data, image_byte_count, 1, image_file)) { purple_debug_error("log", "Error writing %s: %s\n", - path, strerror(errno)); + path, g_strerror(errno)); fclose(image_file); /* Attempt to not leave half-written files around. */ @@ -771,7 +771,7 @@ else { purple_debug_error("log", "Unable to create file %s: %s\n", - path, strerror(errno)); + path, g_strerror(errno)); } } @@ -1108,7 +1108,7 @@ return TRUE; else if (ret == -1) { - purple_debug_error("log", "Failed to delete: %s - %s\n", data->path, strerror(errno)); + purple_debug_error("log", "Failed to delete: %s - %s\n", data->path, g_strerror(errno)); } else { @@ -1143,7 +1143,7 @@ g_free(dirname); return TRUE; } - purple_debug_info("log", "access(%s) failed: %s\n", dirname, strerror(errno)); + purple_debug_info("log", "access(%s) failed: %s\n", dirname, g_strerror(errno)); g_free(dirname); #else /* Unless and until someone writes equivalent win32 code, @@ -1638,7 +1638,7 @@ if (!(index = g_fopen(pathstr, "rb"))) { purple_debug_error("log", "Failed to open index file \"%s\" for reading: %s\n", - pathstr, strerror(errno)); + pathstr, g_strerror(errno)); /* Fall through so that we'll parse the log file. */ } @@ -1675,7 +1675,7 @@ if (!(file = g_fopen(purple_stringref_value(pathref), "rb"))) { purple_debug_error("log", "Failed to open log file \"%s\" for reading: %s\n", - purple_stringref_value(pathref), strerror(errno)); + purple_stringref_value(pathref), g_strerror(errno)); purple_stringref_unref(pathref); g_free(pathstr); return NULL; @@ -1684,7 +1684,7 @@ index_tmp = g_strdup_printf("%s.XXXXXX", pathstr); if ((index_fd = g_mkstemp(index_tmp)) == -1) { purple_debug_error("log", "Failed to open index temp file: %s\n", - strerror(errno)); + g_strerror(errno)); g_free(pathstr); g_free(index_tmp); index = NULL; @@ -1692,7 +1692,7 @@ if ((index = fdopen(index_fd, "wb")) == NULL) { purple_debug_error("log", "Failed to fdopen() index temp file: %s\n", - strerror(errno)); + g_strerror(errno)); close(index_fd); if (index_tmp != NULL) { @@ -1828,7 +1828,7 @@ if (g_rename(index_tmp, pathstr)) { purple_debug_warning("log", "Failed to rename index temp file \"%s\" to \"%s\": %s\n", - index_tmp, pathstr, strerror(errno)); + index_tmp, pathstr, g_strerror(errno)); g_unlink(index_tmp); g_free(index_tmp); } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/nat-pmp.c --- a/libpurple/nat-pmp.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/nat-pmp.c Mon Nov 05 00:35:07 2007 +0000 @@ -312,7 +312,7 @@ if (sendto(sendfd, &req, sizeof(req), 0, (struct sockaddr *)(gateway), sizeof(struct sockaddr)) < 0) { - purple_debug_info("nat-pmp", "There was an error sending the NAT-PMP public IP request! (%s)\n", strerror(errno)); + purple_debug_info("nat-pmp", "There was an error sending the NAT-PMP public IP request! (%s)\n", g_strerror(errno)); g_free(gateway); pmp_info.status = PURPLE_PMP_STATUS_UNABLE_TO_DISCOVER; return NULL; @@ -320,7 +320,7 @@ if (setsockopt(sendfd, SOL_SOCKET, SO_RCVTIMEO, &req_timeout, sizeof(req_timeout)) < 0) { - purple_debug_info("nat-pmp", "There was an error setting the socket's options! (%s)\n", strerror(errno)); + purple_debug_info("nat-pmp", "There was an error setting the socket's options! (%s)\n", g_strerror(errno)); g_free(gateway); pmp_info.status = PURPLE_PMP_STATUS_UNABLE_TO_DISCOVER; return NULL; @@ -332,7 +332,7 @@ { if (errno != EAGAIN) { - purple_debug_info("nat-pmp", "There was an error receiving the response from the NAT-PMP device! (%s)\n", strerror(errno)); + purple_debug_info("nat-pmp", "There was an error receiving the response from the NAT-PMP device! (%s)\n", g_strerror(errno)); g_free(gateway); pmp_info.status = PURPLE_PMP_STATUS_UNABLE_TO_DISCOVER; return NULL; @@ -432,13 +432,13 @@ /* TODO: Non-blocking! */ success = (sendto(sendfd, &req, sizeof(req), 0, (struct sockaddr *)(gateway), sizeof(struct sockaddr)) >= 0); if (!success) - purple_debug_info("nat-pmp", "There was an error sending the NAT-PMP mapping request! (%s)\n", strerror(errno)); + purple_debug_info("nat-pmp", "There was an error sending the NAT-PMP mapping request! (%s)\n", g_strerror(errno)); if (success) { success = (setsockopt(sendfd, SOL_SOCKET, SO_RCVTIMEO, &req_timeout, sizeof(req_timeout)) >= 0); if (!success) - purple_debug_info("nat-pmp", "There was an error setting the socket's options! (%s)\n", strerror(errno)); + purple_debug_info("nat-pmp", "There was an error setting the socket's options! (%s)\n", g_strerror(errno)); } if (success) @@ -448,7 +448,7 @@ success = ((recvfrom(sendfd, resp, sizeof(PurplePmpMapResponse), 0, NULL, NULL) >= 0) || (errno == EAGAIN)); if (!success) - purple_debug_info("nat-pmp", "There was an error receiving the response from the NAT-PMP device! (%s)\n", strerror(errno)); + purple_debug_info("nat-pmp", "There was an error receiving the response from the NAT-PMP device! (%s)\n", g_strerror(errno)); } if (success) diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/network.c --- a/libpurple/network.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/network.c Mon Nov 05 00:35:07 2007 +0000 @@ -285,7 +285,7 @@ #ifndef _WIN32 purple_debug_warning("network", "getaddrinfo: %s\n", gai_strerror(errnum)); if (errnum == EAI_SYSTEM) - purple_debug_warning("network", "getaddrinfo: system error: %s\n", strerror(errno)); + purple_debug_warning("network", "getaddrinfo: system error: %s\n", g_strerror(errno)); #else purple_debug_warning("network", "getaddrinfo: Error Code = %d\n", errnum); #endif @@ -302,7 +302,7 @@ if (listenfd < 0) continue; if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0) - purple_debug_warning("network", "setsockopt: %s\n", strerror(errno)); + purple_debug_warning("network", "setsockopt: %s\n", g_strerror(errno)); if (bind(listenfd, next->ai_addr, next->ai_addrlen) == 0) break; /* success */ /* XXX - It is unclear to me (datallah) whether we need to be @@ -318,26 +318,26 @@ struct sockaddr_in sockin; if ((listenfd = socket(AF_INET, socket_type, 0)) < 0) { - purple_debug_warning("network", "socket: %s\n", strerror(errno)); + purple_debug_warning("network", "socket: %s\n", g_strerror(errno)); return NULL; } if (setsockopt(listenfd, SOL_SOCKET, SO_REUSEADDR, &on, sizeof(on)) != 0) - purple_debug_warning("network", "setsockopt: %s\n", strerror(errno)); + purple_debug_warning("network", "setsockopt: %s\n", g_strerror(errno)); memset(&sockin, 0, sizeof(struct sockaddr_in)); sockin.sin_family = PF_INET; sockin.sin_port = htons(port); if (bind(listenfd, (struct sockaddr *)&sockin, sizeof(struct sockaddr_in)) != 0) { - purple_debug_warning("network", "bind: %s\n", strerror(errno)); + purple_debug_warning("network", "bind: %s\n", g_strerror(errno)); close(listenfd); return NULL; } #endif if (socket_type == SOCK_STREAM && listen(listenfd, 4) != 0) { - purple_debug_warning("network", "listen: %s\n", strerror(errno)); + purple_debug_warning("network", "listen: %s\n", g_strerror(errno)); close(listenfd); return NULL; } @@ -426,7 +426,7 @@ len = sizeof(addr); if (getsockname(fd, (struct sockaddr *) &addr, &len) == -1) { - purple_debug_warning("network", "getsockname: %s\n", strerror(errno)); + purple_debug_warning("network", "getsockname: %s\n", g_strerror(errno)); return 0; } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/plugins/tcl/tcl.c --- a/libpurple/plugins/tcl/tcl.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/plugins/tcl/tcl.c Mon Nov 05 00:35:07 2007 +0000 @@ -198,7 +198,7 @@ } if (ferror(fp)) { - purple_debug(PURPLE_DEBUG_ERROR, "tcl", "error reading %s (%s)\n", plugin->path, strerror(errno)); + purple_debug(PURPLE_DEBUG_ERROR, "tcl", "error reading %s (%s)\n", plugin->path, g_strerror(errno)); g_free(buf); fclose(fp); return FALSE; diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/bonjour/Makefile.mingw --- a/libpurple/protocols/bonjour/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/bonjour/Makefile.mingw Mon Nov 05 00:35:07 2007 +0000 @@ -29,7 +29,7 @@ -I$(GTK_TOP)/include \ -I$(GTK_TOP)/include/glib-2.0 \ -I$(GTK_TOP)/lib/glib-2.0/include \ - -I$(BONJOUR_TOP)/include \ + -I$(BONJOUR_TOP)/Include \ -I$(LIBXML2_TOP)/include \ -I$(PURPLE_TOP) \ -I$(PURPLE_TOP)/win32 \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/bonjour/bonjour.c --- a/libpurple/protocols/bonjour/bonjour.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/bonjour/bonjour.c Mon Nov 05 00:35:07 2007 +0000 @@ -648,7 +648,7 @@ /* TODO: Avoid 'localhost,' if possible */ if (gethostname(hostname, 255) != 0) { purple_debug_warning("bonjour", "Error when getting host name: %s. Using \"localhost.\"\n", - strerror(errno)); + g_strerror(errno)); strcpy(hostname, "localhost"); } default_hostname = g_strdup(hostname); diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/bonjour/jabber.c --- a/libpurple/protocols/bonjour/jabber.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/bonjour/jabber.c Mon Nov 05 00:35:07 2007 +0000 @@ -244,7 +244,7 @@ return; else if (ret <= 0) { PurpleConversation *conv; - const char *error = strerror(errno); + const char *error = g_strerror(errno); purple_debug_error("bonjour", "Error sending message to buddy %s error: %s\n", purple_buddy_get_name(pb), error ? error : "(null)"); @@ -287,7 +287,7 @@ ret = 0; else if (ret <= 0) { PurpleConversation *conv; - const char *error = strerror(errno); + const char *error = g_strerror(errno); purple_debug_error("bonjour", "Error sending message to buddy %s error: %s\n", purple_buddy_get_name(pb), error ? error : "(null)"); @@ -337,7 +337,7 @@ if (errno != EAGAIN) { BonjourBuddy *bb = pb->proto_data; - purple_debug_warning("bonjour", "receive error: %s\n", strerror(errno)); + purple_debug_warning("bonjour", "receive error: %s\n", g_strerror(errno)); bonjour_jabber_close_conversation(bb->conversation); bb->conversation = NULL; @@ -427,7 +427,7 @@ if (ret == -1 && errno == EAGAIN) return; else if (ret <= 0) { - const char *err = strerror(errno); + const char *err = g_strerror(errno); PurpleConversation *conv; purple_debug_error("bonjour", "Error starting stream with buddy %s at %s:%d error: %s\n", @@ -482,7 +482,7 @@ if (ret == -1 && errno == EAGAIN) ret = 0; else if (ret <= 0) { - const char *err = strerror(errno); + const char *err = g_strerror(errno); purple_debug_error("bonjour", "Error starting stream with buddy %s at %s:%d error: %s\n", purple_buddy_get_name(pb), bb->ip ? bb->ip : "(null)", bb->port_p2pj, err ? err : "(null)"); @@ -583,7 +583,7 @@ /* Open a listening socket for incoming conversations */ if ((data->socket = socket(PF_INET, SOCK_STREAM, 0)) < 0) { - purple_debug_error("bonjour", "Cannot open socket: %s\n", strerror(errno)); + purple_debug_error("bonjour", "Cannot open socket: %s\n", g_strerror(errno)); purple_connection_error(data->account->gc, _("Cannot open socket")); return -1; } @@ -591,7 +591,7 @@ /* Make the socket reusable */ if (setsockopt(data->socket, SOL_SOCKET, SO_REUSEADDR, &yes, sizeof(int)) != 0) { - purple_debug_error("bonjour", "Error setting socket options: %s\n", strerror(errno)); + purple_debug_error("bonjour", "Error setting socket options: %s\n", g_strerror(errno)); purple_connection_error(data->account->gc, _("Error setting socket options")); return -1; } @@ -615,7 +615,7 @@ /* On no! We tried 10 ports and could not bind to ANY of them */ if (!bind_successful) { - purple_debug_error("bonjour", "Cannot bind socket: %s\n", strerror(errno)); + purple_debug_error("bonjour", "Cannot bind socket: %s\n", g_strerror(errno)); purple_connection_error(data->account->gc, _("Could not bind socket to port")); return -1; } @@ -623,7 +623,7 @@ /* Attempt to listen on the bound socket */ if (listen(data->socket, 10) != 0) { - purple_debug_error("bonjour", "Cannot listen on socket: %s\n", strerror(errno)); + purple_debug_error("bonjour", "Cannot listen on socket: %s\n", g_strerror(errno)); purple_connection_error(data->account->gc, _("Could not listen on socket")); return -1; } @@ -670,7 +670,7 @@ } if (!bonjour_jabber_stream_init(pb, source)) { - const char *err = strerror(errno); + const char *err = g_strerror(errno); PurpleConversation *conv; purple_debug_error("bonjour", "Error starting stream with buddy %s at %s:%d error: %s\n", diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/irc/dcc_send.c --- a/libpurple/protocols/irc/dcc_send.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/irc/dcc_send.c Mon Nov 05 00:35:07 2007 +0000 @@ -251,7 +251,7 @@ * to the nonblocking nature of the listening socket, so we'll * just try again next time */ /* Let's print an error message anyway */ - purple_debug_warning("irc", "accept: %s\n", strerror(errno)); + purple_debug_warning("irc", "accept: %s\n", g_strerror(errno)); return; } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/jabber/Makefile.mingw --- a/libpurple/protocols/jabber/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/jabber/Makefile.mingw Mon Nov 05 00:35:07 2007 +0000 @@ -88,6 +88,21 @@ INCLUDE_PATHS += -I$(CYRUS_SASL_TOP)/include LIB_PATHS += -L$(CYRUS_SASL_TOP)/lib LIBS += -llibsasl +CYRUS_SASL_DLLS = \ + $(CYRUS_SASL_TOP)/bin/comerr32.dll \ + $(CYRUS_SASL_TOP)/bin/gssapi32.dll \ + $(CYRUS_SASL_TOP)/bin/k5sprt32.dll \ + $(CYRUS_SASL_TOP)/bin/krb5_32.dll \ + $(CYRUS_SASL_TOP)/bin/libsasl.dll + +CYRUS_SASL_PLUGINS = \ + $(CYRUS_SASL_TOP)/bin/sasl2/saslANONYMOUS.dll \ + $(CYRUS_SASL_TOP)/bin/sasl2/saslCRAMMD5.dll \ + $(CYRUS_SASL_TOP)/bin/sasl2/saslDIGESTMD5.dll \ + $(CYRUS_SASL_TOP)/bin/sasl2/saslGSSAPI.dll \ + $(CYRUS_SASL_TOP)/bin/sasl2/saslLOGIN.dll \ + $(CYRUS_SASL_TOP)/bin/sasl2/saslPLAIN.dll + endif include $(PIDGIN_COMMON_RULES) @@ -102,6 +117,11 @@ install: all $(DLL_INSTALL_DIR) cp $(XMPP_TARGET).dll $(DLL_INSTALL_DIR) cp $(TARGET).dll $(PURPLE_INSTALL_DIR) +ifeq ($(CYRUS_SASL), 1) + mkdir -p $(PURPLE_INSTALL_DIR)/sasl2 + cp $(CYRUS_SASL_DLLS) $(PURPLE_INSTALL_DIR) + cp $(CYRUS_SASL_PLUGINS) $(PURPLE_INSTALL_DIR)/sasl2 +endif $(OBJECTS): $(PURPLE_CONFIG_H) diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/jabber/buddy.c --- a/libpurple/protocols/jabber/buddy.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/jabber/buddy.c Mon Nov 05 00:35:07 2007 +0000 @@ -2252,6 +2252,16 @@ xmlnode *query; JabberIq *iq; char *dir_server = data; + const char *type; + + /* if they've cancelled the search, we're + * just going to get an error if we send + * a cancel, so skip it */ + type = xmlnode_get_attrib(result, "type"); + if(type && !strcmp(type, "cancel")) { + g_free(dir_server); + return; + } iq = jabber_iq_new_query(js, JABBER_IQ_SET, "jabber:iq:search"); query = xmlnode_get_child(iq->node, "query"); diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/jabber/libxmpp.c --- a/libpurple/protocols/jabber/libxmpp.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/jabber/libxmpp.c Mon Nov 05 00:35:07 2007 +0000 @@ -193,6 +193,9 @@ init_plugin(PurplePlugin *plugin) { #ifdef HAVE_CYRUS_SASL +#ifdef _WIN32 + gchar *sasldir; +#endif int ret; #endif PurpleAccountUserSplit *split; @@ -237,6 +240,11 @@ /* XXX - If any other plugin wants SASL this won't be good ... */ #ifdef HAVE_CYRUS_SASL +#ifdef _WIN32 + sasldir = g_build_filename(wpurple_install_dir(), "sasl2", NULL); + sasl_set_path(SASL_PATH_TYPE_PLUGIN, sasldir); + g_free(sasldir); +#endif if ((ret = sasl_client_init(NULL)) != SASL_OK) { purple_debug_error("xmpp", "Error (%d) initializing SASL.\n", ret); } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/jabber/si.c --- a/libpurple/protocols/jabber/si.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/jabber/si.c Mon Nov 05 00:35:07 2007 +0000 @@ -536,7 +536,7 @@ if(acceptfd == -1 && (errno == EAGAIN || errno == EWOULDBLOCK)) return; else if(acceptfd == -1) { - purple_debug_warning("jabber", "accept: %s\n", strerror(errno)); + purple_debug_warning("jabber", "accept: %s\n", g_strerror(errno)); return; } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/Makefile.am --- a/libpurple/protocols/msn/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -52,6 +52,8 @@ slpsession.h \ soap.c\ soap.h\ + soap2.c \ + soap2.h \ state.c \ state.h \ switchboard.c \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/Makefile.mingw --- a/libpurple/protocols/msn/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/Makefile.mingw Mon Nov 05 00:35:07 2007 +0000 @@ -61,6 +61,7 @@ slpmsg.c \ slpsession.c \ soap.c\ + soap2.c\ state.c \ switchboard.c \ sync.c \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/contact.c --- a/libpurple/protocols/msn/contact.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/contact.c Mon Nov 05 00:35:07 2007 +0000 @@ -28,6 +28,7 @@ #include "contact.h" #include "xmlnode.h" #include "group.h" +#include "soap2.h" const char *MsnSoapPartnerScenarioText[] = { @@ -47,6 +48,11 @@ "Pending" }; +typedef struct { + MsnContact *contact; + MsnSoapPartnerScenario which; +} GetContactListCbData; + /* new a contact */ MsnContact * msn_contact_new(MsnSession *session) @@ -55,7 +61,6 @@ contact = g_new0(MsnContact, 1); contact->session = session; - contact->soapconn = msn_soap_new(session,contact,1); return contact; } @@ -64,15 +69,18 @@ void msn_contact_destroy(MsnContact *contact) { - msn_soap_destroy(contact->soapconn); g_free(contact); } MsnCallbackState * -msn_callback_state_new(void) +msn_callback_state_new(MsnSession *session) { - return g_new0(MsnCallbackState, 1); -} + MsnCallbackState *state = g_new0(MsnCallbackState, 1); + + state->session = session; + + return state; +} void msn_callback_state_free(MsnCallbackState *state) @@ -92,46 +100,56 @@ void msn_callback_state_set_who(MsnCallbackState *state, const gchar *who) { + gchar *nval; g_return_if_fail(state != NULL); + nval = g_strdup(who); g_free(state->who); - state->who = g_strdup(who); + state->who = nval; } void msn_callback_state_set_uid(MsnCallbackState *state, const gchar *uid) { + gchar *nval; g_return_if_fail(state != NULL); + nval = g_strdup(uid); g_free(state->uid); - state->uid = g_strdup(uid); + state->uid = nval; } void msn_callback_state_set_old_group_name(MsnCallbackState *state, const gchar *old_group_name) { + gchar *nval; g_return_if_fail(state != NULL); + nval = g_strdup(old_group_name); g_free(state->old_group_name); - state->old_group_name = g_strdup(old_group_name); + state->old_group_name = nval; } void msn_callback_state_set_new_group_name(MsnCallbackState *state, const gchar *new_group_name) { + gchar *nval; g_return_if_fail(state != NULL); + nval = g_strdup(new_group_name); g_free(state->new_group_name); - state->new_group_name = g_strdup(new_group_name); + state->new_group_name = nval; } void msn_callback_state_set_guid(MsnCallbackState *state, const gchar *guid) { + gchar *nval; g_return_if_fail(state != NULL); + nval = g_strdup(guid); g_free(state->guid); - state->guid = g_strdup(guid); + state->guid = nval; } @@ -151,36 +169,6 @@ state->action |= action; } -/*contact SOAP server login error*/ -static void -msn_contact_login_error_cb(MsnSoapConn *soapconn, PurpleSslConnection *gsc, PurpleSslErrorType error) -{ - MsnSession *session; - - session = soapconn->session; - g_return_if_fail(session != NULL); - - msn_session_set_error(session, MSN_ERROR_SERV_DOWN, _("Unable to connect to contact server")); -} - -/*msn contact SOAP server connect process*/ -static gboolean -msn_contact_login_connect_cb(MsnSoapConn *soapconn, PurpleSslConnection *gsc) -{ - MsnSession * session; - MsnContact *contact; - - contact = soapconn->parent; - g_return_val_if_fail(contact != NULL, TRUE); - - session = contact->session; - g_return_val_if_fail(session != NULL, FALSE); - - /*login ok!We can retrieve the contact list*/ -// msn_get_contact_list(contact, MSN_PS_INITIAL, NULL); - return TRUE; -} - /*get MSN member role utility*/ static MsnListId msn_get_memberrole(const char *role) @@ -219,37 +207,20 @@ } /* Create the AddressBook in the server, if we don't have one */ -static gboolean -msn_create_address_cb(MsnSoapConn *soapconn) +static void +msn_create_address_cb(MsnSoapMessage *req, MsnSoapMessage *resp, gpointer data) { - MsnContact *contact; - - if (soapconn->body == NULL) - return TRUE; - - contact = soapconn->parent; - g_return_val_if_fail(contact != NULL, TRUE); - - purple_debug_info("MSN AddressBook", "Address Book successfully created!\n"); - msn_get_address_book(contact, MSN_PS_INITIAL, NULL, NULL); - -// msn_soap_free_read_buf(soapconn); - return TRUE; -} - -static void -msn_create_address_written_cb(MsnSoapConn *soapconn) -{ - purple_debug_info("MSN AddressBook","AddressBookAdd written\n"); - soapconn->read_cb = msn_create_address_cb; - - return; + if (resp && msn_soap_xml_get(resp->xml, "Body/Fault") == NULL) { + purple_debug_info("msnab", "Address Book successfully created!\n"); + msn_get_address_book((MsnContact *)data, MSN_PS_INITIAL, NULL, NULL); + } else { + purple_debug_info("msnab", "Address Book creation failed!\n"); + } } static void msn_create_address_book(MsnContact * contact) { - MsnSoapReq *soap_request; gchar *body; g_return_if_fail(contact != NULL); @@ -257,323 +228,185 @@ g_return_if_fail(contact->session->user != NULL); g_return_if_fail(contact->session->user->passport != NULL); - purple_debug_info("MSN AddressBook","Creating an Address Book.\n"); + purple_debug_info("msnab","Creating an Address Book.\n"); body = g_strdup_printf(MSN_ADD_ADDRESSBOOK_TEMPLATE, contact->session->user->passport); - soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, - MSN_ADDRESS_BOOK_POST_URL,MSN_ADD_ADDRESSBOOK_SOAP_ACTION, - body, - NULL, - msn_create_address_cb, - msn_create_address_written_cb, - msn_contact_connect_init); - msn_soap_post(contact->soapconn, soap_request); + msn_soap_message_send(contact->session, + msn_soap_message_new(MSN_ADD_ADDRESSBOOK_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL, msn_create_address_cb, + contact); g_free(body); - - return; +} + +static void +msn_parse_each_member(MsnSession *session, xmlnode *member, const char *node, + MsnListId list) +{ + char *passport = xmlnode_get_data(xmlnode_get_child(member, node)); + char *type = xmlnode_get_data(xmlnode_get_child(member, "Type")); + char *member_id = xmlnode_get_data(xmlnode_get_child(member, "MembershipId")); + MsnUser *user = msn_userlist_find_add_user(session->userlist, passport, NULL); + + purple_debug_info("msncl","%s name: %s, Type: %s, MembershipID: %s\n", + node, passport, type, member_id == NULL ? "(null)" : member_id); + + if (member_id) { + user->membership_id[list] = atoi(member_id); + } + + msn_got_lst_user(session, user, 1 << list, NULL); + + g_free(passport); + g_free(type); + g_free(member_id); +} + +static void +msn_parse_each_service(MsnSession *session, xmlnode *service) +{ + xmlnode *type; + + if ((type = msn_soap_xml_get(service, "Info/Handle/Type"))) { + char *type_str = xmlnode_get_data(type); + + if (g_str_equal(type_str, "Profile")) { + /* Process Windows Live 'Messenger Roaming Identity' */ + } else if (g_str_equal(type_str, "Messenger")) { + xmlnode *lastchange = xmlnode_get_child(service, "LastChange"); + char *lastchange_str = xmlnode_get_data(lastchange); + xmlnode *membership; + + purple_debug_info("msncl","last change: %s\n", lastchange_str); + purple_account_set_string(session->account, "CLLastChange", + lastchange_str); + + for (membership = msn_soap_xml_get(service, + "Memberships/Membership"); + membership; membership = xmlnode_get_next_twin(membership)) { + + xmlnode *role = xmlnode_get_child(membership, "MemberRole"); + char *role_str = xmlnode_get_data(role); + MsnListId list = msn_get_memberrole(role_str); + xmlnode *member; + + purple_debug_info("msncl", "MemberRole role: %s, list: %d\n", + role_str, list); + + for (member = msn_soap_xml_get(membership, "Members/Member"); + member; member = xmlnode_get_next_twin(member)) { + const char *member_type = xmlnode_get_attrib(member, "type"); + if (g_str_equal(member_type, "PassportMember")) { + msn_parse_each_member(session, member, "PassportName", + list); + } else if (g_str_equal(member_type, "PhoneMember")) { + + } else if (g_str_equal(member_type, "EmailMember")) { + msn_parse_each_member(session, member, "Email", list); + } + } + + g_free(role_str); + } + + g_free(lastchange_str); + } + + g_free(type_str); + } } /*parse contact list*/ static void -msn_parse_contact_list(MsnContact * contact) +msn_parse_contact_list(MsnContact *contact, xmlnode *node) { - MsnSession * session; - MsnListOp list_op = 0; - MsnListId list; - char * passport, *typedata; - xmlnode *fault, *faultstringnode, *faultdetail, *errorcode; - xmlnode *node, *body, *response, *result, *services; - xmlnode *service, *memberships, *info, *handle, *handletype; - xmlnode *membershipnode, *members, *member, *passportNode; - - session = contact->session; - node = xmlnode_from_str(contact->soapconn->body, contact->soapconn->body_len); - - if (node == NULL) { - purple_debug_error("MSNCL","Unable to parse SOAP data!\n"); - return; - } - - purple_debug_misc("MSNCL","Parsing contact list with size %d\n", contact->soapconn->body_len); + xmlnode *fault, *faultnode; - purple_debug_misc("MSNCL","Root node @ %p: Name: '%s', child: '%s', lastchild: '%s'\n", node, - node->name ? node->name : "(null)", - (node->child && node->child->name) ? node->child->name : "(null)", - (node->lastchild && node->lastchild->name) ? node->lastchild->name : "(null)"); - - body = xmlnode_get_child(node, "Body"); - - if (body == NULL) { - purple_debug_warning("MSNCL", "Failed to parse contact list Body node\n"); - xmlnode_free(node); - return; - } - purple_debug_info("MSNCL","Body @ %p: Name: '%s'\n",body,body->name); - - /* Did we receive a ? */ - if ( (fault = xmlnode_get_child(body, "Fault")) != NULL) { - purple_debug_info("MSNCL","Fault received from SOAP server!\n"); - - if ( (faultstringnode = xmlnode_get_child(fault, "faultstring")) != NULL ) { - gchar * faultstring = xmlnode_get_data(faultstringnode); - purple_debug_info("MSNCL", "Faultstring: %s\n", faultstring ? faultstring : "(null)"); + /* we may get a response if our cache data is too old: + * + * Need to do full sync. Can't sync deltas Client + * has too old a copy for us to do a delta sync + * + * this is not handled yet + */ + if ((fault = msn_soap_xml_get(node, "Body/Fault"))) { + if ((faultnode = xmlnode_get_child(fault, "faultstring"))) { + char *faultstring = xmlnode_get_data(faultnode); + purple_debug_info("msncl", "Retrieving contact list failed: %s\n", + faultstring); g_free(faultstring); } - if ( (faultdetail = xmlnode_get_child(fault, "detail")) != NULL ) { - purple_debug_info("MSNCL","detail @ %p, name: %s\n",faultdetail, faultdetail->name); - - if ( (errorcode = xmlnode_get_child(faultdetail, "errorcode")) != NULL ) { - purple_debug_info("MSNCL","errorcode @ %p, name: %s\n", errorcode, errorcode->name); - - if (errorcode->child != NULL) { - gchar *errorcodestring = xmlnode_get_data(errorcode); - purple_debug_info("MSNCL", "Error Code: %s\n", errorcodestring ? errorcodestring : "(null)"); - - if (errorcodestring && !strncmp(errorcodestring, "ABDoesNotExist", 14) ) { - xmlnode_free(node); - g_free(errorcodestring); - msn_create_address_book(contact); - return; - } - g_free(errorcodestring); - } - } - } - xmlnode_free(node); - msn_get_contact_list(contact, MSN_PS_INITIAL, NULL); - return; - } - - response = xmlnode_get_child(body,"FindMembershipResponse"); - - if (response == NULL) { - /* we may get a response if our cache data is too old: - * - * Need to do full sync. Can't sync deltas Client - * has too old a copy for us to do a delta sync - */ - xmlnode_free(node); - msn_get_contact_list(contact, MSN_PS_INITIAL, NULL); - return; - } - purple_debug_info("MSNCL","FindMembershipResponse @ %p: Name: '%s'\n",response,response->name); + if ((faultnode = msn_soap_xml_get(fault, "detail/errorcode"))) { + char *errorcode = xmlnode_get_data(faultnode); - result = xmlnode_get_child(response,"FindMembershipResult"); - if (result == NULL) { - purple_debug_warning("MSNCL","Received No Update!\n"); - xmlnode_free(node); - return; - } - purple_debug_info("MSNCL","Result @ %p: Name: '%s'\n", result, result->name); - - if ( (services = xmlnode_get_child(result,"Services")) == NULL) { - purple_debug_misc("MSNCL","No received.\n"); - xmlnode_free(node); - return; - } - - purple_debug_info("MSNCL","Services @ %p\n",services); - - for (service = xmlnode_get_child(services, "Service"); service; - service = xmlnode_get_next_twin(service)) { - purple_debug_info("MSNCL","Service @ %p\n",service); + if (g_str_equal(errorcode, "ABDoesNotExist")) { + msn_create_address_book(contact); + g_free(errorcode); + return; + } - if ( (info = xmlnode_get_child(service,"Info")) == NULL ) { - purple_debug_error("MSNCL","Error getting 'Info' child node\n"); - continue; - } - if ( (handle = xmlnode_get_child(info,"Handle")) == NULL ) { - purple_debug_error("MSNCL","Error getting 'Handle' child node\n"); - continue; - } - if ( (handletype = xmlnode_get_child(handle,"Type")) == NULL ) { - purple_debug_error("MSNCL","Error getting 'Type' child node\n"); - continue; - } - - if ( (typedata = xmlnode_get_data(handletype)) == NULL) { - purple_debug_error("MSNCL","Error retrieving data from 'Type' child node\n"); - continue; - } - - purple_debug_info("MSNCL","processing '%s' Service\n", typedata); - - if ( !g_strcasecmp(typedata, "Profile") ) { - /* Process Windows Live 'Messenger Roaming Identity' */ - g_free(typedata); - continue; + g_free(errorcode); } - if ( !g_strcasecmp(typedata, "Messenger") ) { - char *LastChangeStr = NULL; - xmlnode *LastChangeNode; - - /*Last Change Node*/ - if ((LastChangeNode = xmlnode_get_child(service, "LastChange"))) - LastChangeStr = xmlnode_get_data(LastChangeNode); - purple_debug_info("MSNCL","LastChangeNode: '%s'\n",LastChangeStr ? LastChangeStr : "(null)"); - purple_account_set_string(session->account, "CLLastChange", LastChangeStr); - g_free(LastChangeStr); - - memberships = xmlnode_get_child(service,"Memberships"); - if (memberships == NULL) { - purple_debug_warning("MSNCL","Memberships = NULL, cleaning up and returning.\n"); - g_free(typedata); - xmlnode_free(node); - return; - } - purple_debug_info("MSNCL","Memberships @ %p: Name: '%s'\n",memberships,memberships->name); - for (membershipnode = xmlnode_get_child(memberships, "Membership"); membershipnode; - membershipnode = xmlnode_get_next_twin(membershipnode)){ - xmlnode *roleNode; - char *role = NULL; - list = 0; - - if ((roleNode = xmlnode_get_child(membershipnode,"MemberRole"))) { - role = xmlnode_get_data(roleNode); - list = msn_get_memberrole(role); - } - list_op = 1 << list; - - purple_debug_info("MSNCL","MemberRole role: %s, list_op: %d\n", role ? role : "(null)", list_op); - - g_free(role); - - members = xmlnode_get_child(membershipnode, "Members"); - for (member = xmlnode_get_child(members, "Member"); member; - member = xmlnode_get_next_twin(member)){ - MsnUser *user = NULL; - xmlnode *typeNode, *membershipIdNode = NULL; - gchar *type, *membershipId = NULL; - const char *member_type = xmlnode_get_attrib(member, "type"); - - if (!member_type) { - purple_debug_error("msn", "No Member Type specified for Member.\n"); - continue; - } - - if(!g_strcasecmp(member_type, "PassportMember") ) { - passport = type = NULL; - if ((passportNode = xmlnode_get_child(member, "PassportName"))) - passport = xmlnode_get_data(passportNode); - if ((typeNode = xmlnode_get_child(member, "Type"))) - type = xmlnode_get_data(typeNode); - purple_debug_info("MSNCL","Passport name: '%s', Type: %s\n", passport ? passport : "(null)", type ? type : "(null)"); - /* Why do we even bother parsing it just to free it??? */ - g_free(type); - - user = msn_userlist_find_add_user(session->userlist,passport,NULL); - g_free(passport); - - membershipIdNode = xmlnode_get_child(member,"MembershipId"); - if (membershipIdNode != NULL) { - membershipId = xmlnode_get_data(membershipIdNode); - if (membershipId != NULL) { - user->membership_id[list] = atoi(membershipId); - g_free(membershipId); - } - } + msn_get_contact_list(contact, MSN_PS_INITIAL, NULL); + } else { + xmlnode *service; - msn_got_lst_user(session, user, list_op, NULL); - } - else if (!g_strcasecmp(member_type, "PhoneMember")) { - purple_debug_info("msn", "Recieved Phone Member; ignoring.\n"); - } - else if (!g_strcasecmp(member_type, "EmailMember")) { - xmlnode *emailNode; - passport = NULL; - - if ((emailNode = xmlnode_get_child(member, "Email"))) - passport = xmlnode_get_data(emailNode); - purple_debug_info("MSNCL","Email Member: Name: '%s', list_op: %d\n", passport ? passport : "(null)", list_op); - - user = msn_userlist_find_add_user(session->userlist, passport, NULL); - g_free(passport); - - membershipIdNode = xmlnode_get_child(member,"MembershipId"); - if (membershipIdNode != NULL) { - membershipId = xmlnode_get_data(membershipIdNode); - if (membershipId != NULL) { - user->membership_id[list] = atoi(membershipId); - g_free(membershipId); - } - } - - msn_got_lst_user(session, user, list_op, NULL); - } else { - purple_debug_info("msn", "Unknown Member type: %s\n", member_type); - } - } - } + for (service = msn_soap_xml_get(node, "Body/FindMembershipResponse/" + "FindMembershipResult/Services/Service"); + service; service = xmlnode_get_next_twin(service)) { + msn_parse_each_service(contact->session, service); } - g_free(typedata); } - - xmlnode_free(node); /* Free the whole XML tree */ -} - -static gboolean -msn_get_contact_list_cb(MsnSoapConn *soapconn) -{ - MsnContact *contact; - MsnSession *session; - const char *abLastChange; - const char *dynamicItemLastChange; - gchar *partner_scenario; - - if (soapconn->body == NULL) - return TRUE; - - purple_debug_misc("MSNCL","Got the contact list!\n"); - - contact = soapconn->parent; - g_return_val_if_fail(contact != NULL, TRUE); - session = soapconn->session; - g_return_val_if_fail(session != NULL, FALSE); - g_return_val_if_fail(soapconn->data_cb != NULL, TRUE); - - partner_scenario = soapconn->data_cb; - - msn_parse_contact_list(contact); - /*free the read buffer*/ - msn_soap_free_read_buf(soapconn); - - abLastChange = purple_account_get_string(session->account, "ablastChange", NULL); - dynamicItemLastChange = purple_account_get_string(session->account, "dynamicItemLastChange", NULL); - - if (!strcmp(partner_scenario, MsnSoapPartnerScenarioText[MSN_PS_INITIAL])) { - -#ifdef MSN_PARTIAL_LISTS - /* XXX: this should be enabled when we can correctly do partial - syncs with the server. Currently we need to retrieve the whole - list to detect sync issues */ - msn_get_address_book(contact, MSN_PS_INITIAL, abLastChange, dynamicItemLastChange); -#else - msn_get_address_book(contact, MSN_PS_INITIAL, NULL, NULL); -#endif - } else { - msn_soap_free_read_buf(soapconn); - } - - return TRUE; } static void -msn_get_contact_written_cb(MsnSoapConn *soapconn) +msn_get_contact_list_cb(MsnSoapMessage *req, MsnSoapMessage *resp, + gpointer data) { - purple_debug_misc("MSNCL","Sent SOAP request for the contact list.\n"); - soapconn->read_cb = msn_get_contact_list_cb; + GetContactListCbData *cb_data = data; + MsnContact *contact = cb_data->contact; + MsnSession *session = contact->session; + + g_return_if_fail(session != NULL); + + if (resp != NULL) { + const char *abLastChange; + const char *dynamicItemLastChange; + + purple_debug_misc("msncl","Got the contact list!\n"); + + msn_parse_contact_list(cb_data->contact, resp->xml); + abLastChange = purple_account_get_string(session->account, + "ablastChange", NULL); + dynamicItemLastChange = purple_account_get_string(session->account, + "dynamicItemLastChange", NULL); + + if (cb_data->which == MSN_PS_INITIAL) { +#ifdef MSN_PARTIAL_LISTS + /* XXX: this should be enabled when we can correctly do partial + syncs with the server. Currently we need to retrieve the whole + list to detect sync issues */ + msn_get_address_book(contact, MSN_PS_INITIAL, abLastChange, dynamicItemLastChange); +#else + msn_get_address_book(contact, MSN_PS_INITIAL, NULL, NULL); +#endif + } + } + + g_free(cb_data); } -/* SOAP get contact list*/ +/*SOAP get contact list*/ void -msn_get_contact_list(MsnContact * contact, const MsnSoapPartnerScenario partner_scenario, const char *update_time) +msn_get_contact_list(MsnContact * contact, + const MsnSoapPartnerScenario partner_scenario, const char *update_time) { - MsnSoapReq *soap_request; - gchar *body; + gchar *body = NULL; gchar *update_str = NULL; + GetContactListCbData cb_data = { contact, partner_scenario }; const gchar *partner_scenario_str = MsnSoapPartnerScenarioText[partner_scenario]; purple_debug_misc("MSNCL","Getting Contact List.\n"); @@ -584,17 +417,14 @@ } body = g_strdup_printf(MSN_GET_CONTACT_TEMPLATE, partner_scenario_str, update_str ? update_str : ""); - g_free(update_str); - soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, - MSN_GET_CONTACT_POST_URL, - MSN_GET_CONTACT_SOAP_ACTION, - body, - (gpointer) partner_scenario_str, - msn_get_contact_list_cb, - msn_get_contact_written_cb, - msn_contact_connect_init); - msn_soap_post(contact->soapconn,soap_request); + msn_soap_message_send(contact->session, + msn_soap_message_new(MSN_GET_CONTACT_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_GET_CONTACT_POST_URL, + msn_get_contact_list_cb, g_memdup(&cb_data, sizeof(cb_data))); + + g_free(update_str); g_free(body); } @@ -604,7 +434,7 @@ MsnSession *session = contact->session; xmlnode *group; - purple_debug_info("MsnAb","msn_parse_addressbook_groups()\n"); + purple_debug_info("MSNAB","msn_parse_addressbook_groups()\n"); for(group = xmlnode_get_child(node, "Group"); group; group = xmlnode_get_next_twin(group)){ @@ -756,81 +586,48 @@ } static gboolean -msn_parse_addressbook(MsnContact * contact) +msn_parse_addressbook(MsnContact * contact, xmlnode *node) { - MsnSession *session; - xmlnode * node,*body,*response,*result; + MsnSession * session; + xmlnode *result; xmlnode *groups; xmlnode *contacts; xmlnode *abNode; - xmlnode *fault, *faultstringnode, *faultdetail, *errorcode; + xmlnode *fault; session = contact->session; - node = xmlnode_from_str(contact->soapconn->body, contact->soapconn->body_len); - if ( node == NULL ) { - purple_debug_error("MSN AddressBook","Error parsing Address Book with size %d\n", contact->soapconn->body_len); + if ((fault = msn_soap_xml_get(node, "Body/Fault"))) { + xmlnode *faultnode; + + if ((faultnode = xmlnode_get_child(fault, "faultstring"))) { + gchar *faultstring = xmlnode_get_data(faultnode); + purple_debug_info("MSNAB","Faultstring: %s\n", faultstring); + g_free(faultstring); + } + + if ((faultnode = msn_soap_xml_get(fault, "detail/errorcode"))) { + gchar *errorcode = xmlnode_get_data(faultnode); + + purple_debug_info("MSNAB", "Error Code: %s\n", errorcode); + + if (g_str_equal(errorcode, "ABDoesNotExist")) { + g_free(errorcode); + return TRUE; + } + } + return FALSE; } - purple_debug_misc("MSN AddressBook", "Parsing Address Book with size %d\n", contact->soapconn->body_len); - - purple_debug_misc("MSN AddressBook","node{%p},name:%s,child:%s,last:%s\n", node, - node->name ? node->name : "(null)", - (node->child && node->child->name) ? node->child->name : "(null)", - (node->lastchild && node->lastchild->name) ? node->lastchild->name : "(null)"); - - body = xmlnode_get_child(node,"Body"); - purple_debug_misc("MSN AddressBook","body{%p},name:%s\n",body,body->name); - - /* TODO: This appears to be used in a number of places and should be de-duplicated */ - if ( (fault = xmlnode_get_child(body, "Fault")) != NULL) { - purple_debug_info("MSN AddressBook","Fault received from SOAP server!\n"); - - if ( (faultstringnode = xmlnode_get_child(fault, "faultstring")) != NULL ) { - gchar *faultstring = xmlnode_get_data(faultstringnode); - purple_debug_info("MSN AddressBook","Faultstring: %s\n", faultstring ? faultstring : "(null)"); - g_free(faultstring); - } - if ( (faultdetail = xmlnode_get_child(fault, "detail")) != NULL ) { - purple_debug_info("MSN AddressBook","detail @ %p, name: %s\n",faultdetail, faultdetail->name); - - if ( (errorcode = xmlnode_get_child(faultdetail, "errorcode")) != NULL ) { - gchar *errorcodestring; - purple_debug_info("MSN AddressBook","errorcode @ %p, name: %s\n",errorcode, errorcode->name); - - errorcodestring = xmlnode_get_data(errorcode); - purple_debug_info("MSN AddressBook", "Error Code: %s\n", errorcodestring ? errorcodestring : "(null)"); - - if (errorcodestring && !strncmp(errorcodestring, "ABDoesNotExist", 14) ) { - g_free(errorcodestring); - xmlnode_free(node); - return TRUE; - } - g_free(errorcodestring); - } - } - xmlnode_free(node); - return FALSE; + result = msn_soap_xml_get(node, "Body/ABFindAllResponse/ABFindAllResult"); + if(result == NULL){ + purple_debug_misc("MSNAB","receive no address book update\n"); + return TRUE; } - - response = xmlnode_get_child(body,"ABFindAllResponse"); - - if (response == NULL) { - xmlnode_free(node); - return FALSE; - } - - purple_debug_misc("MSN SOAP","response{%p},name:%s\n",response,response->name); - result = xmlnode_get_child(response,"ABFindAllResult"); - if(result == NULL){ - purple_debug_misc("MSNAB","receive no address book update\n"); - xmlnode_free(node); - return TRUE; - } - purple_debug_info("MSN SOAP","result{%p},name:%s\n",result,result->name); - + /* I don't see this "groups" tag documented on msnpiki, need to find out + if they are really there, and update msnpiki */ /*Process Group List*/ groups = xmlnode_get_child(result,"groups"); if (groups != NULL) { @@ -840,7 +637,7 @@ /*add a default No group to set up the no group Membership*/ msn_group_new(session->userlist, MSN_INDIVIDUALS_GROUP_ID, MSN_INDIVIDUALS_GROUP_NAME); - purple_debug_misc("MsnAB","group_id:%s name:%s\n", + purple_debug_misc("MSNAB","group_id:%s name:%s\n", MSN_INDIVIDUALS_GROUP_ID, MSN_INDIVIDUALS_GROUP_NAME); if ((purple_find_group(MSN_INDIVIDUALS_GROUP_NAME)) == NULL){ PurpleGroup *g = purple_group_new(MSN_INDIVIDUALS_GROUP_NAME); @@ -849,7 +646,7 @@ /*add a default No group to set up the no group Membership*/ msn_group_new(session->userlist, MSN_NON_IM_GROUP_ID, MSN_NON_IM_GROUP_NAME); - purple_debug_misc("MsnAB","group_id:%s name:%s\n", MSN_NON_IM_GROUP_ID, MSN_NON_IM_GROUP_NAME); + purple_debug_misc("MSNAB","group_id:%s name:%s\n", MSN_NON_IM_GROUP_ID, MSN_NON_IM_GROUP_NAME); if ((purple_find_group(MSN_NON_IM_GROUP_NAME)) == NULL){ PurpleGroup *g = purple_group_new(MSN_NON_IM_GROUP_NAME); purple_blist_add_group(g, NULL); @@ -869,7 +666,7 @@ if ((node2 = xmlnode_get_child(abNode, "lastChange"))) tmp = xmlnode_get_data(node2); - purple_debug_info("MsnAB"," lastchanged Time:{%s}\n", tmp ? tmp : "(null)"); + purple_debug_info("MSNAB"," lastchanged Time:{%s}\n", tmp ? tmp : "(null)"); purple_account_set_string(session->account, "ablastChange", tmp); g_free(tmp); tmp = NULL; @@ -880,68 +677,51 @@ g_free(tmp); } - xmlnode_free(node); - msn_soap_free_read_buf(contact->soapconn); return TRUE; } -static gboolean -msn_get_address_cb(MsnSoapConn *soapconn) +static void +msn_get_address_cb(MsnSoapMessage *req, MsnSoapMessage *resp, gpointer data) { - MsnContact *contact; + MsnContact *contact = data; MsnSession *session; - if (soapconn->body == NULL) - return TRUE; + if (resp == NULL) + return; - contact = soapconn->parent; - g_return_val_if_fail(contact != NULL, TRUE); - session = soapconn->session; - g_return_val_if_fail(session != NULL, FALSE); + g_return_if_fail(contact != NULL); + session = contact->session; + g_return_if_fail(session != NULL); - purple_debug_misc("MSN AddressBook", "Got the Address Book!\n"); + purple_debug_misc("MSNAB", "Got the Address Book!\n"); - if ( msn_parse_addressbook(contact) ) { - //msn_soap_free_read_buf(soapconn); - + if (msn_parse_addressbook(contact, resp->xml)) { if (!session->logged_in) { msn_send_privacy(session->account->gc); msn_notification_dump_contact(session); } - - /*free the read buffer*/ - msn_soap_free_read_buf(soapconn); - return TRUE; } else { - /* This is making us loop infinitely when we fail to parse the address book, - disable for now (we should re-enable when we send timestamps) + /* This is making us loop infinitely when we fail to parse the + address book, disable for now (we should re-enable when we + send timestamps) */ /* msn_get_address_book(contact, NULL, NULL); */ msn_session_disconnect(session); purple_connection_error(session->account->gc, _("Unable to retrieve MSN Address Book")); - return FALSE; } } -/**/ -static void -msn_address_written_cb(MsnSoapConn *soapconn) -{ - purple_debug_misc("MSN AddressBook","Sent SOAP request for the Address Book.\n"); - soapconn->read_cb = msn_get_address_cb; -} - /*get the address book*/ void -msn_get_address_book(MsnContact *contact, const MsnSoapPartnerScenario partner_scenario, const char *LastChanged, const char *dynamicItemLastChange) +msn_get_address_book(MsnContact *contact, + MsnSoapPartnerScenario partner_scenario, const char *LastChanged, + const char *dynamicItemLastChange) { - MsnSoapReq *soap_request; - char *body; - char *update_str = NULL; + char *body, *update_str = NULL; - purple_debug_misc("MSN AddressBook","Getting Address Book\n"); + purple_debug_misc("MSNAB","Getting Address Book\n"); /*build SOAP and POST it*/ if (dynamicItemLastChange != NULL) @@ -949,79 +729,58 @@ else if (LastChanged != NULL) update_str = g_strdup_printf(MSN_GET_ADDRESS_UPDATE_XML, LastChanged); - body = g_strdup_printf(MSN_GET_ADDRESS_TEMPLATE, MsnSoapPartnerScenarioText[partner_scenario], update_str ? update_str : ""); - g_free(update_str); - soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, - MSN_ADDRESS_BOOK_POST_URL,MSN_GET_ADDRESS_SOAP_ACTION, - body, - NULL, - msn_get_address_cb, - msn_address_written_cb, - msn_contact_connect_init); - msn_soap_post(contact->soapconn,soap_request); + msn_soap_message_send(contact->session, + msn_soap_message_new(MSN_GET_ADDRESS_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL, msn_get_address_cb, + contact); + + g_free(update_str); g_free(body); } -static gboolean -msn_add_contact_read_cb(MsnSoapConn *soapconn) +static void +msn_add_contact_read_cb(MsnSoapMessage *req, MsnSoapMessage *resp, + gpointer data) { - MsnCallbackState *state = NULL; - MsnUserList *userlist; - MsnUser *user; - - g_return_val_if_fail(soapconn->data_cb != NULL, TRUE); - g_return_val_if_fail(soapconn->session != NULL, FALSE); - g_return_val_if_fail(soapconn->session->userlist != NULL, TRUE); + MsnCallbackState *state = data; + MsnSession *session = state->session; - state = (MsnCallbackState *) soapconn->data_cb; + g_return_if_fail(session != NULL); - if (soapconn->body == NULL) { - msn_callback_state_free(state); - return TRUE; - } + if (resp != NULL) { + MsnUserList *userlist = session->userlist; + MsnUser *user; - userlist = soapconn->session->userlist; - - purple_debug_info("MSNCL","Contact added successfully\n"); + purple_debug_info("MSNCL","Contact added successfully\n"); - // the code this block is replacing didn't send ADL for yahoo contacts, - // but i haven't confirmed this is WLM's behaviour wrt yahoo contacts - - if ( !msn_user_is_yahoo(soapconn->session->account, state->who) ) { - - msn_userlist_add_buddy_to_list(userlist, state->who, MSN_LIST_AL); - msn_userlist_add_buddy_to_list(userlist, state->who, MSN_LIST_FL); - } - msn_notification_send_fqy(soapconn->session, state->who); + // the code this block is replacing didn't send ADL for yahoo contacts, + // but i haven't confirmed this is WLM's behaviour wrt yahoo contacts + if ( !msn_user_is_yahoo(session->account, state->who) ) { + msn_userlist_add_buddy_to_list(userlist, state->who, MSN_LIST_AL); + msn_userlist_add_buddy_to_list(userlist, state->who, MSN_LIST_FL); + } - user = msn_userlist_find_add_user(userlist, state->who, state->who); - msn_user_add_group_id(user, state->guid); - - msn_soap_free_read_buf(soapconn); - msn_callback_state_free(state); + msn_notification_send_fqy(session, state->who); - return TRUE; -} + user = msn_userlist_find_add_user(userlist, state->who, state->who); + msn_user_add_group_id(user, state->guid); + } -static void -msn_add_contact_written_cb(MsnSoapConn *soapconn) -{ - purple_debug_info("MSNCL","Add contact request written\n"); - soapconn->read_cb = msn_add_contact_read_cb; + msn_callback_state_free(state); } /* add a Contact in MSN_INDIVIDUALS_GROUP */ void msn_add_contact(MsnContact *contact, MsnCallbackState *state, const char *passport) { - MsnSoapReq *soap_request; gchar *body = NULL; gchar *contact_xml = NULL; - g_return_if_fail(passport != NULL); -/* gchar *escaped_displayname; +#if 0 + gchar *escaped_displayname; if (displayname != NULL) { @@ -1030,87 +789,71 @@ escaped_displayname = passport; } contact_xml = g_strdup_printf(MSN_XML_ADD_CONTACT, escaped_displayname, passport); -*/ +#endif + purple_debug_info("MSNCL","Adding contact %s to contact list\n", passport); -// if ( !strcmp(state->guid, MSN_INDIVIDUALS_GROUP_ID) ) { - contact_xml = g_strdup_printf(MSN_CONTACT_XML, passport); -// } + contact_xml = g_strdup_printf(MSN_CONTACT_XML, passport); body = g_strdup_printf(MSN_ADD_CONTACT_TEMPLATE, contact_xml); + msn_soap_message_send(contact->session, + msn_soap_message_new(MSN_CONTACT_ADD_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL, + msn_add_contact_read_cb, state); + g_free(contact_xml); - - /*build SOAP and POST it*/ - - soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, - MSN_ADDRESS_BOOK_POST_URL, - MSN_CONTACT_ADD_SOAP_ACTION, - body, - state, - msn_add_contact_read_cb, - msn_add_contact_written_cb, - msn_contact_connect_init); - msn_soap_post(contact->soapconn,soap_request); - g_free(body); } -static gboolean -msn_add_contact_to_group_read_cb(MsnSoapConn *soapconn) +static void +msn_add_contact_to_group_read_cb(MsnSoapMessage *req, MsnSoapMessage *resp, + gpointer data) { - MsnCallbackState *state; + MsnCallbackState *state = data; MsnUserList *userlist; - g_return_val_if_fail(soapconn->data_cb != NULL, TRUE); - g_return_val_if_fail(soapconn->session != NULL, FALSE); - g_return_val_if_fail(soapconn->session->userlist != NULL, TRUE); + g_return_if_fail(data != NULL); + + userlist = state->session->userlist; - userlist = soapconn->session->userlist; + if (resp != NULL) { + if (msn_userlist_add_buddy_to_group(userlist, state->who, + state->new_group_name)) { + purple_debug_info("MSNCL", "Contact %s added to group %s successfully!\n", state->who, state->new_group_name); + } else { + purple_debug_info("MSNCL","Contact %s added to group %s successfully on server, but failed in the local list\n", state->who, state->new_group_name); + } - state = (MsnCallbackState *) soapconn->data_cb; + if (state->action & MSN_ADD_BUDDY) { + MsnUser *user = msn_userlist_find_user(userlist, state->who); - if (soapconn->body == NULL) { - msn_callback_state_free(state); - return TRUE; - } - - if (msn_userlist_add_buddy_to_group(userlist, state->who, state->new_group_name) == TRUE) { - purple_debug_info("MSNCL", "Contact %s added to group %s successfully!\n", state->who, state->new_group_name); - } else { - purple_debug_info("MSNCL","Contact %s added to group %s successfully on server, but failed in the local list\n", state->who, state->new_group_name); + if ( !msn_user_is_yahoo(state->session->account, state->who) ) { + + msn_userlist_add_buddy_to_list(userlist, state->who, MSN_LIST_AL); + msn_userlist_add_buddy_to_list(userlist, state->who, MSN_LIST_FL); + } + msn_notification_send_fqy(state->session, state->who); + + if (msn_userlist_user_is_in_list(user, MSN_LIST_PL)) { + msn_del_contact_from_list(state->session->contact, NULL, state->who, MSN_LIST_PL); + msn_callback_state_free(state); + return; + } + } + + if (state->action & MSN_MOVE_BUDDY) { + msn_del_contact_from_group(state->session->contact, state->who, state->old_group_name); + } } - if (state->action & MSN_ADD_BUDDY) { - - if ( !msn_user_is_yahoo(soapconn->session->account, state->who) ) { - - msn_userlist_add_buddy_to_list(userlist, state->who, MSN_LIST_AL); - msn_userlist_add_buddy_to_list(userlist, state->who, MSN_LIST_FL); - } - msn_notification_send_fqy(soapconn->session, state->who); - } - - if (state->action & MSN_MOVE_BUDDY) { - msn_del_contact_from_group(soapconn->session->contact, state->who, state->old_group_name); - } else { - msn_callback_state_free(state); - msn_soap_free_read_buf(soapconn); - } - return TRUE; -} - -static void -msn_add_contact_to_group_written_cb(MsnSoapConn *soapconn) -{ - purple_debug_info("MSNCL","Add contact to group request sent!\n"); - soapconn->read_cb = msn_add_contact_to_group_read_cb; + msn_callback_state_free(state); } void msn_add_contact_to_group(MsnContact *contact, MsnCallbackState *state, const char *passport, const char *groupId) { - MsnSoapReq *soap_request; MsnUserList *userlist; MsnUser *user; gchar *body = NULL, *contact_xml; @@ -1143,13 +886,14 @@ return; } - purple_debug_info("MSNCL", "Adding user %s to group %s\n", passport, msn_userlist_find_group_name(userlist, groupId)); user = msn_userlist_find_user(userlist, passport); if (user == NULL) { - purple_debug_warning("MSN CL", "Unable to retrieve user %s from the userlist!\n", passport); + purple_debug_warning("MSNCL", "Unable to retrieve user %s from the userlist!\n", passport); + msn_callback_state_free(state); + return; /* guess this never happened! */ } if (user != NULL && user->uid != NULL) { @@ -1159,60 +903,35 @@ } body = g_strdup_printf(MSN_ADD_CONTACT_GROUP_TEMPLATE, groupId, contact_xml); - g_free(contact_xml); - - /*build SOAP and POST it*/ - soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, - MSN_ADDRESS_BOOK_POST_URL, - MSN_ADD_CONTACT_GROUP_SOAP_ACTION, - body, - state, - msn_add_contact_to_group_read_cb, - msn_add_contact_to_group_written_cb, - msn_contact_connect_init); - msn_soap_post(contact->soapconn,soap_request); + msn_soap_message_send(state->session, + msn_soap_message_new(MSN_ADD_CONTACT_GROUP_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL, + msn_add_contact_to_group_read_cb, state); + g_free(contact_xml); g_free(body); } - - -static gboolean -msn_delete_contact_read_cb(MsnSoapConn *soapconn) +static void +msn_delete_contact_read_cb(MsnSoapMessage *req, MsnSoapMessage *resp, + gpointer data) { - MsnUser *user; - MsnCallbackState *state = (MsnCallbackState *) soapconn->data_cb; - MsnUserList *userlist; - - g_return_val_if_fail(soapconn->session != NULL, FALSE); - g_return_val_if_fail(soapconn->session->userlist != NULL, TRUE); + MsnCallbackState *state = data; - userlist = soapconn->session->userlist; + if (resp != NULL) { + MsnUserList *userlist = state->session->userlist; + MsnUser *user = msn_userlist_find_user_with_id(userlist, state->uid); - if (soapconn->body == NULL) { - msn_callback_state_free(state); - return TRUE; - } + purple_debug_info("MSNCL","Delete contact successful\n"); - purple_debug_info("MSNCL","Delete contact successful\n"); - - user = msn_userlist_find_user_with_id(userlist, state->uid); - if (user != NULL) { - msn_userlist_remove_user(userlist, user); + if (user != NULL) { + msn_userlist_remove_user(userlist, user); + } } msn_callback_state_free(state); - msn_soap_free_read_buf(soapconn); - - return TRUE; -} - -static void -msn_delete_contact_written_cb(MsnSoapConn *soapconn) -{ - purple_debug_info("MSNCL","Delete contact request written\n"); - soapconn->read_cb = msn_delete_contact_read_cb; } /*delete a Contact*/ @@ -1221,72 +940,52 @@ { gchar *body = NULL; gchar *contact_id_xml = NULL ; - MsnSoapReq *soap_request; MsnCallbackState *state; g_return_if_fail(contactId != NULL); contact_id_xml = g_strdup_printf(MSN_CONTACT_ID_XML, contactId); - state = msn_callback_state_new(); + state = msn_callback_state_new(contact->session); msn_callback_state_set_uid(state, contactId); /* build SOAP request */ purple_debug_info("MSNCL","Deleting contact with contactId: %s\n", contactId); body = g_strdup_printf(MSN_DEL_CONTACT_TEMPLATE, contact_id_xml); - soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, - MSN_ADDRESS_BOOK_POST_URL, - MSN_CONTACT_DEL_SOAP_ACTION, - body, - state, - msn_delete_contact_read_cb, - msn_delete_contact_written_cb, - msn_contact_connect_init); + msn_soap_message_send(contact->session, + msn_soap_message_new(MSN_CONTACT_DEL_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL, + msn_delete_contact_read_cb, state); g_free(contact_id_xml); - - /* POST the SOAP request */ - msn_soap_post(contact->soapconn, soap_request); - g_free(body); } -static gboolean -msn_del_contact_from_group_read_cb(MsnSoapConn *soapconn) +static void +msn_del_contact_from_group_read_cb(MsnSoapMessage *req, MsnSoapMessage *resp, + gpointer data) { - MsnCallbackState *state = (MsnCallbackState *) soapconn->data_cb; + MsnCallbackState *state = data; - if (soapconn->body == NULL) { - msn_callback_state_free(state); - return TRUE; - } - - if (msn_userlist_rem_buddy_from_group(soapconn->session->userlist, state->who, state->old_group_name)) { - purple_debug_info("MSN CL", "Contact %s deleted successfully from group %s\n", state->who, state->old_group_name); - } else { - purple_debug_info("MSN CL", "Contact %s deleted successfully from group %s in the server, but failed in the local list\n", state->who, state->old_group_name); + if (resp != NULL) { + if (msn_userlist_rem_buddy_from_group(state->session->userlist, + state->who, state->old_group_name)) { + purple_debug_info("MSNCL", "Contact %s deleted successfully from group %s\n", state->who, state->old_group_name); + } else { + purple_debug_info("MSNCL", "Contact %s deleted successfully from group %s in the server, but failed in the local list\n", state->who, state->old_group_name); + } } msn_callback_state_free(state); - msn_soap_free_read_buf(soapconn); - - return TRUE; -} - -static void -msn_del_contact_from_group_written_cb(MsnSoapConn *soapconn) -{ - purple_debug_info("MSN CL","Del contact from group request sent!\n"); - soapconn->read_cb = msn_del_contact_from_group_read_cb; } void msn_del_contact_from_group(MsnContact *contact, const char *passport, const char *group_name) { - MsnSoapReq *soap_request; MsnUserList * userlist; MsnUser *user; MsnCallbackState *state; - gchar *body = NULL, *contact_id_xml; + gchar *body, *contact_id_xml; const gchar *groupId; g_return_if_fail(passport != NULL); @@ -1299,16 +998,16 @@ groupId = msn_userlist_find_group_id(userlist, group_name); if (groupId != NULL) { - purple_debug_info("MSN CL", "Deleting user %s from group %s\n", passport, group_name); + purple_debug_info("MSNCL", "Deleting user %s from group %s\n", passport, group_name); } else { - purple_debug_warning("MSN CL", "Unable to retrieve group id from group %s !\n", group_name); + purple_debug_warning("MSNCL", "Unable to retrieve group id from group %s !\n", group_name); return; } user = msn_userlist_find_user(userlist, passport); if (user == NULL) { - purple_debug_warning("MSN CL", "Unable to retrieve user from passport %s!\n", passport); + purple_debug_warning("MSNCL", "Unable to retrieve user from passport %s!\n", passport); return; } @@ -1317,58 +1016,40 @@ return; } - state = msn_callback_state_new(); + state = msn_callback_state_new(contact->session); msn_callback_state_set_who(state, passport); msn_callback_state_set_guid(state, groupId); msn_callback_state_set_old_group_name(state, group_name); contact_id_xml = g_strdup_printf(MSN_CONTACT_ID_XML, user->uid); body = g_strdup_printf(MSN_CONTACT_DEL_GROUP_TEMPLATE, contact_id_xml, groupId); + + msn_soap_message_send(contact->session, + msn_soap_message_new(MSN_CONTACT_DEL_GROUP_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL, + msn_del_contact_from_group_read_cb, state); + g_free(contact_id_xml); - - /*build SOAP and POST it*/ - soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, - MSN_ADDRESS_BOOK_POST_URL, - MSN_CONTACT_DEL_GROUP_SOAP_ACTION, - body, - state, - msn_del_contact_from_group_read_cb, - msn_del_contact_from_group_written_cb, - msn_contact_connect_init); - msn_soap_post(contact->soapconn,soap_request); - g_free(body); } -static gboolean -msn_update_contact_read_cb(MsnSoapConn *soapconn) +static void +msn_update_contact_read_cb(MsnSoapMessage *req, MsnSoapMessage *resp, + gpointer data) { - if (soapconn->body == NULL) - return TRUE; - - purple_debug_info("MSN CL","Contact updated successfully\n"); - - return TRUE; -} - -static void -msn_update_contact_written_cb(MsnSoapConn *soapconn) -{ - purple_debug_info("MSN CL","Update contact information request sent\n"); - soapconn->read_cb = msn_update_contact_read_cb; + if (resp) + purple_debug_info("MSN CL","Contact updated successfully\n"); + else + purple_debug_info("MSN CL","Contact updated successfully\n"); } /* Update a contact's nickname */ - void msn_update_contact(MsnContact *contact, const char* nickname) { - MsnSoapReq *soap_request; - gchar *body, *escaped_nickname; - - /* I'm not sure this is right, but if it isn't, the rest of this function will need to be fixed */ - g_return_if_fail(nickname != NULL); + gchar *body = NULL, *escaped_nickname; purple_debug_info("MSN CL","Update contact information with new friendly name: %s\n", nickname); @@ -1376,83 +1057,50 @@ body = g_strdup_printf(MSN_CONTACT_UPDATE_TEMPLATE, escaped_nickname); + msn_soap_message_send(contact->session, + msn_soap_message_new(MSN_CONTACT_UPDATE_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL, + msn_update_contact_read_cb, NULL); + g_free(escaped_nickname); - /*build SOAP and POST it*/ - soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, - MSN_ADDRESS_BOOK_POST_URL, - MSN_CONTACT_UPDATE_SOAP_ACTION, - body, - NULL, - msn_update_contact_read_cb, - msn_update_contact_written_cb, - msn_contact_connect_init); - msn_soap_post(contact->soapconn, soap_request); - g_free(body); } - -static gboolean -msn_del_contact_from_list_read_cb(MsnSoapConn *soapconn) +static void +msn_del_contact_from_list_read_cb(MsnSoapMessage *req, MsnSoapMessage *resp, + gpointer data) { - MsnCallbackState *state = NULL; + MsnCallbackState *state = data; + MsnSession *session = state->session; - g_return_val_if_fail(soapconn->data_cb != NULL, TRUE); - g_return_val_if_fail(soapconn->session != NULL, FALSE); - g_return_val_if_fail(soapconn->session->contact != NULL, FALSE); - g_return_val_if_fail(soapconn->session->userlist != NULL, FALSE); - - state = (MsnCallbackState *) soapconn->data_cb; + if (resp != NULL) { + purple_debug_info("MSN CL", "Contact %s deleted successfully from %s list on server!\n", state->who, MsnMemberRole[state->list_id]); - if (soapconn->body == NULL) { - msn_callback_state_free(state); - return TRUE; - } - - purple_debug_info("MSN CL", "Contact %s deleted successfully from %s list on server!\n", state->who, MsnMemberRole[state->list_id]); + if (state->list_id == MSN_LIST_PL) { + MsnUser *user = msn_userlist_find_user(session->userlist, state->who); - if (state->list_id == MSN_LIST_PL) { - MsnUser *user = msn_userlist_find_user(soapconn->session->userlist, state->who); - - if (user != NULL) - msn_user_unset_op(user, MSN_LIST_PL_OP); - - msn_add_contact_to_list(soapconn->session->contact, state, state->who, MSN_LIST_RL); - return TRUE; - } + if (user != NULL) + msn_user_unset_op(user, MSN_LIST_PL_OP); - if (state->list_id == MSN_LIST_AL) { - purple_privacy_permit_remove(soapconn->session->account, state->who, TRUE); - msn_add_contact_to_list(soapconn->session->contact, NULL, state->who, MSN_LIST_BL); - msn_callback_state_free(state); - return TRUE; - } - - if (state->list_id == MSN_LIST_BL) { - purple_privacy_deny_remove(soapconn->session->account, state->who, TRUE); - msn_add_contact_to_list(soapconn->session->contact, NULL, state->who, MSN_LIST_AL); - msn_callback_state_free(state); - return TRUE; + msn_add_contact_to_list(session->contact, state, state->who, MSN_LIST_RL); + return; + } else if (state->list_id == MSN_LIST_AL) { + purple_privacy_permit_remove(session->account, state->who, TRUE); + msn_add_contact_to_list(session->contact, NULL, state->who, MSN_LIST_BL); + } else if (state->list_id == MSN_LIST_BL) { + purple_privacy_deny_remove(session->account, state->who, TRUE); + msn_add_contact_to_list(session->contact, NULL, state->who, MSN_LIST_AL); + } } msn_callback_state_free(state); - msn_soap_free_read_buf(soapconn); - - return TRUE; -} - -static void -msn_del_contact_from_list_written_cb(MsnSoapConn *soapconn) -{ - purple_debug_info("MSN CL","Delete contact from list SOAP request sent!\n"); - soapconn->read_cb = msn_del_contact_from_list_read_cb; } void msn_del_contact_from_list(MsnContact *contact, MsnCallbackState *state, const gchar *passport, const MsnListId list) { - MsnSoapReq *soap_request; gchar *body = NULL, *member = NULL; MsnSoapPartnerScenario partner_scenario; MsnUser *user; @@ -1464,7 +1112,7 @@ purple_debug_info("MSN CL", "Deleting contact %s from %s list\n", passport, MsnMemberRole[list]); if (state == NULL) { - state = msn_callback_state_new(); + state = msn_callback_state_new(contact->session); } msn_callback_state_set_list_id(state, list); msn_callback_state_set_who(state, passport); @@ -1488,79 +1136,55 @@ MsnSoapPartnerScenarioText[partner_scenario], MsnMemberRole[list], member); - g_free(member); - soap_request = msn_soap_request_new( MSN_CONTACT_SERVER, - MSN_SHARE_POST_URL, - MSN_DELETE_MEMBER_FROM_LIST_SOAP_ACTION, - body, - state, - msn_del_contact_from_list_read_cb, - msn_del_contact_from_list_written_cb, - msn_contact_connect_init); + msn_soap_message_send(contact->session, + msn_soap_message_new(MSN_DELETE_MEMBER_FROM_LIST_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_SHARE_POST_URL, + msn_del_contact_from_list_read_cb, state); - msn_soap_post(contact->soapconn,soap_request); - + g_free(member); g_free(body); } -static gboolean -msn_add_contact_to_list_read_cb(MsnSoapConn *soapconn) +static void +msn_add_contact_to_list_read_cb(MsnSoapMessage *req, MsnSoapMessage *resp, + gpointer data) { - MsnCallbackState *state = NULL; + MsnCallbackState *state = data; - g_return_val_if_fail(soapconn->data_cb != NULL, TRUE); - g_return_val_if_fail(soapconn->session != NULL, FALSE); - g_return_val_if_fail(soapconn->session->userlist != NULL, FALSE); - - state = (MsnCallbackState *) soapconn->data_cb; + g_return_if_fail(state != NULL); + g_return_if_fail(state->session != NULL); + g_return_if_fail(state->session->contact != NULL); - if (soapconn->body == NULL) { - msn_callback_state_free(state); - return TRUE; - } - - purple_debug_info("MSN CL", "Contact %s added successfully to %s list on server!\n", state->who, MsnMemberRole[state->list_id]); + if (resp != NULL) { + purple_debug_info("MSN CL", "Contact %s added successfully to %s list on server!\n", state->who, MsnMemberRole[state->list_id]); - if (state->list_id == MSN_LIST_RL) { - MsnUser *user = msn_userlist_find_user(soapconn->session->userlist, state->who); + if (state->list_id == MSN_LIST_RL) { + MsnUser *user = msn_userlist_find_user(state->session->userlist, state->who); - if (user != NULL) { - msn_user_set_op(user, MSN_LIST_RL_OP); - } + if (user != NULL) { + msn_user_set_op(user, MSN_LIST_RL_OP); + } + + if (state->action & MSN_DENIED_BUDDY) { - if (state->action & MSN_DENIED_BUDDY) { - g_return_val_if_fail(soapconn->session->contact != NULL, FALSE); - - msn_add_contact_to_list(soapconn->session->contact, NULL, state->who, MSN_LIST_BL); - return TRUE; + msn_add_contact_to_list(state->session->contact, NULL, state->who, MSN_LIST_BL); + } else if (state->list_id == MSN_LIST_AL) { + purple_privacy_permit_add(state->session->account, state->who, TRUE); + } else if (state->list_id == MSN_LIST_BL) { + purple_privacy_deny_add(state->session->account, state->who, TRUE); + } } } - if (state->list_id == MSN_LIST_AL) { - purple_privacy_permit_add(soapconn->session->account, state->who, TRUE); - } else if (state->list_id == MSN_LIST_BL) { - purple_privacy_deny_add(soapconn->session->account, state->who, TRUE); - } - msn_callback_state_free(state); - msn_soap_free_read_buf(soapconn); - return TRUE; -} - - -static void -msn_add_contact_to_list_written_cb(MsnSoapConn *soapconn) -{ - purple_debug_info("MSN CL","Add contact to list SOAP request sent!\n"); - soapconn->read_cb = msn_add_contact_to_list_read_cb; } void msn_add_contact_to_list(MsnContact *contact, MsnCallbackState *state, const gchar *passport, const MsnListId list) { - MsnSoapReq *soap_request; gchar *body = NULL, *member = NULL; MsnSoapPartnerScenario partner_scenario; @@ -1571,51 +1195,38 @@ purple_debug_info("MSN CL", "Adding contact %s to %s list\n", passport, MsnMemberRole[list]); if (state == NULL) { - state = msn_callback_state_new(); + state = msn_callback_state_new(contact->session); } msn_callback_state_set_list_id(state, list); msn_callback_state_set_who(state, passport); partner_scenario = (list == MSN_LIST_RL) ? MSN_PS_CONTACT_API : MSN_PS_BLOCK_UNBLOCK; - member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML, passport); + member = g_strdup_printf(MSN_MEMBER_PASSPORT_XML, state->who); body = g_strdup_printf(MSN_CONTACT_ADD_TO_LIST_TEMPLATE, MsnSoapPartnerScenarioText[partner_scenario], MsnMemberRole[list], member); - g_free(member); + msn_soap_message_send(contact->session, + msn_soap_message_new(MSN_ADD_MEMBER_TO_LIST_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_SHARE_POST_URL, + msn_add_contact_to_list_read_cb, state); - soap_request = msn_soap_request_new( MSN_CONTACT_SERVER, - MSN_SHARE_POST_URL, - MSN_ADD_MEMBER_TO_LIST_SOAP_ACTION, - body, - state, - msn_add_contact_to_list_read_cb, - msn_add_contact_to_list_written_cb, - msn_contact_connect_init); - - msn_soap_post(contact->soapconn, soap_request); - + g_free(member); g_free(body); } - #if 0 -static gboolean -msn_gleams_read_cb(MsnSoapConn * soapconn) +static void +msn_gleams_read_cb(MsnSoapMessage *req, MsnSoapMessage *resp, gpointer data) { - purple_debug_info("MSN CL","Gleams read done\n"); - return TRUE; -} - -static void -msn_gleams_written_cb(MsnSoapConn * soapconn) -{ - purple_debug_info("MSNP14","finish Group written\n"); - soapconn->read_cb = msn_gleams_read_cb; -// msn_soap_read_cb(data,source,cond); + if (resp != NULL) + purple_debug_info("MSNP14","Gleams read done\n"); + else + purple_debug_info("MSNP14","Gleams read failed\n"); } /*get the gleams info*/ @@ -1625,16 +1236,11 @@ MsnSoapReq *soap_request; purple_debug_info("MSNP14","msn get gleams info...\n"); - /*build SOAP and POST it*/ - soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, - MSN_ADDRESS_BOOK_POST_URL, - MSN_GET_GLEAMS_SOAP_ACTION, - MSN_GLEAMS_TEMPLATE, - NULL, - msn_gleams_read_cb, - msn_gleams_written_cb, - msn_contact_connect_init); - msn_soap_post(contact->soapconn,soap_request); + msn_soap_message_send(contact->session, + msn_soap_message_new(MSN_GET_GLEAMS_SOAP_ACTION, + xmlnode_from_str(MSN_GLEAMS_TEMPLATE, -1)), + MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL, + msn_gleams_read_cb, NULL); } #endif @@ -1643,100 +1249,88 @@ * Group Operations ***************************************************************/ -static gboolean -msn_group_read_cb(MsnSoapConn *soapconn) +static void +msn_group_read_cb(MsnSoapMessage *req, MsnSoapMessage *resp, gpointer data) { - MsnUserList *userlist; - MsnCallbackState *state = NULL; + MsnCallbackState *state = data; - purple_debug_info("MSN CL", "Group request successful.\n"); + purple_debug_info("MSNCL", "Group request successful.\n"); - g_return_val_if_fail(soapconn->session != NULL, FALSE); - g_return_val_if_fail(soapconn->session->userlist != NULL, TRUE); - g_return_val_if_fail(soapconn->session->contact != NULL, FALSE); + g_return_if_fail(state->session != NULL); + g_return_if_fail(state->session->userlist != NULL); + g_return_if_fail(state->session->contact != NULL); - state = (MsnCallbackState *) soapconn->data_cb; - - if (soapconn->body == NULL) { + if (resp == NULL) { msn_callback_state_free(state); - return TRUE; + return; } - + if (state) { - userlist = soapconn->session->userlist; + MsnSession *session = state->session; + MsnUserList *userlist = session->userlist; if (state->action & MSN_RENAME_GROUP) { - msn_userlist_rename_group_id(soapconn->session->userlist, + msn_userlist_rename_group_id(session->userlist, state->guid, state->new_group_name); } if (state->action & MSN_ADD_GROUP) { - gchar *guid, *endguid; - - guid = g_strstr_len(soapconn->read_buf, soapconn->read_len, ""); - guid += 6; - endguid = g_strstr_len(soapconn->read_buf, soapconn->read_len, ""); - *endguid = '\0'; - /* create and add the new group to the userlist */ - purple_debug_info("MSN CL", "Adding group %s with guid = %s to the userlist\n", state->new_group_name, guid); - msn_group_new(soapconn->session->userlist, guid, state->new_group_name); + /* the response is taken from + http://telepathy.freedesktop.org/wiki/Pymsn/MSNP/ContactListActions + should copy it to msnpiki some day */ + xmlnode *guid_node = msn_soap_xml_get(resp->xml, + "Body/ABGroupAddResponse/ABGroupAddResult/guid"); + + if (guid_node) { + char *guid = xmlnode_get_data(guid_node); + + /* create and add the new group to the userlist */ + purple_debug_info("MSNCL", "Adding group %s with guid = %s to the userlist\n", state->new_group_name, guid); + msn_group_new(session->userlist, guid, state->new_group_name); - if (state->action & MSN_ADD_BUDDY) { - msn_userlist_add_buddy(soapconn->session->userlist, - state->who, - state->new_group_name); - msn_callback_state_free(state); - return TRUE; - } - - if (state->action & MSN_MOVE_BUDDY) { - msn_add_contact_to_group(soapconn->session->contact, state, state->who, guid); - return TRUE; + g_free(guid); + + if (state->action & MSN_ADD_BUDDY) { + msn_userlist_add_buddy(session->userlist, + state->who, + state->new_group_name); + } else if (state->action & MSN_MOVE_BUDDY) { + msn_add_contact_to_group(session->contact, state, state->who, guid); + return; + } + } else { + purple_debug_info("MSNCL", "Adding group %s failed\n", + state->new_group_name); } } if (state->action & MSN_DEL_GROUP) { GList *l; - msn_userlist_remove_group_id(soapconn->session->userlist, state->guid); + msn_userlist_remove_group_id(session->userlist, state->guid); for (l = userlist->users; l != NULL; l = l->next) { msn_user_remove_group_id( (MsnUser *)l->data, state->guid); } - } msn_callback_state_free(state); } - - msn_soap_free_read_buf(soapconn); - return TRUE; -} - -static void -msn_group_written_cb(MsnSoapConn *soapconn) -{ - purple_debug_info("MSN CL","Sent group request.\n"); - soapconn->read_cb = msn_group_read_cb; } /* add group */ void msn_add_group(MsnSession *session, MsnCallbackState *state, const char* group_name) { - MsnSoapReq *soap_request; - MsnContact *contact; char *body = NULL; - gchar *escaped_group_name; g_return_if_fail(session != NULL); g_return_if_fail(group_name != NULL); - contact = session->contact; - purple_debug_info("MSN CL","Adding group %s to contact list.\n", group_name); + purple_debug_info("MSNCL","Adding group %s to contact list.\n", group_name); if (state == NULL) { - state = msn_callback_state_new(); + state = msn_callback_state_new(session); } msn_callback_state_set_action(state, MSN_ADD_GROUP); @@ -1745,21 +1339,14 @@ /* escape group name's html special chars so it can safely be sent * in a XML SOAP request */ - escaped_group_name = g_markup_escape_text(group_name, -1); - body = g_strdup_printf(MSN_GROUP_ADD_TEMPLATE, escaped_group_name); - g_free(escaped_group_name); + body = g_markup_printf_escaped(MSN_GROUP_ADD_TEMPLATE, group_name); - /*build SOAP and POST it*/ - soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, - MSN_ADDRESS_BOOK_POST_URL, - MSN_GROUP_ADD_SOAP_ACTION, - body, - state, - msn_group_read_cb, - msn_group_written_cb, - msn_contact_connect_init); - msn_soap_post(contact->soapconn,soap_request); - + msn_soap_message_send(session, + msn_soap_message_new(MSN_GROUP_ADD_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL, + msn_group_read_cb, state); + g_free(body); } @@ -1767,8 +1354,6 @@ void msn_del_group(MsnSession *session, const gchar *group_name) { - MsnSoapReq *soap_request; - MsnContact *contact; MsnCallbackState *state; char *body = NULL; const gchar *guid; @@ -1776,8 +1361,7 @@ g_return_if_fail(session != NULL); g_return_if_fail(group_name != NULL); - contact = session->contact; - purple_debug_info("MSN CL","Deleting group %s from contact list\n", group_name); + purple_debug_info("MSNCL","Deleting group %s from contact list\n", group_name); guid = msn_userlist_find_group_id(session->userlist, group_name); @@ -1785,7 +1369,7 @@ * we need to delete nothing */ if (guid == NULL) { - purple_debug_info("MSN CL", "Group %s guid not found, returning.\n", group_name); + purple_debug_info("MSNCL", "Group %s guid not found, returning.\n", group_name); return; } @@ -1794,21 +1378,17 @@ return; } - state = msn_callback_state_new(); + state = msn_callback_state_new(session); msn_callback_state_set_action(state, MSN_DEL_GROUP); msn_callback_state_set_guid(state, guid); body = g_strdup_printf(MSN_GROUP_DEL_TEMPLATE, guid); - /*build SOAP and POST it*/ - soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, - MSN_ADDRESS_BOOK_POST_URL, - MSN_GROUP_DEL_SOAP_ACTION, - body, - state, - msn_group_read_cb, - msn_group_written_cb, - msn_contact_connect_init); - msn_soap_post(contact->soapconn, soap_request); + + msn_soap_message_send(session, + msn_soap_message_new(MSN_GROUP_DEL_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL, + msn_group_read_cb, state); g_free(body); } @@ -1817,24 +1397,22 @@ void msn_contact_rename_group(MsnSession *session, const char *old_group_name, const char *new_group_name) { - MsnSoapReq *soap_request; - MsnContact *contact; - gchar * escaped_group_name, *body = NULL; + gchar *body = NULL; const gchar * guid; - MsnCallbackState *state = msn_callback_state_new(); + MsnCallbackState *state; g_return_if_fail(session != NULL); g_return_if_fail(session->userlist != NULL); g_return_if_fail(old_group_name != NULL); g_return_if_fail(new_group_name != NULL); - contact = session->contact; purple_debug_info("MSN CL", "Renaming group %s to %s.\n", old_group_name, new_group_name); guid = msn_userlist_find_group_id(session->userlist, old_group_name); if (guid == NULL) return; + state = msn_callback_state_new(session); msn_callback_state_set_guid(state, guid); msn_callback_state_set_new_group_name(state, new_group_name); @@ -1845,31 +1423,14 @@ msn_callback_state_set_action(state, MSN_RENAME_GROUP); - /* escape group name's html special chars so it can safely be sent - * in a XML SOAP request - */ - escaped_group_name = g_markup_escape_text(new_group_name, -1); - - body = g_strdup_printf(MSN_GROUP_RENAME_TEMPLATE, guid, escaped_group_name); + body = g_markup_printf_escaped(MSN_GROUP_RENAME_TEMPLATE, + guid, new_group_name); - soap_request = msn_soap_request_new(MSN_CONTACT_SERVER, - MSN_ADDRESS_BOOK_POST_URL, - MSN_GROUP_RENAME_SOAP_ACTION, - body, - state, - msn_group_read_cb, - msn_group_written_cb, - msn_contact_connect_init); - msn_soap_post(contact->soapconn, soap_request); - - g_free(escaped_group_name); + msn_soap_message_send(session, + msn_soap_message_new(MSN_GROUP_RENAME_SOAP_ACTION, + xmlnode_from_str(body, -1)), + MSN_CONTACT_SERVER, MSN_ADDRESS_BOOK_POST_URL, + msn_group_read_cb, state); + g_free(body); } - -void -msn_contact_connect_init(MsnSoapConn *soapconn) -{ - msn_soap_init(soapconn, MSN_CONTACT_SERVER, TRUE, - msn_contact_login_connect_cb, - msn_contact_login_error_cb); -} diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/contact.h --- a/libpurple/protocols/msn/contact.h Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/contact.h Mon Nov 05 00:35:07 2007 +0000 @@ -380,6 +380,7 @@ gchar * guid; MsnListId list_id; MsnCallbackAction action; + MsnSession *session; }; typedef enum @@ -397,7 +398,7 @@ MsnContact * msn_contact_new(MsnSession *session); void msn_contact_destroy(MsnContact *contact); -MsnCallbackState * msn_callback_state_new(void); +MsnCallbackState * msn_callback_state_new(MsnSession *session); void msn_callback_state_free(MsnCallbackState *state); void msn_callback_state_set_who(MsnCallbackState *state, const gchar *who); void msn_callback_state_set_uid(MsnCallbackState *state, const gchar *uid); diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/msn.c --- a/libpurple/protocols/msn/msn.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/msn.c Mon Nov 05 00:35:07 2007 +0000 @@ -580,14 +580,20 @@ psm = purple_status_get_attr_string(status, "message"); currentmedia = purple_status_get_attr_string(status, PURPLE_TUNE_FULL); - if (!purple_presence_is_available(presence)) { + if (!purple_status_is_available(status)) { name = purple_status_get_name(status); } else { name = NULL; } if (name != NULL && *name) { - char *tmp2 = g_markup_escape_text(name, -1); + char *tmp2; + + if (purple_presence_is_idle(presence)) { + tmp2 = g_markup_printf_escaped("%s/%s", name, _("Idle")); + } else { + tmp2 = g_markup_escape_text(name, -1); + } if (psm != NULL && *psm) { tmp = g_markup_escape_text(psm, -1); @@ -601,8 +607,20 @@ } else { if (psm != NULL && *psm) { tmp = g_markup_escape_text(psm, -1); - purple_notify_user_info_add_pair(user_info, _("Status"), tmp); + if (purple_presence_is_idle(presence)) { + purple_notify_user_info_add_pair(user_info, _("Idle"), tmp); + } else { + purple_notify_user_info_add_pair(user_info, _("Status"), tmp); + } g_free(tmp); + } else { + if (purple_presence_is_idle(presence)) { + purple_notify_user_info_add_pair(user_info, _("Status"), + _("Idle")); + } else { + purple_notify_user_info_add_pair(user_info, _("Status"), + purple_status_get_name(status)); + } } } @@ -956,21 +974,17 @@ }else { /*send Offline Instant Message,only to MSN Passport User*/ MsnSession *session; - MsnOim *oim; char *friendname; purple_debug_info("MSNP14","prepare to send offline Message\n"); session = gc->proto_data; - /* XXX/khc: hack */ - if (!session->oim) - session->oim = msn_oim_new(session); - oim = session->oim; friendname = msn_encode_mime(account->username); - msn_oim_prep_send_msg_info(oim, purple_account_get_username(account), - friendname, who, message); + msn_oim_prep_send_msg_info(session->oim, + purple_account_get_username(account), + friendname, who, message); + msn_oim_send_msg(session->oim); g_free(friendname); - msn_oim_send_msg(oim); } return 1; diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/nexus.c --- a/libpurple/protocols/msn/nexus.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/nexus.c Mon Nov 05 00:35:07 2007 +0000 @@ -22,15 +22,12 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02111-1301 USA */ #include "msn.h" -#include "soap.h" +#include "soap2.h" #include "nexus.h" #include "notification.h" #undef NEXUS_LOGIN_TWN -/*Local Function Prototype*/ -static gboolean nexus_login_connect_cb(MsnSoapConn *soapconn, PurpleSslConnection *gsc); - /************************************************************************** * Main **************************************************************************/ @@ -42,8 +39,6 @@ nexus = g_new0(MsnNexus, 1); nexus->session = session; - /*we must use SSL connection to do Windows Live ID authentication*/ - nexus->soapconn = msn_soap_new(session,nexus,1); nexus->challenge_data = g_hash_table_new_full(g_str_hash, g_str_equal, g_free, g_free); @@ -57,193 +52,98 @@ if (nexus->challenge_data != NULL) g_hash_table_destroy(nexus->challenge_data); - msn_soap_destroy(nexus->soapconn); g_free(nexus); } -#if 0 /* khc */ -/************************************************************************** - * Util - **************************************************************************/ - -static gssize -msn_ssl_read(MsnNexus *nexus) -{ - gssize len; - char temp_buf[4096]; - - if ((len = purple_ssl_read(nexus->gsc, temp_buf, - sizeof(temp_buf))) > 0) - { - nexus->read_buf = g_realloc(nexus->read_buf, - nexus->read_len + len + 1); - strncpy(nexus->read_buf + nexus->read_len, temp_buf, len); - nexus->read_len += len; - nexus->read_buf[nexus->read_len] = '\0'; - } - - return len; -} - -static void -nexus_write_cb(gpointer data, gint source, PurpleInputCondition cond) -{ - MsnNexus *nexus = data; - int len, total_len; - - total_len = strlen(nexus->write_buf); - - len = purple_ssl_write(nexus->gsc, - nexus->write_buf + nexus->written_len, - total_len - nexus->written_len); - - if (len < 0 && errno == EAGAIN) - return; - else if (len <= 0) { - purple_input_remove(nexus->input_handler); - nexus->input_handler = 0; - /* TODO: notify of the error */ - return; - } - nexus->written_len += len; - - if (nexus->written_len < total_len) - return; - - purple_input_remove(nexus->input_handler); - nexus->input_handler = 0; - - g_free(nexus->write_buf); - nexus->write_buf = NULL; - nexus->written_len = 0; - - nexus->written_cb(nexus, source, 0); -} - -#endif /************************************************************************** * Login **************************************************************************/ + static void -nexus_login_error_cb(MsnSoapConn *soapconn, PurpleSslConnection *gsc, PurpleSslErrorType error) +nexus_got_response_cb(MsnSoapMessage *req, MsnSoapMessage *resp, gpointer data) { - MsnSession *session; + MsnNexus *nexus = data; + MsnSession *session = nexus->session; + xmlnode *node; + + if (resp == NULL) { + msn_session_set_error(session, MSN_ERROR_AUTH, _("Windows Live ID authentication:Unable to connect")); + return; + } + + node = msn_soap_xml_get(resp->xml, "Body/" + "RequestSecurityTokenResponseCollection/RequestSecurityTokenResponse"); + + for (; node; node = node->next) { + xmlnode *token = msn_soap_xml_get(node, + "RequestedSecurityToken/BinarySecurityToken"); + + if (token) { + char *token_str = xmlnode_get_data(token); + char **elems, **cur, **tokens; + char *msn_twn_t, *msn_twn_p, *cert_str; + + if (token_str == NULL) continue; + + elems = g_strsplit(token_str, "&", 0); - session = soapconn->session; - g_return_if_fail(session != NULL); + for (cur = elems; *cur != NULL; cur++){ + tokens = g_strsplit(*cur, "=", 2); + g_hash_table_insert(nexus->challenge_data, tokens[0], tokens[1]); + /* Don't free each of the tokens, only the array. */ + g_free(tokens); + } + + g_free(token_str); + g_strfreev(elems); + + msn_twn_t = g_hash_table_lookup(nexus->challenge_data, "t"); + msn_twn_p = g_hash_table_lookup(nexus->challenge_data, "p"); + + /*setup the t and p parameter for session*/ + if (session->passport_info.t != NULL){ + g_free(session->passport_info.t); + } + session->passport_info.t = g_strdup(msn_twn_t); - soapconn->gsc = NULL; + if (session->passport_info.p != NULL) + g_free(session->passport_info.p); + session->passport_info.p = g_strdup(msn_twn_p); + + cert_str = g_strdup_printf("t=%s&p=%s",msn_twn_t,msn_twn_p); + msn_got_login_params(session, cert_str); - msn_session_set_error(session, MSN_ERROR_AUTH, _("Windows Live ID authentication:Unable to connect")); - /* the above line will result in nexus being destroyed, so we don't want - * to destroy it here, or we'd crash */ + purple_debug_info("MSN Nexus","Close nexus connection!\n"); + g_free(cert_str); + msn_nexus_destroy(nexus); + session->nexus = NULL; + + return; + } + } + + /* we must have failed! */ + msn_session_set_error(session, MSN_ERROR_AUTH, _("Windows Live ID authentication: cannot find authenticate token in server response")); } -/*process the SOAP reply, get the Authentication Info*/ -static gboolean -nexus_login_read_cb(MsnSoapConn *soapconn) +/*when connect, do the SOAP Style windows Live ID authentication */ +void +msn_nexus_connect(MsnNexus *nexus) { - MsnNexus *nexus; - MsnSession *session; - - char *base, *c; - char *msn_twn_t,*msn_twn_p; - char *login_params; - char **elems, **cur, **tokens; - char * cert_str; - - nexus = soapconn->parent; - g_return_val_if_fail(nexus != NULL, TRUE); - session = nexus->session; - g_return_val_if_fail(session != NULL, FALSE); - - /*reply OK, we should process the SOAP body*/ - purple_debug_info("MSN Nexus","TWN Server Windows Live ID Reply OK!\n"); - - //TODO: we should parse it using XML -#ifdef NEXUS_LOGIN_TWN - base = g_strstr_len(soapconn->read_buf, soapconn->read_len, TWN_START_TOKEN); - base += strlen(TWN_START_TOKEN); - c = g_strstr_len(soapconn->read_buf, soapconn->read_len, TWN_END_TOKEN); -#else - base = g_strstr_len(soapconn->read_buf, soapconn->read_len, TWN_LIVE_START_TOKEN); - base += strlen(TWN_LIVE_START_TOKEN); - c = g_strstr_len(soapconn->read_buf, soapconn->read_len, TWN_LIVE_END_TOKEN); -#endif - login_params = g_strndup(base, c - base); - - // purple_debug_info("msn", "TWN Cert: {%s}\n", login_params); - - /* Parse the challenge data. */ - elems = g_strsplit(login_params, "&", 0); - - for (cur = elems; *cur != NULL; cur++){ - tokens = g_strsplit(*cur, "=", 2); - g_hash_table_insert(nexus->challenge_data, tokens[0], tokens[1]); - /* Don't free each of the tokens, only the array. */ - g_free(tokens); - } - - g_strfreev(elems); - - msn_twn_t = (char *)g_hash_table_lookup(nexus->challenge_data, "t"); - msn_twn_p = (char *)g_hash_table_lookup(nexus->challenge_data, "p"); - - /*setup the t and p parameter for session*/ - g_free(session->passport_info.t); - session->passport_info.t = g_strdup(msn_twn_t); - - g_free(session->passport_info.p); - session->passport_info.p = g_strdup(msn_twn_p); - - cert_str = g_strdup_printf("t=%s&p=%s",msn_twn_t,msn_twn_p); - msn_got_login_params(session, cert_str); - - purple_debug_info("MSN Nexus","Close nexus connection!\n"); - g_free(cert_str); - g_free(login_params); - msn_nexus_destroy(nexus); - session->nexus = NULL; - - return FALSE; -} - -static void -nexus_login_written_cb(MsnSoapConn *soapconn) -{ - soapconn->read_cb = nexus_login_read_cb; -// msn_soap_read_cb(data,source,cond); -} - - -/*when connect, do the SOAP Style windows Live ID authentication */ -gboolean -nexus_login_connect_cb(MsnSoapConn *soapconn, PurpleSslConnection *gsc) -{ - MsnNexus * nexus; - MsnSession *session; + MsnSession *session = nexus->session; char *ru,*lc,*id,*tw,*ct,*kpp,*kv,*ver,*rn,*tpf; char *fs0,*fs; char *username, *password; - char *request_str, *tail; + char *tail; #ifdef NEXUS_LOGIN_TWN char *challenge_str; #else char *rst1_str,*rst2_str,*rst3_str; #endif - - purple_debug_info("MSN Nexus","Starting Windows Live ID authentication\n"); - - g_return_val_if_fail(soapconn != NULL, FALSE); - nexus = soapconn->parent; - g_return_val_if_fail(nexus != NULL, TRUE); + MsnSoapMessage *soap; - session = soapconn->session; - g_return_val_if_fail(session != NULL, FALSE); - - msn_soap_set_process_step(soapconn, MSN_SOAP_PROCESSING); - + purple_debug_info("MSN Nexus","Starting Windows Live ID authentication\n"); msn_session_set_login_step(session, MSN_LOGIN_STEP_GET_COOKIE); /*prepare the Windows Live ID authentication token*/ @@ -272,10 +172,9 @@ msn_session_set_error(session, MSN_ERROR_AUTH, _("Windows Live ID authentication Failed")); g_free(username); g_free(password); - purple_ssl_close(gsc); msn_nexus_destroy(nexus); session->nexus = NULL; - return FALSE; + return; } /* @@ -314,151 +213,8 @@ #endif g_free(fs); - soapconn->login_path = g_strdup(TWN_POST_URL); - request_str = g_strdup_printf( - "POST %s HTTP/1.1\r\n" - "Accept: text/*\r\n" - "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n" - "Host: %s\r\n" - "Content-Length: %" G_GSIZE_FORMAT "\r\n" - "Connection: Keep-Alive\r\n" - "Cache-Control: no-cache\r\n\r\n" - "%s", - soapconn->login_path, soapconn->login_host, strlen(tail), - tail); - -#ifdef MSN_SOAP_DEBUG - purple_debug_misc("MSN Nexus", "TWN Sending:\n%s\n", request_str); -#endif - g_free(tail); - g_free(username); - g_free(password); - - /*prepare to send the SOAP request*/ - msn_soap_write(soapconn, request_str, nexus_login_written_cb); - - return TRUE; + soap = msn_soap_message_new(NULL, xmlnode_from_str(tail, -1)); + msn_soap_message_send(nexus->session, soap, MSN_TWN_SERVER, TWN_POST_URL, + nexus_got_response_cb, nexus); } -#if 0 /* khc */ -static void -nexus_connect_written_cb(gpointer data, gint source, PurpleInputCondition cond) -{ - MsnNexus *nexus = data; - int len; - - char *da_login; - char *base, *c; - - if (nexus->input_handler == 0) - /* TODO: Use purple_ssl_input_add()? */ - nexus->input_handler = purple_input_add(nexus->gsc->fd, - PURPLE_INPUT_READ, nexus_connect_written_cb, nexus); - - - /* Get the PassportURLs line. */ - len = msn_ssl_read(nexus); - - if (len < 0 && errno == EAGAIN) - return; - else if (len < 0) { - purple_input_remove(nexus->input_handler); - nexus->input_handler = 0; - g_free(nexus->read_buf); - nexus->read_buf = NULL; - nexus->read_len = 0; - /* TODO: error handling */ - return; - } - - if (g_strstr_len(nexus->read_buf, nexus->read_len, - "\r\n\r\n") == NULL) - return; - - purple_input_remove(nexus->input_handler); - nexus->input_handler = 0; - - base = strstr(nexus->read_buf, "PassportURLs"); - - if (base == NULL) - { - g_free(nexus->read_buf); - nexus->read_buf = NULL; - nexus->read_len = 0; - return; - } - - if ((da_login = strstr(base, "DALogin=")) != NULL) - { - /* skip over "DALogin=" */ - da_login += 8; - - if ((c = strchr(da_login, ',')) != NULL) - *c = '\0'; - - if ((c = strchr(da_login, '/')) != NULL) - { - nexus->login_path = g_strdup(c); - *c = '\0'; - } - - nexus->login_host = g_strdup(da_login); - } - - g_free(nexus->read_buf); - nexus->read_buf = NULL; - nexus->read_len = 0; - - purple_ssl_close(nexus->gsc); - - /* Now begin the connection to the login server. */ - nexus->gsc = purple_ssl_connect(nexus->session->account, - nexus->login_host, PURPLE_SSL_DEFAULT_PORT, - login_connect_cb, login_error_cb, nexus); -} - - -#endif - -/************************************************************************** - * Connect - **************************************************************************/ - -#if 0 /* khc */ -static void -nexus_connect_cb(gpointer data, PurpleSslConnection *gsc, - PurpleInputCondition cond) -{ - MsnNexus *nexus; - MsnSession *session; - - nexus = data; - g_return_if_fail(nexus != NULL); - - session = nexus->session; - g_return_if_fail(session != NULL); - - msn_session_set_login_step(session, MSN_LOGIN_STEP_AUTH); - - nexus->write_buf = g_strdup("GET /rdr/pprdr.asp\r\n\r\n"); - nexus->written_len = 0; - - nexus->read_len = 0; - - nexus->written_cb = nexus_connect_written_cb; - - nexus->input_handler = purple_input_add(gsc->fd, PURPLE_INPUT_WRITE, - nexus_write_cb, nexus); - - nexus_write_cb(nexus, gsc->fd, PURPLE_INPUT_WRITE); -} - -#endif - -void -msn_nexus_connect(MsnNexus *nexus) -{ - /* Authenticate via Windows Live ID. */ - msn_soap_init(nexus->soapconn, MSN_TWN_SERVER, TRUE, nexus_login_connect_cb, nexus_login_error_cb); - msn_soap_connect(nexus->soapconn); -} diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/nexus.h --- a/libpurple/protocols/msn/nexus.h Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/nexus.h Mon Nov 05 00:35:07 2007 +0000 @@ -139,7 +139,6 @@ struct _MsnNexus { MsnSession *session; - MsnSoapConn *soapconn; char * challenge_data_str; GHashTable *challenge_data; }; diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/notification.c --- a/libpurple/protocols/msn/notification.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/notification.c Mon Nov 05 00:35:07 2007 +0000 @@ -1411,7 +1411,7 @@ { purple_debug_error("msn", "Error opening temp passport file: %s\n", - strerror(errno)); + g_strerror(errno)); } else { @@ -1460,7 +1460,7 @@ { purple_debug_error("msn", "Error closing temp passport file: %s\n", - strerror(errno)); + g_strerror(errno)); g_unlink(session->passport_info.file); g_free(session->passport_info.file); @@ -1790,9 +1790,7 @@ return; /*new a oim session*/ - /* There are several things that call this */ - if (session->oim == NULL) - session->oim = msn_oim_new(session); +// session->oim = msn_oim_new(session); // msn_oim_connect(session->oim); table = msn_message_get_hashtable_from_body(msg); diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/oim.c --- a/libpurple/protocols/msn/oim.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/oim.c Mon Nov 05 00:35:07 2007 +0000 @@ -24,24 +24,31 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ #include "msn.h" -#include "soap.h" +#include "soap2.h" #include "oim.h" #include "msnutils.h" +typedef struct _MsnOimSendReq { + char *from_member; + char *friendname; + char *to_member; + char *oim_msg; +} MsnOimSendReq; + +typedef struct { + MsnOim *oim; + char *msg_id; +} MsnOimRecvData; + /*Local Function Prototype*/ -static void msn_oim_post_single_get_msg(MsnOim *oim,const char *msgid); +static void msn_oim_post_single_get_msg(MsnOim *oim, char *msgid); static MsnOimSendReq *msn_oim_new_send_req(const char *from_member, - const char *friendname, - const char* to_member, - gint send_seq, - const char *msg); -static void msn_oim_retrieve_connect_init(MsnSoapConn *soapconn); -static void msn_oim_send_connect_init(MsnSoapConn *soapconn); + const char *friendname, + const char* to_member, + const char *msg); static void msn_oim_free_send_req(MsnOimSendReq *req); -static void msn_oim_report_to_user(MsnOim *oim, const char *msg_str); -static void msn_oim_get_process(MsnOim *oim, const char *oim_msg); -static gchar *msn_oim_msg_to_str(MsnOim *oim, const char *body); -static void msn_oim_send_process(MsnOim *oim, const char *body, int len); +static void msn_oim_report_to_user(MsnOimRecvData *rdata, const char *msg_str); +static char *msn_oim_msg_to_str(MsnOim *oim, const char *body); /*new a OIM object*/ MsnOim * @@ -51,10 +58,7 @@ oim = g_new0(MsnOim, 1); oim->session = session; - oim->retrieveconn = msn_soap_new(session, oim, TRUE); - - oim->oim_list = NULL; - oim->sendconn = msn_soap_new(session, oim, TRUE); + oim->oim_list = NULL; oim->run_id = rand_guid(); oim->challenge = NULL; oim->send_queue = g_queue_new(); @@ -69,8 +73,6 @@ MsnOimSendReq *request; purple_debug_info("OIM","destroy the OIM \n"); - msn_soap_destroy(oim->retrieveconn); - msn_soap_destroy(oim->sendconn); g_free(oim->run_id); g_free(oim->challenge); @@ -84,8 +86,7 @@ static MsnOimSendReq * msn_oim_new_send_req(const char *from_member, const char*friendname, - const char* to_member, gint send_seq, - const char *msg) + const char* to_member, const char *msg) { MsnOimSendReq *request; @@ -93,7 +94,6 @@ request->from_member =g_strdup(from_member); request->friendname = g_strdup(friendname); request->to_member = g_strdup(to_member); - request->send_seq = send_seq; request->oim_msg = g_strdup(msg); return request; } @@ -130,135 +130,75 @@ return oim_body; } -/*oim SOAP server login error*/ -static void -msn_oim_send_error_cb(MsnSoapConn *soapconn, PurpleSslConnection *gsc, PurpleSslErrorType error) -{ - MsnSession *session; - - session = soapconn->session; - g_return_if_fail(session != NULL); - - msn_session_set_error(session, MSN_ERROR_SERV_DOWN, _("Unable to connect to OIM server")); -} - -/*msn oim SOAP server connect process*/ -static gboolean -msn_oim_send_connect_cb(MsnSoapConn *soapconn, PurpleSslConnection *gsc) -{ - MsnSession * session; - MsnOim *oim; - - oim = soapconn->parent; - g_return_val_if_fail(oim != NULL, TRUE); - - session = oim->session; - g_return_val_if_fail(session != NULL, FALSE); - - return TRUE; -} - /* * Process the send return SOAP string * If got SOAP Fault,get the lock key,and resend it. */ static void -msn_oim_send_process(MsnOim *oim, const char *body, int len) +msn_oim_send_read_cb(MsnSoapMessage *request, MsnSoapMessage *response, + gpointer data) { - xmlnode *responseNode, *bodyNode; - xmlnode *faultNode = NULL, *faultCodeNode, *faultstringNode; - xmlnode *detailNode, *challengeNode; - char *fault_code, *fault_text; + MsnOim *oim = data; + MsnOimSendReq *msg = g_queue_pop_head(oim->send_queue); + + g_return_if_fail(msg != NULL); - responseNode = xmlnode_from_str(body,len); + if (response == NULL) { + purple_debug_info("MSNP14", "cannot send OIM: %s\n", msg->oim_msg); + } else { + xmlnode *faultNode = msn_soap_xml_get(response->xml, "Body/Fault"); - g_return_if_fail(responseNode != NULL); + if (faultNode == NULL) { + /*Send OK! return*/ + purple_debug_info("MSNP14", "sent OIM: %s\n", msg->oim_msg); + } else { + xmlnode *faultcode = xmlnode_get_child(faultNode, "faultcode"); + + if (faultcode) { + char *faultcode_str = xmlnode_get_data(faultcode); - if ((bodyNode = xmlnode_get_child(responseNode, "Body"))) - faultNode = xmlnode_get_child(bodyNode, "Fault"); + if (g_str_equal(faultcode_str, "q0:AuthenticationFailed")) { + xmlnode *challengeNode = msn_soap_xml_get(faultNode, + "detail/LockKeyChallenge"); - if (faultNode == NULL) { - /*Send OK! return*/ - MsnOimSendReq *request; + if (challengeNode == NULL) { + if (oim->challenge) { + g_free(oim->challenge); + oim->challenge = NULL; - xmlnode_free(responseNode); - request = g_queue_pop_head(oim->send_queue); - msn_oim_free_send_req(request); - /*send next buffered Offline Message*/ - msn_soap_post(oim->sendconn, NULL); - - return; - } + purple_debug_info("msnoim","resending OIM: %s\n", + msg->oim_msg); + g_queue_push_head(oim->send_queue, msg); + msn_oim_send_msg(oim); + return; + } else { + purple_debug_info("msnoim", + "can't find lock key for OIM: %s\n", + msg->oim_msg); + } + } else { + char buf[33]; - /*get the challenge,and repost it*/ - if (faultNode) - faultCodeNode = xmlnode_get_child(faultNode, "faultcode"); + char *challenge = xmlnode_get_data(challengeNode); + msn_handle_chl(challenge, buf); + + g_free(oim->challenge); + oim->challenge = g_strndup(buf, sizeof(buf)); + g_free(challenge); + purple_debug_info("MSNP14","lockkey:{%s}\n",oim->challenge); - if(faultCodeNode == NULL){ - purple_debug_info("MSN OIM", "No faultcode for failed Offline Message.\n"); - xmlnode_free(responseNode); - return; + /*repost the send*/ + purple_debug_info("MSNP14","resending OIM: %s\n", msg->oim_msg); + g_queue_push_head(oim->send_queue, msg); + msn_oim_send_msg(oim); + return; + } + } + } + } } - fault_code = xmlnode_get_data(faultCodeNode); -#if 0 - if(!strcmp(fault_code,"q0:AuthenticationFailed")){ - /*other Fault Reason?*/ - goto oim_send_process_fail; - } -#endif - - faultstringNode = xmlnode_get_child(faultNode, "faultstring"); - fault_text = xmlnode_get_data(faultstringNode); - purple_debug_info("MSN OIM", "Error sending Offline Message: %s (%s)\n", - fault_text ? fault_text : "(null)", fault_code ? fault_code : "(null)"); - - /* lock key fault reason, - * compute the challenge and resend it - */ - if ((detailNode = xmlnode_get_child(faultNode, "detail")) - && (challengeNode = xmlnode_get_child(detailNode, "LockKeyChallenge"))) { - g_free(oim->challenge); - oim->challenge = xmlnode_get_data(challengeNode); - - purple_debug_info("MSN OIM", "Retrying Offline IM with lockkey:{%s}\n", - oim->challenge ? oim->challenge : "(null)"); - - /*repost the send*/ - msn_oim_send_msg(oim); - - /* XXX: This needs to give up eventually (1 retry, maybe?) */ - } - - g_free(fault_text); - g_free(fault_code); - xmlnode_free(responseNode); -} - -static gboolean -msn_oim_send_read_cb(MsnSoapConn *soapconn) -{ - MsnSession *session = soapconn->session; - MsnOim * oim; - - if (soapconn->body == NULL) - return TRUE; - - g_return_val_if_fail(session != NULL, FALSE); - oim = soapconn->session->oim; - g_return_val_if_fail(oim != NULL, TRUE); - - purple_debug_info("MSN OIM","read buffer:{%s}\n", soapconn->body); - msn_oim_send_process(oim,soapconn->body,soapconn->body_len); - - return TRUE; -} - -static void -msn_oim_send_written_cb(MsnSoapConn *soapconn) -{ - soapconn->read_cb = msn_oim_send_read_cb; -// msn_soap_read_cb(data,source,cond); + msn_oim_free_send_req(msg); } void @@ -266,45 +206,36 @@ const char* friendname, const char *tomember, const char * msg) { - MsnOimSendReq *request; - g_return_if_fail(oim != NULL); - request = msn_oim_new_send_req(membername,friendname,tomember,oim->send_seq,msg); - g_queue_push_tail(oim->send_queue,request); + g_queue_push_tail(oim->send_queue, + msn_oim_new_send_req(membername, friendname, tomember, msg)); } /*post send single message request to oim server*/ void msn_oim_send_msg(MsnOim *oim) { - MsnSoapReq *soap_request; MsnOimSendReq *oim_request; char *soap_body,*mspauth; - gchar *msg_body; - char buf[33]; + char *msg_body; g_return_if_fail(oim != NULL); - oim_request = g_queue_pop_head(oim->send_queue); + oim_request = g_queue_peek_head(oim->send_queue); g_return_if_fail(oim_request != NULL); - purple_debug_info("MSN OIM","send single OIM Message\n"); + purple_debug_info("MSNP14","sending OIM: %s\n", oim_request->oim_msg); mspauth = g_strdup_printf("t=%s&p=%s", oim->session->passport_info.t, oim->session->passport_info.p ); - g_queue_push_head(oim->send_queue,oim_request); /* if we got the challenge lock key, we compute it * else we go for the SOAP fault and resend it. */ - if(oim->challenge != NULL){ - msn_handle_chl(oim->challenge, buf); - }else{ - purple_debug_info("MSN OIM","no lock key challenge,wait for SOAP Fault and Resend\n"); - buf[0]='\0'; + if(oim->challenge == NULL){ + purple_debug_info("MSNP14","no lock key challenge,wait for SOAP Fault and Resend\n"); } - purple_debug_info("MSN OIM","get the lock key challenge {%s}\n",buf); msg_body = msn_oim_msg_to_str(oim, oim_request->oim_msg); soap_body = g_strdup_printf(MSN_OIM_SEND_TEMPLATE, @@ -313,117 +244,71 @@ oim_request->to_member, mspauth, MSNP13_WLM_PRODUCT_ID, - buf, - oim_request->send_seq, + oim->challenge ? oim->challenge : "", + oim->send_seq, msg_body); - soap_request = msn_soap_request_new(MSN_OIM_SEND_HOST, - MSN_OIM_SEND_URL, - MSN_OIM_SEND_SOAP_ACTION, - soap_body, - NULL, - msn_oim_send_read_cb, - msn_oim_send_written_cb, - msn_oim_send_connect_init); + msn_soap_message_send(oim->session, + msn_soap_message_new(MSN_OIM_SEND_SOAP_ACTION, + xmlnode_from_str(soap_body, -1)), + MSN_OIM_SEND_HOST, MSN_OIM_SEND_URL, msn_oim_send_read_cb, oim); + + /*increase the offline Sequence control*/ + if (oim->challenge != NULL) { + oim->send_seq++; + } + g_free(mspauth); g_free(msg_body); g_free(soap_body); - - /*increase the offline Sequence control*/ - if(oim->challenge != NULL){ - oim->send_seq++; - } - msn_soap_post(oim->sendconn,soap_request); } /**************************************** * OIM delete SOAP request * **************************************/ -static gboolean -msn_oim_delete_read_cb(MsnSoapConn *soapconn) +static void +msn_oim_delete_read_cb(MsnSoapMessage *request, MsnSoapMessage *response, + gpointer data) { - if (soapconn->body == NULL) - return TRUE; - purple_debug_info("MSN OIM","OIM delete read buffer:{%s}\n",soapconn->body); + MsnOimRecvData *rdata = data; - msn_soap_free_read_buf(soapconn); - /*get next single Offline Message*/ -// msn_soap_post(soapconn,NULL); /* we already do this in soap.c */ - return TRUE; -} + if (response && msn_soap_xml_get(response->xml, "Body/Fault") == NULL) { + purple_debug_info("msnoim", "delete OIM success\n"); + rdata->oim->oim_list = g_list_remove(rdata->oim->oim_list, + rdata->msg_id); + g_free(rdata->msg_id); + } else { + purple_debug_info("msnoim", "delete OIM failed\n"); + } -static void -msn_oim_delete_written_cb(MsnSoapConn *soapconn) -{ - soapconn->read_cb = msn_oim_delete_read_cb; + g_free(rdata); } /*Post to get the Offline Instant Message*/ static void -msn_oim_post_delete_msg(MsnOim *oim,const char *msgid) +msn_oim_post_delete_msg(MsnOimRecvData *rdata) { - MsnSoapReq *soap_request; - gchar *soap_body; - const char *t,*p; + MsnOim *oim = rdata->oim; + char *msgid = rdata->msg_id; + char *soap_body; - g_return_if_fail(oim != NULL); - g_return_if_fail(msgid != NULL); - - purple_debug_info("MSN OIM","Delete single OIM Message {%s}\n",msgid); - t = oim->session->passport_info.t; - p = oim->session->passport_info.p; + purple_debug_info("MSNP14","Delete single OIM Message {%s}\n",msgid); soap_body = g_strdup_printf(MSN_OIM_DEL_TEMPLATE, - t, - p, - msgid - ); - soap_request = msn_soap_request_new(MSN_OIM_RETRIEVE_HOST, - MSN_OIM_RETRIEVE_URL, - MSN_OIM_DEL_SOAP_ACTION, - soap_body, - NULL, - msn_oim_delete_read_cb, - msn_oim_delete_written_cb, - msn_oim_retrieve_connect_init); + oim->session->passport_info.t, oim->session->passport_info.p, msgid); + + msn_soap_message_send(oim->session, + msn_soap_message_new(MSN_OIM_DEL_SOAP_ACTION, + xmlnode_from_str(soap_body, -1)), + MSN_OIM_RETRIEVE_HOST, MSN_OIM_RETRIEVE_URL, + msn_oim_delete_read_cb, rdata); + g_free(soap_body); - msn_soap_post(oim->retrieveconn,soap_request); } /**************************************** * OIM get SOAP request * **************************************/ -/*oim SOAP server login error*/ -static void -msn_oim_get_error_cb(MsnSoapConn *soapconn, PurpleSslConnection *gsc, PurpleSslErrorType error) -{ - MsnSession *session; - - session = soapconn->session; - g_return_if_fail(session != NULL); - msn_soap_clean_unhandled_requests(soapconn); - -// msn_session_set_error(session, MSN_ERROR_SERV_DOWN, _("Unable to connect to OIM server")); -} - -/*msn oim SOAP server connect process*/ -static gboolean -msn_oim_get_connect_cb(MsnSoapConn *soapconn, PurpleSslConnection *gsc) -{ - MsnSession * session; - MsnOim *oim; - - oim = soapconn->parent; - g_return_val_if_fail(oim != NULL, TRUE); - - session = oim->session; - g_return_val_if_fail(session != NULL, FALSE); - - purple_debug_info("MSN OIM","Connected and ready to get OIM!\n"); - - return TRUE; -} - /* like purple_str_to_time, but different. The format of the timestamp * is like this: 5 Sep 2007 21:42:12 -0700 */ static time_t @@ -435,9 +320,13 @@ "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov", "Dec", NULL }; + time_t tval = 0; struct tm t; memset(&t, 0, sizeof(t)); + time(&tval); + localtime_r(&tval, &t); + if (sscanf(timestamp, "%02d %03s %04d %02d:%02d:%02d %05s", &t.tm_mday, month_str, &t.tm_year, &t.tm_hour, &t.tm_min, &t.tm_sec, tz_str) == 7) { @@ -466,14 +355,13 @@ tzoff *= -1; t.tm_year -= 1900; - t.tm_isdst = 0; #ifdef _WIN32 if ((sys_tzoff = wpurple_get_tz_offset()) != -1) tzoff += sys_tzoff; #else #ifdef HAVE_TM_GMTOFF - tzoff += t.tm_gmtoff; + tzoff -= t.tm_gmtoff; #else # ifdef HAVE_TIMEZONE tzset(); /* making sure */ @@ -487,13 +375,13 @@ } } - purple_debug_info("MSN OIM:OIM", "Can't parse timestamp %s\n", timestamp); - return time(NULL); + purple_debug_info("MSNP14:OIM", "Can't parse timestamp %s\n", timestamp); + return tval; } /*Post the Offline Instant Message to User Conversation*/ static void -msn_oim_report_to_user(MsnOim *oim, const char *msg_str) +msn_oim_report_to_user(MsnOimRecvData *rdata, const char *msg_str) { MsnMessage *message; char *date,*from,*decode_msg; @@ -502,14 +390,13 @@ char *start,*end; int has_nick = 0; char *passport_str, *passport; - char *msg_id; time_t stamp; message = msn_message_new(MSN_MSG_UNKNOWN); msn_message_parse_payload(message, msg_str, strlen(msg_str), MSG_OIM_LINE_DEM, MSG_OIM_BODY_DEM); - purple_debug_info("MSN OIM","oim body:{%s}\n",message->body); + purple_debug_info("MSNP14","oim body:{%s}\n",message->body); decode_msg = (char *)purple_base64_decode(message->body,&body_len); date = (char *)g_hash_table_lookup(message->attr_table, "Date"); from = (char *)g_hash_table_lookup(message->attr_table, "From"); @@ -519,12 +406,12 @@ if(has_nick){ tokens = g_strsplit(from , " " , 2); passport_str = g_strdup(tokens[1]); - purple_debug_info("MSN OIM","oim Date:{%s},nickname:{%s},tokens[1]:{%s} passport{%s}\n", + purple_debug_info("MSNP14","oim Date:{%s},nickname:{%s},tokens[1]:{%s} passport{%s}\n", date,tokens[0],tokens[1],passport_str); g_strfreev(tokens); }else{ passport_str = g_strdup(from); - purple_debug_info("MSN OIM","oim Date:{%s},passport{%s}\n", + purple_debug_info("MSNP14","oim Date:{%s},passport{%s}\n", date,passport_str); } start = strstr(passport_str,"<"); @@ -536,66 +423,43 @@ stamp = msn_oim_parse_timestamp(date); - serv_got_im(oim->session->account->gc, passport, decode_msg, 0, stamp); + serv_got_im(rdata->oim->session->account->gc, passport, decode_msg, 0, + stamp); /*Now get the oim message ID from the oim_list. * and append to read list to prepare for deleting the Offline Message when sign out */ - if(oim->oim_list != NULL){ - msg_id = oim->oim_list->data; - msn_oim_post_delete_msg(oim,msg_id); - oim->oim_list = g_list_remove(oim->oim_list, oim->oim_list->data); - g_free(msg_id); - } + msn_oim_post_delete_msg(rdata); g_free(passport); + g_free(decode_msg); } /* Parse the XML data, * prepare to report the OIM to user */ static void -msn_oim_get_process(MsnOim *oim, const char *oim_msg) -{ - xmlnode *oim_node,*bodyNode,*responseNode,*msgNode; - char *msg_str; - - oim_node = xmlnode_from_str(oim_msg, strlen(oim_msg)); - bodyNode = xmlnode_get_child(oim_node,"Body"); - responseNode = xmlnode_get_child(bodyNode,"GetMessageResponse"); - msgNode = xmlnode_get_child(responseNode,"GetMessageResult"); - msg_str = xmlnode_get_data(msgNode); - purple_debug_info("OIM","msg:{%s}\n",msg_str); - msn_oim_report_to_user(oim,msg_str); - - g_free(msg_str); - xmlnode_free(oim_node); -} - -static gboolean -msn_oim_get_read_cb(MsnSoapConn *soapconn) +msn_oim_get_read_cb(MsnSoapMessage *request, MsnSoapMessage *response, + gpointer data) { - MsnOim * oim = soapconn->session->oim; - - if (soapconn->body == NULL) - return TRUE; + MsnOimRecvData *rdata = data; - purple_debug_info("MSN OIM","OIM get read buffer:{%s}\n",soapconn->body); - - /*we need to process the read message!*/ - msn_oim_get_process(oim,soapconn->body); - msn_soap_free_read_buf(soapconn); + if (response != NULL) { + xmlnode *msg_node = msn_soap_xml_get(response->xml, + "Body/GetMessageResponse/GetMessageResult"); - /*get next single Offline Message*/ -// msn_soap_post(soapconn,NULL); /* we already do this in soap.c */ - return TRUE; -} - -static void -msn_oim_get_written_cb(MsnSoapConn *soapconn) -{ - soapconn->read_cb = msn_oim_get_read_cb; -// msn_soap_read_cb(data,source,cond); + if (msg_node) { + char *msg_str = xmlnode_get_data(msg_node); + msn_oim_report_to_user(rdata, msg_str); + g_free(msg_str); + } else { + char *str = xmlnode_to_str(response->xml, NULL); + purple_debug_info("msnoim", "Unknown response: %s\n", str); + g_free(str); + } + } else { + purple_debug_info("msnoim", "Failed to get OIM\n"); + } } /* parse the oim XML data @@ -604,116 +468,88 @@ void msn_parse_oim_msg(MsnOim *oim,const char *xmlmsg) { - xmlnode *node, *mNode,*ENode,*INode,*rtNode,*nNode; - char *passport,*msgid,*nickname, *unread, *rTime = NULL; + xmlnode *node, *mNode; + xmlnode *iu_node; MsnSession *session = oim->session; - purple_debug_info("MSN OIM:OIM", "%s", xmlmsg); + purple_debug_info("MSNP14:OIM", "%s", xmlmsg); - node = xmlnode_from_str(xmlmsg, strlen(xmlmsg)); - if (!node || !node->name || strcmp(node->name, "MD") != 0) { - if (node) - xmlnode_free(node); + node = xmlnode_from_str(xmlmsg, -1); + if (strcmp(node->name, "MD") != 0) { + purple_debug_info("msnoim", "WTF is this? %s\n", xmlmsg); + xmlnode_free(node); return; } - ENode = xmlnode_get_child(node, "E"); - INode = xmlnode_get_child(ENode, "IU"); - unread = xmlnode_get_data(INode); - - if (unread != NULL && purple_account_get_check_mail(session->account)) - { - int count = atoi(unread); + iu_node = msn_soap_xml_get(node, "E/IU"); - if (count > 0) - { - const char *passport; - const char *url; + if (iu_node != NULL && purple_account_get_check_mail(session->account)) + { + char *unread = xmlnode_get_data(iu_node); + const char *passport = msn_user_get_passport(session->user); + const char *url = session->passport_info.file; - passport = msn_user_get_passport(session->user); - url = session->passport_info.file; - - purple_notify_emails(session->account->gc, atoi(unread), FALSE, NULL, NULL, - &passport, &url, NULL, NULL); - } + /* XXX/khc: pretty sure this is wrong */ + purple_notify_emails(session->account->gc, atoi(unread), FALSE, NULL, + NULL, &passport, &url, NULL, NULL); + g_free(unread); } for(mNode = xmlnode_get_child(node, "M"); mNode; mNode = xmlnode_get_next_twin(mNode)){ - /*email Node*/ - ENode = xmlnode_get_child(mNode,"E"); - passport = xmlnode_get_data(ENode); - /*Index */ - INode = xmlnode_get_child(mNode,"I"); - msgid = xmlnode_get_data(INode); - /*Nickname*/ - nNode = xmlnode_get_child(mNode,"N"); - nickname = xmlnode_get_data(nNode); - /*receive time*/ - rtNode = xmlnode_get_child(mNode,"RT"); - if(rtNode != NULL) - rTime = xmlnode_get_data(rtNode); -/* purple_debug_info("MSN OIM","E:{%s},I:{%s},rTime:{%s}\n",passport,msgid,rTime); */ + char *passport, *msgid, *nickname, *rtime = NULL; + xmlnode *e_node, *i_node, *n_node, *rt_node; + + e_node = xmlnode_get_child(mNode, "E"); + passport = xmlnode_get_data(e_node); + + i_node = xmlnode_get_child(mNode, "I"); + msgid = xmlnode_get_data(i_node); + + n_node = xmlnode_get_child(mNode, "N"); + nickname = xmlnode_get_data(n_node); - oim->oim_list = g_list_append(oim->oim_list,strdup(msgid)); - msn_oim_post_single_get_msg(oim,msgid); + rt_node = xmlnode_get_child(mNode, "RT"); + if (rt_node != NULL) { + rtime = xmlnode_get_data(rt_node); + } +/* purple_debug_info("msnoim","E:{%s},I:{%s},rTime:{%s}\n",passport,msgid,rTime); */ + + if (!g_list_find_custom(oim->oim_list, msgid, (GCompareFunc)strcmp)) { + oim->oim_list = g_list_append(oim->oim_list, msgid); + msn_oim_post_single_get_msg(oim, msgid); + msgid = NULL; + } + g_free(passport); g_free(msgid); - g_free(rTime); - rTime = NULL; + g_free(rtime); g_free(nickname); } - g_free(unread); + xmlnode_free(node); } /*Post to get the Offline Instant Message*/ static void -msn_oim_post_single_get_msg(MsnOim *oim,const char *msgid) +msn_oim_post_single_get_msg(MsnOim *oim, char *msgid) { - MsnSoapReq *soap_request; - gchar *soap_body; - const char *t,*p; + char *soap_body; + MsnOimRecvData *data = g_new0(MsnOimRecvData, 1); - purple_debug_info("MSN OIM","Get single OIM Message\n"); - t = oim->session->passport_info.t; - p = oim->session->passport_info.p; + purple_debug_info("MSNP14","Get single OIM Message\n"); + + data->oim = oim; + data->msg_id = msgid; soap_body = g_strdup_printf(MSN_OIM_GET_TEMPLATE, - t, - p, - msgid - ); - soap_request = msn_soap_request_new(MSN_OIM_RETRIEVE_HOST, - MSN_OIM_RETRIEVE_URL, - MSN_OIM_GET_SOAP_ACTION, - soap_body, - NULL, - msn_oim_get_read_cb, - msn_oim_get_written_cb, - msn_oim_retrieve_connect_init); - g_free(soap_body); - msn_soap_post(oim->retrieveconn,soap_request); -} + oim->session->passport_info.t, oim->session->passport_info.p, msgid); -/*msn oim retrieve server connect init */ -static void -msn_oim_retrieve_connect_init(MsnSoapConn *soapconn) -{ - purple_debug_info("MSN OIM","Initializing OIM retrieve connection\n"); - msn_soap_init(soapconn, MSN_OIM_RETRIEVE_HOST, TRUE, - msn_oim_get_connect_cb, - msn_oim_get_error_cb); -} + msn_soap_message_send(oim->session, + msn_soap_message_new(MSN_OIM_GET_SOAP_ACTION, + xmlnode_from_str(soap_body, -1)), + MSN_OIM_RETRIEVE_HOST, MSN_OIM_RETRIEVE_URL, + msn_oim_get_read_cb, data); -/*Msn OIM Send Server Connect Init Function*/ -static void -msn_oim_send_connect_init(MsnSoapConn *sendconn) -{ - purple_debug_info("MSN OIM","Initializing OIM send connection\n"); - msn_soap_init(sendconn, MSN_OIM_SEND_HOST, TRUE, - msn_oim_send_connect_cb, - msn_oim_send_error_cb); + g_free(soap_body); } - -/* EOF oim.c*/ diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/oim.h --- a/libpurple/protocols/msn/oim.h Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/oim.h Mon Nov 05 00:35:07 2007 +0000 @@ -95,17 +95,6 @@ ""\ "" -typedef struct _MsnOimSendReq MsnOimSendReq; - -struct _MsnOimSendReq -{ - char *from_member; - char *friendname; - char *to_member; - char *oim_msg; - gint send_seq; -}; - typedef struct _MsnOim MsnOim; struct _MsnOim @@ -127,7 +116,6 @@ * **************************************************/ MsnOim * msn_oim_new(MsnSession *session); void msn_oim_destroy(MsnOim *oim); -void msn_oim_connect(MsnOim *oim); void msn_parse_oim_msg(MsnOim *oim,const char *xmlmsg); @@ -138,11 +126,5 @@ void msn_oim_send_msg(MsnOim *oim); -/*get the OIM message*/ -void msn_oim_get_msg(MsnOim *oim); - -/*report the oim message to the conversation*/ -void msn_oim_report_user(MsnOim *oim,const char *passport,char *msg); - #endif/* _MSN_OIM_H_*/ /*endof oim.h*/ diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/servconn.c --- a/libpurple/protocols/msn/servconn.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/servconn.c Mon Nov 05 00:35:07 2007 +0000 @@ -402,7 +402,7 @@ default: purple_debug_error("msn", "servconn read error," "len: %d, errno: %d, error: %s\n", - len, errno, strerror(errno)); + len, errno, g_strerror(errno)); msn_servconn_got_error(servconn, MSN_SERVCONN_ERROR_READ); return; diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/session.c --- a/libpurple/protocols/msn/session.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/session.c Mon Nov 05 00:35:07 2007 +0000 @@ -24,6 +24,7 @@ #include "msn.h" #include "session.h" #include "notification.h" +#include "oim.h" #include "dialog.h" @@ -42,6 +43,7 @@ session->user = msn_user_new(session->userlist, purple_account_get_username(account), NULL); + session->oim = msn_oim_new(session); /*if you want to chat with Yahoo Messenger*/ //session->protocol_ver = WLM_YAHOO_PROT_VER; @@ -99,6 +101,12 @@ if (session->user != NULL) msn_user_destroy(session->user); + if (session->soap_table) + g_hash_table_destroy(session->soap_table); + + if (session->soap_cleanup_handle) + purple_timeout_remove(session->soap_cleanup_handle); + g_free(session); } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/session.h --- a/libpurple/protocols/msn/session.h Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/session.h Mon Nov 05 00:35:07 2007 +0000 @@ -126,6 +126,9 @@ char *client_ip; int client_port; } passport_info; + + GHashTable *soap_table; + int soap_cleanup_handle; }; /** diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/slplink.c --- a/libpurple/protocols/msn/slplink.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/slplink.c Mon Nov 05 00:35:07 2007 +0000 @@ -39,22 +39,17 @@ char *tmp; char *dir; char *pload; - FILE *tf; int c; gsize pload_size; dir = send ? "send" : "recv"; c = send ? m_sc++ : m_rc++; tmp = g_strdup_printf("%s/msntest/%s/%03d", g_get_home_dir(), dir, c); - tf = g_fopen(tmp, "wb"); - if (tf == NULL) + pload = msn_message_gen_payload(msg, &pload_size); + if (!purple_util_write_data_to_file_absolute(tmp, pload, pload_size)) { - purple_debug_error("msn", "could not open debug file\n"); - return; + purple_debug_error("msn", "could not save debug file"); } - pload = msn_message_gen_payload(msg, &pload_size); - fwrite(pload, 1, pload_size, tf); - fclose(tf); g_free(tmp); } #endif diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/soap.c --- a/libpurple/protocols/msn/soap.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/soap.c Mon Nov 05 00:35:07 2007 +0000 @@ -274,7 +274,7 @@ default : purple_debug_error("MSN SOAP", "Read error!" "read len: %d, error = %s\n", - len, strerror(errno)); + len, g_strerror(errno)); purple_input_remove(soapconn->input_handler); //soapconn->input_handler = 0; g_free(soapconn->read_buf); @@ -308,7 +308,7 @@ } /*read the whole SOAP server response*/ -void +static void msn_soap_read_cb(gpointer data, gint source, PurpleInputCondition cond) { MsnSoapConn *soapconn = data; diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/soap.h --- a/libpurple/protocols/msn/soap.h Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/soap.h Mon Nov 05 00:35:07 2007 +0000 @@ -154,7 +154,6 @@ void msn_soap_free_read_buf(MsnSoapConn *soapconn); void msn_soap_free_write_buf(MsnSoapConn *soapconn); void msn_soap_connect_cb(gpointer data, PurpleSslConnection *gsc, PurpleInputCondition cond); -void msn_soap_read_cb(gpointer data, gint source, PurpleInputCondition cond); /*clean the unhandled requests*/ void msn_soap_clean_unhandled_requests(MsnSoapConn *soapconn); diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/soap2.c --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/msn/soap2.c Mon Nov 05 00:35:07 2007 +0000 @@ -0,0 +1,677 @@ +/** + * @file soap2.c + * C file for SOAP connection related process + * + * purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#include "internal.h" + +#include "soap2.h" + +#include "session.h" + +#include "debug.h" +#include "xmlnode.h" + +#include +#include + +#define SOAP_TIMEOUT (5 * 60) + +typedef struct _MsnSoapRequest { + char *path; + MsnSoapMessage *message; + MsnSoapCallback cb; + gpointer cb_data; +} MsnSoapRequest; + +typedef struct _MsnSoapConnection { + MsnSession *session; + char *host; + + time_t last_used; + PurpleSslConnection *ssl; + gboolean connected; + + guint event_handle; + GString *buf; + gsize handled_len; + gsize body_len; + int response_code; + gboolean headers_done; + gboolean close_when_done; + + MsnSoapMessage *message; + + GQueue *queue; + MsnSoapRequest *current_request; +} MsnSoapConnection; + +static void msn_soap_connection_destroy_foreach_cb(gpointer item, gpointer data); +static gboolean msn_soap_connection_run(gpointer data); + +static MsnSoapConnection *msn_soap_connection_new(MsnSession *session, + const char *host); +static void msn_soap_connection_handle_next(MsnSoapConnection *conn); +static void msn_soap_connection_destroy(MsnSoapConnection *conn); + +static void msn_soap_message_send_internal(MsnSession *session, + MsnSoapMessage *message, const char *host, const char *path, + MsnSoapCallback cb, gpointer cb_data, gboolean first); + +static void msn_soap_request_destroy(MsnSoapRequest *req); +static void msn_soap_connection_sanitize(MsnSoapConnection *conn, gboolean disconnect); + +static gboolean +msn_soap_cleanup_each(gpointer key, gpointer value, gpointer data) +{ + MsnSoapConnection *conn = value; + time_t *t = data; + + if ((*t - conn->last_used) > SOAP_TIMEOUT * 2) { + purple_debug_info("soap", "cleaning up soap conn %p\n", conn); + return TRUE; + } + + return FALSE; +} + +static gboolean +msn_soap_cleanup_for_session(gpointer data) +{ + MsnSession *sess = data; + time_t t = time(NULL); + + purple_debug_info("soap", "session cleanup timeout\n"); + + if (sess->soap_table) { + g_hash_table_foreach_remove(sess->soap_table, msn_soap_cleanup_each, + &t); + + if (g_hash_table_size(sess->soap_table) == 0) { + purple_timeout_remove(sess->soap_cleanup_handle); + sess->soap_cleanup_handle = 0; + } + } + + return TRUE; +} + +static MsnSoapConnection * +msn_soap_get_connection(MsnSession *session, const char *host) +{ + MsnSoapConnection *conn = NULL; + + if (session->soap_table) { + conn = g_hash_table_lookup(session->soap_table, host); + } else { + session->soap_table = g_hash_table_new_full(g_str_hash, g_str_equal, + NULL, (GDestroyNotify)msn_soap_connection_destroy); + } + + if (session->soap_cleanup_handle == 0) + session->soap_cleanup_handle = purple_timeout_add(SOAP_TIMEOUT * 1000, + msn_soap_cleanup_for_session, session); + + if (conn == NULL) { + conn = msn_soap_connection_new(session, host); + g_hash_table_insert(session->soap_table, conn->host, conn); + } + + conn->last_used = time(NULL); + + return conn; +} + +static MsnSoapConnection * +msn_soap_connection_new(MsnSession *session, const char *host) +{ + MsnSoapConnection *conn = g_new0(MsnSoapConnection, 1); + conn->session = session; + conn->host = g_strdup(host); + conn->queue = g_queue_new(); + return conn; +} + +static void +msn_soap_connected_cb(gpointer data, PurpleSslConnection *ssl, + PurpleInputCondition cond) +{ + MsnSoapConnection *conn = data; + + conn->connected = TRUE; + + if (conn->event_handle == 0) + conn->event_handle = purple_timeout_add(0, msn_soap_connection_run, conn); +} + +static void +msn_soap_error_cb(PurpleSslConnection *ssl, PurpleSslErrorType error, + gpointer data) +{ + MsnSoapConnection *conn = data; + + g_hash_table_remove(conn->session->soap_table, conn->host); +} + +static gboolean +msn_soap_handle_redirect(MsnSoapConnection *conn, const char *url) +{ + char *c; + + /* Skip the http:// */ + if ((c = strchr(url, '/')) != NULL) + url += 2; + + if ((c = strchr(url, '/')) != NULL) { + char *host, *path; + + host = g_strndup(url, c - url); + path = g_strdup(c); + + msn_soap_message_send_internal(conn->session, + conn->current_request->message, host, path, + conn->current_request->cb, conn->current_request->cb_data, TRUE); + + msn_soap_request_destroy(conn->current_request); + conn->current_request = NULL; + + g_free(host); + g_free(path); + + return TRUE; + } + + return FALSE; +} + +static gboolean +msn_soap_handle_body(MsnSoapConnection *conn, MsnSoapMessage *response) +{ + xmlnode *body = xmlnode_get_child(response->xml, "Body"); + + if (body) { + MsnSoapRequest *request; + + if (strcmp(body->name, "Fault") == 0) { + xmlnode *fault = xmlnode_get_child(body, "faultcode"); + + if (fault != NULL) { + char *faultdata = xmlnode_get_data(fault); + + if (strcmp(faultdata, "psf:Redirect") == 0) { + xmlnode *url = xmlnode_get_child(body, "redirectUrl"); + + if (url) { + char *urldata = xmlnode_get_data(url); + msn_soap_handle_redirect(conn, urldata); + g_free(urldata); + } + + g_free(faultdata); + return TRUE; + } else if (strcmp(faultdata, "wsse:FailedAuthentication") == 0) { + xmlnode *reason = xmlnode_get_child(body, "faultstring"); + char *reasondata = xmlnode_get_data(reason); + + msn_soap_connection_sanitize(conn, TRUE); + msn_session_set_error(conn->session, MSN_ERROR_AUTH, + reasondata); + + g_free(reasondata); + g_free(faultdata); + return FALSE; + } + + g_free(faultdata); + } + } + + request = conn->current_request; + conn->current_request = NULL; + request->cb(request->message, response, + request->cb_data); + msn_soap_request_destroy(request); + } + + return TRUE; +} + +static void +msn_soap_read_cb(gpointer data, gint fd, PurpleInputCondition cond) +{ + MsnSoapConnection *conn = data; + int count = 0, cnt; + char buf[8192]; + char *linebreak; + char *cursor; + gboolean handled = FALSE; + + if (conn->message == NULL) { + conn->message = msn_soap_message_new(NULL, NULL); + } + + while ((cnt = purple_ssl_read(conn->ssl, buf, sizeof(buf))) > 0) { + purple_debug_info("soap", "read %d bytes\n", cnt); + count += cnt; + if (conn->buf == NULL) { + conn->buf = g_string_new_len(buf, cnt); + } else { + g_string_append_len(conn->buf, buf, cnt); + } + } + + if (cnt < 0) { + if (errno != EAGAIN) { + purple_debug_info("soap", "read: %s\n", g_strerror(errno)); + purple_ssl_close(conn->ssl); + conn->ssl = NULL; + msn_soap_connection_handle_next(conn); + return; + } else if (count == 0) { + return; + } + } + + if (cnt == 0 && count == 0) { + purple_debug_info("soap", "msn_soap_read_cb() called, but no data available?\n"); + purple_ssl_close(conn->ssl); + conn->ssl = NULL; + msn_soap_connection_handle_next(conn); + return; + } + + purple_debug_info("soap", "current %s\n", conn->buf->str); + + cursor = conn->buf->str + conn->handled_len; + + if (!conn->headers_done) { + while ((linebreak = strstr(cursor, "\r\n")) != NULL) { + conn->handled_len = linebreak - conn->buf->str + 2; + + if (conn->response_code == 0) { + if (sscanf(cursor, "HTTP/1.1 %d", &conn->response_code) != 1) { + /* something horribly wrong */ + purple_ssl_close(conn->ssl); + conn->ssl = NULL; + msn_soap_connection_handle_next(conn); + handled = TRUE; + break; + } else if (conn->response_code == 503) { + msn_soap_connection_sanitize(conn, TRUE); + msn_session_set_error(conn->session, MSN_ERROR_SERV_UNAVAILABLE, NULL); + return; + } + } else if (cursor == linebreak) { + /* blank line */ + conn->headers_done = TRUE; + cursor = conn->buf->str + conn->handled_len; + break; + } else { + char *line = g_strndup(cursor, linebreak - cursor); + char *sep = strstr(line, ": "); + char *key = line; + char *value; + + if (sep == NULL) { + purple_debug_info("soap", "ignoring malformed line: %s\n", line); + g_free(line); + goto loop_end; + } + + value = sep + 2; + *sep = '\0'; + msn_soap_message_add_header(conn->message, key, value); + + if ((conn->response_code == 301 || conn->response_code == 300) + && strcmp(key, "Location") == 0) { + + msn_soap_handle_redirect(conn, value); + + handled = TRUE; + g_free(line); + break; + } else if (conn->response_code == 401 && + strcmp(key, "WWW-Authenticate") == 0) { + char *error = strstr(value, "cbtxt="); + + if (error) { + error += strlen("cbtxt="); + } + + msn_soap_connection_sanitize(conn, TRUE); + msn_session_set_error(conn->session, MSN_ERROR_AUTH, + error ? purple_url_decode(error) : NULL); + + g_free(line); + return; + } else if (strcmp(key, "Content-Length") == 0) { + conn->body_len = atoi(value); + } else if (strcmp(key, "Connection") == 0) { + if (strcmp(value, "close") == 0) { + conn->close_when_done = TRUE; + } + } + g_free(line); + } + + loop_end: + cursor = conn->buf->str + conn->handled_len; + } + } + + if (!handled && conn->headers_done) { + if (conn->buf->len - conn->handled_len >= + conn->body_len) { + xmlnode *node = xmlnode_from_str(cursor, conn->body_len); + + if (node == NULL) { + purple_debug_info("soap", "Malformed SOAP response: %s\n", + cursor); + } else { + MsnSoapMessage *message = conn->message; + conn->message = NULL; + message->xml = node; + + if (!msn_soap_handle_body(conn, message)) + return; + } + + msn_soap_connection_handle_next(conn); + } + + return; + } + + if (handled) { + msn_soap_connection_handle_next(conn); + } +} + +static void +msn_soap_write_cb(gpointer data, gint fd, PurpleInputCondition cond) +{ + MsnSoapConnection *conn = data; + int written; + + g_return_if_fail(cond == PURPLE_INPUT_WRITE); + + written = purple_ssl_write(conn->ssl, conn->buf->str + conn->handled_len, + conn->buf->len - conn->handled_len); + + if (written < 0 && errno == EAGAIN) + return; + else if (written <= 0) { + purple_ssl_close(conn->ssl); + conn->ssl = NULL; + msn_soap_connection_handle_next(conn); + return; + } + + conn->handled_len += written; + + if (conn->handled_len < conn->buf->len) + return; + + /* we are done! */ + g_string_free(conn->buf, TRUE); + conn->buf = NULL; + conn->handled_len = 0; + conn->body_len = 0; + conn->response_code = 0; + conn->headers_done = FALSE; + conn->close_when_done = FALSE; + + purple_input_remove(conn->event_handle); + conn->event_handle = purple_input_add(conn->ssl->fd, PURPLE_INPUT_READ, + msn_soap_read_cb, conn); +} + +static gboolean +msn_soap_connection_run(gpointer data) +{ + MsnSoapConnection *conn = data; + MsnSoapRequest *req = g_queue_peek_head(conn->queue); + + conn->event_handle = 0; + + if (req) { + if (conn->ssl == NULL) { + conn->ssl = purple_ssl_connect(conn->session->account, conn->host, + 443, msn_soap_connected_cb, msn_soap_error_cb, conn); + } else if (conn->connected) { + int len = -1; + char *body = xmlnode_to_str(req->message->xml, &len); + GSList *iter; + char *authstr = NULL; + + g_queue_pop_head(conn->queue); + + conn->buf = g_string_new(""); + + if (conn->session->passport_info.mspauth) + authstr = g_strdup_printf("Cookie: MSPAuth=%s\r\n", + conn->session->passport_info.mspauth); + + + g_string_append_printf(conn->buf, + "POST %s HTTP/1.1\r\n" + "SOAPAction: %s\r\n" + "Content-Type:text/xml; charset=utf-8\r\n" + "%s" + "User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)\r\n" + "Accept: */*\r\n" + "Host: %s\r\n" + "Content-Length: %d\r\n" + "Connection: Keep-Alive\r\n" + "Cache-Control: no-cache\r\n", + req->path, req->message->action ? req->message->action : "", + authstr ? authstr : "", conn->host, len); + + for (iter = req->message->headers; iter; iter = iter->next) { + g_string_append(conn->buf, (char *)iter->data); + g_string_append(conn->buf, "\r\n"); + } + + g_string_append(conn->buf, "\r\n"); + g_string_append(conn->buf, body); + + purple_debug_info("soap", "%s\n", conn->buf->str); + + conn->handled_len = 0; + conn->current_request = req; + + conn->event_handle = purple_input_add(conn->ssl->fd, + PURPLE_INPUT_WRITE, msn_soap_write_cb, conn); + msn_soap_write_cb(conn, conn->ssl->fd, PURPLE_INPUT_WRITE); + + g_free(authstr); + g_free(body); + } + } + + return FALSE; +} + +void +msn_soap_message_send(MsnSession *session, MsnSoapMessage *message, + const char *host, const char *path, + MsnSoapCallback cb, gpointer cb_data) +{ + msn_soap_message_send_internal(session, message, host, path, cb, cb_data, + FALSE); +} + +static void +msn_soap_message_send_internal(MsnSession *session, + MsnSoapMessage *message, const char *host, const char *path, + MsnSoapCallback cb, gpointer cb_data, gboolean first) +{ + MsnSoapConnection *conn = msn_soap_get_connection(session, host); + MsnSoapRequest *req = g_new0(MsnSoapRequest, 1); + + req->path = g_strdup(path); + req->message = message; + req->cb = cb; + req->cb_data = cb_data; + + if (first) { + g_queue_push_head(conn->queue, req); + } else { + g_queue_push_tail(conn->queue, req); + } + + if (conn->event_handle == 0) + conn->event_handle = purple_timeout_add(0, msn_soap_connection_run, + conn); +} + +static void +msn_soap_connection_sanitize(MsnSoapConnection *conn, gboolean disconnect) +{ + if (conn->event_handle) { + purple_input_remove(conn->event_handle); + conn->event_handle = 0; + } + + if (conn->message) { + msn_soap_message_destroy(conn->message); + conn->message = NULL; + } + + if (conn->buf) { + g_string_free(conn->buf, TRUE); + conn->buf = NULL; + } + + if (conn->ssl && (disconnect || conn->close_when_done)) { + purple_ssl_close(conn->ssl); + conn->ssl = NULL; + } + + if (conn->current_request) { + msn_soap_request_destroy(conn->current_request); + conn->current_request = NULL; + } +} + +static void +msn_soap_connection_handle_next(MsnSoapConnection *conn) +{ + msn_soap_connection_sanitize(conn, FALSE); + + conn->event_handle = purple_timeout_add(0, msn_soap_connection_run, conn); + + if (conn->current_request) { + MsnSoapRequest *req = conn->current_request; + conn->current_request = NULL; + msn_soap_connection_destroy_foreach_cb(req, conn); + } +} + +static void +msn_soap_connection_destroy_foreach_cb(gpointer item, gpointer data) +{ + MsnSoapRequest *req = item; + + if (req->cb) + req->cb(req->message, NULL, req->cb_data); + + msn_soap_request_destroy(req); +} + +static void +msn_soap_connection_destroy(MsnSoapConnection *conn) +{ + if (conn->current_request) { + MsnSoapRequest *req = conn->current_request; + conn->current_request = NULL; + msn_soap_connection_destroy_foreach_cb(req, conn); + } + + msn_soap_connection_sanitize(conn, TRUE); + g_queue_foreach(conn->queue, msn_soap_connection_destroy_foreach_cb, conn); + g_queue_free(conn->queue); + + g_free(conn->host); + g_free(conn); +} + +MsnSoapMessage * +msn_soap_message_new(const char *action, xmlnode *xml) +{ + MsnSoapMessage *message = g_new0(MsnSoapMessage, 1); + + message->action = g_strdup(action); + message->xml = xml; + + return message; +} + +void +msn_soap_message_destroy(MsnSoapMessage *message) +{ + if (message) { + g_slist_foreach(message->headers, (GFunc)g_free, NULL); + g_slist_free(message->headers); + g_free(message->action); + if (message->xml) + xmlnode_free(message->xml); + g_free(message); + } +} + +void +msn_soap_message_add_header(MsnSoapMessage *req, + const char *name, const char *value) +{ + char *header = g_strdup_printf("%s: %s\r\n", name, value); + + req->headers = g_slist_prepend(req->headers, header); +} + +static void +msn_soap_request_destroy(MsnSoapRequest *req) +{ + g_free(req->path); + msn_soap_message_destroy(req->message); + g_free(req); +} + +xmlnode * +msn_soap_xml_get(xmlnode *parent, const char *node) +{ + xmlnode *ret = NULL; + char **tokens = g_strsplit(node, "/", -1); + int i; + + for (i = 0; tokens[i]; i++) { + if ((ret = xmlnode_get_child(parent, tokens[i])) != NULL) + parent = ret; + else + break; + } + + g_strfreev(tokens); + return ret; +} + diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/soap2.h --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/libpurple/protocols/msn/soap2.h Mon Nov 05 00:35:07 2007 +0000 @@ -0,0 +1,58 @@ +/** + * @file soap2.h + * header file for SOAP connection related process + * + * purple + * + * Purple is the legal property of its developers, whose names are too numerous + * to list here. Please refer to the COPYRIGHT file distributed with this + * source distribution. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +#ifndef _MSN_SOAP2_H +#define _MSN_SOAP2_H + +#include "session.h" +#include "sslconn.h" +#include "xmlnode.h" + +#include + +typedef struct _MsnSoapMessage MsnSoapMessage; +typedef void (*MsnSoapCallback)(MsnSoapMessage *request, + MsnSoapMessage *response, gpointer cb_data); + +struct _MsnSoapMessage { + char *action; + xmlnode *xml; + GSList *headers; +}; + +MsnSoapMessage *msn_soap_message_new(const char *action, xmlnode *xml); + +void msn_soap_message_add_header(MsnSoapMessage *req, + const char *name, const char *value); + +void msn_soap_message_send(MsnSession *session, + MsnSoapMessage *message, const char *host, const char *path, + MsnSoapCallback cb, gpointer cb_data); + +void msn_soap_message_destroy(MsnSoapMessage *message); + +xmlnode *msn_soap_xml_get(xmlnode *parent, const char *node); + +#endif diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/msn/userlist.c --- a/libpurple/protocols/msn/userlist.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/msn/userlist.c Mon Nov 05 00:35:07 2007 +0000 @@ -70,7 +70,7 @@ { MsnSession *session = pa->gc->proto_data; MsnUserList *userlist = session->userlist; - MsnCallbackState *state = msn_callback_state_new(); + MsnCallbackState *state = msn_callback_state_new(session); msn_callback_state_set_action(state, MSN_DENIED_BUDDY); @@ -680,7 +680,7 @@ purple_debug_info("MSN Userlist", "Add user: %s to group: %s\n", who, new_group_name); - state = msn_callback_state_new(); + state = msn_callback_state_new(userlist->session); msn_callback_state_set_who(state, who); msn_callback_state_set_new_group_name(state, new_group_name); @@ -841,7 +841,7 @@ g_return_if_fail(userlist->session != NULL); g_return_if_fail(userlist->session->contact != NULL); - state = msn_callback_state_new(); + state = msn_callback_state_new(userlist->session); msn_callback_state_set_who(state, who); msn_callback_state_set_action(state, MSN_MOVE_BUDDY); msn_callback_state_set_old_group_name(state, old_group_name); diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/myspace/myspace.c --- a/libpurple/protocols/myspace/myspace.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/myspace/myspace.c Mon Nov 05 00:35:07 2007 +0000 @@ -2353,7 +2353,7 @@ } else if (n < 0) { purple_debug_error("msim", "msim_input_cb: read error, ret=%d, " "error=%s, source=%d, fd=%d (%X))\n", - n, strerror(errno), source, session->fd, session->fd); + n, g_strerror(errno), source, session->fd, session->fd); purple_connection_error(gc, _("Read error")); return; } else if (n == 0) { diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/oscar/flap_connection.c --- a/libpurple/protocols/oscar/flap_connection.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/oscar/flap_connection.c Mon Nov 05 00:35:07 2007 +0000 @@ -468,7 +468,7 @@ * @param error_message A brief error message that gives more detail * regarding the reason for the disconnecting. This should * be NULL for everything except OSCAR_DISCONNECT_LOST_CONNECTION, - * in which case it should contain the value of strerror(errno), + * in which case it should contain the value of g_strerror(errno), * and OSCAR_DISCONNECT_COULD_NOT_CONNECT, in which case it * should contain the error_message passed back from the call * to purple_proxy_connect(). @@ -812,7 +812,7 @@ /* Error! */ flap_connection_schedule_destroy(conn, - OSCAR_DISCONNECT_LOST_CONNECTION, strerror(errno)); + OSCAR_DISCONNECT_LOST_CONNECTION, g_strerror(errno)); break; } @@ -873,7 +873,7 @@ /* Error! */ flap_connection_schedule_destroy(conn, - OSCAR_DISCONNECT_LOST_CONNECTION, strerror(errno)); + OSCAR_DISCONNECT_LOST_CONNECTION, g_strerror(errno)); break; } @@ -924,7 +924,7 @@ close(conn->fd); conn->fd = -1; flap_connection_schedule_destroy(conn, - OSCAR_DISCONNECT_LOST_CONNECTION, strerror(errno)); + OSCAR_DISCONNECT_LOST_CONNECTION, g_strerror(errno)); return; } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/oscar/odc.c --- a/libpurple/protocols/oscar/odc.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/oscar/odc.c Mon Nov 05 00:35:07 2007 +0000 @@ -456,7 +456,7 @@ return; peer_connection_destroy(conn, - OSCAR_DISCONNECT_LOST_CONNECTION, strerror(errno)); + OSCAR_DISCONNECT_LOST_CONNECTION, g_strerror(errno)); return; } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/oscar/oft.c --- a/libpurple/protocols/oscar/oft.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/oscar/oft.c Mon Nov 05 00:35:07 2007 +0000 @@ -212,7 +212,7 @@ if (checksum_data->file == NULL) { purple_debug_error("oscar", "Unable to open %s for checksumming: %s\n", - purple_xfer_get_local_filename(xfer), strerror(errno)); + purple_xfer_get_local_filename(xfer), g_strerror(errno)); callback(checksum_data); g_free(checksum_data); } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/oscar/oscar.c --- a/libpurple/protocols/oscar/oscar.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/oscar/oscar.c Mon Nov 05 00:35:07 2007 +0000 @@ -778,7 +778,7 @@ gchar *utf8; if (value && value[0] && (utf8 = oscar_utf8_try_convert(account, value))) { - purple_notify_user_info_add_pair(user_info, name, value); + purple_notify_user_info_add_pair(user_info, name, utf8); g_free(utf8); } } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/oscar/peer.c --- a/libpurple/protocols/oscar/peer.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/oscar/peer.c Mon Nov 05 00:35:07 2007 +0000 @@ -317,7 +317,7 @@ return; peer_connection_destroy(conn, - OSCAR_DISCONNECT_LOST_CONNECTION, strerror(errno)); + OSCAR_DISCONNECT_LOST_CONNECTION, g_strerror(errno)); return; } @@ -367,7 +367,7 @@ return; peer_connection_destroy(conn, - OSCAR_DISCONNECT_LOST_CONNECTION, strerror(errno)); + OSCAR_DISCONNECT_LOST_CONNECTION, g_strerror(errno)); return; } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/qq/qq_proxy.c --- a/libpurple/protocols/qq/qq_proxy.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/qq/qq_proxy.c Mon Nov 05 00:35:07 2007 +0000 @@ -237,7 +237,7 @@ close(source); purple_input_remove(phb->inpa); - purple_debug_error("proxy", "getsockopt SO_ERROR check: %s\n", strerror(error)); + purple_debug_error("proxy", "getsockopt SO_ERROR check: %s\n", g_strerror(error)); phb->func(phb->data, -1, _("Unable to connect")); return; @@ -265,7 +265,7 @@ if (fd < 0) { purple_debug(PURPLE_DEBUG_ERROR, "QQ Redirect", - "Unable to create socket: %s\n", strerror(errno)); + "Unable to create socket: %s\n", g_strerror(errno)); return -1; } @@ -297,7 +297,7 @@ purple_debug(PURPLE_DEBUG_WARNING, "QQ", "Connect in asynchronous mode.\n"); phb->inpa = purple_input_add(fd, PURPLE_INPUT_WRITE, no_one_calls, phb); } else { - purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Connection failed: %d\n", strerror(errno)); + purple_debug(PURPLE_DEBUG_ERROR, "QQ", "Connection failed: %d\n", g_strerror(errno)); close(fd); return -1; } /* if errno */ @@ -497,7 +497,7 @@ ret = send(qd->fd, data, len, 0); } if (ret == -1) - purple_connection_error(qd->gc, strerror(errno)); + purple_connection_error(qd->gc, g_strerror(errno)); return ret; } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/qq/udp_proxy_s5.c --- a/libpurple/protocols/qq/udp_proxy_s5.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/qq/udp_proxy_s5.c Mon Nov 05 00:35:07 2007 +0000 @@ -74,7 +74,7 @@ memcpy(&sin.sin_port, buf + 8, 2); if (connect(phb->udpsock, (struct sockaddr *) &sin, sizeof(struct sockaddr_in)) < 0) { - purple_debug(PURPLE_DEBUG_INFO, "s5_canread_again", "connect failed: %s\n", strerror(errno)); + purple_debug(PURPLE_DEBUG_INFO, "s5_canread_again", "connect failed: %s\n", g_strerror(errno)); close(phb->udpsock); close(source); g_free(phb->host); @@ -120,7 +120,7 @@ ctllen = sizeof(ctlsin); if (getsockname(source, (struct sockaddr *) &ctlsin, &ctllen) < 0) { - purple_debug(PURPLE_DEBUG_INFO, "QQ", "getsockname: %s\n", strerror(errno)); + purple_debug(PURPLE_DEBUG_INFO, "QQ", "getsockname: %s\n", g_strerror(errno)); close(source); g_free(phb->host); g_free(phb); @@ -300,7 +300,7 @@ len = sizeof(error); if (getsockopt(source, SOL_SOCKET, SO_ERROR, &error, &len) < 0) { - purple_debug(PURPLE_DEBUG_INFO, "getsockopt", "%s\n", strerror(errno)); + purple_debug(PURPLE_DEBUG_INFO, "getsockopt", "%s\n", g_strerror(errno)); close(source); if (phb->account == NULL || purple_account_get_connection(phb->account) != NULL) { @@ -329,7 +329,7 @@ } if (write(source, buf, i) < i) { - purple_debug(PURPLE_DEBUG_INFO, "write", "%s\n", strerror(errno)); + purple_debug(PURPLE_DEBUG_INFO, "write", "%s\n", g_strerror(errno)); purple_debug(PURPLE_DEBUG_ERROR, "socks5 proxy", "Unable to write\n"); close(source); diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/sametime/sametime.c --- a/libpurple/protocols/sametime/sametime.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/sametime/sametime.c Mon Nov 05 00:35:07 2007 +0000 @@ -1702,7 +1702,7 @@ purple_connection_error(pd->gc, _("Connection reset")); } else if(ret < 0) { - char *msg = strerror(err); + char *msg = g_strerror(err); DEBUG_INFO("error in read callback: %s\n", msg); @@ -2167,7 +2167,7 @@ } else { int err = errno; DEBUG_WARN("problem reading from file %s: %s\n", - NSTR(mwFileTransfer_getFileName(ft)), strerror(err)); + NSTR(mwFileTransfer_getFileName(ft)), g_strerror(err)); mwFileTransfer_cancel(ft); } @@ -5009,7 +5009,7 @@ fp = g_fopen(filename, "rb"); if(! fp) { char *msg = g_strdup_printf(_("Error reading file %s: \n%s\n"), - filename, strerror(errno)); + filename, g_strerror(errno)); purple_xfer_error(purple_xfer_get_type(xfer), acct, xfer->who, msg); g_free(msg); return; diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/silc/util.c --- a/libpurple/protocols/silc/util.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/silc/util.c Mon Nov 05 00:35:07 2007 +0000 @@ -79,7 +79,7 @@ pw = getpwuid(getuid()); if (!pw) { - purple_debug_error("silc", "silc: %s\n", strerror(errno)); + purple_debug_error("silc", "silc: %s\n", g_strerror(errno)); return FALSE; } @@ -108,7 +108,7 @@ return FALSE; } } else { - purple_debug_error("silc", "Couldn't stat '%s' directory, error: %s\n", filename, strerror(errno)); + purple_debug_error("silc", "Couldn't stat '%s' directory, error: %s\n", filename, g_strerror(errno)); return FALSE; } } else { @@ -140,7 +140,7 @@ } } else { purple_debug_error("silc", "Couldn't stat '%s' directory, error: %s\n", - servfilename, strerror(errno)); + servfilename, g_strerror(errno)); return FALSE; } } @@ -163,7 +163,7 @@ } } else { purple_debug_error("silc", "Couldn't stat '%s' directory, error: %s\n", - clientfilename, strerror(errno)); + clientfilename, g_strerror(errno)); return FALSE; } } @@ -186,7 +186,7 @@ } } else { purple_debug_error("silc", "Couldn't stat '%s' directory, error: %s\n", - friendsfilename, strerror(errno)); + friendsfilename, g_strerror(errno)); return FALSE; } } @@ -218,12 +218,12 @@ if ((g_stat(file_public_key, &st)) == -1) { purple_debug_error("silc", "Couldn't stat '%s' public key, error: %s\n", - file_public_key, strerror(errno)); + file_public_key, g_strerror(errno)); return FALSE; } } else { purple_debug_error("silc", "Couldn't stat '%s' public key, error: %s\n", - file_public_key, strerror(errno)); + file_public_key, g_strerror(errno)); return FALSE; } } @@ -239,7 +239,7 @@ if ((fd = g_open(file_private_key, O_RDONLY, 0)) != -1) { if ((fstat(fd, &st)) == -1) { purple_debug_error("silc", "Couldn't stat '%s' private key, error: %s\n", - file_private_key, strerror(errno)); + file_private_key, g_strerror(errno)); close(fd); return FALSE; } @@ -261,7 +261,7 @@ if ((fd = g_open(file_private_key, O_RDONLY, 0)) != -1) { if ((fstat(fd, &st)) == -1) { purple_debug_error("silc", "Couldn't stat '%s' private key, error: %s\n", - file_private_key, strerror(errno)); + file_private_key, g_strerror(errno)); close(fd); return FALSE; } @@ -270,12 +270,12 @@ * will set the permissions */ else if ((g_stat(file_private_key, &st)) == -1) { purple_debug_error("silc", "Couldn't stat '%s' private key, error: %s\n", - file_private_key, strerror(errno)); + file_private_key, g_strerror(errno)); return FALSE; } } else { purple_debug_error("silc", "Couldn't stat '%s' private key, error: %s\n", - file_private_key, strerror(errno)); + file_private_key, g_strerror(errno)); return FALSE; } } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/silc10/silc.c --- a/libpurple/protocols/silc10/silc.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/silc10/silc.c Mon Nov 05 00:35:07 2007 +0000 @@ -331,7 +331,7 @@ (char *)purple_account_get_string(account, "private-key", prd), (gc->password == NULL) ? "" : gc->password, &client->pkcs, &client->public_key, &client->private_key)) { - g_snprintf(pkd, sizeof(pkd), _("Could not load SILC key pair: %s"), strerror(errno)); + g_snprintf(pkd, sizeof(pkd), _("Could not load SILC key pair: %s"), g_strerror(errno)); purple_connection_error(gc, pkd); return; } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/silc10/util.c --- a/libpurple/protocols/silc10/util.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/silc10/util.c Mon Nov 05 00:35:07 2007 +0000 @@ -79,7 +79,7 @@ pw = getpwuid(getuid()); if (!pw) { - purple_debug_error("silc", "silc: %s\n", strerror(errno)); + purple_debug_error("silc", "silc: %s\n", g_strerror(errno)); return FALSE; } @@ -108,7 +108,7 @@ return FALSE; } } else { - purple_debug_error("silc", "Couldn't stat '%s' directory, error: %s\n", filename, strerror(errno)); + purple_debug_error("silc", "Couldn't stat '%s' directory, error: %s\n", filename, g_strerror(errno)); return FALSE; } } else { @@ -140,7 +140,7 @@ } } else { purple_debug_error("silc", "Couldn't stat '%s' directory, error: %s\n", - servfilename, strerror(errno)); + servfilename, g_strerror(errno)); return FALSE; } } @@ -163,7 +163,7 @@ } } else { purple_debug_error("silc", "Couldn't stat '%s' directory, error: %s\n", - clientfilename, strerror(errno)); + clientfilename, g_strerror(errno)); return FALSE; } } @@ -186,7 +186,7 @@ } } else { purple_debug_error("silc", "Couldn't stat '%s' directory, error: %s\n", - friendsfilename, strerror(errno)); + friendsfilename, g_strerror(errno)); return FALSE; } } @@ -216,12 +216,12 @@ if ((g_stat(file_public_key, &st)) == -1) { purple_debug_error("silc", "Couldn't stat '%s' public key, error: %s\n", - file_public_key, strerror(errno)); + file_public_key, g_strerror(errno)); return FALSE; } } else { purple_debug_error("silc", "Couldn't stat '%s' public key, error: %s\n", - file_public_key, strerror(errno)); + file_public_key, g_strerror(errno)); return FALSE; } } @@ -237,7 +237,7 @@ if ((fd = g_open(file_private_key, O_RDONLY, 0)) != -1) { if ((fstat(fd, &st)) == -1) { purple_debug_error("silc", "Couldn't stat '%s' private key, error: %s\n", - file_private_key, strerror(errno)); + file_private_key, g_strerror(errno)); close(fd); return FALSE; } @@ -257,7 +257,7 @@ if ((fd = g_open(file_private_key, O_RDONLY, 0)) != -1) { if ((fstat(fd, &st)) == -1) { purple_debug_error("silc", "Couldn't stat '%s' private key, error: %s\n", - file_private_key, strerror(errno)); + file_private_key, g_strerror(errno)); close(fd); return FALSE; } @@ -266,12 +266,12 @@ * will set the permissions */ else if ((g_stat(file_private_key, &st)) == -1) { purple_debug_error("silc", "Couldn't stat '%s' private key, error: %s\n", - file_private_key, strerror(errno)); + file_private_key, g_strerror(errno)); return FALSE; } } else { purple_debug_error("silc", "Couldn't stat '%s' private key, error: %s\n", - file_private_key, strerror(errno)); + file_private_key, g_strerror(errno)); return FALSE; } } diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/toc/toc.c --- a/libpurple/protocols/toc/toc.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/toc/toc.c Mon Nov 05 00:35:07 2007 +0000 @@ -1795,7 +1795,7 @@ ft->file = g_fopen(ft->filename, "w"); if (!ft->file) { buf = g_strdup_printf(_("Could not open %s for writing!"), ft->filename); - purple_notify_error(ft->gc, NULL, buf, strerror(errno)); + purple_notify_error(ft->gc, NULL, buf, g_strerror(errno)); g_free(buf); purple_input_remove(ft->inpa); close(source); @@ -1812,7 +1812,7 @@ if (!ft->file) { buf = g_strdup_printf("Could not open %s/%s for writing!", ft->filename, ft->hdr.name); - purple_notify_error(ft->gc, NULL, buf, strerror(errno)); + purple_notify_error(ft->gc, NULL, buf, g_strerror(errno)); g_free(buf); purple_input_remove(ft->inpa); close(source); diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/yahoo/yahoo.c --- a/libpurple/protocols/yahoo/yahoo.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/yahoo/yahoo.c Mon Nov 05 00:35:07 2007 +0000 @@ -2463,7 +2463,7 @@ return; tmp = g_strdup_printf(_("Lost connection with server:\n%s"), - strerror(errno)); + g_strerror(errno)); purple_connection_error(gc, tmp); g_free(tmp); return; @@ -2630,7 +2630,7 @@ return; tmp = g_strdup_printf(_("Lost connection with server:\n%s"), - strerror(errno)); + g_strerror(errno)); purple_connection_error(gc, tmp); g_free(tmp); return; @@ -2701,7 +2701,7 @@ purple_input_remove(gc->inpa); gc->inpa = 0; tmp = g_strdup_printf(_("Lost connection with %s:\n%s"), - "login.yahoo.com:80", strerror(errno)); + "login.yahoo.com:80", g_strerror(errno)); purple_connection_error(gc, tmp); g_free(tmp); return; diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/protocols/yahoo/ycht.c --- a/libpurple/protocols/yahoo/ycht.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/protocols/yahoo/ycht.c Mon Nov 05 00:35:07 2007 +0000 @@ -473,7 +473,7 @@ return; tmp = g_strdup_printf(_("Lost connection with server\n%s"), - strerror(errno)); + g_strerror(errno)); ycht_connection_error(ycht, tmp); g_free(tmp); return; diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/proxy.c --- a/libpurple/proxy.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/proxy.c Mon Nov 05 00:35:07 2007 +0000 @@ -429,9 +429,9 @@ if (ret != 0) error = errno; purple_debug_info("proxy", "Error connecting to %s:%d (%s).\n", - connect_data->host, connect_data->port, strerror(error)); + connect_data->host, connect_data->port, g_strerror(error)); - purple_proxy_connect_data_disconnect(connect_data, strerror(error)); + purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); return; } @@ -458,7 +458,7 @@ if (connect_data->fd < 0) { purple_proxy_connect_data_disconnect_formatted(connect_data, - _("Unable to create socket:\n%s"), strerror(errno)); + _("Unable to create socket:\n%s"), g_strerror(errno)); return; } @@ -478,7 +478,7 @@ } else { - purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); + purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); } } else @@ -496,7 +496,7 @@ { if (ret != 0) error = errno; - purple_proxy_connect_data_disconnect(connect_data, strerror(error)); + purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); return; } @@ -534,7 +534,7 @@ return; /* Error! */ - purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); + purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); return; } if (ret < request_len) { @@ -593,7 +593,7 @@ /* Error! */ purple_proxy_connect_data_disconnect_formatted(connect_data, - _("Lost connection with server:\n%s"), strerror(errno)); + _("Lost connection with server:\n%s"), g_strerror(errno)); return; } @@ -832,7 +832,7 @@ { if (ret != 0) error = errno; - purple_proxy_connect_data_disconnect(connect_data, strerror(error)); + purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); return; } @@ -899,7 +899,7 @@ if (connect_data->fd < 0) { purple_proxy_connect_data_disconnect_formatted(connect_data, - _("Unable to create socket:\n%s"), strerror(errno)); + _("Unable to create socket:\n%s"), g_strerror(errno)); return; } @@ -937,7 +937,7 @@ } else { - purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); + purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); } } else @@ -978,7 +978,7 @@ } } - purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); + purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); } static void @@ -1003,7 +1003,7 @@ { if (ret != 0) error = errno; - purple_proxy_connect_data_disconnect(connect_data, strerror(error)); + purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); return; } @@ -1058,7 +1058,7 @@ if (connect_data->fd < 0) { purple_proxy_connect_data_disconnect_formatted(connect_data, - _("Unable to create socket:\n%s"), strerror(errno)); + _("Unable to create socket:\n%s"), g_strerror(errno)); return; } @@ -1078,7 +1078,7 @@ } else { - purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); + purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); } } else @@ -1138,7 +1138,7 @@ /* Error! */ purple_proxy_connect_data_disconnect_formatted(connect_data, - _("Lost connection with server:\n%s"), strerror(errno)); + _("Lost connection with server:\n%s"), g_strerror(errno)); return; } @@ -1247,7 +1247,7 @@ /* Error! */ purple_proxy_connect_data_disconnect_formatted(connect_data, - _("Lost connection with server:\n%s"), strerror(errno)); + _("Lost connection with server:\n%s"), g_strerror(errno)); return; } @@ -1347,7 +1347,7 @@ /* Error! */ purple_proxy_connect_data_disconnect_formatted(connect_data, - _("Lost connection with server:\n%s"), strerror(errno)); + _("Lost connection with server:\n%s"), g_strerror(errno)); return; } @@ -1475,7 +1475,7 @@ /* Error! */ purple_proxy_connect_data_disconnect_formatted(connect_data, - _("Lost connection with server:\n%s"), strerror(errno)); + _("Lost connection with server:\n%s"), g_strerror(errno)); return; } @@ -1584,7 +1584,7 @@ { if (ret != 0) error = errno; - purple_proxy_connect_data_disconnect(connect_data, strerror(error)); + purple_proxy_connect_data_disconnect(connect_data, g_strerror(error)); return; } @@ -1629,7 +1629,7 @@ if (connect_data->fd < 0) { purple_proxy_connect_data_disconnect_formatted(connect_data, - _("Unable to create socket:\n%s"), strerror(errno)); + _("Unable to create socket:\n%s"), g_strerror(errno)); return; } @@ -1649,7 +1649,7 @@ } else { - purple_proxy_connect_data_disconnect(connect_data, strerror(errno)); + purple_proxy_connect_data_disconnect(connect_data, g_strerror(errno)); } } else diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/util.c --- a/libpurple/util.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/util.c Mon Nov 05 00:35:07 2007 +0000 @@ -2505,7 +2505,7 @@ } if (g_mkdir(dir, mode) < 0) { - purple_debug_warning("build_dir", "mkdir: %s\n", strerror(errno)); + purple_debug_warning("build_dir", "mkdir: %s\n", g_strerror(errno)); g_strfreev(components); g_free(dir); return -1; @@ -2541,7 +2541,7 @@ if (g_mkdir(user_dir, S_IRUSR | S_IWUSR | S_IXUSR) == -1) { purple_debug_error("util", "Error creating directory %s: %s\n", - user_dir, strerror(errno)); + user_dir, g_strerror(errno)); return FALSE; } } @@ -2576,7 +2576,7 @@ { purple_debug_error("util", "Error removing old file " "%s: %s\n", - filename_temp, strerror(errno)); + filename_temp, g_strerror(errno)); } } @@ -2586,7 +2586,7 @@ { purple_debug_error("util", "Error opening file %s for " "writing: %s\n", - filename_temp, strerror(errno)); + filename_temp, g_strerror(errno)); g_free(filename_temp); return FALSE; } @@ -2599,7 +2599,7 @@ if (fclose(file) != 0) { purple_debug_error("util", "Error closing file %s: %s\n", - filename_temp, strerror(errno)); + filename_temp, g_strerror(errno)); g_free(filename_temp); return FALSE; } @@ -2631,7 +2631,7 @@ if (chmod(filename_temp, S_IRUSR | S_IWUSR) == -1) { purple_debug_error("util", "Error setting permissions of file %s: %s\n", - filename_temp, strerror(errno)); + filename_temp, g_strerror(errno)); } #endif @@ -2640,7 +2640,7 @@ { purple_debug_error("util", "Error renaming %s to %s: %s\n", filename_temp, filename_full, - strerror(errno)); + g_strerror(errno)); } g_free(filename_temp); @@ -3688,7 +3688,7 @@ if(new_data == NULL) { purple_debug_error("util", "Failed to allocate %u bytes: %s\n", - content_len, strerror(errno)); + content_len, g_strerror(errno)); purple_util_fetch_url_error(gfud, _("Unable to allocate enough memory to hold " "the contents from %s. The web server may " @@ -3726,7 +3726,7 @@ return; } else { purple_util_fetch_url_error(gfud, _("Error reading from %s: %s"), - gfud->website.address, strerror(errno)); + gfud->website.address, g_strerror(errno)); return; } } @@ -3757,7 +3757,7 @@ return; else if (len < 0) { purple_util_fetch_url_error(gfud, _("Error writing to %s: %s"), - gfud->website.address, strerror(errno)); + gfud->website.address, g_strerror(errno)); return; } gfud->request_written += len; diff -r 1d92b85ef5d9 -r 7be910c7cff7 libpurple/win32/libc_interface.c --- a/libpurple/win32/libc_interface.c Sun Nov 04 22:17:45 2007 +0000 +++ b/libpurple/win32/libc_interface.c Mon Nov 05 00:35:07 2007 +0000 @@ -300,7 +300,7 @@ return errbuf; } else - return strerror( errornum ); + return g_strerror( errornum ); } /* unistd.h */ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/gtkdialogs.c --- a/pidgin/gtkdialogs.c Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/gtkdialogs.c Mon Nov 05 00:35:07 2007 +0000 @@ -71,6 +71,7 @@ static const struct developer developers[] = { {"Sean Egan", N_("lead developer"), "sean.egan@gmail.com"}, {"Daniel 'datallah' Atallah", N_("developer"), NULL}, + {"John 'rekkanoryo' Bailey", N_("developer"), NULL}, {"Ethan 'Paco-Paco' Blanton", N_("developer"), NULL}, {"Thomas Butter", N_("developer"), NULL}, {"Ka-Hing Cheung", N_("developer"), NULL}, @@ -95,7 +96,6 @@ /* Order: Alphabetical by Last Name */ static const struct developer patch_writers[] = { - {"John 'rekkanoryo' Bailey", NULL, NULL}, {"Dennis 'EvilDennisR' Ristuccia", N_("Senior Contributor/QA"), NULL}, {"Peter 'Fmoo' Ruibal", NULL, NULL}, {"Gabriel 'Nix' Schulhof", NULL, NULL}, @@ -147,7 +147,7 @@ {N_("Danish"), "da", "Morten Brix Pedersen", "morten@wtf.dk"}, {N_("Danish"), "da", "Peter Bach", "bach.peter@gmail.com"}, {N_("German"), "de", "Björn Voigt", "bjoern@cs.tu-berlin.de"}, - {N_("German"), "de", "Jochen Kemnade", "kemnade@gmail.com"}, + {N_("German"), "de", "Jochen Kemnade", "jochenkemnade@web.de"}, {N_("Dzongkha"), "dz", "Norbu", "nor_den@hotmail.com"}, {N_("Dzongkha"), "dz", "Jurmey Rabgay", "jur_gay@yahoo.com"}, {N_("Dzongkha"), "dz", "Wangmo Sherpa", "rinwanshe@yahoo.com"}, diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/gtkprefs.c --- a/pidgin/gtkprefs.c Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/gtkprefs.c Mon Nov 05 00:35:07 2007 +0000 @@ -1126,13 +1126,26 @@ g_error_free(err); } +static void +browser_button_clicked_cb(GtkWidget *button, gpointer null) +{ + GError *err = NULL; + + if (g_spawn_command_line_async ("gnome-default-applications-properties", &err)) + return; + + purple_notify_error(NULL, NULL, _("Cannot start browser configuration program."), err->message); + g_error_free(err); +} + static GtkWidget * network_page() { GtkWidget *ret; GtkWidget *vbox, *hbox, *entry; GtkWidget *table, *label, *auto_ip_checkbox, *ports_checkbox, *spin_button; - GtkWidget *warning = NULL, *proxy_button = NULL; + GtkWidget *proxy_warning = NULL, *browser_warning = NULL; + GtkWidget *proxy_button = NULL, *browser_button = NULL; GtkSizeGroup *sg; PurpleProxyInfo *proxy_info = NULL; @@ -1217,11 +1230,11 @@ g_signal_connect(G_OBJECT(ports_checkbox), "clicked", G_CALLBACK(pidgin_toggle_sensitive), spin_button); - vbox = pidgin_make_frame(ret, _("Proxy Server")); - prefs_proxy_frame = gtk_vbox_new(FALSE, 0); - if (purple_running_gnome()) { - warning = hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); + vbox = pidgin_make_frame(ret, _("Proxy Server & Browser")); + prefs_proxy_frame = gtk_vbox_new(FALSE, 0); + + proxy_warning = hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); gtk_container_add(GTK_CONTAINER(vbox), hbox); label = gtk_label_new(NULL); @@ -1229,10 +1242,18 @@ _("Proxy configuration program was not found.")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + browser_warning = hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); + gtk_container_add(GTK_CONTAINER(vbox), hbox); + + label = gtk_label_new(NULL); + gtk_label_set_markup(GTK_LABEL(label), + _("Browser configuration program was not found.")); + gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); + hbox = gtk_hbox_new(FALSE, PIDGIN_HIG_BOX_SPACE); gtk_container_add(GTK_CONTAINER(vbox), hbox); - label = gtk_label_new(_("Proxy preferences are configured in\n" - "GNOME Control Center: Desktop Preferences")); + label = gtk_label_new(_("Proxy & Browser preferences are configured\n" + "in GNOME Preferences")); gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, FALSE, 0); gtk_widget_show(label); @@ -1243,7 +1264,15 @@ G_CALLBACK(proxy_button_clicked_cb), NULL); gtk_box_pack_start(GTK_BOX(hbox), proxy_button, FALSE, FALSE, 0); gtk_widget_show(proxy_button); + browser_button = gtk_button_new_with_mnemonic(_("Configure _Browser")); + g_signal_connect(G_OBJECT(browser_button), "clicked", + G_CALLBACK(browser_button_clicked_cb), NULL); + gtk_box_pack_start(GTK_BOX(hbox), browser_button, FALSE, FALSE, 0); + gtk_widget_show(browser_button); } else { + vbox = pidgin_make_frame(ret, _("Proxy Server")); + prefs_proxy_frame = gtk_vbox_new(FALSE, 0); + pidgin_prefs_dropdown(vbox, _("Proxy _type:"), PURPLE_PREF_STRING, "/purple/proxy/type", _("No proxy"), "none", @@ -1351,11 +1380,20 @@ path = g_find_program_in_path("gnome-network-preferences"); if (path != NULL) { gtk_widget_set_sensitive(proxy_button, TRUE); - gtk_widget_hide(warning); + gtk_widget_hide(proxy_warning); g_free(path); } else { gtk_widget_set_sensitive(proxy_button, FALSE); - gtk_widget_show(warning); + gtk_widget_show(proxy_warning); + } + path = g_find_program_in_path("gnome-default-applications-properties"); + if (path != NULL) { + gtk_widget_set_sensitive(browser_button, TRUE); + gtk_widget_hide(browser_warning); + g_free(path); + } else { + gtk_widget_set_sensitive(browser_button, FALSE); + gtk_widget_show(browser_warning); } } diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/Makefile.am --- a/pidgin/pixmaps/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,4 +1,416 @@ -SUBDIRS = animations buddy_icons dialogs emblems emotes icons protocols status toolbar tray +pidginpixmapdir = $(datadir)/pixmaps/pidgin + +SUBDIRS = buddy_icons/qq dialogs/16 dialogs/64 emblems/16 \ + emotes/default/24 emotes/none \ + icons/16 icons/22 icons/24 icons/32 icons/48 \ + protocols/16 protocols/22 protocols/48 \ + status/11 status/16 status/22 status/32 status/48 \ + toolbar/16 toolbar/22 tray/16 tray/22 tray/32 tray/48 + +MAKEFILE_MINGW = \ + buddy_icons/qq/Makefile.mingw \ + dialogs/16/Makefile.mingw \ + dialogs/64/Makefile.mingw \ + icons/16/Makefile.mingw \ + icons/24/Makefile.mingw \ + icons/32/Makefile.mingw \ + icons/48/Makefile.mingw \ + emotes/default/Makefile.mingw \ + emotes/default/24/Makefile.mingw \ + emotes/none/Makefile.mingw \ + emblems/16/Makefile.mingw \ + protocols/22/Makefile.mingw \ + protocols/48/Makefile.mingw \ + status/11/Makefile.mingw \ + status/11/rtl/Makefile.mingw \ + status/16/Makefile.mingw \ + status/16/rtl/Makefile.mingw \ + status/22/Makefile.mingw \ + status/22/rtl/Makefile.mingw \ + status/32/Makefile.mingw \ + status/32/rtl/Makefile.mingw \ + status/48/Makefile.mingw \ + status/48/rtl/Makefile.mingw \ + toolbar/16/Makefile.mingw \ + toolbar/22/Makefile.mingw \ + tray/16/Makefile.mingw \ + tray/22/Makefile.mingw \ + tray/32/Makefile.mingw \ + tray/48/Makefile.mingw + +ANIMATIONS_16 = \ + animations/16/connect0.png \ + animations/16/connect1.png \ + animations/16/connect2.png \ + animations/16/connect3.png \ + animations/16/connect4.png \ + animations/16/connect5.png \ + animations/16/connect6.png \ + animations/16/connect7.png \ + animations/16/connect8.png \ + animations/16/typing0.png \ + animations/16/typing1.png \ + animations/16/typing2.png \ + animations/16/typing3.png \ + animations/16/typing4.png \ + animations/16/typing5.png + +DIALOGS_16_SCALABLE = \ + dialogs/16/scalable/error.svg \ + dialogs/16/scalable/info.svg \ + dialogs/16/scalable/mail.svg + +DIALOGS_64_SCALABLE = \ + dialogs/64/scalable/auth.svg \ + dialogs/64/scalable/cool.svg \ + dialogs/64/scalable/dialog.svg \ + dialogs/64/scalable/error.svg \ + dialogs/64/scalable/info.svg \ + dialogs/64/scalable/question.svg \ + dialogs/64/scalable/warning.svg + +EMBLEMS_16_SCALABLE = \ + emblems/16/scalable/aol-client.svg \ + emblems/16/scalable/blocked.svg \ + emblems/16/scalable/bot.svg \ + emblems/16/scalable/external.svg \ + emblems/16/scalable/female.svg \ + emblems/16/scalable/free-for-chat.svg \ + emblems/16/scalable/game.svg \ + emblems/16/scalable/male.svg \ + emblems/16/scalable/mobile.svg \ + emblems/16/scalable/music.svg \ + emblems/16/scalable/not-authorized.svg \ + emblems/16/scalable/qq-member.svg \ + emblems/16/scalable/secure.svg \ + emblems/16/scalable/unavailable.svg \ + emblems/16/scalable/video.svg \ + emblems/16/scalable/voice.svg + +EMOTES_DEFAULT_24_SCALABLE = \ + emotes/default/24/scalable/act-up.svg \ + emotes/default/24/scalable/airplane.svg \ + emotes/default/24/scalable/alien.svg \ + emotes/default/24/scalable/angel.svg \ + emotes/default/24/scalable/angry.svg \ + emotes/default/24/scalable/arrogant.svg \ + emotes/default/24/scalable/at-wits-end.svg \ + emotes/default/24/scalable/bad.svg \ + emotes/default/24/scalable/bashful.svg \ + emotes/default/24/scalable/beat-up.svg \ + emotes/default/24/scalable/beauty.svg \ + emotes/default/24/scalable/beer.svg \ + emotes/default/24/scalable/blowkiss.svg \ + emotes/default/24/scalable/bomb.svg \ + emotes/default/24/scalable/bowl.svg \ + emotes/default/24/scalable/boy.svg \ + emotes/default/24/scalable/brb.svg \ + emotes/default/24/scalable/bulgy-eyes.svg \ + emotes/default/24/scalable/bye.svg \ + emotes/default/24/scalable/cake.svg \ + emotes/default/24/scalable/call-me.svg \ + emotes/default/24/scalable/camera.svg \ + emotes/default/24/scalable/can.svg \ + emotes/default/24/scalable/car.svg \ + emotes/default/24/scalable/cat.svg \ + emotes/default/24/scalable/chicken.svg \ + emotes/default/24/scalable/clap.svg \ + emotes/default/24/scalable/clock.svg \ + emotes/default/24/scalable/cloudy.svg \ + emotes/default/24/scalable/clover.svg \ + emotes/default/24/scalable/clown.svg \ + emotes/default/24/scalable/coffee.svg \ + emotes/default/24/scalable/coins.svg \ + emotes/default/24/scalable/computer.svg \ + emotes/default/24/scalable/confused.svg \ + emotes/default/24/scalable/console.svg \ + emotes/default/24/scalable/cowboy.svg \ + emotes/default/24/scalable/cow.svg \ + emotes/default/24/scalable/crying.svg \ + emotes/default/24/scalable/curl-lip.svg \ + emotes/default/24/scalable/curse.svg \ + emotes/default/24/scalable/cute.svg \ + emotes/default/24/scalable/cyclops.svg \ + emotes/default/24/scalable/dance.svg \ + emotes/default/24/scalable/dazed.svg \ + emotes/default/24/scalable/desire.svg \ + emotes/default/24/scalable/devil.svg \ + emotes/default/24/scalable/disapointed.svg \ + emotes/default/24/scalable/disdain.svg \ + emotes/default/24/scalable/doctor.svg \ + emotes/default/24/scalable/dog.svg \ + emotes/default/24/scalable/doh.svg \ + emotes/default/24/scalable/dont-know.svg \ + emotes/default/24/scalable/drink.svg \ + emotes/default/24/scalable/drool.svg \ + emotes/default/24/scalable/eat.svg \ + emotes/default/24/scalable/embarrassed.svg \ + emotes/default/24/scalable/excruciating.svg \ + emotes/default/24/scalable/eyeroll.svg \ + emotes/default/24/scalable/female-fighter.svg \ + emotes/default/24/scalable/film.svg \ + emotes/default/24/scalable/fingers-crossed.svg \ + emotes/default/24/scalable/flag.svg \ + emotes/default/24/scalable/foot-in-mouth.svg \ + emotes/default/24/scalable/freaked-out.svg \ + emotes/default/24/scalable/ghost.svg \ + emotes/default/24/scalable/giggle.svg \ + emotes/default/24/scalable/girl.svg \ + emotes/default/24/scalable/glasses-cool.svg \ + emotes/default/24/scalable/glasses-nerdy.svg \ + emotes/default/24/scalable/goat.svg \ + emotes/default/24/scalable/go-away.svg \ + emotes/default/24/scalable/good.svg \ + emotes/default/24/scalable/hammer.svg \ + emotes/default/24/scalable/handcuffs.svg \ + emotes/default/24/scalable/handshake.svg \ + emotes/default/24/scalable/highfive.svg \ + emotes/default/24/scalable/hug-left.svg \ + emotes/default/24/scalable/hug-right.svg \ + emotes/default/24/scalable/hypnotized.svg \ + emotes/default/24/scalable/in-love.svg \ + emotes/default/24/scalable/island.svg \ + emotes/default/24/scalable/jump.svg \ + emotes/default/24/scalable/kissed.svg \ + emotes/default/24/scalable/kissing.svg \ + emotes/default/24/scalable/kiss.svg \ + emotes/default/24/scalable/knife.svg \ + emotes/default/24/scalable/lamp.svg \ + emotes/default/24/scalable/lashes.svg \ + emotes/default/24/scalable/laugh.svg \ + emotes/default/24/scalable/liquor.svg \ + emotes/default/24/scalable/loser.svg \ + emotes/default/24/scalable/love-over.svg \ + emotes/default/24/scalable/love.svg \ + emotes/default/24/scalable/lying.svg \ + emotes/default/24/scalable/madtongue.svg \ + emotes/default/24/scalable/mail.svg \ + emotes/default/24/scalable/male-fighter1.svg \ + emotes/default/24/scalable/male-fighter2.svg \ + emotes/default/24/scalable/mean.svg \ + emotes/default/24/scalable/meeting.svg \ + emotes/default/24/scalable/messed.svg \ + emotes/default/24/scalable/mobile.svg \ + emotes/default/24/scalable/mohawk.svg \ + emotes/default/24/scalable/moneymouth.svg \ + emotes/default/24/scalable/monkey.svg \ + emotes/default/24/scalable/moon.svg \ + emotes/default/24/scalable/msn-away.svg \ + emotes/default/24/scalable/msn-busy.svg \ + emotes/default/24/scalable/msn_online.svg \ + emotes/default/24/scalable/msn.svg \ + emotes/default/24/scalable/musical-note.svg \ + emotes/default/24/scalable/music.svg \ + emotes/default/24/scalable/nailbiting.svg \ + emotes/default/24/scalable/neutral.svg \ + emotes/default/24/scalable/on-the-phone.svg \ + emotes/default/24/scalable/party.svg \ + emotes/default/24/scalable/peace.svg \ + emotes/default/24/scalable/phone.svg \ + emotes/default/24/scalable/pig.svg \ + emotes/default/24/scalable/pill.svg \ + emotes/default/24/scalable/pirate.svg \ + emotes/default/24/scalable/pissed-off.svg \ + emotes/default/24/scalable/pizza.svg \ + emotes/default/24/scalable/plate.svg \ + emotes/default/24/scalable/poop.svg \ + emotes/default/24/scalable/pray.svg \ + emotes/default/24/scalable/present.svg \ + emotes/default/24/scalable/qq.svg \ + emotes/default/24/scalable/question.svg \ + emotes/default/24/scalable/quiet.svg \ + emotes/default/24/scalable/rainbow.svg \ + emotes/default/24/scalable/rain.svg \ + emotes/default/24/scalable/rose-dead.svg \ + emotes/default/24/scalable/rose.svg \ + emotes/default/24/scalable/rotfl.svg \ + emotes/default/24/scalable/sad.svg \ + emotes/default/24/scalable/sarcastic.svg \ + emotes/default/24/scalable/search.svg \ + emotes/default/24/scalable/secret.svg \ + emotes/default/24/scalable/shame.svg \ + emotes/default/24/scalable/sheep.svg \ + emotes/default/24/scalable/shock.svg \ + emotes/default/24/scalable/shout.svg \ + emotes/default/24/scalable/shut-mouth.svg \ + emotes/default/24/scalable/sick.svg \ + emotes/default/24/scalable/sidefrown.svg \ + emotes/default/24/scalable/sigarette.svg \ + emotes/default/24/scalable/silly.svg \ + emotes/default/24/scalable/sinister.svg \ + emotes/default/24/scalable/skeleton.svg \ + emotes/default/24/scalable/skywalker.svg \ + emotes/default/24/scalable/sleepy.svg \ + emotes/default/24/scalable/smile-big.svg \ + emotes/default/24/scalable/smile.svg \ + emotes/default/24/scalable/smirk.svg \ + emotes/default/24/scalable/snail.svg \ + emotes/default/24/scalable/snicker.svg \ + emotes/default/24/scalable/snowman.svg \ + emotes/default/24/scalable/soccerball.svg \ + emotes/default/24/scalable/soldier.svg \ + emotes/default/24/scalable/star.svg \ + emotes/default/24/scalable/starving.svg \ + emotes/default/24/scalable/stop.svg \ + emotes/default/24/scalable/struggle.svg \ + emotes/default/24/scalable/sun.svg \ + emotes/default/24/scalable/sweat.svg \ + emotes/default/24/scalable/talktohand.svg \ + emotes/default/24/scalable/teeth.svg \ + emotes/default/24/scalable/terror.svg \ + emotes/default/24/scalable/thinking.svg \ + emotes/default/24/scalable/thunder.svg \ + emotes/default/24/scalable/time-out.svg \ + emotes/default/24/scalable/tongue.svg \ + emotes/default/24/scalable/tremble.svg \ + emotes/default/24/scalable/turtle.svg \ + emotes/default/24/scalable/tv.svg \ + emotes/default/24/scalable/umbrella.svg \ + emotes/default/24/scalable/vampire.svg \ + emotes/default/24/scalable/victory.svg \ + emotes/default/24/scalable/waiting.svg \ + emotes/default/24/scalable/watermelon.svg \ + emotes/default/24/scalable/waving.svg \ + emotes/default/24/scalable/weep.svg \ + emotes/default/24/scalable/wilt.svg \ + emotes/default/24/scalable/wink.svg \ + emotes/default/24/scalable/worship.svg \ + emotes/default/24/scalable/yawn.svg \ + emotes/default/24/scalable/yin-yang.svg + +PROTOCOLS_16_SCALABLE = \ + protocols/16/scalable/aim.svg \ + protocols/16/scalable/bonjour.svg \ + protocols/16/scalable/gadu-gadu.svg \ + protocols/16/scalable/novell.svg \ + protocols/16/scalable/icq.svg \ + protocols/16/scalable/irc.svg \ + protocols/16/scalable/jabber.svg \ + protocols/16/scalable/meanwhile.svg \ + protocols/16/scalable/msn.svg \ + protocols/16/scalable/qq.svg \ + protocols/16/scalable/silc.svg \ + protocols/16/scalable/simple.svg \ + protocols/16/scalable/yahoo.svg \ + protocols/16/scalable/zephyr.svg + +ICONS_16_SCALABLE = \ + icons/16/scalable/pidgin.svg + +ICONS_22_SCALABLE = \ + icons/22/scalable/pidgin.svg + +ICONS_24_SCALABLE = \ + icons/24/scalable/pidgin.svg + +ICONS_32_SCALABLE = \ + icons/32/scalable/pidgin.svg + +ICONS_48_SCALABLE = \ + icons/48/scalable/pidgin.svg + +PROTOCOLS_22_SCALABLE = \ + protocols/22/scalable/aim.svg \ + protocols/22/scalable/bonjour.svg \ + protocols/22/scalable/gadu-gadu.svg \ + protocols/22/scalable/novell.svg \ + protocols/22/scalable/icq.svg \ + protocols/22/scalable/irc.svg \ + protocols/22/scalable/jabber.svg \ + protocols/22/scalable/meanwhile.svg \ + protocols/22/scalable/msn.svg \ + protocols/22/scalable/qq.svg \ + protocols/22/scalable/silc.svg \ + protocols/22/scalable/simple.svg \ + protocols/22/scalable/yahoo.svg \ + protocols/22/scalable/zephyr.svg + +PROTOCOLS_48_SCALABLE = \ + protocols/48/scalable/aim.svg \ + protocols/48/scalable/bonjour.svg \ + protocols/48/scalable/gadu-gadu.svg \ + protocols/48/scalable/google-talk.svg \ + protocols/48/scalable/novell.svg \ + protocols/48/scalable/icq.svg \ + protocols/48/scalable/irc.svg \ + protocols/48/scalable/jabber.svg \ + protocols/48/scalable/meanwhile.svg \ + protocols/48/scalable/msn.svg \ + protocols/48/scalable/qq.svg \ + protocols/48/scalable/silc.svg \ + protocols/48/scalable/simple.svg \ + protocols/48/scalable/yahoo.svg \ + protocols/48/scalable/zephyr.svg + +STATUS_11_SCALABLE = \ + status/11/scalable/available.svg \ + status/11/scalable/away.svg \ + status/11/scalable/busy.svg \ + status/11/scalable/chat.svg \ + status/11/scalable/extended-away.svg \ + status/11/scalable/invisible.svg \ + status/11/scalable/offline.svg \ + status/11/scalable/person.svg + +STATUS_16_SCALABLE = \ + status/16/scalable/available.svg \ + status/16/scalable/away.svg \ + status/16/scalable/busy.svg \ + status/16/scalable/chat.svg \ + status/16/scalable/extended-away.svg \ + status/16/scalable/log-in.svg \ + status/16/scalable/log-out.svg \ + status/16/scalable/message-pending.svg \ + status/16/scalable/offline.svg \ + status/16/scalable/person.svg + +STATUS_22_SCALABLE = \ + status/22/scalable/available.svg \ + status/22/scalable/away.svg \ + status/22/scalable/busy.svg \ + status/22/scalable/chat.svg \ + status/22/scalable/extended-away.svg \ + status/22/scalable/log-in.svg \ + status/22/scalable/log-out.svg \ + status/22/scalable/offline.svg \ + status/22/scalable/person.svg + +STATUS_32_SCALABLE = \ + status/32/scalable/available.svg \ + status/32/scalable/away.svg \ + status/32/scalable/busy.svg \ + status/32/scalable/chat.svg \ + status/32/scalable/extended-away.svg \ + status/32/scalable/log-in.svg \ + status/32/scalable/log-out.svg \ + status/32/scalable/offline.svg \ + status/32/scalable/person.svg + +TOOLBAR_11 = \ + toolbar/11/message-new.png + +TOOLBAR_16_SCALABLE = \ + toolbar/16/scalable/change-bgcolor.svg \ + toolbar/16/scalable/change-fgcolor.svg \ + toolbar/16/scalable/emote-select.svg \ + toolbar/16/scalable/font-size-down.svg \ + toolbar/16/scalable/font-size-up.svg + +TOOLBAR_22_SCALABLE = \ + toolbar/22/scalable/select-avatar.svg + +TRAY_16_SCALABLE = \ + tray/16/scalable/tray-away.svg \ + tray/16/scalable/tray-busy.svg \ + tray/16/scalable/tray-connecting.svg \ + tray/16/scalable/tray-extended-away.svg \ + tray/16/scalable/tray-invisible.svg \ + tray/16/scalable/tray-message.svg \ + tray/16/scalable/tray-offline.svg \ + tray/16/scalable/tray-online.svg + +TRAY_22_SCALABLE = \ + tray/22/scalable/tray-invisible.svg EXTRA_DIST = \ edit.png \ @@ -10,7 +422,29 @@ arrow-right.xpm \ arrow-left.xpm \ Makefile.mingw \ - pidgin.ico + pidgin.ico \ + $(MAKEFILE_MINGW) \ + $(DIALOGS_16_SCALABLE) \ + $(DIALOGS_64_SCALABLE) \ + $(ICONS_16_SCALABLE) \ + $(ICONS_22_SCALABLE) \ + $(ICONS_24_SCALABLE) \ + $(ICONS_32_SCALABLE) \ + $(ICONS_48_SCALABLE) \ + $(EMBLEMS_16_SCALABLE) \ + $(EMOTES_DEFAULT_24_SCALABLE) \ + $(PROTOCOLS_16_SCALABLE) \ + $(PROTOCOLS_22_SCALABLE) \ + $(PROTOCOLS_48_SCALABLE) \ + $(STATUS_11_SCALABLE) \ + $(STATUS_16_SCALABLE) \ + $(STATUS_22_SCALABLE) \ + $(STATUS_32_SCALABLE) \ + $(TOOLBAR_11) \ + $(TOOLBAR_16_SCALABLE) \ + $(TOOLBAR_22_SCALABLE) \ + $(TRAY_16_SCALABLE) \ + $(TRAY_22_SCALABLE) pidginbuttonpixdir = $(datadir)/pixmaps/pidgin/buttons pidginbuttonpix_DATA = edit.png pause.png info.png @@ -18,3 +452,4 @@ pidgindistpixdir = $(datadir)/pixmaps/pidgin pidgindistpix_DATA = logo.png arrow-down.xpm arrow-left.xpm arrow-right.xpm arrow-up.xpm +nobase_dist_pidginpixmap_DATA = $(ANIMATIONS_16) diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/Makefile.mingw --- a/pidgin/pixmaps/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/Makefile.mingw Mon Nov 05 00:35:07 2007 +0000 @@ -15,7 +15,16 @@ install: if test '$(SUBDIRS)'; then \ list='$(SUBDIRS)'; for subdir in $$list; do \ + if [ "$$subdir" != "icons/22" ]; then \ $(MAKE) -C $$subdir -f $(MINGW_MAKEFILE) install || exit 1 ;\ + fi \ + done; \ + fi; + if test '$(nobase_dist_pidginpixmap_DATA)'; then \ + list='$(nobase_dist_pidginpixmap_DATA)'; for file in $$list; do \ + dir=`dirname $$file`; \ + mkdir -p $(pidginpixmapdir)/$$dir; \ + cp $$file $(pidginpixmapdir)/$$dir/; \ done; \ fi; if test '$(pidginbuttonpix_DATA)'; then \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/animations/16/Makefile.am --- a/pidgin/pixmaps/animations/16/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,18 +0,0 @@ -EXTRA_DIST = connect0.png \ - connect1.png \ - connect2.png \ - connect3.png \ - connect4.png \ - connect5.png \ - connect6.png \ - connect7.png \ - connect8.png \ - typing0.png \ - typing1.png \ - typing2.png \ - typing3.png \ - typing4.png \ - typing5.png - -pidginanimpixdir = $(datadir)/pixmaps/pidgin/animations/16 -pidginanimpix_DATA = $(EXTRA_DIST) diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/animations/16/Makefile.mingw --- a/pidgin/pixmaps/animations/16/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,20 +0,0 @@ -# -# Makefile.mingw -# -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps -# - -PIDGIN_TREE_TOP := ../../../.. -include $(PIDGIN_TREE_TOP)/libpurple/win32/global.mak - -datadir = $(PIDGIN_INSTALL_DIR) -include ./Makefile.am - -.PHONY: install - -install: - if test '$(pidginanimpix_DATA)'; then \ - mkdir -p $(pidginanimpixdir); \ - cp $(pidginanimpix_DATA) $(pidginanimpixdir); \ - fi; - diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/animations/Makefile.am --- a/pidgin/pixmaps/animations/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -SUBDIRS = 16 - -EXTRA_DIST = \ - Makefile.mingw \ - 16/Makefile.mingw diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/animations/Makefile.mingw --- a/pidgin/pixmaps/animations/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -# -# Makefile.mingw -# -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps -# - -include ./Makefile.am - -install: - if test '$(SUBDIRS)'; then \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - $(MAKE) -C $$subdir -f Makefile.mingw install || exit 1; \ - done; \ - fi; diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/buddy_icons/Makefile.am --- a/pidgin/pixmaps/buddy_icons/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -SUBDIRS = qq - -EXTRA_DIST = \ - Makefile.mingw \ - qq/Makefile.mingw diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/buddy_icons/Makefile.mingw --- a/pidgin/pixmaps/buddy_icons/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -# -# Makefile.mingw -# -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps -# - -include ./Makefile.am - -.PHONY: install - -install: - if test '$(SUBDIRS)'; then \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - $(MAKE) -C $$subdir -f Makefile.mingw install || exit 1; \ - done; \ - fi; diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/dialogs/16/Makefile.am --- a/pidgin/pixmaps/dialogs/16/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/dialogs/16/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = auth.png \ error.png \ info.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/dialogs/16/scalable/Makefile.am --- a/pidgin/pixmaps/dialogs/16/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -EXTRA_DIST = error.svg \ - info.svg \ - mail.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/dialogs/64/Makefile.am --- a/pidgin/pixmaps/dialogs/64/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/dialogs/64/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = auth.png \ cool.png \ dialog.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/dialogs/64/scalable/Makefile.am --- a/pidgin/pixmaps/dialogs/64/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -EXTRA_DIST = auth.svg \ - cool.svg \ - dialog.svg \ - error.svg \ - info.svg \ - question.svg \ - warning.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/dialogs/Makefile.am --- a/pidgin/pixmaps/dialogs/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -SUBDIRS = 16 64 - -EXTRA_DIST = \ - Makefile.mingw \ - 16/Makefile.mingw \ - 64/Makefile.mingw diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/dialogs/Makefile.mingw --- a/pidgin/pixmaps/dialogs/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -# -# Makefile.mingw -# -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps -# - -include ./Makefile.am - -.PHONY: install - -install: - if test '$(SUBDIRS)'; then \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - $(MAKE) -C $$subdir -f Makefile.mingw install || exit 1; \ - done; \ - fi; diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/emblems/16/Makefile.am --- a/pidgin/pixmaps/emblems/16/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/emblems/16/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = aol-client.png \ birthday.png \ blocked.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/emblems/16/scalable/Makefile.am --- a/pidgin/pixmaps/emblems/16/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -EXTRA_DIST = aol-client.svg \ - blocked.svg \ - bot.svg \ - external.svg \ - female.svg \ - free-for-chat.svg \ - game.svg \ - male.svg \ - mobile.svg \ - music.svg \ - not-authorized.svg \ - qq-member.svg \ - secure.svg \ - unavailable.svg \ - video.svg \ - voice.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/emblems/Makefile.am --- a/pidgin/pixmaps/emblems/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -SUBDIRS = 16 - -EXTRA_DIST = \ - Makefile.mingw \ - 16/Makefile.mingw diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/emblems/Makefile.mingw --- a/pidgin/pixmaps/emblems/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -# -# Makefile.mingw -# -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps -# - -include ./Makefile.am - -.PHONY: install - -install: - if test '$(SUBDIRS)'; then \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - $(MAKE) -C $$subdir -f Makefile.mingw install || exit 1; \ - done; \ - fi; diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/emotes/Makefile.am --- a/pidgin/pixmaps/emotes/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,3 +0,0 @@ -SUBDIRS=default none - -EXTRA_DIST = Makefile.mingw diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/emotes/Makefile.mingw --- a/pidgin/pixmaps/emotes/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,23 +0,0 @@ -# -# Makefile.mingw -# -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps -# - -include ./Makefile.am - -.PHONY: install clean - -install: - if test '$(SUBDIRS)'; then \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - $(MAKE) -C $$subdir -f Makefile.mingw install || exit 1; \ - done; \ - fi; - -clean: - if test '$(SUBDIRS)'; then \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - $(MAKE) -C $$subdir -f Makefile.mingw clean || exit 1; \ - done; \ - fi; diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/emotes/default/24/Makefile.am --- a/pidgin/pixmaps/emotes/default/24/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/emotes/default/24/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - SMILEYS = act-up.png \ airplane.png \ alien.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/emotes/default/24/scalable/Makefile.am --- a/pidgin/pixmaps/emotes/default/24/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,189 +0,0 @@ -SMILEYS = act-up.svg \ - airplane.svg \ - alien.svg \ - angel.svg \ - angry.svg \ - arrogant.svg \ - at-wits-end.svg \ - bad.svg \ - bashful.svg \ - beat-up.svg \ - beauty.svg \ - beer.svg \ - blowkiss.svg \ - bomb.svg \ - bowl.svg \ - boy.svg \ - brb.svg \ - bulgy-eyes.svg \ - bye.svg \ - cake.svg \ - call-me.svg \ - camera.svg \ - can.svg \ - car.svg \ - cat.svg \ - chicken.svg \ - clap.svg \ - clock.svg \ - cloudy.svg \ - clover.svg \ - clown.svg \ - coffee.svg \ - coins.svg \ - computer.svg \ - confused.svg \ - console.svg \ - cowboy.svg \ - cow.svg \ - crying.svg \ - curl-lip.svg \ - curse.svg \ - cute.svg \ - cyclops.svg \ - dance.svg \ - dazed.svg \ - desire.svg \ - devil.svg \ - disapointed.svg \ - disdain.svg \ - doctor.svg \ - dog.svg \ - doh.svg \ - dont-know.svg \ - drink.svg \ - drool.svg \ - eat.svg \ - embarrassed.svg \ - excruciating.svg \ - eyeroll.svg \ - female-fighter.svg \ - film.svg \ - fingers-crossed.svg \ - flag.svg \ - foot-in-mouth.svg \ - freaked-out.svg \ - ghost.svg \ - giggle.svg \ - girl.svg \ - glasses-cool.svg \ - glasses-nerdy.svg \ - goat.svg \ - go-away.svg \ - good.svg \ - hammer.svg \ - handcuffs.svg \ - handshake.svg \ - highfive.svg \ - hug-left.svg \ - hug-right.svg \ - hypnotized.svg \ - in-love.svg \ - island.svg \ - jump.svg \ - kissed.svg \ - kissing.svg \ - kiss.svg \ - knife.svg \ - lamp.svg \ - lashes.svg \ - laugh.svg \ - liquor.svg \ - loser.svg \ - love-over.svg \ - love.svg \ - lying.svg \ - madtongue.svg \ - mail.svg \ - male-fighter1.svg \ - male-fighter2.svg \ - mean.svg \ - meeting.svg \ - messed.svg \ - mobile.svg \ - mohawk.svg \ - moneymouth.svg \ - monkey.svg \ - moon.svg \ - msn-away.svg \ - msn-busy.svg \ - msn_online.svg \ - msn.svg \ - musical-note.svg \ - music.svg \ - nailbiting.svg \ - neutral.svg \ - on-the-phone.svg \ - party.svg \ - peace.svg \ - phone.svg \ - pig.svg \ - pill.svg \ - pirate.svg \ - pissed-off.svg \ - pizza.svg \ - plate.svg \ - poop.svg \ - pray.svg \ - present.svg \ - qq.svg \ - question.svg \ - quiet.svg \ - rainbow.svg \ - rain.svg \ - rose-dead.svg \ - rose.svg \ - rotfl.svg \ - sad.svg \ - sarcastic.svg \ - search.svg \ - secret.svg \ - shame.svg \ - sheep.svg \ - shock.svg \ - shout.svg \ - shut-mouth.svg \ - sick.svg \ - sidefrown.svg \ - sigarette.svg \ - silly.svg \ - sinister.svg \ - skeleton.svg \ - skywalker.svg \ - sleepy.svg \ - smile-big.svg \ - smile.svg \ - smirk.svg \ - snail.svg \ - snicker.svg \ - snowman.svg \ - soccerball.svg \ - soldier.svg \ - star.svg \ - starving.svg \ - stop.svg \ - struggle.svg \ - sun.svg \ - sweat.svg \ - talktohand.svg \ - teeth.svg \ - terror.svg \ - thinking.svg \ - thunder.svg \ - time-out.svg \ - tongue.svg \ - tremble.svg \ - turtle.svg \ - tv.svg \ - umbrella.svg \ - vampire.svg \ - victory.svg \ - waiting.svg \ - watermelon.svg \ - waving.svg \ - weep.svg \ - wilt.svg \ - wink.svg \ - worship.svg \ - yawn.svg \ - yin-yang.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/emotes/default/Makefile.am --- a/pidgin/pixmaps/emotes/default/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -SUBDIRS=24 - -EXTRA_DIST= \ - Makefile.mingw \ - 24/Makefile.mingw diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/icons/16/Makefile.am --- a/pidgin/pixmaps/icons/16/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/icons/16/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = pidgin.png pidginiconspixdir = $(datadir)/icons/hicolor/16x16/apps diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/icons/16/scalable/Makefile.am --- a/pidgin/pixmaps/icons/16/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -EXTRA_DIST = pidgin.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/icons/22/Makefile.am --- a/pidgin/pixmaps/icons/22/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/icons/22/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = pidgin.png pidginiconspixdir = $(datadir)/icons/hicolor/22x22/apps diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/icons/22/scalable/Makefile.am --- a/pidgin/pixmaps/icons/22/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -EXTRA_DIST = pidgin.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/icons/24/Makefile.am --- a/pidgin/pixmaps/icons/24/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/icons/24/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = pidgin.png pidginiconspixdir = $(datadir)/icons/hicolor/24x24/apps diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/icons/24/scalable/Makefile.am --- a/pidgin/pixmaps/icons/24/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -EXTRA_DIST = pidgin.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/icons/32/Makefile.am --- a/pidgin/pixmaps/icons/32/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/icons/32/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = pidgin.png pidginiconspixdir = $(datadir)/icons/hicolor/32x32/apps diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/icons/32/scalable/Makefile.am --- a/pidgin/pixmaps/icons/32/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -EXTRA_DIST = pidgin.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/icons/48/Makefile.am --- a/pidgin/pixmaps/icons/48/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/icons/48/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = pidgin.png pidginiconspixdir = $(datadir)/icons/hicolor/48x48/apps diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/icons/48/scalable/Makefile.am --- a/pidgin/pixmaps/icons/48/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,6 +0,0 @@ -EXTRA_DIST = pidgin.svg - -pidginiconspixdir = $(datadir)/icons/hicolor/scalable/apps - -pidginiconspix_DATA = $(EXTRA_DIST) - diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/icons/Makefile.am --- a/pidgin/pixmaps/icons/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -SUBDIRS = 16 22 24 32 48 - -EXTRA_DIST = \ - Makefile.mingw \ - 16/Makefile.mingw \ - 24/Makefile.mingw \ - 32/Makefile.mingw \ - 48/Makefile.mingw - diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/icons/Makefile.mingw --- a/pidgin/pixmaps/icons/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,19 +0,0 @@ -# -# Makefile.mingw -# -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps -# - -include ./Makefile.am - -install: - -install_real: - if test '$(SUBDIRS)'; then \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - if [ "$$subdir" != "22" ]; then \ - $(MAKE) -C $$subdir -f Makefile.mingw install || exit 1; \ - fi; \ - done; \ - fi; - diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/protocols/16/Makefile.am --- a/pidgin/pixmaps/protocols/16/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/protocols/16/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = aim.png \ bonjour.png \ gadu-gadu.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/protocols/16/scalable/Makefile.am --- a/pidgin/pixmaps/protocols/16/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -EXTRA_DIST = aim.svg \ - bonjour.svg \ - gadu-gadu.svg \ - novell.svg \ - icq.svg \ - irc.svg \ - jabber.svg \ - meanwhile.svg \ - msn.svg \ - qq.svg \ - silc.svg \ - simple.svg \ - yahoo.svg \ - zephyr.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/protocols/22/Makefile.am --- a/pidgin/pixmaps/protocols/22/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/protocols/22/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = aim.png \ bonjour.png \ gadu-gadu.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/protocols/22/scalable/Makefile.am --- a/pidgin/pixmaps/protocols/22/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -EXTRA_DIST = aim.svg \ - bonjour.svg \ - gadu-gadu.svg \ - novell.svg \ - icq.svg \ - irc.svg \ - jabber.svg \ - meanwhile.svg \ - msn.svg \ - qq.svg \ - silc.svg \ - simple.svg \ - yahoo.svg \ - zephyr.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/protocols/48/Makefile.am --- a/pidgin/pixmaps/protocols/48/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/protocols/48/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = aim.png \ bonjour.png \ gadu-gadu.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/protocols/48/scalable/Makefile.am --- a/pidgin/pixmaps/protocols/48/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -EXTRA_DIST = aim.svg \ - bonjour.svg \ - gadu-gadu.svg \ - google-talk.svg \ - novell.svg \ - icq.svg \ - irc.svg \ - jabber.svg \ - meanwhile.svg \ - msn.svg \ - qq.svg \ - silc.svg \ - simple.svg \ - yahoo.svg \ - zephyr.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/protocols/Makefile.am --- a/pidgin/pixmaps/protocols/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -SUBDIRS = 16 22 48 - -EXTRA_DIST = \ - Makefile.mingw \ - 16/Makefile.mingw \ - 22/Makefile.mingw \ - 48/Makefile.mingw - diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/protocols/Makefile.mingw --- a/pidgin/pixmaps/protocols/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,16 +0,0 @@ -# -# Makefile.mingw -# -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps -# - -include ./Makefile.am - -.PHONY: install - -install: - if test '$(SUBDIRS)'; then \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - $(MAKE) -C $$subdir -f Makefile.mingw install || exit 1; \ - done; \ - fi; diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/status/11/Makefile.am --- a/pidgin/pixmaps/status/11/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/status/11/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,4 +1,4 @@ -SUBDIRS = scalable rtl +SUBDIRS = rtl EXTRA_DIST = available.png \ away.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/status/11/scalable/Makefile.am --- a/pidgin/pixmaps/status/11/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,8 +0,0 @@ -EXTRA_DIST = available.svg \ - away.svg \ - busy.svg \ - chat.svg \ - extended-away.svg \ - invisible.svg \ - offline.svg \ - person.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/status/16/Makefile.am --- a/pidgin/pixmaps/status/16/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/status/16/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,4 +1,4 @@ -SUBDIRS = rtl scalable +SUBDIRS = rtl EXTRA_DIST = available.png \ away.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/status/16/scalable/Makefile.am --- a/pidgin/pixmaps/status/16/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,13 +0,0 @@ -EXTRA_DIST = available.svg \ - away.svg \ - busy.svg \ - chat.svg \ - extended-away.svg \ - log-in.svg \ - log-out.svg \ - message-pending.svg \ - offline.svg \ - person.svg - -# half-operator.svg -# operator.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/status/22/Makefile.am --- a/pidgin/pixmaps/status/22/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/status/22/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,4 +1,4 @@ -SUBDIRS = rtl scalable +SUBDIRS = rtl EXTRA_DIST = available.png \ away.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/status/22/scalable/Makefile.am --- a/pidgin/pixmaps/status/22/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -EXTRA_DIST = available.svg \ - away.svg \ - busy.svg \ - chat.svg \ - extended-away.svg \ - log-in.svg \ - log-out.svg \ - offline.svg \ - person.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/status/32/Makefile.am --- a/pidgin/pixmaps/status/32/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/status/32/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,4 +1,4 @@ -SUBDIRS = rtl scalable +SUBDIRS = rtl EXTRA_DIST = available.png \ away.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/status/32/scalable/Makefile.am --- a/pidgin/pixmaps/status/32/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -EXTRA_DIST = available.svg \ - away.svg \ - busy.svg \ - chat.svg \ - extended-away.svg \ - log-in.svg \ - log-out.svg \ - offline.svg \ - person.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/status/Makefile.am --- a/pidgin/pixmaps/status/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,15 +0,0 @@ -SUBDIRS = 11 16 22 32 48 - -EXTRA_DIST = \ - Makefile.mingw \ - 11/Makefile.mingw \ - 11/rtl/Makefile.mingw \ - 16/Makefile.mingw \ - 16/rtl/Makefile.mingw \ - 22/Makefile.mingw \ - 22/rtl/Makefile.mingw \ - 32/Makefile.mingw \ - 32/rtl/Makefile.mingw \ - 48/Makefile.mingw \ - 48/rtl/Makefile.mingw - diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/status/Makefile.mingw --- a/pidgin/pixmaps/status/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -# -# Makefile.mingw -# -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps -# - -include ./Makefile.am - -install: - if test '$(SUBDIRS)'; then \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - $(MAKE) -C $$subdir -f Makefile.mingw install || exit 1; \ - done; \ - fi; diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/toolbar/16/Makefile.am --- a/pidgin/pixmaps/toolbar/16/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/toolbar/16/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = change-bgcolor.png \ change-fgcolor.png \ emote-select.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/toolbar/16/scalable/Makefile.am --- a/pidgin/pixmaps/toolbar/16/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,5 +0,0 @@ -EXTRA_DIST = change-bgcolor.svg \ - change-fgcolor.svg \ - emote-select.svg \ - font-size-down.svg \ - font-size-up.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/toolbar/22/Makefile.am --- a/pidgin/pixmaps/toolbar/22/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/toolbar/22/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - EXTRA_DIST = select-avatar.png pidgintoolbarpixdir = $(datadir)/pixmaps/pidgin/toolbar/22 diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/toolbar/22/scalable/Makefile.am --- a/pidgin/pixmaps/toolbar/22/scalable/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,1 +0,0 @@ -EXTRA_DIST = select-avatar.svg diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/toolbar/Makefile.am --- a/pidgin/pixmaps/toolbar/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,11 +0,0 @@ -SUBDIRS = 16 22 - -TINY_ICONS = 11/message-new.png -EXTRA_DIST = \ - Makefile.mingw \ - 16/Makefile.mingw \ - 22/Makefile.mingw \ - $(TINY_ICONS) - -pidgintinytoolbarpixdir = $(datadir)/pixmaps/pidgin/toolbar/11 -pidgintinytoolbarpix_DATA = $(TINY_ICONS) diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/toolbar/Makefile.mingw --- a/pidgin/pixmaps/toolbar/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -# -# Makefile.mingw -# -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps -# - -include ./Makefile.am - -install: - if test '$(SUBDIRS)'; then \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - $(MAKE) -C $$subdir -f Makefile.mingw install || exit 1; \ - done; \ - fi; diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/tray/16/Makefile.am --- a/pidgin/pixmaps/tray/16/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/tray/16/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - TRAY_ICONS = tray-away.png \ tray-busy.png \ tray-invisible.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/tray/22/Makefile.am --- a/pidgin/pixmaps/tray/22/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/pixmaps/tray/22/Makefile.am Mon Nov 05 00:35:07 2007 +0000 @@ -1,5 +1,3 @@ -SUBDIRS = scalable - TRAY_ICONS = tray-away.png \ tray-busy.png \ tray-connecting.png \ diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/tray/Makefile.am --- a/pidgin/pixmaps/tray/Makefile.am Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,9 +0,0 @@ -SUBDIRS = 16 22 32 48 - -EXTRA_DIST = \ - Makefile.mingw \ - 16/Makefile.mingw \ - 22/Makefile.mingw \ - 32/Makefile.mingw \ - 48/Makefile.mingw - diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/pixmaps/tray/Makefile.mingw --- a/pidgin/pixmaps/tray/Makefile.mingw Sun Nov 04 22:17:45 2007 +0000 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,14 +0,0 @@ -# -# Makefile.mingw -# -# Description: Makefile for win32 (mingw) version of Pidgin pixmaps -# - -include ./Makefile.am - -install: - if test '$(SUBDIRS)'; then \ - list='$(SUBDIRS)'; for subdir in $$list; do \ - $(MAKE) -C $$subdir -f Makefile.mingw install || exit 1; \ - done; \ - fi; diff -r 1d92b85ef5d9 -r 7be910c7cff7 pidgin/win32/nsis/pidgin-installer.nsi --- a/pidgin/win32/nsis/pidgin-installer.nsi Sun Nov 04 22:17:45 2007 +0000 +++ b/pidgin/win32/nsis/pidgin-installer.nsi Mon Nov 05 00:35:07 2007 +0000 @@ -698,6 +698,7 @@ Delete "$INSTDIR\ca-certs\Equifax_Secure_CA.pem" Delete "$INSTDIR\ca-certs\GTE_CyberTrust_Global_Root.pem" + Delete "$INSTDIR\ca-certs\Microsoft_Secure_Server_Authority.pem" Delete "$INSTDIR\ca-certs\Verisign_Class3_Extended_Validation_CA.pem" Delete "$INSTDIR\ca-certs\Verisign_Class3_Primary_CA.pem" Delete "$INSTDIR\ca-certs\Verisign_RSA_Secure_Server_CA.pem" @@ -750,6 +751,7 @@ Delete "$INSTDIR\plugins\win2ktrans.dll" Delete "$INSTDIR\plugins\winprefs.dll" RMDir "$INSTDIR\plugins" + RMDir /r "$INSTDIR\sasl2" Delete "$INSTDIR\sounds\purple\alert.wav" Delete "$INSTDIR\sounds\purple\login.wav" Delete "$INSTDIR\sounds\purple\logout.wav" @@ -757,23 +759,28 @@ Delete "$INSTDIR\sounds\purple\send.wav" RMDir "$INSTDIR\sounds\purple" RMDir "$INSTDIR\sounds" + Delete "$INSTDIR\comerr32.dll" Delete "$INSTDIR\freebl3.dll" + Delete "$INSTDIR\gssapi32.dll" Delete "$INSTDIR\idletrack.dll" + Delete "$INSTDIR\k5sprt32.dll" + Delete "$INSTDIR\krb5_32.dll" Delete "$INSTDIR\libgtkspell.dll" Delete "$INSTDIR\libjabber.dll" + Delete "$INSTDIR\libmeanwhile-1.dll" Delete "$INSTDIR\liboscar.dll" Delete "$INSTDIR\libpurple.dll" - Delete "$INSTDIR\libmeanwhile-1.dll" + Delete "$INSTDIR\libsasl.dll" + Delete "$INSTDIR\libsilc-1-1-2.dll" + Delete "$INSTDIR\libsilcclient-1-1-2.dll" Delete "$INSTDIR\libxml2.dll" Delete "$INSTDIR\nspr4.dll" Delete "$INSTDIR\nss3.dll" Delete "$INSTDIR\nssckbi.dll" + Delete "$INSTDIR\pidgin.dll" Delete "$INSTDIR\pidgin.exe" - Delete "$INSTDIR\pidgin.dll" Delete "$INSTDIR\plc4.dll" Delete "$INSTDIR\plds4.dll" - Delete "$INSTDIR\libsilc-1-1-2.dll" - Delete "$INSTDIR\libsilcclient-1-1-2.dll" Delete "$INSTDIR\smime3.dll" Delete "$INSTDIR\softokn3.dll" Delete "$INSTDIR\ssl3.dll" diff -r 1d92b85ef5d9 -r 7be910c7cff7 po/mk.po --- a/po/mk.po Sun Nov 04 22:17:45 2007 +0000 +++ b/po/mk.po Mon Nov 05 00:35:07 2007 +0000 @@ -11,7 +11,7 @@ "Project-Id-Version: mk\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2007-09-28 15:32-0500\n" -"PO-Revision-Date: 2007-09-09 21:21+0200\n" +"PO-Revision-Date: 2007-11-03 22:57+0100\n" "Last-Translator: Arangel Angov \n" "Language-Team: Macedonian \n" "MIME-Version: 1.0\n" @@ -484,8 +484,7 @@ #: ../finch/gntblist.c:1079 msgid "Removing this contact will also remove all the buddies in the contact" -msgstr "" -"Отстранување на овој контакт ќе ги отстрани и другите пријатели во контактот" +msgstr "Отстранување на овој контакт ќе ги отстрани и другите пријатели во контактот" #: ../finch/gntblist.c:1087 msgid "Removing this group will also remove all the buddies in the group" @@ -623,8 +622,7 @@ msgstr "Нова инстант порака" #: ../finch/gntblist.c:2218 ../pidgin/gtkdialogs.c:769 -msgid "" -"Please enter the screen name or alias of the person you would like to IM." +msgid "Please enter the screen name or alias of the person you would like to IM." msgstr "" "Внесете го името или алијасот на пријателот на кој што сакате да му " "испратите порака." @@ -676,12 +674,10 @@ msgstr "Испрати ИП..." #: ../finch/gntblist.c:2251 -#, fuzzy msgid "Show empty groups" msgstr "Покажи празни групи" #: ../finch/gntblist.c:2257 -#, fuzzy msgid "Show offline buddies" msgstr "Покажи исклучени пријатели" @@ -698,17 +694,16 @@ msgstr "Подреди по големина на лог" #: ../finch/gntcertmgr.c:86 ../pidgin/gtkcertmgr.c:188 -#, fuzzy msgid "Certificate Import" -msgstr "Порт за поврзување" +msgstr "Увоз на сертификат" #: ../finch/gntcertmgr.c:87 ../pidgin/gtkcertmgr.c:189 msgid "Specify a hostname" -msgstr "" +msgstr "Одредете име на хост" #: ../finch/gntcertmgr.c:88 ../pidgin/gtkcertmgr.c:190 msgid "Type the host name this certificate is for." -msgstr "" +msgstr "Внесете име на хост за сертификатот." #: ../finch/gntcertmgr.c:97 ../pidgin/gtkcertmgr.c:210 #, c-format @@ -716,19 +711,20 @@ "File %s could not be imported.\n" "Make sure that the file is readable and in PEM format.\n" msgstr "" +"Датотеката %s не може да биде увезена.\n" +"Осигурајте се дека датотеката е читлива во PEM формат.\n" #: ../finch/gntcertmgr.c:99 ../pidgin/gtkcertmgr.c:212 msgid "Certificate Import Error" -msgstr "" +msgstr "Грешка при увоз на сертификатот" #: ../finch/gntcertmgr.c:100 ../pidgin/gtkcertmgr.c:213 msgid "X.509 certificate import failed" -msgstr "" +msgstr "Увозот на X.509 сертификатот не успеа" #: ../finch/gntcertmgr.c:110 ../pidgin/gtkcertmgr.c:224 -#, fuzzy msgid "Select a PEM certificate" -msgstr "Изберете датотека" +msgstr "Изберете PEM сертификат" #: ../finch/gntcertmgr.c:127 ../pidgin/gtkcertmgr.c:245 #, c-format @@ -739,20 +735,20 @@ #: ../finch/gntcertmgr.c:129 ../pidgin/gtkcertmgr.c:247 msgid "Certificate Export Error" -msgstr "" +msgstr "Грешка при извоз на сертификатот" #: ../finch/gntcertmgr.c:130 ../pidgin/gtkcertmgr.c:248 msgid "X.509 certificate export failed" -msgstr "" +msgstr "Не успеа извозот на X.509 сертификатот" #: ../finch/gntcertmgr.c:159 ../pidgin/gtkcertmgr.c:299 msgid "PEM X.509 Certificate Export" -msgstr "" +msgstr "Извоз на сертификат PEM X.509" #: ../finch/gntcertmgr.c:188 -#, fuzzy, c-format +#, c-format msgid "Certificate for %s" -msgstr "Статус за %s" +msgstr "Сертификат за %s" #: ../finch/gntcertmgr.c:195 #, c-format @@ -762,23 +758,27 @@ "SHA1 fingerprint:\n" "%s" msgstr "" +"Common name: %s\n" +"\n" +"SHA1 fingerprint:\n" +"%s" #: ../finch/gntcertmgr.c:198 msgid "SSL Host Certificate" -msgstr "" +msgstr "SSL хост сертификат" #: ../finch/gntcertmgr.c:233 ../pidgin/gtkcertmgr.c:372 #, c-format msgid "Really delete certificate for %s?" -msgstr "" +msgstr "Стварно да го избришанм сертификатот за %s?" #: ../finch/gntcertmgr.c:236 ../pidgin/gtkcertmgr.c:374 msgid "Confirm certificate delete" -msgstr "" +msgstr "Потврда за бришење на сертификатот" #: ../finch/gntcertmgr.c:293 ../pidgin/gtkcertmgr.c:602 msgid "Certificate Manager" -msgstr "" +msgstr "Менаџер за сертификати" #. Creating the user splits #: ../finch/gntcertmgr.c:298 ../libpurple/protocols/bonjour/bonjour.c:652 @@ -835,8 +835,7 @@ #: ../finch/gntconv.c:143 ../pidgin/gtkconv.c:489 msgid "Syntax Error: You typed the wrong number of arguments to that command." -msgstr "" -"Грешка во синтаксата: Внесовте погрешен број на аргументи за таа команда." +msgstr "Грешка во синтаксата: Внесовте погрешен број на аргументи за таа команда." #: ../finch/gntconv.c:148 ../pidgin/gtkconv.c:495 msgid "Your command failed for an unknown reason." @@ -855,9 +854,8 @@ msgstr "Оваа команда не работи со овој протокол." #: ../finch/gntconv.c:168 -#, fuzzy msgid "Message was not sent, because you are not signed on." -msgstr "Пораката не може да се испрати бидејќи праќате премногу брзо:" +msgstr "Пораката не може да се испрати бидејќи не сте најавени." #: ../finch/gntconv.c:251 #, c-format @@ -887,10 +885,8 @@ msgstr "Логирањето започна. Идните пораки во овој разговор ќе бидат логирани." #: ../finch/gntconv.c:393 ../pidgin/gtkconv.c:1370 -msgid "" -"Logging stopped. Future messages in this conversation will not be logged." -msgstr "" -"Логирањето е запрено. Идните пораки во овој разговор нема да бидат логирани." +msgid "Logging stopped. Future messages in this conversation will not be logged." +msgstr "Логирањето е запрено. Идните пораки во овој разговор нема да бидат логирани." #: ../finch/gntconv.c:442 msgid "Send To" @@ -913,14 +909,12 @@ msgstr "Додај дејство за пријател..." #: ../finch/gntconv.c:527 -#, fuzzy msgid "Enable Logging" -msgstr "/Опции/Овозможи логирање" +msgstr "Вклучи логирање" #: ../finch/gntconv.c:533 -#, fuzzy msgid "Enable Sounds" -msgstr "Вклучи звуци:" +msgstr "Вклучи звуци" #: ../finch/gntconv.c:739 msgid " " @@ -1113,7 +1107,7 @@ #: ../finch/gntft.c:431 #, c-format msgid "The file was saved as %s." -msgstr "" +msgstr "Датотеката е зачувана како %s." #: ../finch/gntft.c:432 ../finch/gntft.c:433 ../pidgin/gtkft.c:163 #: ../pidgin/gtkft.c:1116 @@ -1341,18 +1335,16 @@ msgstr "Од време на време" #: ../finch/gntpounce.c:618 -#, fuzzy msgid "Cannot create pounce" -msgstr "Не можам да го променам прекарот" +msgstr "Не можам да креирам дејство" #: ../finch/gntpounce.c:619 -#, fuzzy msgid "You do not have any accounts." -msgstr "Мора да одредите сметка." +msgstr "Немате ниедна сметка." #: ../finch/gntpounce.c:620 msgid "You must create an account first before you can create a pounce." -msgstr "" +msgstr "Мора да креирате сметка пред да креирате дејство." #: ../finch/gntpounce.c:662 ../pidgin/gtkpounce.c:1096 #, c-format @@ -1771,7 +1763,7 @@ #: ../finch/gntui.c:85 msgid "Certificates" -msgstr "" +msgstr "Сертификати" #: ../finch/gntui.c:89 ../pidgin/gtkprefs.c:2035 msgid "Sounds" @@ -1783,23 +1775,20 @@ #: ../finch/plugins/gntclipboard.c:115 ../finch/plugins/gntclipboard.c:121 #: ../finch/plugins/gntclipboard.c:128 -#, fuzzy msgid "Error loading the plugin." -msgstr "Се појавија грешки при вадење на додатокот." +msgstr "Грешка при вчитување на додатокот." #: ../finch/plugins/gntclipboard.c:116 -#, fuzzy msgid "Couldn't find X display" -msgstr "Не можам да ја отворам датотеката" +msgstr "Не можам да го најдам X приказот" #: ../finch/plugins/gntclipboard.c:122 -#, fuzzy msgid "Couldn't find window" -msgstr "Не можам да ја отворам датотеката" +msgstr "Не можам да го најдам прозорецот" #: ../finch/plugins/gntclipboard.c:129 msgid "This plugin cannot be loaded because it was not built with X11 support." -msgstr "" +msgstr "Додатокот не може да биде вчитан поради тоа што не е избилдан со подршка X11." #: ../finch/plugins/gntclipboard.c:158 msgid "GntClipboard" @@ -2026,7 +2015,7 @@ #: ../libpurple/certificate.c:545 msgid "(DOES NOT MATCH)" -msgstr "" +msgstr "(НЕ СЕ СОВПАЃА)" #. Make messages #: ../libpurple/certificate.c:549 @@ -2060,20 +2049,19 @@ #. Make messages #: ../libpurple/certificate.c:1171 -#, fuzzy, c-format +#, c-format msgid "Accept certificate for %s?" -msgstr "Прифати ја поканата за разговор?" +msgstr "Прифати сертификат за %s?" #. TODO: Find what the handle ought to be #: ../libpurple/certificate.c:1177 msgid "SSL Certificate Verification" -msgstr "" +msgstr "Проверка на SSL сертификат" #. Number of actions #: ../libpurple/certificate.c:1186 -#, fuzzy msgid "Accept" -msgstr "_Прифати" +msgstr "Прифати" #: ../libpurple/certificate.c:1187 ../libpurple/protocols/qq/buddy_opt.c:214 #: ../libpurple/protocols/qq/group_im.c:144 @@ -2085,7 +2073,7 @@ #: ../libpurple/certificate.c:1188 msgid "_View Certificate..." -msgstr "" +msgstr "_Види сертификат..." #. Prompt the user to authenticate the certificate #. TODO: Provide the user with more guidance about why he is @@ -2118,14 +2106,12 @@ #. TODO: Probably wrong. #. TODO: Probably wrong #: ../libpurple/certificate.c:1339 ../libpurple/certificate.c:1416 -#, fuzzy msgid "SSL Certificate Error" -msgstr "Грешка во запишувањето" +msgstr "Грешка во SSL сертификатот" #: ../libpurple/certificate.c:1340 -#, fuzzy msgid "Invalid certificate chain" -msgstr "Невалиден наслов" +msgstr "Невалиден синџир на сертификати" #. vrq will be completed by user_auth #: ../libpurple/certificate.c:1360 @@ -2136,8 +2122,7 @@ #. vrq will be completed by user_auth #: ../libpurple/certificate.c:1382 -msgid "" -"The root certificate this one claims to be issued by is unknown to Pidgin." +msgid "The root certificate this one claims to be issued by is unknown to Pidgin." msgstr "" #: ../libpurple/certificate.c:1408 @@ -2166,18 +2151,16 @@ #. TODO: Find what the handle ought to be #: ../libpurple/certificate.c:1890 -#, fuzzy msgid "Certificate Information" -msgstr "Информации за серверот" +msgstr "Информации за сертификатот" #: ../libpurple/connection.c:107 msgid "Registration Error" msgstr "Грешка во регистрацијата" #: ../libpurple/connection.c:180 -#, fuzzy msgid "Unregistration Error" -msgstr "Грешка во регистрацијата" +msgstr "Грешка при дерегестрација" #: ../libpurple/connection.c:350 #, c-format @@ -2269,8 +2252,7 @@ #: ../libpurple/dbus-server.h:85 msgid "Purple's D-BUS server is not running for the reason listed below" -msgstr "" -"D-BUS серверот на Purple не се извршува поради причините наведени подолу" +msgstr "D-BUS серверот на Purple не се извршува поради причините наведени подолу" #: ../libpurple/desktopitem.c:287 ../libpurple/desktopitem.c:878 msgid "No name" @@ -2462,38 +2444,31 @@ #: ../libpurple/gconf/purple.schemas.in.h:3 msgid "The command used to handle \"gg\" URLs, if enabled." -msgstr "" -"Командата која се користи за справување со „gg“ URL, ако тоа е овозможено." +msgstr "Командата која се користи за справување со „gg“ URL, ако тоа е овозможено." #: ../libpurple/gconf/purple.schemas.in.h:4 msgid "The command used to handle \"icq\" URLs, if enabled." -msgstr "" -"Командата која се користи за справување со „icq“ URL, ако тоа е овозможено." +msgstr "Командата која се користи за справување со „icq“ URL, ако тоа е овозможено." #: ../libpurple/gconf/purple.schemas.in.h:5 msgid "The command used to handle \"irc\" URLs, if enabled." -msgstr "" -"Командата која се користи за справување со „irc“ URL, ако тоа е овозможено." +msgstr "Командата која се користи за справување со „irc“ URL, ако тоа е овозможено." #: ../libpurple/gconf/purple.schemas.in.h:6 msgid "The command used to handle \"msnim\" URLs, if enabled." -msgstr "" -"Командата која се користи за справување со „msnim“ URL, ако тоа е овозможено." +msgstr "Командата која се користи за справување со „msnim“ URL, ако тоа е овозможено." #: ../libpurple/gconf/purple.schemas.in.h:7 msgid "The command used to handle \"sip\" URLs, if enabled." -msgstr "" -"Командата која се користи за справување со „sip“ URL, ако тоа е овозможено." +msgstr "Командата која се користи за справување со „sip“ URL, ако тоа е овозможено." #: ../libpurple/gconf/purple.schemas.in.h:8 msgid "The command used to handle \"xmpp\" URLs, if enabled." -msgstr "" -"Командата која се користи за справување со „xmpp“ URL, ако тоа е овозможено." +msgstr "Командата која се користи за справување со „xmpp“ URL, ако тоа е овозможено." #: ../libpurple/gconf/purple.schemas.in.h:9 msgid "The command used to handle \"ymsgr\" URLs, if enabled." -msgstr "" -"Командата која се користи за справување со „ymsgr“ URL, ако тоа е овозможено." +msgstr "Командата која се користи за справување со „ymsgr“ URL, ако тоа е овозможено." #: ../libpurple/gconf/purple.schemas.in.h:10 msgid "The handler for \"aim\" URLs" @@ -2675,8 +2650,7 @@ #: ../libpurple/log.c:1426 ../libpurple/log.c:1559 msgid "Unable to find log path!" -msgstr "" -"Не можам да ја најдам патеката на логот!" +msgstr "Не можам да ја најдам патеката на логот!" #: ../libpurple/log.c:1438 ../libpurple/log.c:1568 #, c-format @@ -2754,8 +2728,7 @@ #: ../libpurple/plugins/autoaccept.c:80 #, c-format msgid "Autoaccepted file transfer of \"%s\" from \"%s\" completed." -msgstr "" -"Автоматски прифатениот пренос на датотеки на \"%s\" од \"%s\" е завршен." +msgstr "Автоматски прифатениот пренос на датотеки на \"%s\" од \"%s\" е завршен." #: ../libpurple/plugins/autoaccept.c:82 msgid "Autoaccept complete" @@ -3090,8 +3063,7 @@ #: ../libpurple/plugins/log_reader.c:1643 msgid "Message could not be sent because the maximum length was exceeded." -msgstr "" -"Пораката не може да се испрати бидејќи е надмината максималната должина." +msgstr "Пораката не може да се испрати бидејќи е надмината максималната должина." #: ../libpurple/plugins/log_reader.c:1648 msgid "Message could not be sent." @@ -3241,8 +3213,7 @@ #: ../libpurple/plugins/offlinemsg.c:25 ../libpurple/plugins/offlinemsg.c:26 msgid "Save messages sent to an offline user as pounce." -msgstr "" -"Зачувај ги пораките испратени до офлајн корисниците како дејство за пријател." +msgstr "Зачувај ги пораките испратени до офлајн корисниците како дејство за пријател." #: ../libpurple/plugins/offlinemsg.c:95 msgid "" @@ -3267,8 +3238,7 @@ #: ../libpurple/plugins/offlinemsg.c:161 msgid "You can edit/delete the pounce from the `Buddy Pounces' dialog" -msgstr "" -"Можете да го уредувате/бришете дејството од дијалогот „Дејства за пријатели“" +msgstr "Можете да го уредувате/бришете дејството од дијалогот „Дејства за пријатели“" #: ../libpurple/plugins/offlinemsg.c:165 #: ../libpurple/protocols/msn/dialog.c:133 @@ -3540,10 +3510,8 @@ msgstr "Не можам да слушам за доаѓачки врски\n" #: ../libpurple/protocols/bonjour/bonjour.c:137 -msgid "" -"Unable to establish connection with the local mDNS server. Is it running?" -msgstr "" -"Не можам да воспоставам врска со локалниот mDNS сервер. Дали се извршува?" +msgid "Unable to establish connection with the local mDNS server. Is it running?" +msgstr "Не можам да воспоставам врска со локалниот mDNS сервер. Дали се извршува?" #. Creating the options for the protocol #: ../libpurple/protocols/bonjour/bonjour.c:351 @@ -3671,8 +3639,7 @@ #: ../libpurple/protocols/gg/gg.c:270 msgid "Your buddylist is empty, nothing was written to the file." -msgstr "" -"Вашата листа со пријатели е празна, па ништо не се запиша во датотеката." +msgstr "Вашата листа со пријатели е празна, па ништо не се запиша во датотеката." #: ../libpurple/protocols/gg/gg.c:276 ../libpurple/protocols/gg/gg.c:278 msgid "Couldn't open file" @@ -4632,8 +4599,7 @@ #: ../libpurple/protocols/irc/parse.c:150 msgid "umode <+|-><A-Za-z>: Set or unset a user mode." -msgstr "" -"umode <+|-><A-Za-z>: Постави го или тргни го корисничкиот режим." +msgstr "umode <+|-><A-Za-z>: Постави го или тргни го корисничкиот режим." #: ../libpurple/protocols/irc/parse.c:151 msgid "version [nick]: send CTCP VERSION request to a user" @@ -4661,8 +4627,7 @@ #: ../libpurple/protocols/irc/parse.c:155 msgid "whowas <nick>: Get information on a user that has logged off." -msgstr "" -"whowas <nick>: Добијте информации за корисник кој што се одјавил." +msgstr "whowas <nick>: Добијте информации за корисник кој што се одјавил." #: ../libpurple/protocols/irc/parse.c:465 #, c-format @@ -4693,14 +4658,12 @@ #: ../libpurple/protocols/jabber/adhoccommands.c:139 #: ../libpurple/protocols/jabber/adhoccommands.c:140 -#, fuzzy msgid "Ad-Hoc Command Failed" -msgstr "Командата е исклучена" +msgstr "Ад-хок командата не успеа" #: ../libpurple/protocols/jabber/adhoccommands.c:173 -#, fuzzy msgid "execute" -msgstr "Не е очекувано" +msgstr "изврши" #: ../libpurple/protocols/jabber/auth.c:53 msgid "Server requires TLS/SSL for login. No TLS/SSL support found." @@ -4708,8 +4671,7 @@ #: ../libpurple/protocols/jabber/auth.c:116 msgid "Server requires plaintext authentication over an unencrypted stream" -msgstr "" -"Серверот бара проверка на автентичност со чист текст преку неенкриптиран тек" +msgstr "Серверот бара проверка на автентичност со чист текст преку неенкриптиран тек" #: ../libpurple/protocols/jabber/auth.c:319 #: ../libpurple/protocols/jabber/auth.c:508 @@ -4883,13 +4845,12 @@ #: ../libpurple/protocols/jabber/buddy.c:815 #: ../libpurple/protocols/jabber/buddy.c:975 msgid "Last Activity" -msgstr "" +msgstr "Последна активност" #: ../libpurple/protocols/jabber/buddy.c:817 #: ../libpurple/protocols/jabber/buddy.c:977 -#, fuzzy msgid "Service Discovery Info" -msgstr "Постави информации за директориумот" +msgstr "Информации за откривање на сервиси" #: ../libpurple/protocols/jabber/buddy.c:819 #: ../libpurple/protocols/jabber/buddy.c:979 @@ -4898,21 +4859,18 @@ #: ../libpurple/protocols/jabber/buddy.c:821 #: ../libpurple/protocols/jabber/buddy.c:981 -#, fuzzy msgid "Extended Stanza Addressing" -msgstr "Проширена адреса" +msgstr "Проширена stanza адреса" #: ../libpurple/protocols/jabber/buddy.c:823 #: ../libpurple/protocols/jabber/buddy.c:983 -#, fuzzy msgid "Multi-User Chat" -msgstr "Алијас разговор" +msgstr "Мулти-кориснички разговор" #: ../libpurple/protocols/jabber/buddy.c:825 #: ../libpurple/protocols/jabber/buddy.c:985 -#, fuzzy msgid "Multi-User Chat Extended Presence Information" -msgstr "Корисникот нема информации за директориумот." +msgstr "Информации за продолежно присуство за мулти-кориснички разговор" #: ../libpurple/protocols/jabber/buddy.c:827 #: ../libpurple/protocols/jabber/buddy.c:987 @@ -4921,9 +4879,8 @@ #: ../libpurple/protocols/jabber/buddy.c:829 #: ../libpurple/protocols/jabber/buddy.c:989 -#, fuzzy msgid "Ad-Hoc Commands" -msgstr "Команда" +msgstr "Ад-хок команди" #: ../libpurple/protocols/jabber/buddy.c:831 #: ../libpurple/protocols/jabber/buddy.c:991 @@ -4942,45 +4899,38 @@ #: ../libpurple/protocols/jabber/buddy.c:837 #: ../libpurple/protocols/jabber/buddy.c:997 -#, fuzzy msgid "XHTML-IM" -msgstr "HTML" +msgstr "XHTML-IM" #: ../libpurple/protocols/jabber/buddy.c:839 #: ../libpurple/protocols/jabber/buddy.c:999 -#, fuzzy msgid "In-Band Registration" msgstr "Грешка во регистрацијата" #: ../libpurple/protocols/jabber/buddy.c:841 #: ../libpurple/protocols/jabber/buddy.c:1001 -#, fuzzy msgid "User Location" -msgstr "Локација" +msgstr "Локација на корисникот" #: ../libpurple/protocols/jabber/buddy.c:843 #: ../libpurple/protocols/jabber/buddy.c:1003 -#, fuzzy msgid "User Avatar" -msgstr "Пребарување на корисници" +msgstr "Аватар на корисникот" #: ../libpurple/protocols/jabber/buddy.c:845 #: ../libpurple/protocols/jabber/buddy.c:1005 -#, fuzzy msgid "Chat State Notifications" -msgstr "Известување за состојбата на пријателот" +msgstr "Известување за состојбата на разговорот" #: ../libpurple/protocols/jabber/buddy.c:847 #: ../libpurple/protocols/jabber/buddy.c:1007 -#, fuzzy msgid "Software Version" -msgstr "Неподдржана верзија" +msgstr "Верзија на софтверот" #: ../libpurple/protocols/jabber/buddy.c:849 #: ../libpurple/protocols/jabber/buddy.c:1009 -#, fuzzy msgid "Stream Initiation" -msgstr "Ориентација" +msgstr "Иницирање на стримот" #: ../libpurple/protocols/jabber/buddy.c:851 #: ../libpurple/protocols/jabber/buddy.c:1011 @@ -4990,21 +4940,18 @@ #: ../libpurple/protocols/jabber/buddy.c:853 #: ../libpurple/protocols/jabber/buddy.c:1013 -#, fuzzy msgid "User Mood" -msgstr "Кориснички режими" +msgstr "Расположение на корисникот" #: ../libpurple/protocols/jabber/buddy.c:855 #: ../libpurple/protocols/jabber/buddy.c:1015 -#, fuzzy msgid "User Activity" -msgstr "Лимит на корисници" +msgstr "Активност на корисникот" #: ../libpurple/protocols/jabber/buddy.c:857 #: ../libpurple/protocols/jabber/buddy.c:1017 -#, fuzzy msgid "Entity Capabilities" -msgstr "Можности" +msgstr "" #: ../libpurple/protocols/jabber/buddy.c:859 #: ../libpurple/protocols/jabber/buddy.c:1019 @@ -5013,106 +4960,93 @@ #: ../libpurple/protocols/jabber/buddy.c:861 #: ../libpurple/protocols/jabber/buddy.c:1021 -#, fuzzy msgid "User Tune" -msgstr "Корисничко име" +msgstr "" #: ../libpurple/protocols/jabber/buddy.c:863 #: ../libpurple/protocols/jabber/buddy.c:1023 -#, fuzzy msgid "Roster Item Exchange" -msgstr "Инстант порака со размена на клуч" +msgstr "" #: ../libpurple/protocols/jabber/buddy.c:865 #: ../libpurple/protocols/jabber/buddy.c:1025 -#, fuzzy msgid "Reachability Address" -msgstr "Адреса за е-пошта" +msgstr "" #: ../libpurple/protocols/jabber/buddy.c:867 #: ../libpurple/protocols/jabber/buddy.c:1027 -#, fuzzy msgid "User Profile" -msgstr "Профил" +msgstr "Кориснички профил" #: ../libpurple/protocols/jabber/buddy.c:869 #: ../libpurple/protocols/jabber/buddy.c:1029 -#, fuzzy msgid "Jingle" -msgstr "Приклучи се" +msgstr "Jingle" #: ../libpurple/protocols/jabber/buddy.c:871 #: ../libpurple/protocols/jabber/buddy.c:1031 msgid "Jingle Audio" -msgstr "" +msgstr "Jingle аудио" #: ../libpurple/protocols/jabber/buddy.c:873 #: ../libpurple/protocols/jabber/buddy.c:1033 -#, fuzzy msgid "User Nickname" -msgstr "Корисничко име" +msgstr "Кориснички прекар" #: ../libpurple/protocols/jabber/buddy.c:875 #: ../libpurple/protocols/jabber/buddy.c:1035 msgid "Jingle ICE UDP" -msgstr "" +msgstr "Jingle ICE UDP" #: ../libpurple/protocols/jabber/buddy.c:877 #: ../libpurple/protocols/jabber/buddy.c:1037 msgid "Jingle ICE TCP" -msgstr "" +msgstr "Jingle ICE TCP" #: ../libpurple/protocols/jabber/buddy.c:879 #: ../libpurple/protocols/jabber/buddy.c:1039 msgid "Jingle Raw UDP" -msgstr "" +msgstr "Jingle Raw UDP" #: ../libpurple/protocols/jabber/buddy.c:881 #: ../libpurple/protocols/jabber/buddy.c:1041 -#, fuzzy msgid "Jingle Video" -msgstr "Видео во живо" +msgstr "Jingle видео" #: ../libpurple/protocols/jabber/buddy.c:883 #: ../libpurple/protocols/jabber/buddy.c:1043 msgid "Jingle DTMF" -msgstr "" +msgstr "Jingle DTMF" #: ../libpurple/protocols/jabber/buddy.c:885 #: ../libpurple/protocols/jabber/buddy.c:1045 -#, fuzzy msgid "Message Receipts" -msgstr "Примена е порака" +msgstr "Примачи на пораката" #: ../libpurple/protocols/jabber/buddy.c:887 #: ../libpurple/protocols/jabber/buddy.c:1047 -#, fuzzy msgid "Public Key Publishing" -msgstr "Јавен отпечаток од клучот" +msgstr "Објавување на јавниот клуч" #: ../libpurple/protocols/jabber/buddy.c:889 #: ../libpurple/protocols/jabber/buddy.c:1049 -#, fuzzy msgid "User Chatting" -msgstr "Опции за корисникот" +msgstr "Корисникот разговара" #: ../libpurple/protocols/jabber/buddy.c:891 #: ../libpurple/protocols/jabber/buddy.c:1051 -#, fuzzy msgid "User Browsing" -msgstr "Кориснички режими" +msgstr "Корисникот сурфа" #: ../libpurple/protocols/jabber/buddy.c:893 #: ../libpurple/protocols/jabber/buddy.c:1053 -#, fuzzy msgid "User Gaming" -msgstr "Корисничко име" +msgstr "Корисникот игра" #: ../libpurple/protocols/jabber/buddy.c:895 #: ../libpurple/protocols/jabber/buddy.c:1055 -#, fuzzy msgid "User Viewing" -msgstr "Лимит на корисници" +msgstr "Корисникот гледа" #: ../libpurple/protocols/jabber/buddy.c:897 #: ../libpurple/protocols/jabber/buddy.c:1057 @@ -5125,9 +5059,8 @@ #: ../libpurple/protocols/jabber/buddy.c:899 #: ../libpurple/protocols/jabber/buddy.c:1059 -#, fuzzy msgid "Stanza Encryption" -msgstr "Trillian енкрипција" +msgstr "Stanza енкрипција" #: ../libpurple/protocols/jabber/buddy.c:901 #: ../libpurple/protocols/jabber/buddy.c:1061 @@ -5238,14 +5171,12 @@ msgstr "Откажи" #: ../libpurple/protocols/jabber/buddy.c:1985 -#, fuzzy msgid "Log In" -msgstr "Најавен" +msgstr "Најава" #: ../libpurple/protocols/jabber/buddy.c:1989 -#, fuzzy msgid "Log Out" -msgstr "Логирај разговори" +msgstr "Одјава" #: ../libpurple/protocols/jabber/buddy.c:2035 #: ../libpurple/protocols/jabber/jabber.c:1553 @@ -5448,7 +5379,7 @@ #: ../libpurple/protocols/jabber/jabber.c:145 msgid "You require encryption, but it is not available on this server." -msgstr "" +msgstr "Барате енкрипција, но не е достапна на овој сервер." #: ../libpurple/protocols/jabber/jabber.c:259 #: ../libpurple/protocols/jabber/jabber.c:312 @@ -5492,9 +5423,9 @@ msgstr "Регистрирањето на %s@%s е успешно" #: ../libpurple/protocols/jabber/jabber.c:662 -#, fuzzy, c-format +#, c-format msgid "Registration to %s successful" -msgstr "Регистрирањето на %s@%s е успешно" +msgstr "Регистрацијата на %s е успешна" #: ../libpurple/protocols/jabber/jabber.c:664 #: ../libpurple/protocols/jabber/jabber.c:665 @@ -5507,21 +5438,19 @@ msgstr "Регистрирањето не успеа" #: ../libpurple/protocols/jabber/jabber.c:692 -#, fuzzy, c-format +#, c-format msgid "Registration from %s successfully removed" -msgstr "Регистрирањето на %s@%s е успешно" +msgstr "Регистрацијата од %s е успешно отстранета" #: ../libpurple/protocols/jabber/jabber.c:694 #: ../libpurple/protocols/jabber/jabber.c:695 -#, fuzzy msgid "Unregistration Successful" -msgstr "Регистрирањето е успешно" +msgstr "Дерегистрирањето е успешно" #: ../libpurple/protocols/jabber/jabber.c:703 #: ../libpurple/protocols/jabber/jabber.c:704 -#, fuzzy msgid "Unregistration Failed" -msgstr "Регистрирањето не успеа" +msgstr "Дерегистрацијата не успеа" #: ../libpurple/protocols/jabber/jabber.c:864 #: ../libpurple/protocols/jabber/jabber.c:865 @@ -5553,17 +5482,12 @@ msgstr "Датум" #: ../libpurple/protocols/jabber/jabber.c:987 -#, fuzzy msgid "Unregister" -msgstr "Регистрирај" +msgstr "Дерегистрирај" #: ../libpurple/protocols/jabber/jabber.c:994 -#, fuzzy -msgid "" -"Please fill out the information below to change your account registration." -msgstr "" -"Ве молам, пополнете ги информациите подолу за да ја регистрирате Вашата нова " -"сметка." +msgid "Please fill out the information below to change your account registration." +msgstr "Ве молам, пополнете ги информациите подолу за да ја смените регистрацијата за Вашата сметка." #: ../libpurple/protocols/jabber/jabber.c:997 msgid "Please fill out the information below to register your new account." @@ -5582,40 +5506,36 @@ msgstr "Регистрирај" #: ../libpurple/protocols/jabber/jabber.c:1012 -#, fuzzy, c-format +#, c-format msgid "Change Account Registration at %s" -msgstr "Промени корисничко инфо за %s" +msgstr "Сменете ја регистрацијата за сметката на %s" #: ../libpurple/protocols/jabber/jabber.c:1013 -#, fuzzy, c-format +#, c-format msgid "Register New Account at %s" -msgstr "Регистрирај нова XMPP сметка" +msgstr "Регистрирајте нова сметка на %s" #: ../libpurple/protocols/jabber/jabber.c:1016 -#, fuzzy msgid "Change Registration" -msgstr "Смени го статусот во" +msgstr "Сменете регистрација" #: ../libpurple/protocols/jabber/jabber.c:1120 #: ../libpurple/protocols/jabber/jabber.c:1121 -#, fuzzy msgid "Error unregistering account" -msgstr "Грешка при менување на информации за сметката" +msgstr "Грешка при дерегистрација на сметката" #: ../libpurple/protocols/jabber/jabber.c:1126 #: ../libpurple/protocols/jabber/jabber.c:1127 -#, fuzzy msgid "Account successfully unregistered" -msgstr "Успешно креиравте Qun" +msgstr "Сметката е успешно дерегистрирана" #: ../libpurple/protocols/jabber/jabber.c:1284 msgid "Initializing Stream" msgstr "Го иницијализирам системот" #: ../libpurple/protocols/jabber/jabber.c:1289 -#, fuzzy msgid "Initializing SSL/TLS" -msgstr "Го иницијализирам системот" +msgstr "Иницирам SSL/TLS" #: ../libpurple/protocols/jabber/jabber.c:1293 #: ../libpurple/protocols/msn/session.c:351 @@ -5685,27 +5605,24 @@ #: ../libpurple/protocols/jabber/jabber.c:1580 #: ../libpurple/protocols/jabber/jabber.c:1603 #: ../libpurple/protocols/jabber/jabber.c:1626 -#, fuzzy msgid "Mood Text" -msgstr "Крвна група" +msgstr "Текст за расположение" #: ../libpurple/protocols/jabber/jabber.c:1535 #: ../libpurple/protocols/jabber/jabber.c:1558 #: ../libpurple/protocols/jabber/jabber.c:1581 #: ../libpurple/protocols/jabber/jabber.c:1604 #: ../libpurple/protocols/jabber/jabber.c:1627 -#, fuzzy msgid "Tune Artist" -msgstr "Артисти" +msgstr "Артист за песната" #: ../libpurple/protocols/jabber/jabber.c:1536 #: ../libpurple/protocols/jabber/jabber.c:1559 #: ../libpurple/protocols/jabber/jabber.c:1582 #: ../libpurple/protocols/jabber/jabber.c:1605 #: ../libpurple/protocols/jabber/jabber.c:1628 -#, fuzzy msgid "Tune Title" -msgstr "Наслов" +msgstr "Наслов на песната" #: ../libpurple/protocols/jabber/jabber.c:1537 #: ../libpurple/protocols/jabber/jabber.c:1560 @@ -5713,7 +5630,7 @@ #: ../libpurple/protocols/jabber/jabber.c:1606 #: ../libpurple/protocols/jabber/jabber.c:1629 msgid "Tune Album" -msgstr "" +msgstr "Албум за песната" #: ../libpurple/protocols/jabber/jabber.c:1538 #: ../libpurple/protocols/jabber/jabber.c:1561 @@ -5721,16 +5638,15 @@ #: ../libpurple/protocols/jabber/jabber.c:1607 #: ../libpurple/protocols/jabber/jabber.c:1630 msgid "Tune Genre" -msgstr "" +msgstr "Жанр за песната" #: ../libpurple/protocols/jabber/jabber.c:1539 #: ../libpurple/protocols/jabber/jabber.c:1562 #: ../libpurple/protocols/jabber/jabber.c:1585 #: ../libpurple/protocols/jabber/jabber.c:1608 #: ../libpurple/protocols/jabber/jabber.c:1631 -#, fuzzy msgid "Tune Comment" -msgstr "Коментар за пријател" +msgstr "Коментар за песната" #: ../libpurple/protocols/jabber/jabber.c:1540 #: ../libpurple/protocols/jabber/jabber.c:1563 @@ -5746,7 +5662,7 @@ #: ../libpurple/protocols/jabber/jabber.c:1610 #: ../libpurple/protocols/jabber/jabber.c:1633 msgid "Tune Time" -msgstr "" +msgstr "Време за песна" #: ../libpurple/protocols/jabber/jabber.c:1542 #: ../libpurple/protocols/jabber/jabber.c:1565 @@ -5754,7 +5670,7 @@ #: ../libpurple/protocols/jabber/jabber.c:1611 #: ../libpurple/protocols/jabber/jabber.c:1634 msgid "Tune Year" -msgstr "" +msgstr "Година за песната" #: ../libpurple/protocols/jabber/jabber.c:1543 #: ../libpurple/protocols/jabber/jabber.c:1566 @@ -5762,16 +5678,15 @@ #: ../libpurple/protocols/jabber/jabber.c:1612 #: ../libpurple/protocols/jabber/jabber.c:1635 msgid "Tune URL" -msgstr "" +msgstr "URL за песната" #: ../libpurple/protocols/jabber/jabber.c:1545 #: ../libpurple/protocols/jabber/jabber.c:1568 #: ../libpurple/protocols/jabber/jabber.c:1591 #: ../libpurple/protocols/jabber/jabber.c:1614 #: ../libpurple/protocols/jabber/jabber.c:1637 -#, fuzzy msgid "Allow Buzz" -msgstr "Дозволи" +msgstr "Дозволи buzz" #: ../libpurple/protocols/jabber/jabber.c:1665 msgid "Password Changed" @@ -6049,9 +5964,9 @@ msgstr "Не успеав да го исфрлам корисникот %s" #: ../libpurple/protocols/jabber/jabber.c:2185 -#, fuzzy, c-format +#, c-format msgid "Unable to ping user %s" -msgstr "Не можам да го банирам корисникот %s" +msgstr "Не можам да го пингнам корисникот %s" #: ../libpurple/protocols/jabber/jabber.c:2207 #: ../libpurple/protocols/jabber/jabber.c:2217 @@ -6065,9 +5980,9 @@ msgstr "" #: ../libpurple/protocols/jabber/jabber.c:2239 -#, fuzzy, c-format +#, c-format msgid "Unable to buzz, because the user %s does not support it." -msgstr "Не може да испратите датотека дo %s, корисникот не поддржува пренос" +msgstr "" #: ../libpurple/protocols/jabber/jabber.c:2253 msgid "config: Configure a chat room." @@ -6122,15 +6037,14 @@ msgstr "kick <корисник> [соба]: Исфрли корисник од собата." #: ../libpurple/protocols/jabber/jabber.c:2318 -msgid "" -"msg <user> <message>: Send a private message to another user." +msgid "msg <user> <message>: Send a private message to another user." msgstr "" "msg <корисник> <порака>: Испрати приватна порака до друг " "корисник." #: ../libpurple/protocols/jabber/jabber.c:2324 msgid "ping <jid>:\tPing a user/component/server." -msgstr "" +msgstr "ping <jid>:\tПингни корисник/компонента/сервер." #: ../libpurple/protocols/jabber/jabber.c:2329 #: ../libpurple/protocols/yahoo/yahoo.c:4145 @@ -6159,7 +6073,7 @@ #: ../libpurple/protocols/jabber/libxmpp.c:210 msgid "Require SSL/TLS" -msgstr "" +msgstr "Барa SSL/TLS" #: ../libpurple/protocols/jabber/libxmpp.c:214 msgid "Force old (port 5223) SSL" @@ -6216,9 +6130,9 @@ #: ../libpurple/protocols/jabber/message.c:307 #: ../libpurple/protocols/yahoo/yahoo.c:4120 -#, fuzzy, c-format +#, c-format msgid "%s has buzzed you!" -msgstr "%s се најави." +msgstr "%s Ви испрати buzz!" #: ../libpurple/protocols/jabber/message.c:407 #, c-format @@ -6293,8 +6207,7 @@ #: ../libpurple/protocols/jabber/si.c:857 #, c-format msgid "Please select which resource of %s you would like to send a file to" -msgstr "" -"Ве молам изберете на кој ресурс од %s сакате да му ја испратите датотеката" +msgstr "Ве молам изберете на кој ресурс од %s сакате да му ја испратите датотеката" #: ../libpurple/protocols/jabber/si.c:873 msgid "Select a Resource" @@ -6302,34 +6215,29 @@ #: ../libpurple/protocols/jabber/usermood.c:179 #: ../libpurple/protocols/jabber/usermood.c:180 -#, fuzzy msgid "Edit User Mood" -msgstr "Кориснички режими" +msgstr "Уреди располо жение" #: ../libpurple/protocols/jabber/usermood.c:181 msgid "Please select your mood from the list." -msgstr "" +msgstr "Ве молам изберете го расположението од листата." #: ../libpurple/protocols/jabber/usermood.c:183 #: ../libpurple/protocols/jabber/usernick.c:78 -#, fuzzy msgid "Set" -msgstr "_Постави" +msgstr "Постави" #: ../libpurple/protocols/jabber/usermood.c:191 -#, fuzzy msgid "Set Mood..." -msgstr "Испрати ИП..." +msgstr "Постави расположение..." #: ../libpurple/protocols/jabber/usernick.c:76 -#, fuzzy msgid "Set User Nickname" -msgstr "Постави лимит на корисници" +msgstr "Постави кориснички прекар" #: ../libpurple/protocols/jabber/usernick.c:76 -#, fuzzy msgid "Please specify a new nickname for you." -msgstr "Ве молам внесете ново име за %s" +msgstr "Ве молам одредете нов прекар." #: ../libpurple/protocols/jabber/usernick.c:77 msgid "" @@ -6338,19 +6246,16 @@ msgstr "" #: ../libpurple/protocols/jabber/usernick.c:99 -#, fuzzy msgid "Set Nickname..." -msgstr "Прекар" +msgstr "Постави прекар..." #: ../libpurple/protocols/jabber/xdata.c:378 -#, fuzzy msgid "Actions" -msgstr "Дејство" +msgstr "Дејства" #: ../libpurple/protocols/jabber/xdata.c:380 -#, fuzzy msgid "Select an action" -msgstr "Изберете датотека" +msgstr "Изберете дејство" #: ../libpurple/protocols/msn/dialog.c:110 #, c-format @@ -6660,12 +6565,12 @@ #: ../libpurple/protocols/msn/msn.c:130 msgid "Nudge" -msgstr "" +msgstr "Nudge" #: ../libpurple/protocols/msn/msn.c:131 -#, fuzzy, c-format +#, c-format msgid "%s has nudged you!" -msgstr "%s се најави." +msgstr "%s Ви испрати nudge!" #: ../libpurple/protocols/msn/msn.c:132 #, c-format @@ -7066,9 +6971,8 @@ msgstr "Користи го HTTP методот" #: ../libpurple/protocols/msn/msn.c:2199 -#, fuzzy msgid "HTTP Method Server" -msgstr "IPC тест сервер" +msgstr "HTTP метод за сервер" #: ../libpurple/protocols/msn/msn.c:2204 msgid "Show custom smileys" @@ -7231,8 +7135,7 @@ msgstr "Не можам да се најавам: %s" #: ../libpurple/protocols/msn/session.c:325 -msgid "" -"Your MSN buddy list is temporarily unavailable. Please wait and try again." +msgid "Your MSN buddy list is temporarily unavailable. Please wait and try again." msgstr "" "Вашата листа на пријатели од MSN е моментално недостапна. Ве молам почекајте " "и пробајте пак." @@ -7284,8 +7187,7 @@ #: ../libpurple/protocols/msn/switchboard.c:416 msgid "Message could not be sent because a connection error occurred:" -msgstr "" -"Пораката не може да биде испратена бидејќи се појави грешка со врската:" +msgstr "Пораката не може да биде испратена бидејќи се појави грешка со врската:" #: ../libpurple/protocols/msn/switchboard.c:420 msgid "Message could not be sent because we are sending too quickly:" @@ -7301,8 +7203,7 @@ "минути." #: ../libpurple/protocols/msn/switchboard.c:431 -msgid "" -"Message could not be sent because an error with the switchboard occurred:" +msgid "Message could not be sent because an error with the switchboard occurred:" msgstr "" "Пораката не можеше да се испрати бидејќи се случи грешка со контролната " "табла:" @@ -7331,9 +7232,8 @@ msgstr "Името за екранот е невалидно." #: ../libpurple/protocols/myspace/myspace.c:111 -#, fuzzy msgid "Missing Cipher" -msgstr "Шифра" +msgstr "Недостасува cipher" #: ../libpurple/protocols/myspace/myspace.c:112 msgid "The RC4 cipher could not be found" @@ -7356,22 +7256,19 @@ #: ../libpurple/protocols/myspace/myspace.c:292 #: ../libpurple/protocols/myspace/myspace.c:1801 msgid "MySpaceIM Error" -msgstr "" +msgstr "Грешка со MySpaceIM" #: ../libpurple/protocols/myspace/myspace.c:349 -#, fuzzy msgid "Reading challenge" -msgstr "Грешка во читањето" +msgstr "" #: ../libpurple/protocols/myspace/myspace.c:355 -#, fuzzy msgid "Unexpected challenge length from server" -msgstr "Невалиден предизвик од серверот" +msgstr "Невалиден должина на предизвик од серверот" #: ../libpurple/protocols/myspace/myspace.c:359 -#, fuzzy msgid "Logging in" -msgstr "Логирање" +msgstr "Се најавувам" #: ../libpurple/protocols/myspace/myspace.c:1286 #, c-format @@ -7380,29 +7277,28 @@ #. Can't write _()'d strings in array initializers. Workaround. #: ../libpurple/protocols/myspace/myspace.c:1328 -#, fuzzy msgid "New mail messages" -msgstr "Испрати порака" +msgstr "Нова пошта" #: ../libpurple/protocols/myspace/myspace.c:1329 msgid "New blog comments" -msgstr "" +msgstr "Нови коментари на блог" #: ../libpurple/protocols/myspace/myspace.c:1330 msgid "New profile comments" -msgstr "" +msgstr "Нови коментари на профилот" #: ../libpurple/protocols/myspace/myspace.c:1331 msgid "New friend requests!" -msgstr "" +msgstr "Нови барања за пријатели!" #: ../libpurple/protocols/myspace/myspace.c:1332 msgid "New picture comments" -msgstr "" +msgstr "Нови коментари на слика" #: ../libpurple/protocols/myspace/myspace.c:1360 msgid "MySpace" -msgstr "" +msgstr "MySpace" #. The session is now set up, ready to be connected. This emits the #. * signedOn signal, so clients can now do anything with msimprpl, and @@ -7414,90 +7310,81 @@ #: ../libpurple/protocols/myspace/myspace.c:1554 #: ../libpurple/protocols/myspace/myspace.c:1556 -#, fuzzy msgid "No username set" -msgstr "Нема име" +msgstr "Не е поставено корисничко име" #: ../libpurple/protocols/myspace/myspace.c:1555 msgid "" "Please go to http://editprofile.myspace.com/index.cfm?fuseaction=profile." "username and choose a username and try to login again." msgstr "" +"Ве молам одете на http://editprofile.myspace.com/index.cfm?fuseaction=profile." +"username и одберете корисничко име и пробајте да се најавите." #: ../libpurple/protocols/myspace/myspace.c:1782 -#, fuzzy, c-format +#, c-format msgid "Protocol error, code %d: %s" -msgstr "Процесот врати код на грешка %d" +msgstr "Грешка во протоколот, код %d: %s" #: ../libpurple/protocols/myspace/myspace.c:1972 #: ../libpurple/protocols/myspace/myspace.c:2006 -#, fuzzy msgid "Failed to add buddy" -msgstr "Не можам да приклучам пријател во разговорот" +msgstr "Не успеав да го додадам пријателот" #: ../libpurple/protocols/myspace/myspace.c:1972 -#, fuzzy msgid "'addbuddy' command failed." -msgstr "Вчитај ја листата со пријатели од датотека..." +msgstr "командата 'addbuddy' не успеа." #: ../libpurple/protocols/myspace/myspace.c:2006 #: ../libpurple/protocols/myspace/myspace.c:2247 -#, fuzzy msgid "persist command failed" -msgstr "Контролната табла не успеа" +msgstr "командата persist не успеа" #: ../libpurple/protocols/myspace/myspace.c:2115 #, c-format msgid "No such user: %s" -msgstr "" +msgstr "Нема таков корисник: %s" #: ../libpurple/protocols/myspace/myspace.c:2116 -#, fuzzy msgid "User lookup" -msgstr "Кориснички соби" +msgstr "Проверка на корисникот" #: ../libpurple/protocols/myspace/myspace.c:2228 #: ../libpurple/protocols/myspace/myspace.c:2247 #: ../libpurple/protocols/myspace/myspace.c:2269 -#, fuzzy msgid "Failed to remove buddy" -msgstr "Не можам да приклучам пријател во разговорот" +msgstr "Не успеав да го отстранам пријателот" #: ../libpurple/protocols/myspace/myspace.c:2228 msgid "'delbuddy' command failed" msgstr "" #: ../libpurple/protocols/myspace/myspace.c:2269 -#, fuzzy msgid "blocklist command failed" -msgstr "Контролната табла не успеа" +msgstr "командата blocklist не успеа" #: ../libpurple/protocols/myspace/myspace.c:2315 -#, fuzzy msgid "Invalid input condition" -msgstr "Привршување на поврзувањето" +msgstr "Невалиден влезен услов" #. TODO: g_realloc like msn, yahoo, irc, jabber? #: ../libpurple/protocols/myspace/myspace.c:2333 #: ../libpurple/protocols/myspace/myspace.c:2364 -#, fuzzy msgid "Read buffer full" -msgstr "Редот е полн" +msgstr "Баферот е полн" #: ../libpurple/protocols/myspace/myspace.c:2402 -#, fuzzy msgid "Unparseable message" -msgstr "Не можам да ја анализирам пораката" +msgstr "Порака што не може да се парсира" #: ../libpurple/protocols/myspace/myspace.c:2471 -#, fuzzy, c-format +#, c-format msgid "Couldn't connect to host: %s (%d)" -msgstr "Не може да се врзе со серверот" +msgstr "Не можам да се поврзам со хостот: %s (%d)" #: ../libpurple/protocols/myspace/myspace.c:2642 -#, fuzzy msgid "IM Friends" -msgstr "_Прозорци за пораки" +msgstr "IM пријатели" #: ../libpurple/protocols/myspace/myspace.c:2741 #, c-format @@ -7507,30 +7394,26 @@ msgstr "" #: ../libpurple/protocols/myspace/myspace.c:2742 -#, fuzzy msgid "Add contacts from server" -msgstr "Невалиден одговор од серверот." +msgstr "Додај контакти од серверот" #: ../libpurple/protocols/myspace/myspace.c:2794 #: ../libpurple/protocols/myspace/myspace.c:2859 msgid "Add friends from MySpace.com" -msgstr "" +msgstr "Додај пријатели од MySpace.com" #: ../libpurple/protocols/myspace/myspace.c:2795 -#, fuzzy msgid "Importing friends failed" -msgstr "вчитувањето на додатокот не успеа" +msgstr "Увозот на пријатели не успеа" #. TODO: find out how #: ../libpurple/protocols/myspace/myspace.c:2851 -#, fuzzy msgid "Find people..." msgstr "Најди пријатели..." #: ../libpurple/protocols/myspace/myspace.c:2854 -#, fuzzy msgid "Change IM name..." -msgstr "Промени ја лозинката..." +msgstr "Промени го IM името..." #: ../libpurple/protocols/myspace/myspace.c:3156 msgid "myim URL handler" @@ -7553,17 +7436,16 @@ msgstr "" #: ../libpurple/protocols/myspace/myspace.c:3289 -#, fuzzy msgid "Send emoticons" -msgstr "Опции за звук" +msgstr "Испрати емоции" #: ../libpurple/protocols/myspace/myspace.c:3294 msgid "Screen resolution (dots per inch)" -msgstr "" +msgstr "Резолуција на екранот (точки по инч)" #: ../libpurple/protocols/myspace/myspace.c:3297 msgid "Base font size (points)" -msgstr "" +msgstr "Основна големина на фонт (points)" #: ../libpurple/protocols/myspace/user.c:95 #: ../libpurple/protocols/zephyr/zephyr.c:786 @@ -7578,36 +7460,33 @@ msgstr "Профил" #: ../libpurple/protocols/myspace/user.c:124 -#, fuzzy msgid "Headline" -msgstr "_Прекар:" +msgstr "Наслов" #: ../libpurple/protocols/myspace/user.c:129 -#, fuzzy msgid "Song" -msgstr "Звуци" +msgstr "Песна" #: ../libpurple/protocols/myspace/user.c:134 msgid "Total Friends" -msgstr "" +msgstr "Вкупно пријатели" #: ../libpurple/protocols/myspace/user.c:145 #: ../libpurple/protocols/myspace/user.c:148 #: ../libpurple/protocols/myspace/user.c:151 -#, fuzzy msgid "Client Version" -msgstr "Затвори разговор" +msgstr "Верзија на клиентот" #. TODO: icons for each zap #: ../libpurple/protocols/myspace/zap.c:44 #: ../libpurple/protocols/myspace/zap.c:177 msgid "Zap" -msgstr "" +msgstr "Zap" #: ../libpurple/protocols/myspace/zap.c:44 -#, fuzzy, c-format +#, c-format msgid "%s has zapped you!" -msgstr "%s се најави." +msgstr "" #: ../libpurple/protocols/myspace/zap.c:44 #, c-format @@ -7619,24 +7498,23 @@ msgstr "" #: ../libpurple/protocols/myspace/zap.c:45 -#, fuzzy, c-format +#, c-format msgid "%s has whacked you!" -msgstr "Корисникот Ве блокирал" +msgstr "%s Ве тресна!" #: ../libpurple/protocols/myspace/zap.c:45 #, c-format msgid "Whacking %s..." -msgstr "" +msgstr "Го трескам %s..." #: ../libpurple/protocols/myspace/zap.c:46 -#, fuzzy msgid "Torch" -msgstr "Наслов" +msgstr "Факел" #: ../libpurple/protocols/myspace/zap.c:46 -#, fuzzy, c-format +#, c-format msgid "%s has torched you!" -msgstr "Корисникот Ве блокирал" +msgstr "" #: ../libpurple/protocols/myspace/zap.c:46 #, c-format @@ -7648,9 +7526,9 @@ msgstr "" #: ../libpurple/protocols/myspace/zap.c:47 -#, fuzzy, c-format +#, c-format msgid "%s has smooched you!" -msgstr "%s се најави." +msgstr "" #: ../libpurple/protocols/myspace/zap.c:47 #, c-format @@ -7659,27 +7537,26 @@ #: ../libpurple/protocols/myspace/zap.c:48 msgid "Hug" -msgstr "" +msgstr "Гушка" #: ../libpurple/protocols/myspace/zap.c:48 -#, fuzzy, c-format +#, c-format msgid "%s has hugged you!" -msgstr "%s се најави." +msgstr "%s Ве гушна!" #: ../libpurple/protocols/myspace/zap.c:48 #, c-format msgid "Hugging %s..." -msgstr "" +msgstr "Го/ја гушкам %s..." #: ../libpurple/protocols/myspace/zap.c:49 -#, fuzzy msgid "Slap" -msgstr "Сонлив" +msgstr "Шамар" #: ../libpurple/protocols/myspace/zap.c:49 -#, fuzzy, c-format +#, c-format msgid "%s has slapped you!" -msgstr "%s се најави." +msgstr "%s Ви удри шамар!" #: ../libpurple/protocols/myspace/zap.c:49 #, c-format @@ -7687,28 +7564,27 @@ msgstr "" #: ../libpurple/protocols/myspace/zap.c:50 -#, fuzzy msgid "Goose" -msgstr "Си замина" +msgstr "" #: ../libpurple/protocols/myspace/zap.c:50 -#, fuzzy, c-format +#, c-format msgid "%s has goosed you!" -msgstr "%s си замина." +msgstr "" #: ../libpurple/protocols/myspace/zap.c:50 -#, fuzzy, c-format +#, c-format msgid "Goosing %s..." -msgstr "Го барам %s" +msgstr "" #: ../libpurple/protocols/myspace/zap.c:51 msgid "High-five" msgstr "" #: ../libpurple/protocols/myspace/zap.c:51 -#, fuzzy, c-format +#, c-format msgid "%s has high-fived you!" -msgstr "%s се најави." +msgstr "" #: ../libpurple/protocols/myspace/zap.c:51 #, c-format @@ -7720,9 +7596,9 @@ msgstr "" #: ../libpurple/protocols/myspace/zap.c:52 -#, fuzzy, c-format +#, c-format msgid "%s has punk'd you!" -msgstr "%s се најави." +msgstr "" #: ../libpurple/protocols/myspace/zap.c:52 #, c-format @@ -7734,9 +7610,9 @@ msgstr "" #: ../libpurple/protocols/myspace/zap.c:53 -#, fuzzy, c-format +#, c-format msgid "%s has raspberried you!" -msgstr "%s се најави." +msgstr "" #: ../libpurple/protocols/myspace/zap.c:53 #, c-format @@ -7878,14 +7754,12 @@ #: ../libpurple/protocols/novell/novell.c:247 #, c-format msgid "Unable to send message. Could not get details for user (%s)." -msgstr "" -"Не можам да испратам порака. Не можам да добијам детали за корисникот (%s)." +msgstr "Не можам да испратам порака. Не можам да добијам детали за корисникот (%s)." #: ../libpurple/protocols/novell/novell.c:396 #, c-format msgid "Unable to add %s to your buddy list (%s)." -msgstr "" -"Не можам да го додадам пријателот %s наа Вашата листа со пријатели (%s)." +msgstr "Не можам да го додадам пријателот %s наа Вашата листа со пријатели (%s)." #. TODO: Improve this! message to who or for what conference? #: ../libpurple/protocols/novell/novell.c:422 @@ -7909,8 +7783,7 @@ #: ../libpurple/protocols/novell/novell.c:537 #, c-format msgid "Unable to send message. Could not create the conference (%s)." -msgstr "" -"Не можам да испратам порака. Не можам да ја креирам конференцијата (%s)." +msgstr "Не можам да испратам порака. Не можам да ја креирам конференцијата (%s)." #: ../libpurple/protocols/novell/novell.c:584 #, c-format @@ -8053,10 +7926,8 @@ #: ../libpurple/protocols/novell/novell.c:2069 #, c-format -msgid "" -"%s appears to be offline and did not receive the message that you just sent." -msgstr "" -"%s изгледа дека е исклучен(a) и не ја прими пораката која што ја испративте." +msgid "%s appears to be offline and did not receive the message that you just sent." +msgstr "%s изгледа дека е исклучен(a) и не ја прими пораката која што ја испративте." #. TODO: Would be nice to prompt if not set! #. * purple_request_fields(gc, _("Server Address"),...); @@ -8536,8 +8407,7 @@ #: ../libpurple/protocols/oscar/oscar.c:1371 #, c-format msgid "The client version you are using is too old. Please upgrade at %s" -msgstr "" -"Верзијата на клиентот кој го користите е престара. Ве молам, надградете на %s" +msgstr "Верзијата на клиентот кој го користите е престара. Ве молам, надградете на %s" #: ../libpurple/protocols/oscar/oscar.c:1410 msgid "Could Not Connect" @@ -8604,8 +8474,7 @@ #: ../libpurple/protocols/oscar/oscar.c:2202 msgid "Please authorize me so I can add you to my buddy list." -msgstr "" -"Те молам авторизирај ме за да можам да те додадам во листата со пријатели." +msgstr "Те молам авторизирај ме за да можам да те додадам во листата со пријатели." #: ../libpurple/protocols/oscar/oscar.c:2230 msgid "Authorization Request Message:" @@ -8724,27 +8593,19 @@ #: ../libpurple/protocols/oscar/oscar.c:2614 #, c-format -msgid "" -"You missed %hu message from %s because the rate limit has been exceeded." -msgid_plural "" -"You missed %hu messages from %s because the rate limit has been exceeded." -msgstr[0] "" -"Пропуштивте %hu порака од %s, бидејќи лимитот за честота беше надминат." -msgstr[1] "" -"Пропуштивте %hu пораки од %s, бидејќи лимитот за честота беше надминат." -msgstr[2] "" -"Пропуштивте %hu пораки од %s, бидејќи лимитот за честота беше надминат." +msgid "You missed %hu message from %s because the rate limit has been exceeded." +msgid_plural "You missed %hu messages from %s because the rate limit has been exceeded." +msgstr[0] "Пропуштивте %hu порака од %s, бидејќи лимитот за честота беше надминат." +msgstr[1] "Пропуштивте %hu пораки од %s, бидејќи лимитот за честота беше надминат." +msgstr[2] "Пропуштивте %hu пораки од %s, бидејќи лимитот за честота беше надминат." #: ../libpurple/protocols/oscar/oscar.c:2623 #, c-format msgid "You missed %hu message from %s because he/she was too evil." msgid_plural "You missed %hu messages from %s because he/she was too evil." -msgstr[0] "" -"Пропуштивте %hu порака од %s, бидејќи тој/таа беше премногу злобен/злобна." -msgstr[1] "" -"Пропуштивте %hu пораки од %s, бидејќи тој/таа беше премногу злобен/злобна." -msgstr[2] "" -"Пропуштивте %hu пораки од %s, бидејќи тој/таа беше премногу злобен/злобна." +msgstr[0] "Пропуштивте %hu порака од %s, бидејќи тој/таа беше премногу злобен/злобна." +msgstr[1] "Пропуштивте %hu пораки од %s, бидејќи тој/таа беше премногу злобен/злобна." +msgstr[2] "Пропуштивте %hu пораки од %s, бидејќи тој/таа беше премногу злобен/злобна." #: ../libpurple/protocols/oscar/oscar.c:2632 #, c-format @@ -8964,8 +8825,7 @@ msgstr "Информации за сметката" #: ../libpurple/protocols/oscar/oscar.c:4218 -msgid "" -"Your IM Image was not sent. You must be Direct Connected to send IM Images." +msgid "Your IM Image was not sent. You must be Direct Connected to send IM Images." msgstr "" "Вашата инстант порака не беше испратена. Мора да бидете директно поврзани за " "да испратите слики во инстант пораки." @@ -10055,8 +9915,7 @@ #: ../libpurple/protocols/sametime/sametime.c:1645 #, c-format -msgid "" -"A Sametime administrator has issued the following announcement on server %s" +msgid "A Sametime administrator has issued the following announcement on server %s" msgstr "Администратор на Sametime ја издаде следнава најава на серверот %s" #: ../libpurple/protocols/sametime/sametime.c:1650 @@ -10387,8 +10246,7 @@ #: ../libpurple/protocols/sametime/sametime.c:5564 #, c-format msgid "The identifier '%s' did not match any users in your Sametime community." -msgstr "" -"Ознаката „%s“ не се совпадна со ниеден корисник во Вашата Sametime заедница." +msgstr "Ознаката „%s“ не се совпадна со ниеден корисник во Вашата Sametime заедница." #: ../libpurple/protocols/sametime/sametime.c:5568 msgid "No Matches" @@ -11129,8 +10987,7 @@ #: ../libpurple/protocols/silc/chat.c:1045 #: ../libpurple/protocols/silc10/chat.c:1102 #, c-format -msgid "" -"You have to join the %s channel before you are able to join the private group" +msgid "You have to join the %s channel before you are able to join the private group" msgstr "" "Мора да се приклучите кон каналот %s пред да можете да се приклучите во " "приватната група" @@ -11549,8 +11406,7 @@ #: ../libpurple/protocols/silc/pk.c:103 ../libpurple/protocols/silc10/pk.c:109 #, c-format msgid "Received %s's public key. Would you like to accept this public key?" -msgstr "" -"Го примив јавниот клуч на %s. Дали сакате да го прифатите овој јавен клуч?" +msgstr "Го примив јавниот клуч на %s. Дали сакате да го прифатите овој јавен клуч?" #: ../libpurple/protocols/silc/pk.c:107 ../libpurple/protocols/silc10/pk.c:113 #, c-format @@ -11596,8 +11452,7 @@ #: ../libpurple/protocols/silc/silc.c:238 #: ../libpurple/protocols/silc10/ops.c:1714 -msgid "" -"Resuming detached session failed. Press Reconnect to create new connection." +msgid "Resuming detached session failed. Press Reconnect to create new connection." msgstr "" "Продолжувањето на одделената сесија не успеа. Притиснете на „Поврзи се " "повторно“ за да креирате нова врска." @@ -11880,8 +11735,7 @@ #: ../libpurple/protocols/silc/silc.c:1666 #: ../libpurple/protocols/silc10/silc.c:1595 msgid "join <channel> [<password>]: Join a chat on this network" -msgstr "" -"join <канал> [<лозинка>]: Приклучи се кон разговор на мрежата" +msgstr "join <канал> [<лозинка>]: Приклучи се кон разговор на мрежата" #: ../libpurple/protocols/silc/silc.c:1670 #: ../libpurple/protocols/silc10/silc.c:1599 @@ -11897,14 +11751,12 @@ #: ../libpurple/protocols/silc10/silc.c:1607 #: ../libpurple/protocols/zephyr/zephyr.c:2685 msgid "msg <nick> <message>: Send a private message to a user" -msgstr "" -"msg <прекар> <порака>: Испрати приватна порака до корисник" +msgstr "msg <прекар> <порака>: Испрати приватна порака до корисник" #: ../libpurple/protocols/silc/silc.c:1682 #: ../libpurple/protocols/silc10/silc.c:1611 msgid "query <nick> [<message>]: Send a private message to a user" -msgstr "" -"query <прекар> [<порака>]: Испрати приватна порака до корисник" +msgstr "query <прекар> [<порака>]: Испрати приватна порака до корисник" #: ../libpurple/protocols/silc/silc.c:1686 #: ../libpurple/protocols/silc10/silc.c:1615 @@ -12250,8 +12102,7 @@ #: ../libpurple/protocols/silc10/ops.c:1934 #, c-format msgid "Failure: Remote does not trust/support your public key" -msgstr "" -"Неуспех: Оддалечениот хост не го поддржува/нема доверба во Вашиот јавен клуч" +msgstr "Неуспех: Оддалечениот хост не го поддржува/нема доверба во Вашиот јавен клуч" #: ../libpurple/protocols/silc10/ops.c:1937 #, c-format @@ -12321,9 +12172,8 @@ msgstr "Не можам да се поврзам" #: ../libpurple/protocols/simple/simple.c:1059 -#, fuzzy msgid "Unknown server response." -msgstr "Непозната причина." +msgstr "Непознат одговор од серверот." #: ../libpurple/protocols/simple/simple.c:1563 #: ../libpurple/protocols/simple/simple.c:1605 @@ -12342,8 +12192,7 @@ #: ../libpurple/protocols/simple/simple.c:1694 msgid "SIP screen names may not contain whitespaces or @ symbols" -msgstr "" -"SIP имињата на корисници не смеат да содржат празни места или симболот @" +msgstr "SIP имињата на корисници не смеат да содржат празни места или симболот @" #. *< type #. *< ui_requirement @@ -12686,8 +12535,7 @@ #: ../libpurple/protocols/yahoo/yahoo.c:2129 msgid "Your account is locked, please log in to the Yahoo! website." -msgstr "" -"Вашата сметка е заклучена. Ве молам, најавете се на страницата на Yahoo!." +msgstr "Вашата сметка е заклучена. Ве молам, најавете се на страницата на Yahoo!." #: ../libpurple/protocols/yahoo/yahoo.c:2132 #, c-format @@ -12817,9 +12665,8 @@ msgstr "Кој ID. да го активирам?" #: ../libpurple/protocols/yahoo/yahoo.c:3506 -#, fuzzy msgid "Join whom in chat?" -msgstr "Кого да приклучам во разговорот?" +msgstr "На кој да му се приклучам во разговорот?" #: ../libpurple/protocols/yahoo/yahoo.c:3518 msgid "Activate ID..." @@ -13003,8 +12850,7 @@ msgid "" "Sorry, this profile seems to be in a language or format that is not " "supported at this time." -msgstr "" -"Извинете но овој профил изгледа е на јазик кој не е поддржан моментално." +msgstr "Извинете но овој профил изгледа е на јазик кој не е поддржан моментално." #: ../libpurple/protocols/yahoo/yahoo_profile.c:1221 msgid "" @@ -13032,8 +12878,7 @@ #: ../libpurple/protocols/yahoo/yahoochat.c:217 #, c-format msgid "%s declined your conference invitation to room \"%s\" because \"%s\"." -msgstr "" -"%s ја одби Вашата покана за конференција во собата \"%s\" поради \"%s\"." +msgstr "%s ја одби Вашата покана за конференција во собата \"%s\" поради \"%s\"." #: ../libpurple/protocols/yahoo/yahoochat.c:219 msgid "Invitation Rejected" @@ -13176,13 +13021,11 @@ #: ../libpurple/protocols/zephyr/zephyr.c:2705 msgid "inst <instance>: Set the instance to be used on this class" -msgstr "" -"inst <instance>: Постави ја инстанцата да биде користена на оваа класа" +msgstr "inst <instance>: Постави ја инстанцата да биде користена на оваа класа" #: ../libpurple/protocols/zephyr/zephyr.c:2710 msgid "topic <instance>: Set the instance to be used on this class" -msgstr "" -"topic <instance>: Постави ја инстанцата да биде користена на оваа класа" +msgstr "topic <instance>: Постави ја инстанцата да биде користена на оваа класа" #: ../libpurple/protocols/zephyr/zephyr.c:2716 msgid "sub <class> <instance> <recipient>: Join a new chat" @@ -13191,10 +13034,8 @@ "разговор" #: ../libpurple/protocols/zephyr/zephyr.c:2721 -msgid "" -"zi <instance>: Send a message to <message,instance,*>" -msgstr "" -"zi <instance>: Испрати порака до <message,instance,*>" +msgid "zi <instance>: Send a message to <message,instance,*>" +msgstr "zi <instance>: Испрати порака до <message,instance,*>" #: ../libpurple/protocols/zephyr/zephyr.c:2727 msgid "" @@ -13377,9 +13218,8 @@ msgstr "Прифати ја поканата за разговор?" #: ../libpurple/sslconn.c:164 -#, fuzzy msgid "SSL Connection Failed" -msgstr "Поврзувањето не успеа" +msgstr "SSL врската не успеа" #: ../libpurple/sslconn.c:166 msgid "SSL Handshake Failed" @@ -13390,9 +13230,8 @@ msgstr "" #: ../libpurple/sslconn.c:171 -#, fuzzy msgid "Unknown SSL error" -msgstr "Непозната грешка" +msgstr "Непозната SSL грешка" #: ../libpurple/status.c:153 msgid "Unset" @@ -13682,9 +13521,8 @@ msgstr "Ло_зинка:" #: ../pidgin/gtkaccount.c:1195 -#, fuzzy msgid "Unable to save new account" -msgstr "Не можам да креирам врска" +msgstr "Не можам да ја зачувам новата сметка" #: ../pidgin/gtkaccount.c:1196 msgid "An account already exists with the specified criteria." @@ -13775,9 +13613,8 @@ msgstr "Порака" #: ../pidgin/gtkblist.c:1148 -#, fuzzy msgid "_Send File" -msgstr "Испрати датотека" +msgstr "_Испрати датотека" #: ../pidgin/gtkblist.c:1155 msgid "Add Buddy _Pounce" @@ -13839,10 +13676,8 @@ #: ../pidgin/gtkblist.c:2057 ../pidgin/gtkconv.c:4840 #: ../pidgin/gtkpounce.c:430 -msgid "" -"You are not currently signed on with an account that can add that buddy." -msgstr "" -"Не сте моментално најавени со сметка која може да го додаде тој пријател." +msgid "You are not currently signed on with an account that can add that buddy." +msgstr "Не сте моментално најавени со сметка која може да го додаде тој пријател." #. Buddies menu #: ../pidgin/gtkblist.c:2869 @@ -13866,34 +13701,28 @@ msgstr "/Пријатели/Прегледај _лог..." #: ../pidgin/gtkblist.c:2875 -#, fuzzy msgid "/Buddies/Show" -msgstr "/_Пријатели" +msgstr "/Пријатели/Покажи" #: ../pidgin/gtkblist.c:2876 -#, fuzzy msgid "/Buddies/Show/_Offline Buddies" -msgstr "/Пријатели/Покажи исклучени пријатели" +msgstr "/Пријатели/Покажи/_Исклучени пријатели" #: ../pidgin/gtkblist.c:2877 -#, fuzzy msgid "/Buddies/Show/_Empty Groups" -msgstr "/Пријатели/Покажи празни групи" +msgstr "/Пријатели/Покажи/_Празни групи" #: ../pidgin/gtkblist.c:2878 -#, fuzzy msgid "/Buddies/Show/Buddy _Details" -msgstr "/Пријатели/Покажи детали за _пријател" +msgstr "/Пријатели/Покажи/_Детали за _пријател" #: ../pidgin/gtkblist.c:2879 -#, fuzzy msgid "/Buddies/Show/Idle _Times" -msgstr "/Пријатели/Покажи време на _неактивност" +msgstr "/Пријатели/Покажи/_Време на _неактивност" #: ../pidgin/gtkblist.c:2880 -#, fuzzy msgid "/Buddies/Show/_Protocol Icons" -msgstr "/Пријатели/Покажи празни групи" +msgstr "/Пријатели/Покажи/_Икони за протоколите" #: ../pidgin/gtkblist.c:2881 msgid "/Buddies/_Sort Buddies" @@ -13934,9 +13763,8 @@ msgstr "/Алатки/Дејства за _пријател" #: ../pidgin/gtkblist.c:2896 -#, fuzzy msgid "/Tools/_Certificates" -msgstr "/Алатки/Пр_еференци" +msgstr "/Алатки/_Сертификати" #: ../pidgin/gtkblist.c:2897 msgid "/Tools/Plu_gins" @@ -14115,7 +13943,7 @@ #. Translators: Please maintain the use of -> and <- to refer to menu heirarchy #: ../pidgin/gtkblist.c:4334 -#, fuzzy, c-format +#, c-format msgid "" "Welcome to %s!\n" "\n" @@ -14134,29 +13962,24 @@ #. * after the treeview or faceprint gets mad. -Robot101 #. #: ../pidgin/gtkblist.c:4597 -#, fuzzy msgid "/Buddies/Show/Offline Buddies" -msgstr "/Пријатели/Покажи исклучени пријатели" +msgstr "/Пријатели/Покажи/Исклучени пријатели" #: ../pidgin/gtkblist.c:4600 -#, fuzzy msgid "/Buddies/Show/Empty Groups" -msgstr "/Пријатели/Покажи празни групи" +msgstr "/Пријатели/Покажи/Празни групи" #: ../pidgin/gtkblist.c:4606 -#, fuzzy msgid "/Buddies/Show/Buddy Details" -msgstr "/Пријатели/Покажи детали за пријатели" +msgstr "/Пријатели/Покажи/Детали за пријатели" #: ../pidgin/gtkblist.c:4609 -#, fuzzy msgid "/Buddies/Show/Idle Times" -msgstr "/Пријатели/Време на неактивност" +msgstr "/Пријатели/Покажи/Време на неактивност" #: ../pidgin/gtkblist.c:4612 -#, fuzzy msgid "/Buddies/Show/Protocol Icons" -msgstr "/Пријатели/Покажи празни групи" +msgstr "/Пријатели/Покажи/Икони за протоколите" #: ../pidgin/gtkblist.c:5507 msgid "" @@ -14234,9 +14057,8 @@ #. Widget creation function #: ../pidgin/gtkcertmgr.c:530 -#, fuzzy msgid "SSL Servers" -msgstr "Сервер" +msgstr "SSL сервери" #: ../pidgin/gtkconn.c:180 #, c-format @@ -14260,10 +14082,8 @@ msgstr "Овој пријател не е на истиот протокол како во овој разговор." #: ../pidgin/gtkconv.c:774 -msgid "" -"You are not currently signed on with an account that can invite that buddy." -msgstr "" -"Не сте моментално најавени со сметка која може да го покани овој пријател." +msgid "You are not currently signed on with an account that can invite that buddy." +msgstr "Не сте моментално најавени со сметка која може да го покани овој пријател." #: ../pidgin/gtkconv.c:827 msgid "Invite Buddy Into Chat Room" @@ -14837,9 +14657,8 @@ msgstr "Spanish" #: ../pidgin/gtkdialogs.c:161 -#, fuzzy msgid "Estonian" -msgstr "Bosnian" +msgstr "Estonian" #: ../pidgin/gtkdialogs.c:162 ../pidgin/gtkdialogs.c:163 msgid "Euskera(Basque)" @@ -14926,9 +14745,8 @@ msgstr "Kurdish" #: ../pidgin/gtkdialogs.c:185 -#, fuzzy msgid "Lao" -msgstr "Лав" +msgstr "Lao" #: ../pidgin/gtkdialogs.c:186 ../pidgin/gtkdialogs.c:252 #: ../pidgin/gtkdialogs.c:253 @@ -15055,7 +14873,7 @@ msgstr "За %s" #: ../pidgin/gtkdialogs.c:400 -#, fuzzy, c-format +#, c-format msgid "" "%s is a graphical modular messaging client based on libpurple which is " "capable of connecting to AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, SIP/SIMPLE, " @@ -15069,7 +14887,7 @@ msgstr "" "%s е графички модуларен клиент за испраќање на пораки базиран на libpurple " "кој што е способен да се врзува на AIM, MSN, Yahoo!, XMPP, ICQ, IRC, SILC, " -"SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, Gadu-Gadu, и " +"SIP/SIMPLE, Novell GroupWise, Lotus Sametime, Bonjour, Zephyr, MySpaceIM, Gadu-Gadu, и " "QQ одеднаш. Напишан е со користење на GTK+.

Смеете да ја менувате и " "редистрибуирате програмата според условите во GPL (верзија 2 или понова). " "Копија од GPL доаѓа во датотеката 'COPYING' која што се дистрибуира заедно " @@ -15134,8 +14952,7 @@ msgid "" "Please enter the screen name or alias of the person whose log you would like " "to view." -msgstr "" -"Внесете го името или алијасот на пријателот чиј лог сакате да го прегледате." +msgstr "Внесете го името или алијасот на пријателот чиј лог сакате да го прегледате." #: ../pidgin/gtkdialogs.c:1020 msgid "Alias Contact" @@ -15224,8 +15041,7 @@ #: ../pidgin/gtkdialogs.c:1247 #, c-format -msgid "" -"You are about to remove %s from your buddy list. Do you want to continue?" +msgid "You are about to remove %s from your buddy list. Do you want to continue?" msgstr "" "Штотуку се обидовте да го/ја отстранете %s од Вашата листа со пријатели. " "Дали сакате да продолжете?" @@ -15276,7 +15092,6 @@ msgstr "Замолчи звуци" #: ../pidgin/gtkdocklet.c:535 -#, fuzzy msgid "Blink on new message" msgstr "Трепкај на нова порака" @@ -15520,9 +15335,8 @@ msgstr "_Фонт" #: ../pidgin/gtkimhtmltoolbar.c:1054 -#, fuzzy msgid "Group Items" -msgstr "Ид. на групата" +msgstr "Групирај предмети" #: ../pidgin/gtkimhtmltoolbar.c:1054 msgid "Ungroup Items" @@ -15553,34 +15367,28 @@ msgstr "" #: ../pidgin/gtkimhtmltoolbar.c:1096 -#, fuzzy msgid "Font Face" -msgstr "_Изглед на фонт" +msgstr "Изглед на фонт" #: ../pidgin/gtkimhtmltoolbar.c:1097 -#, fuzzy msgid "Background Color" -msgstr "Бој_а на позадина" +msgstr "Боја на позадина" #: ../pidgin/gtkimhtmltoolbar.c:1098 -#, fuzzy msgid "Foreground Color" -msgstr "Боја на _фонт" +msgstr "Боја на фонт" #: ../pidgin/gtkimhtmltoolbar.c:1100 -#, fuzzy msgid "Reset Formatting" -msgstr "_Исчисти форматирање" +msgstr "Ресетирај форматирање" #: ../pidgin/gtkimhtmltoolbar.c:1103 -#, fuzzy msgid "Insert IM Image" msgstr "Внеси слика" #: ../pidgin/gtkimhtmltoolbar.c:1104 -#, fuzzy msgid "Insert Smiley" -msgstr "Внеси слика" +msgstr "Внеси смајли" #: ../pidgin/gtkimhtmltoolbar.c:1179 msgid "_Bold" @@ -15595,9 +15403,8 @@ msgstr "_Подвлечено" #: ../pidgin/gtkimhtmltoolbar.c:1182 -#, fuzzy msgid "Strikethrough" -msgstr "_Поголемо" +msgstr "Прешкртано" #: ../pidgin/gtkimhtmltoolbar.c:1183 msgid "_Larger" @@ -15700,8 +15507,7 @@ "преференцата е овозможена." #: ../pidgin/gtklog.c:557 -msgid "" -"Chats will only be logged if the \"Log all chats\" preference is enabled." +msgid "Chats will only be logged if the \"Log all chats\" preference is enabled." msgstr "" "Разговорите ќе бидат логирани само ако е избрано \"Логирај ги сите разговори" "\"." @@ -15739,7 +15545,7 @@ msgstr "%s %s. Пробајте `%s -h' за повеќе информации.\n" #: ../pidgin/gtkmain.c:388 -#, fuzzy, c-format +#, c-format msgid "" "%s %s\n" "Usage: %s [OPTION]...\n" @@ -15754,7 +15560,7 @@ " -v, --version display the current version and exit\n" msgstr "" "%s %s\n" -"Употреба: %s [OPTION]...\n" +"Употреба: %s [ОПЦИЈА]...\n" "\n" " -c, --config=DIR use DIR for config files\n" " -d, --debug print debugging messages to stdout\n" @@ -15766,7 +15572,7 @@ " -v, --version display the current version and exit\n" #: ../pidgin/gtkmain.c:512 -#, fuzzy, c-format +#, c-format msgid "" "%s has segfaulted and attempted to dump a core file.\n" "This is a bug in the software and has happened through\n" @@ -15792,7 +15598,7 @@ "\n" "Ако можете да ја репродуцирате грешката, Ве молам, известете\n" "ги развивачите со пријавување на бубачка на:\n" -"%snewticket/\n" +"%ssimpleticket/\n" "\n" "Осигурете се дека точно наведивте што правевте во тоа време\n" "и испратете ја трагата од датотеката со јадрото(core). Ако не знаете\n" @@ -15827,12 +15633,12 @@ msgstr[2] "%s има %d нови пораки." #: ../pidgin/gtknotify.c:564 -#, fuzzy, c-format +#, c-format msgid "You have %d new e-mail." msgid_plural "You have %d new e-mails." -msgstr[0] "Имате %d нова е-пошта." -msgstr[1] "Имате %d нови е-пошти." -msgstr[2] "Имате %d нови е-пошти." +msgstr[0] "Имате %d нова порака." +msgstr[1] "Имате %d нови пораки." +msgstr[2] "Имате %d нови пораки." #: ../pidgin/gtknotify.c:989 #, c-format @@ -15850,8 +15656,7 @@ msgstr "Грешка при лансирање на \"%s\": %s" #: ../pidgin/gtknotify.c:1145 -msgid "" -"The 'Manual' browser command has been chosen, but no command has been set." +msgid "The 'Manual' browser command has been chosen, but no command has been set." msgstr "Избрана е рачната команда на прелистувачот, но не е поставена команда." #: ../pidgin/gtkplugin.c:265 @@ -16460,8 +16265,7 @@ #: ../pidgin/gtkprivacy.c:559 msgid "Please enter the name of the user you wish to be able to contact you." -msgstr "" -"Внесете го името на корисникот со кого посакувате да можете да контактирате." +msgstr "Внесете го името на корисникот со кого посакувате да можете да контактирате." #: ../pidgin/gtkprivacy.c:562 ../pidgin/gtkprivacy.c:578 msgid "_Permit" @@ -16540,8 +16344,7 @@ #: ../pidgin/gtksavedstatuses.c:337 msgid "Are you sure you want to delete the selected saved statuses?" -msgstr "" -"Дали сте сигурни дека сакате да ги избришете избраните зачувани статуси?" +msgstr "Дали сте сигурни дека сакате да ги избришете избраните зачувани статуси?" #. Use button #: ../pidgin/gtksavedstatuses.c:620 ../pidgin/gtksavedstatuses.c:1266 @@ -16686,8 +16489,7 @@ #: ../pidgin/gtkutils.c:2641 #, c-format msgid "The file '%s' is too large for %s. Please try a smaller image.\n" -msgstr "" -"Датотеката „%s“ е преголема за %s. Ве молам, пробајте со помала слика.\n" +msgstr "Датотеката „%s“ е преголема за %s. Ве молам, пробајте со помала слика.\n" #: ../pidgin/gtkutils.c:2643 msgid "Icon Error" @@ -16704,8 +16506,7 @@ #: ../pidgin/gtkutils.c:2793 #, c-format -msgid "" -"Failed to load image '%s': reason not known, probably a corrupt image file" +msgid "Failed to load image '%s': reason not known, probably a corrupt image file" msgstr "" "Не успеав да ја вчитам сликата „%s“: причините не се познати, најверојатно " "сликата е оштетена" @@ -16870,8 +16671,7 @@ #. *< version #. *< summary #: ../pidgin/plugins/contact_priority.c:190 -msgid "" -"Allows for controlling the values associated with different buddy states." +msgid "Allows for controlling the values associated with different buddy states." msgstr "" "Овозможува контрола на вредностите асоцирани со различни состојби на " "пријателите." @@ -16953,8 +16753,7 @@ #: ../pidgin/plugins/extplacement.c:117 msgid "Separate IM and Chat windows when placing by number" -msgstr "" -"Одделни прозорци за IM и прозорци за разговори кога се поставуваат по број" +msgstr "Одделни прозорци за IM и прозорци за разговори кога се поставуваат по број" #. *< type #. *< ui_requirement @@ -17707,8 +17506,7 @@ #. * description #: ../pidgin/plugins/timestamp.c:207 msgid "Display iChat-style timestamps every N minutes." -msgstr "" -"Додава временски ознаки во стилот на iChat во разговорите на секои N минути." +msgstr "Додава временски ознаки во стилот на iChat во разговорите на секои N минути." #: ../pidgin/plugins/timestamp_format.c:23 msgid "Timestamp Format Options" @@ -17879,8 +17677,7 @@ msgstr "Опции наменети за Pidgin за Windows." #: ../pidgin/plugins/win32/winprefs/winprefs.c:374 -msgid "" -"Provides options specific to Pidgin for Windows , such as buddy list docking." +msgid "Provides options specific to Pidgin for Windows , such as buddy list docking." msgstr "" "Овозможува опции наменети за Pidgin за Windows, како што се прикачување на " "листата со пријатели и трепкање на разговорите." @@ -17932,130 +17729,3 @@ msgid "This plugin is useful for debbuging XMPP servers or clients." msgstr "Овој приклучок е корисен за дебагирање на XMPP сервери или клиенти." -#, fuzzy -#~ msgid "Offline buddies" -#~ msgstr "Покажи исклучени пријатели" - -#, fuzzy -#~ msgid "Sort" -#~ msgstr "Порта" - -#, fuzzy -#~ msgid "By Status" -#~ msgstr "По статус" - -#, fuzzy -#~ msgid "By Log Size" -#~ msgstr "По големина на лог" - -#, fuzzy -#~ msgid "Unable to connect to contact server" -#~ msgstr "Не можам да се поврзам со серверот." - -#, fuzzy -#~ msgid "Unable to retrieve MSN Address Book" -#~ msgstr "Одберете адресар за белешки" - -#, fuzzy -#~ msgid "Current media" -#~ msgstr "Тековен знак" - -#, fuzzy -#~ msgid "Windows Live Messenger Protocol Plugin" -#~ msgstr "Додаток за Novell GroupWise Messenger" - -#, fuzzy -#~ msgid "Windows Live ID authentication Failed" -#~ msgstr "Неуспех: Авторизирањето не успеа" - -#~ msgid "%s just sent you a Nudge!" -#~ msgstr "%s штотуку ти испрати Nudge!" - -#, fuzzy -#~ msgid "Unknown error (%d)" -#~ msgstr "Непозната грешка" - -#, fuzzy -#~ msgid "Unable to connect to OIM server" -#~ msgstr "Не можам да се поврзам со серверот." - -#, fuzzy -#~ msgid "%s (%s) changed status from %s to %s" -#~ msgstr "%s го смени статусот од %s во %s" - -#, fuzzy -#~ msgid "%s (%s) is now %s" -#~ msgstr "%s сега е %s" - -#, fuzzy -#~ msgid "%s (%s) is no longer %s" -#~ msgstr "%s не е веќе %s" - -#, fuzzy -#~ msgid "_Merge" -#~ msgstr "_Порака:" - -#, fuzzy -#~ msgid "_Send File..." -#~ msgstr "_Испрати датотека" - -#, fuzzy -#~ msgid "Add Buddy _Pounce..." -#~ msgstr "Додај дејство за пријател..." - -#, fuzzy -#~ msgid "Hide when offline" -#~ msgstr "Не е дозволен додека сте исклучени" - -#, fuzzy -#~ msgid "Show when offline" -#~ msgstr "Не е дозволен додека сте исклучени" - -#, fuzzy -#~ msgid "Add _Buddy..." -#~ msgstr "Додај пријател" - -#, fuzzy -#~ msgid "Add C_hat..." -#~ msgstr "Додај разговор" - -#, fuzzy -#~ msgid "Persistent" -#~ msgstr "Persian" - -#, fuzzy -#~ msgid "/Accounts/Manage" -#~ msgstr "/Сметки" - -#, fuzzy -#~ msgid "A_ccount:" -#~ msgstr "Сметка:" - -#, fuzzy -#~ msgid "S_end To" -#~ msgstr "Испрати на" - -#, fuzzy -#~ msgid "_Smile!" -#~ msgstr "Смајли!" - -#~ msgid "You have just sent a Nudge!" -#~ msgstr "Само што испративте Nudge!" - -#~ msgid "Would like to add him?" -#~ msgstr "Дали сакате да го додадете?" - -#~ msgid "%s just sent you a Buzz!" -#~ msgstr "%s штотуку ти испрати Buzz!" - -#~ msgid "You have just sent a Buzz!" -#~ msgstr "Само што испративте Buzz!" - -#~ msgid "/Options/Show Buddy _Icon" -#~ msgstr "/Опции/Покажи икона на _пријател" - -#~ msgid "/Options/Show Buddy Icon" -#~ msgstr "/Опции/Покажи икона на пријател" - -#~ msgid "Norwegian" -#~ msgstr "Norwegian"