This commit is contained in:
commit
875133d9f6
23
.gitattributes
vendored
Normal file
23
.gitattributes
vendored
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
## Default LFS
|
||||||
|
*.7z filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bsp filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.bz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gem filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.gz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.jar filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.lzma filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.obscpio filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.oxt filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.pdf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.png filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.rpm filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tbz2 filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.tgz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.ttf filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.txz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.whl filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.xz filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zip filter=lfs diff=lfs merge=lfs -text
|
||||||
|
*.zst filter=lfs diff=lfs merge=lfs -text
|
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
.osc
|
3
pidgin-2.0.0.tar.bz2
Normal file
3
pidgin-2.0.0.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:d700a95fbce796b4a9e5c2fb07aad8c24402f38a795c8eb51a44e000a8400cff
|
||||||
|
size 7521328
|
3
pidgin-NLD-smiley-theme.tar.bz2
Normal file
3
pidgin-NLD-smiley-theme.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:9b4f9e92f0e8ebc473e72a3cf8d8ae488fde177088ba61c1569f86093c9d5c6e
|
||||||
|
size 20019
|
3
pidgin-Tango-smiley-theme.tar.bz2
Normal file
3
pidgin-Tango-smiley-theme.tar.bz2
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
version https://git-lfs.github.com/spec/v1
|
||||||
|
oid sha256:3204686fdc32b330aedac3c7e5cd8ac45deedc4128f01cc1878c2ea93e47f4b8
|
||||||
|
size 13938
|
17
pidgin-check.patch
Normal file
17
pidgin-check.patch
Normal file
@ -0,0 +1,17 @@
|
|||||||
|
Fix autoreconf for latest version of check.
|
||||||
|
|
||||||
|
--- configure.ac
|
||||||
|
+++ configure.ac
|
||||||
|
@@ -1938,11 +1938,7 @@
|
||||||
|
dnl #######################################################################
|
||||||
|
dnl # Check for check
|
||||||
|
dnl #######################################################################
|
||||||
|
-PKG_CHECK_MODULES(CHECK,[check >= 0.9.4],:,[
|
||||||
|
- ifdef([AM_PATH_CHECK],
|
||||||
|
- [AM_PATH_CHECK(0.8.2,:,:)],
|
||||||
|
- [AC_MSG_RESULT([no, testing is disabled])])
|
||||||
|
- ])
|
||||||
|
+PKG_CHECK_MODULES(CHECK,[check >= 0.9.4],:,[AC_MSG_RESULT([no, testing is disabled])])
|
||||||
|
AM_CONDITIONAL(HAVE_CHECK, [test "x$CHECK_LIBS" != "x"])
|
||||||
|
AC_SUBST(CHECK_CFLAGS)
|
||||||
|
AC_SUBST(CHECK_LIBS)
|
167
pidgin-gnome-keyring.patch
Normal file
167
pidgin-gnome-keyring.patch
Normal file
@ -0,0 +1,167 @@
|
|||||||
|
--- 2.0b4-my/configure.ac 2006-11-13 18:29:02.830447000 +0800
|
||||||
|
+++ 2.0b4-my2/configure.ac 2006-11-13 17:05:20.491984000 +0800
|
||||||
|
@@ -1783,5 +1783,19 @@
|
||||||
|
LDFLAGS="$orig_LDFLAGS"
|
||||||
|
fi
|
||||||
|
|
||||||
|
+dnl #######################################################################
|
||||||
|
+dnl # Check for gnome-keyring
|
||||||
|
+dnl #--enable-gnome-keyring=(yes|no)
|
||||||
|
+dnl #######################################################################
|
||||||
|
+AC_ARG_ENABLE(gnome-keyring,
|
||||||
|
+ AC_HELP_STRING([--enable-gnome-keyring],
|
||||||
|
+ [use gnome keyring for storing password [default=no]]),,
|
||||||
|
+ enable_gnome_keyring=no)
|
||||||
|
+if test "x$enable_gnome_keyring" = "xyes"; then
|
||||||
|
+ PKG_CHECK_MODULES(PURPLE_KEYRING,
|
||||||
|
+ gnome-keyring-1,
|
||||||
|
+ AC_DEFINE(VINO_ENABLE_KEYRING, [], [Set if we should use gnome-keyring]))
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
|
||||||
|
AC_MSG_CHECKING(for me pot o' gold)
|
||||||
|
--- 2.0b4-my/libpurple/Makefile.am 2006-10-19 01:38:16.000000000 +0800
|
||||||
|
+++ 2.0b4-my2/libpurple/Makefile.am 2006-11-13 18:28:51.383417000 +0800
|
||||||
|
@@ -221,6 +221,7 @@
|
||||||
|
$(LIBXML_LIBS) \
|
||||||
|
$(LIBNM_LIBS) \
|
||||||
|
$(STATIC_LINK_LIBS) \
|
||||||
|
+ $(PURPLE_KEYRING_LIBS) \
|
||||||
|
$(INTLLIBS) \
|
||||||
|
-lm
|
||||||
|
|
||||||
|
@@ -233,5 +234,6 @@
|
||||||
|
$(GLIB_CFLAGS) \
|
||||||
|
$(DEBUG_CFLAGS) \
|
||||||
|
$(DBUS_CFLAGS) \
|
||||||
|
+ $(PURPLE_KEYRING_CFLAGS) \
|
||||||
|
$(LIBXML_CFLAGS) \
|
||||||
|
$(LIBNM_CFLAGS)
|
||||||
|
--- 2.0b4-my/libpurple/account.c 2006-10-19 01:38:16.000000000 +0800
|
||||||
|
+++ 2.0b4-my2/libpurple/account.c 2006-11-13 18:26:19.409755000 +0800
|
||||||
|
@@ -40,6 +40,13 @@
|
||||||
|
#include "util.h"
|
||||||
|
#include "xmlnode.h"
|
||||||
|
|
||||||
|
+#ifdef PURPLE_ENABLE_KEYRING
|
||||||
|
+#include <gnome-keyring.h>
|
||||||
|
+
|
||||||
|
+static char * purple_account_get_password_from_keyring (const char *_prpl, const char *_user);
|
||||||
|
+static gboolean purple_account_set_password_in_keyring (const char *_prpl, const char *_user, const char *password);
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
/* TODO: Should use PurpleValue instead of this? What about "ui"? */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
@@ -321,8 +328,13 @@
|
||||||
|
if (purple_account_get_remember_password(account) &&
|
||||||
|
((tmp = purple_account_get_password(account)) != NULL))
|
||||||
|
{
|
||||||
|
+#ifdef PURPLE_ENABLE_KEYRING
|
||||||
|
+ purple_account_set_password_in_keyring( purple_account_get_protocol_id(account),
|
||||||
|
+ purple_account_get_username(account), tmp);
|
||||||
|
+#else
|
||||||
|
child = xmlnode_new_child(node, "password");
|
||||||
|
xmlnode_insert_data(child, tmp, -1);
|
||||||
|
+#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((tmp = purple_account_get_alias(account)) != NULL)
|
||||||
|
@@ -703,17 +715,30 @@
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = purple_account_new(name, _purple_oscar_convert(name, protocol_id)); /* XXX: */
|
||||||
|
- g_free(name);
|
||||||
|
- g_free(protocol_id);
|
||||||
|
-
|
||||||
|
- /* Read the password */
|
||||||
|
- child = xmlnode_get_child(node, "password");
|
||||||
|
- if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL))
|
||||||
|
+ gboolean got_pwd = FALSE;
|
||||||
|
+#ifdef PURPLE_ENABLE_KEYRING
|
||||||
|
+ data = purple_account_get_password_from_keyring(protocol_id, name);
|
||||||
|
+ if (data)
|
||||||
|
{
|
||||||
|
+ got_pwd = TRUE;
|
||||||
|
purple_account_set_remember_password(ret, TRUE);
|
||||||
|
purple_account_set_password(ret, data);
|
||||||
|
g_free(data);
|
||||||
|
}
|
||||||
|
+#endif
|
||||||
|
+ if (!got_pwd)
|
||||||
|
+ {
|
||||||
|
+ /* Read the password */
|
||||||
|
+ child = xmlnode_get_child(node, "password");
|
||||||
|
+ if ((child != NULL) && ((data = xmlnode_get_data(child)) != NULL))
|
||||||
|
+ {
|
||||||
|
+ purple_account_set_remember_password(ret, TRUE);
|
||||||
|
+ purple_account_set_password(ret, data);
|
||||||
|
+ g_free(data);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ g_free(name);
|
||||||
|
+ g_free(protocol_id);
|
||||||
|
|
||||||
|
/* Read the alias */
|
||||||
|
child = xmlnode_get_child(node, "alias");
|
||||||
|
@@ -2352,3 +2377,60 @@
|
||||||
|
|
||||||
|
gaim_signals_unregister_by_instance(gaim_accounts_get_handle());
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+#ifdef PURPLE_ENABLE_KEYRING
|
||||||
|
+static char *
|
||||||
|
+purple_account_get_password_from_keyring(const char *_prpl, const char *_user)
|
||||||
|
+{
|
||||||
|
+ GnomeKeyringNetworkPasswordData *found_item;
|
||||||
|
+ GnomeKeyringResult result;
|
||||||
|
+ GList *matches;
|
||||||
|
+ char *password;
|
||||||
|
+
|
||||||
|
+ matches = NULL;
|
||||||
|
+
|
||||||
|
+ result = gnome_keyring_find_network_password_sync (
|
||||||
|
+ _user, /* user */
|
||||||
|
+ NULL, /* domain */
|
||||||
|
+ "gaim.local", /* server */
|
||||||
|
+ NULL, /* object */
|
||||||
|
+ _prpl, /* protocol */
|
||||||
|
+ NULL, /* authtype */
|
||||||
|
+ 1863, /* port */
|
||||||
|
+ &matches);
|
||||||
|
+
|
||||||
|
+ if (result != GNOME_KEYRING_RESULT_OK)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ g_assert (matches != NULL && matches->data != NULL);
|
||||||
|
+
|
||||||
|
+ found_item = (GnomeKeyringNetworkPasswordData *) matches->data;
|
||||||
|
+
|
||||||
|
+ password = g_strdup (found_item->password);
|
||||||
|
+
|
||||||
|
+ gnome_keyring_network_password_list_free (matches);
|
||||||
|
+
|
||||||
|
+ return password;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static gboolean
|
||||||
|
+purple_account_set_password_in_keyring (const char *_prpl, const char *_user, const char *_password)
|
||||||
|
+{
|
||||||
|
+ GnomeKeyringResult result;
|
||||||
|
+ guint32 item_id;
|
||||||
|
+
|
||||||
|
+ result = gnome_keyring_set_network_password_sync (
|
||||||
|
+ NULL, /* default keyring */
|
||||||
|
+ _user, /* user */
|
||||||
|
+ NULL, /* domain */
|
||||||
|
+ "gaim.local", /* server */
|
||||||
|
+ NULL, /* object */
|
||||||
|
+ _prpl, /* protocol */
|
||||||
|
+ NULL, /* authtype */
|
||||||
|
+ 1863, /* port */
|
||||||
|
+ _password, /* password */
|
||||||
|
+ &item_id);
|
||||||
|
+
|
||||||
|
+ return result == GNOME_KEYRING_RESULT_OK;
|
||||||
|
+}
|
||||||
|
+#endif
|
487
pidgin-nonblock-aim.patch
Normal file
487
pidgin-nonblock-aim.patch
Normal file
@ -0,0 +1,487 @@
|
|||||||
|
diff -upr gaim-1.5.0/libgaim/protocols/oscar/aim.h gaim-1.5.0-new/libgaim/protocols/oscar/aim.h
|
||||||
|
--- gaim-1.5.0/libpurple/protocols/oscar/aim.h 2005-08-07 23:36:16.000000000 -0500
|
||||||
|
+++ gaim-1.5.0-new/libpurple/protocols/oscar/aim.h 2005-09-28 11:29:23.000000000 -0500
|
||||||
|
@@ -35,6 +35,8 @@
|
||||||
|
#include "libc_interface.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
+#include "gaim-io.h"
|
||||||
|
+
|
||||||
|
#ifdef __cplusplus
|
||||||
|
extern "C" {
|
||||||
|
#endif
|
||||||
|
@@ -310,8 +312,13 @@ struct client_info_s {
|
||||||
|
#define AIM_FRAMETYPE_FLAP 0x0000
|
||||||
|
#define AIM_FRAMETYPE_OFT 0x0001
|
||||||
|
|
||||||
|
+typedef struct aim_frame_s aim_frame_t;
|
||||||
|
+
|
||||||
|
typedef struct aim_conn_s {
|
||||||
|
int fd;
|
||||||
|
+ GaimIO *io;
|
||||||
|
+ aim_frame_t *current_frame;
|
||||||
|
+ int current_payload_len;
|
||||||
|
fu16_t type;
|
||||||
|
fu16_t subtype;
|
||||||
|
flap_seqnum_t seqnum;
|
||||||
|
@@ -346,7 +353,7 @@ typedef struct aim_bstream_s {
|
||||||
|
fu32_t offset;
|
||||||
|
} aim_bstream_t;
|
||||||
|
|
||||||
|
-typedef struct aim_frame_s {
|
||||||
|
+struct aim_frame_s {
|
||||||
|
fu8_t hdrtype; /* defines which piece of the union to use */
|
||||||
|
union {
|
||||||
|
struct {
|
||||||
|
@@ -363,7 +370,7 @@ typedef struct aim_frame_s {
|
||||||
|
aim_conn_t *conn; /* the connection it came in on/is going out on */
|
||||||
|
fu8_t handled; /* 0 = new, !0 = been handled */
|
||||||
|
struct aim_frame_s *next;
|
||||||
|
-} aim_frame_t;
|
||||||
|
+};
|
||||||
|
|
||||||
|
typedef struct aim_msgcookie_s {
|
||||||
|
fu8_t cookie[8];
|
||||||
|
diff -upr gaim-1.5.0/libgaim/protocols/oscar/aim_internal.h gaim-1.5.0-new/libgaim/protocols/oscar/aim_internal.h
|
||||||
|
--- gaim-1.5.0/libgaim/protocols/oscar/aim_internal.h 2005-03-06 22:51:56.000000000 -0600
|
||||||
|
+++ gaim-1.5.0-new/libgaim/protocols/oscar/aim_internal.h 2005-09-28 11:29:23.000000000 -0500
|
||||||
|
@@ -102,8 +102,8 @@ faim_internal int aim_parse_unknown(aim_
|
||||||
|
faim_internal void aim_clonehandlers(aim_session_t *sess, aim_conn_t *dest, aim_conn_t *libgaim);
|
||||||
|
|
||||||
|
/* rxqueue.c */
|
||||||
|
-faim_internal int aim_recv(int fd, void *buf, size_t count);
|
||||||
|
-faim_internal int aim_bstream_recv(aim_bstream_t *bs, int fd, size_t count);
|
||||||
|
+faim_internal int aim_recv(aim_conn_t *conn, void *buf, size_t count);
|
||||||
|
+faim_internal int aim_bstream_recv(aim_bstream_t *bs, aim_conn_t *conn, size_t count);
|
||||||
|
faim_internal void aim_rxqueue_cleanbyconn(aim_session_t *sess, aim_conn_t *conn);
|
||||||
|
faim_internal void aim_frame_destroy(aim_frame_t *);
|
||||||
|
|
||||||
|
diff -upr gaim-1.5.0/libgaim/protocols/oscar/conn.c gaim-1.5.0-new/libgaim/protocols/oscar/conn.c
|
||||||
|
--- gaim-1.5.0/libgaim/protocols/oscar/conn.c 2005-07-09 14:26:51.000000000 -0500
|
||||||
|
+++ gaim-1.5.0-new/libgaim/protocols/oscar/conn.c 2005-09-28 11:29:23.000000000 -0500
|
||||||
|
@@ -161,6 +161,9 @@ static void connkill_real(aim_session_t
|
||||||
|
if ((*deadconn)->fd != -1)
|
||||||
|
aim_conn_close(*deadconn);
|
||||||
|
|
||||||
|
+ if ((*deadconn)->io)
|
||||||
|
+ gaim_io_destroy ((*deadconn)->io);
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* This will free ->internal if it necessary...
|
||||||
|
*/
|
||||||
|
@@ -218,6 +221,7 @@ static void aim_conn_init(aim_conn_t *de
|
||||||
|
return;
|
||||||
|
|
||||||
|
deadconn->fd = -1;
|
||||||
|
+ deadconn->io = NULL;
|
||||||
|
deadconn->subtype = -1;
|
||||||
|
deadconn->type = -1;
|
||||||
|
deadconn->seqnum = 0;
|
||||||
|
@@ -304,8 +308,12 @@ faim_export void aim_conn_close(aim_conn
|
||||||
|
{
|
||||||
|
aim_rxcallback_t userfunc;
|
||||||
|
|
||||||
|
- if (deadconn->fd >= 3)
|
||||||
|
+ if (deadconn->io) {
|
||||||
|
+ gaim_io_destroy (deadconn->io);
|
||||||
|
+ deadconn->io = NULL;
|
||||||
|
+ } else if (deadconn->fd >= 3) {
|
||||||
|
close(deadconn->fd);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
deadconn->fd = -1;
|
||||||
|
|
||||||
|
@@ -559,6 +567,7 @@ faim_internal aim_conn_t *aim_cloneconn(
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
conn->fd = libgaim->fd;
|
||||||
|
+ conn->io = gaim_io_new (conn->fd);
|
||||||
|
conn->type = libgaim->type;
|
||||||
|
conn->subtype = libgaim->subtype;
|
||||||
|
conn->seqnum = libgaim->seqnum;
|
||||||
|
@@ -606,6 +615,7 @@ faim_export aim_conn_t *aim_newconn(aim_
|
||||||
|
|
||||||
|
connstruct->sessv = (void *)sess;
|
||||||
|
connstruct->type = type;
|
||||||
|
+ connstruct->io = NULL;
|
||||||
|
|
||||||
|
if (!dest) { /* just allocate a struct */
|
||||||
|
connstruct->fd = -1;
|
||||||
|
diff -upr gaim-1.5.0/libgaim/protocols/oscar/ft.c gaim-1.5.0-new/libgaim/protocols/oscar/ft.c
|
||||||
|
--- gaim-1.5.0/libgaim/protocols/oscar/ft.c 2005-08-07 23:36:17.000000000 -0500
|
||||||
|
+++ gaim-1.5.0-new/libgaim/protocols/oscar/ft.c 2005-09-28 11:29:23.000000000 -0500
|
||||||
|
@@ -630,9 +630,9 @@ static int handlehdr_odc(aim_session_t *
|
||||||
|
|
||||||
|
while (payloadlength - recvd) {
|
||||||
|
if (payloadlength - recvd >= 1024)
|
||||||
|
- i = aim_recv(conn->fd, &msg[recvd], 1024);
|
||||||
|
+ i = aim_recv(conn, &msg[recvd], 1024);
|
||||||
|
else
|
||||||
|
- i = aim_recv(conn->fd, &msg[recvd], payloadlength - recvd);
|
||||||
|
+ i = aim_recv(conn, &msg[recvd], payloadlength - recvd);
|
||||||
|
if (i <= 0) {
|
||||||
|
free(msg);
|
||||||
|
free(snptr);
|
||||||
|
diff -upr gaim-1.5.0/libgaim/protocols/oscar/oscar.c gaim-1.5.0-new/libgaim/protocols/oscar/oscar.c
|
||||||
|
--- gaim-1.5.0/libgaim/protocols/oscar/oscar.c 2005-08-11 19:57:27.000000000 -0500
|
||||||
|
+++ gaim-1.5.0-new/libgaim/protocols/oscar/oscar.c 2005-09-28 11:29:24.000000000 -0500
|
||||||
|
@@ -1580,7 +1580,7 @@ static void oscar_callback(gpointer data
|
||||||
|
gaim_debug_error("oscar", "Waiting to be destroyed\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
- } else {
|
||||||
|
+ } else if (!conn->io || !gaim_io_is_connected (conn->io)) {
|
||||||
|
if ((conn->type == AIM_CONN_TYPE_BOS) ||
|
||||||
|
!(aim_getconn_type(od->sess, AIM_CONN_TYPE_BOS))) {
|
||||||
|
gaim_debug_error("oscar",
|
||||||
|
@@ -3243,6 +3243,11 @@ static void oscar_sendfile_connected(gpo
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void oscar_sendfile_ready_to_xfer (GaimIO *io, GaimXfer *xfer)
|
||||||
|
+{
|
||||||
|
+ gaim_xfer_start(xfer, xfer->fd, NULL, 0);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
/*
|
||||||
|
* This is called when a buddy sends us some file info. This happens when they
|
||||||
|
* are sending a file to you, and you have just established a connection to them.
|
||||||
|
@@ -3285,7 +3290,12 @@ static int oscar_sendfile_prompt(aim_ses
|
||||||
|
|
||||||
|
/* XXX - convert the name from UTF-8 to UCS-2 if necessary, and pass the encoding to the call below */
|
||||||
|
aim_oft_sendheader(oft_info->sess, AIM_CB_OFT_ACK, oft_info);
|
||||||
|
- gaim_xfer_start(xfer, xfer->fd, NULL, 0);
|
||||||
|
+
|
||||||
|
+ if (xfer->fd == conn->fd && conn->io && gaim_io_get_pending_write (conn->io)) {
|
||||||
|
+ gaim_io_set_flushed_func (conn->io, (GaimIOFunc) oscar_sendfile_ready_to_xfer, xfer);
|
||||||
|
+ } else {
|
||||||
|
+ oscar_sendfile_ready_to_xfer (conn->io, xfer);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -3317,7 +3327,11 @@ static int oscar_sendfile_ack(aim_sessio
|
||||||
|
gaim_input_remove(xfer->watcher);
|
||||||
|
xfer->watcher = 0;
|
||||||
|
|
||||||
|
- gaim_xfer_start(xfer, xfer->fd, NULL, 0);
|
||||||
|
+ if (xfer->fd == conn->fd && conn->io && gaim_io_get_pending_write (conn->io)) {
|
||||||
|
+ gaim_io_set_flushed_func (conn->io, (GaimIOFunc) oscar_sendfile_ready_to_xfer, xfer);
|
||||||
|
+ } else {
|
||||||
|
+ oscar_sendfile_ready_to_xfer (conn->io, xfer);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
diff -upr gaim-1.5.0/libgaim/protocols/oscar/rxqueue.c gaim-1.5.0-new/libgaim/protocols/oscar/rxqueue.c
|
||||||
|
--- gaim-1.5.0/libgaim/protocols/oscar/rxqueue.c 2004-05-05 23:41:24.000000000 -0500
|
||||||
|
+++ gaim-1.5.0-new/libgaim/protocols/oscar/rxqueue.c 2005-09-28 11:29:24.000000000 -0500
|
||||||
|
@@ -5,7 +5,7 @@
|
||||||
|
*/
|
||||||
|
|
||||||
|
#define FAIM_INTERNAL
|
||||||
|
-#include <aim.h>
|
||||||
|
+#include <aim.h>
|
||||||
|
|
||||||
|
#ifndef _WIN32
|
||||||
|
#include <sys/socket.h>
|
||||||
|
@@ -14,43 +14,44 @@
|
||||||
|
/*
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
-faim_internal int aim_recv(int fd, void *buf, size_t count)
|
||||||
|
+faim_internal int aim_recv(aim_conn_t *conn, void *buf, size_t count)
|
||||||
|
{
|
||||||
|
- int left, cur;
|
||||||
|
+ int left, cur;
|
||||||
|
|
||||||
|
- for (cur = 0, left = count; left; ) {
|
||||||
|
- int ret;
|
||||||
|
-
|
||||||
|
- ret = recv(fd, ((unsigned char *)buf)+cur, left, 0);
|
||||||
|
+ if (!conn->io)
|
||||||
|
+ conn->io = gaim_io_new (conn->fd);
|
||||||
|
|
||||||
|
- /* Of course EOF is an error, only morons disagree with that. */
|
||||||
|
- if (ret <= 0)
|
||||||
|
- return -1;
|
||||||
|
-
|
||||||
|
- cur += ret;
|
||||||
|
- left -= ret;
|
||||||
|
+ if (gaim_io_get_fd (conn->io) != conn->fd) {
|
||||||
|
+ gaim_io_destroy (conn->io);
|
||||||
|
+ conn->io = gaim_io_new (conn->fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
- return cur;
|
||||||
|
+ if (!gaim_io_is_connected (conn->io))
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ if (!gaim_io_read_bytes (conn->io, buf, count))
|
||||||
|
+ return gaim_io_is_connected (conn->io) ? 0 : -1;
|
||||||
|
+
|
||||||
|
+ return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Read into a byte stream. Will not read more than count, but may read
|
||||||
|
* less if there is not enough room in the stream buffer.
|
||||||
|
*/
|
||||||
|
-faim_internal int aim_bstream_recv(aim_bstream_t *bs, int fd, size_t count)
|
||||||
|
+faim_internal int aim_bstream_recv(aim_bstream_t *bs, aim_conn_t *conn, size_t count)
|
||||||
|
{
|
||||||
|
int red = 0;
|
||||||
|
|
||||||
|
- if (!bs || (fd < 0) || (count < 0))
|
||||||
|
+ if (!bs || (conn->fd < 0) || (count < 0))
|
||||||
|
return -1;
|
||||||
|
-
|
||||||
|
+
|
||||||
|
if (count > (bs->len - bs->offset))
|
||||||
|
count = bs->len - bs->offset; /* truncate to remaining space */
|
||||||
|
|
||||||
|
if (count) {
|
||||||
|
|
||||||
|
- red = aim_recv(fd, bs->data + bs->offset, count);
|
||||||
|
+ red = aim_recv(conn, bs->data + bs->offset, count);
|
||||||
|
|
||||||
|
if (red <= 0)
|
||||||
|
return -1;
|
||||||
|
@@ -86,7 +87,7 @@ static int aim_get_command_flap(aim_sess
|
||||||
|
{
|
||||||
|
fu8_t hdr_raw[6];
|
||||||
|
aim_bstream_t hdr;
|
||||||
|
-
|
||||||
|
+
|
||||||
|
fr->hdrtype = AIM_FRAMETYPE_FLAP;
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -101,8 +102,7 @@ static int aim_get_command_flap(aim_sess
|
||||||
|
* 0x04 | Number of data bytes that follow, 2 bytes.
|
||||||
|
*/
|
||||||
|
aim_bstream_init(&hdr, hdr_raw, sizeof(hdr_raw));
|
||||||
|
- if (aim_bstream_recv(&hdr, conn->fd, 6) < 6) {
|
||||||
|
- aim_conn_close(conn);
|
||||||
|
+ if (aim_bstream_recv(&hdr, conn, 6) < 6) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -113,10 +113,10 @@ static int aim_get_command_flap(aim_sess
|
||||||
|
* or we break. We must handle it just in case.
|
||||||
|
*/
|
||||||
|
if (aimbs_get8(&hdr) != 0x2a) {
|
||||||
|
- faimdprintf(sess, 0, "Invalid FLAP frame received on FLAP connection!");
|
||||||
|
+ gaim_debug_misc("oscar", "Invalid FLAP frame received on FLAP connection!");
|
||||||
|
aim_conn_close(conn);
|
||||||
|
return -1;
|
||||||
|
- }
|
||||||
|
+ }
|
||||||
|
|
||||||
|
fr->hdr.flap.channel = aimbs_get8(&hdr);
|
||||||
|
fr->hdr.flap.seqnum = aimbs_get16(&hdr);
|
||||||
|
@@ -141,8 +141,7 @@ static int aim_get_command_rendezvous(ai
|
||||||
|
* Read rendezvous header
|
||||||
|
*/
|
||||||
|
aim_bstream_init(&hdr, hdr_raw, sizeof(hdr_raw));
|
||||||
|
- if (aim_bstream_recv(&hdr, conn->fd, 8) < 8) {
|
||||||
|
- aim_conn_close(conn);
|
||||||
|
+ if (aim_bstream_recv(&hdr, conn, 8) < 8) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -163,7 +162,6 @@ static int aim_get_command_rendezvous(ai
|
||||||
|
*/
|
||||||
|
faim_export int aim_get_command(aim_session_t *sess, aim_conn_t *conn)
|
||||||
|
{
|
||||||
|
- aim_frame_t *fr;
|
||||||
|
int payloadlen;
|
||||||
|
|
||||||
|
if (!sess || !conn)
|
||||||
|
@@ -172,69 +170,81 @@ faim_export int aim_get_command(aim_sess
|
||||||
|
if (conn->fd == -1)
|
||||||
|
return -1; /* it's an aim_conn_close()'d connection */
|
||||||
|
|
||||||
|
- if (conn->fd < 3) /* can happen when people abuse the interface */
|
||||||
|
+ /* If stdin is closed, then zero becomes a valid fd
|
||||||
|
+ if (conn->fd < 3)
|
||||||
|
return -1;
|
||||||
|
+ */
|
||||||
|
|
||||||
|
if (conn->status & AIM_CONN_STATUS_INPROGRESS)
|
||||||
|
return aim_conn_completeconnect(sess, conn);
|
||||||
|
|
||||||
|
- if (!(fr = (aim_frame_t *)calloc(sizeof(aim_frame_t), 1)))
|
||||||
|
- return -ENOMEM;
|
||||||
|
+ if (!conn->current_frame) {
|
||||||
|
+ if (!(conn->current_frame = (aim_frame_t *)calloc(sizeof(aim_frame_t), 1)))
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+
|
||||||
|
+ /*
|
||||||
|
+ * Rendezvous (client to client) connections do not speak FLAP, so this
|
||||||
|
+ * function will break on them.
|
||||||
|
+ */
|
||||||
|
+ if (conn->type == AIM_CONN_TYPE_RENDEZVOUS)
|
||||||
|
+ payloadlen = aim_get_command_rendezvous(sess, conn, conn->current_frame);
|
||||||
|
+ else if (conn->type == AIM_CONN_TYPE_LISTENER) {
|
||||||
|
+ gaim_debug_misc("oscar", "AIM_CONN_TYPE_LISTENER on fd %d\n", conn->fd);
|
||||||
|
+ free(conn->current_frame);
|
||||||
|
+ conn->current_frame = NULL;
|
||||||
|
+ return -1;
|
||||||
|
+ } else
|
||||||
|
+ payloadlen = aim_get_command_flap(sess, conn, conn->current_frame);
|
||||||
|
|
||||||
|
- /*
|
||||||
|
- * Rendezvous (client to client) connections do not speak FLAP, so this
|
||||||
|
- * function will break on them.
|
||||||
|
- */
|
||||||
|
- if (conn->type == AIM_CONN_TYPE_RENDEZVOUS)
|
||||||
|
- payloadlen = aim_get_command_rendezvous(sess, conn, fr);
|
||||||
|
- else if (conn->type == AIM_CONN_TYPE_LISTENER) {
|
||||||
|
- faimdprintf(sess, 0, "AIM_CONN_TYPE_LISTENER on fd %d\n", conn->fd);
|
||||||
|
- free(fr);
|
||||||
|
- return -1;
|
||||||
|
- } else
|
||||||
|
- payloadlen = aim_get_command_flap(sess, conn, fr);
|
||||||
|
+ if (payloadlen < 0) {
|
||||||
|
+ free(conn->current_frame);
|
||||||
|
+ conn->current_frame = NULL;
|
||||||
|
+ return -1;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- if (payloadlen < 0) {
|
||||||
|
- free(fr);
|
||||||
|
- return -1;
|
||||||
|
- }
|
||||||
|
+ conn->current_payload_len = payloadlen;
|
||||||
|
+ } else
|
||||||
|
+ payloadlen = conn->current_payload_len;
|
||||||
|
|
||||||
|
- if (payloadlen > 0) {
|
||||||
|
+ if (conn->current_payload_len > 0) {
|
||||||
|
fu8_t *payload = NULL;
|
||||||
|
|
||||||
|
if (!(payload = (fu8_t *) malloc(payloadlen))) {
|
||||||
|
- aim_frame_destroy(fr);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
- aim_bstream_init(&fr->data, payload, payloadlen);
|
||||||
|
+ aim_bstream_init(&conn->current_frame->data, payload, payloadlen);
|
||||||
|
|
||||||
|
/* read the payload */
|
||||||
|
- if (aim_bstream_recv(&fr->data, conn->fd, payloadlen) < payloadlen) {
|
||||||
|
- aim_frame_destroy(fr); /* free's payload */
|
||||||
|
- aim_conn_close(conn);
|
||||||
|
+ if (aim_bstream_recv(&conn->current_frame->data, conn, payloadlen) < payloadlen) {
|
||||||
|
+ free (payload);
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
- } else
|
||||||
|
- aim_bstream_init(&fr->data, NULL, 0);
|
||||||
|
+ } else if (conn->current_payload_len == 0)
|
||||||
|
+ aim_bstream_init(&conn->current_frame->data, NULL, 0);
|
||||||
|
|
||||||
|
- aim_bstream_rewind(&fr->data);
|
||||||
|
+ if (conn->current_payload_len >= 0) {
|
||||||
|
+ aim_bstream_rewind(&conn->current_frame->data);
|
||||||
|
|
||||||
|
- fr->conn = conn;
|
||||||
|
+ conn->current_frame->conn = conn;
|
||||||
|
|
||||||
|
- /* Enqueue this puppy */
|
||||||
|
- fr->next = NULL; /* this will always be at the bottom */
|
||||||
|
- if (sess->queue_incoming == NULL)
|
||||||
|
- sess->queue_incoming = fr;
|
||||||
|
- else {
|
||||||
|
- aim_frame_t *cur;
|
||||||
|
- for (cur = sess->queue_incoming; cur->next; cur = cur->next);
|
||||||
|
- cur->next = fr;
|
||||||
|
- }
|
||||||
|
+ /* Enqueue this puppy */
|
||||||
|
+ conn->current_frame->next = NULL; /* this will always be at the bottom */
|
||||||
|
+ if (sess->queue_incoming == NULL)
|
||||||
|
+ sess->queue_incoming = conn->current_frame;
|
||||||
|
+ else {
|
||||||
|
+ aim_frame_t *cur;
|
||||||
|
+ for (cur = sess->queue_incoming; cur->next; cur = cur->next);
|
||||||
|
+ cur->next = conn->current_frame;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- fr->conn->lastactivity = time(NULL);
|
||||||
|
+ conn->current_frame->conn->lastactivity = time(NULL);
|
||||||
|
|
||||||
|
- return 0;
|
||||||
|
+ conn->current_frame = NULL;
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
@@ -270,7 +280,7 @@ faim_internal void aim_rxqueue_cleanbyco
|
||||||
|
for (currx = sess->queue_incoming; currx; currx = currx->next) {
|
||||||
|
if ((!currx->handled) && (currx->conn == conn))
|
||||||
|
currx->handled = 1;
|
||||||
|
- }
|
||||||
|
+ }
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
diff -upr gaim-1.5.0/libgaim/protocols/oscar/txqueue.c gaim-1.5.0-new/libgaim/protocols/oscar/txqueue.c
|
||||||
|
--- gaim-1.5.0/libgaim/protocols/oscar/txqueue.c 2004-07-06 02:00:32.000000000 -0500
|
||||||
|
+++ gaim-1.5.0-new/libgaim/protocols/oscar/txqueue.c 2005-09-28 11:29:24.000000000 -0500
|
||||||
|
@@ -192,25 +192,22 @@ faim_internal int aim_tx_enqueue(aim_ses
|
||||||
|
return (*sess->tx_enqueue)(sess, fr);
|
||||||
|
}
|
||||||
|
|
||||||
|
-static int aim_send(int fd, const void *buf, size_t count)
|
||||||
|
+static int aim_send(aim_conn_t *conn, const void *buf, size_t count)
|
||||||
|
{
|
||||||
|
int left, cur;
|
||||||
|
|
||||||
|
- for (cur = 0, left = count; left; ) {
|
||||||
|
- int ret;
|
||||||
|
+ if (!conn->io)
|
||||||
|
+ conn->io = gaim_io_new (conn->fd);
|
||||||
|
|
||||||
|
- ret = send(fd, ((unsigned char *)buf)+cur, left, 0);
|
||||||
|
-
|
||||||
|
- if (ret == -1)
|
||||||
|
- return -1;
|
||||||
|
- else if (ret == 0)
|
||||||
|
- return cur;
|
||||||
|
-
|
||||||
|
- cur += ret;
|
||||||
|
- left -= ret;
|
||||||
|
+ if (gaim_io_get_fd (conn->io) != conn->fd) {
|
||||||
|
+ gaim_io_destroy (conn->io);
|
||||||
|
+ conn->io = gaim_io_new (conn->fd);
|
||||||
|
}
|
||||||
|
|
||||||
|
- return cur;
|
||||||
|
+ if (!gaim_io_write_bytes (conn->io, buf, count))
|
||||||
|
+ return -1;
|
||||||
|
+
|
||||||
|
+ return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int aim_bstream_send(aim_bstream_t *bs, aim_conn_t *conn, size_t count)
|
||||||
|
@@ -239,7 +236,7 @@ static int aim_bstream_send(aim_bstream_
|
||||||
|
while (count - wrote > 1024) {
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
- ret = aim_send(conn->fd, bs->data + bs->offset + wrote, 1024);
|
||||||
|
+ ret = aim_send(conn, bs->data + bs->offset + wrote, 1024);
|
||||||
|
if (ret > 0)
|
||||||
|
wrote += ret;
|
||||||
|
if (ret < 0)
|
||||||
|
@@ -250,7 +247,7 @@ static int aim_bstream_send(aim_bstream_
|
||||||
|
}
|
||||||
|
|
||||||
|
if (count - wrote) {
|
||||||
|
- wrote = wrote + aim_send(conn->fd, bs->data + bs->offset + wrote, count - wrote);
|
||||||
|
+ wrote = wrote + aim_send(conn, bs->data + bs->offset + wrote, count - wrote);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
983
pidgin-nonblock-common.patch
Normal file
983
pidgin-nonblock-common.patch
Normal file
@ -0,0 +1,983 @@
|
|||||||
|
diff -uprN gaim-1.5.0-old/libpurple/plugins/ssl/ssl-gnutls.c gaim-1.5.0-new/libpurple/plugins/ssl/ssl-gnutls.c
|
||||||
|
--- gaim-1.5.0-old/libpurple/plugins/ssl/ssl-gnutls.c 2004-09-03 16:34:16.000000000 -0500
|
||||||
|
+++ gaim-1.5.0-new/libpurple/plugins/ssl/ssl-gnutls.c 2005-11-12 21:42:43.000000000 -0600
|
||||||
|
@@ -131,8 +131,6 @@ ssl_gnutls_close(PurpleSslConnection *gsc)
|
||||||
|
if(!gnutls_data)
|
||||||
|
return;
|
||||||
|
|
||||||
|
- gnutls_bye(gnutls_data->session, GNUTLS_SHUT_RDWR);
|
||||||
|
-
|
||||||
|
gnutls_deinit(gnutls_data->session);
|
||||||
|
|
||||||
|
g_free(gnutls_data);
|
||||||
|
@@ -160,6 +158,22 @@ ssl_gnutls_read(PurpleSslConnection *gsc,
|
||||||
|
}
|
||||||
|
|
||||||
|
static size_t
|
||||||
|
+ssl_gnutls_read_nonblock(PurpleSslConnection *gsc, void *data, size_t len)
|
||||||
|
+{
|
||||||
|
+ PurpleSslGnutlsData *gnutls_data = PURPLE_SSL_GNUTLS_DATA(gsc);
|
||||||
|
+ int s;
|
||||||
|
+
|
||||||
|
+ s = gnutls_record_recv(gnutls_data->session, data, len);
|
||||||
|
+
|
||||||
|
+ if (s == GNUTLS_E_AGAIN)
|
||||||
|
+ s = PURPLE_SSL_IO_AGAIN;
|
||||||
|
+ else if (s == GNUTLS_E_INTERRUPTED)
|
||||||
|
+ s = PURPLE_SSL_IO_INTERRUPTED;
|
||||||
|
+
|
||||||
|
+ return s;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static size_t
|
||||||
|
ssl_gnutls_write(PurpleSslConnection *gsc, const void *data, size_t len)
|
||||||
|
{
|
||||||
|
PurpleSslGnutlsData *gnutls_data = PURPLE_SSL_GNUTLS_DATA(gsc);
|
||||||
|
@@ -171,6 +185,23 @@ ssl_gnutls_write(PurpleSslConnection *gsc,
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static size_t
|
||||||
|
+ssl_gnutls_write_nonblock(PurpleSslConnection *gsc, const void *data, size_t len)
|
||||||
|
+{
|
||||||
|
+ PurpleSslGnutlsData *gnutls_data = PURPLE_SSL_GNUTLS_DATA(gsc);
|
||||||
|
+ size_t s = 0;
|
||||||
|
+
|
||||||
|
+ if(gnutls_data)
|
||||||
|
+ s = gnutls_record_send(gnutls_data->session, data, len);
|
||||||
|
+
|
||||||
|
+ if (s == GNUTLS_E_AGAIN)
|
||||||
|
+ s = PURPLE_SSL_IO_AGAIN;
|
||||||
|
+ else if (s == GNUTLS_E_INTERRUPTED)
|
||||||
|
+ s = PURPLE_SSL_IO_INTERRUPTED;
|
||||||
|
+
|
||||||
|
+ return s;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static PurpleSslOps ssl_ops =
|
||||||
|
{
|
||||||
|
ssl_gnutls_init,
|
||||||
|
@@ -178,7 +209,9 @@ static PurpleSslOps ssl_ops =
|
||||||
|
ssl_gnutls_connect,
|
||||||
|
ssl_gnutls_close,
|
||||||
|
ssl_gnutls_read,
|
||||||
|
- ssl_gnutls_write,
|
||||||
|
+ ssl_gnutls_read_nonblock,
|
||||||
|
+ ssl_gnutls_write,
|
||||||
|
+ ssl_gnutls_write_nonblock,
|
||||||
|
|
||||||
|
/* padding */
|
||||||
|
NULL,
|
||||||
|
diff -uprN gaim-1.5.0-old/libpurple/plugins/ssl/ssl-nss.c gaim-1.5.0-new/libpurple/plugins/ssl/ssl-nss.c
|
||||||
|
--- gaim-1.5.0-old/libpurple/plugins/ssl/ssl-nss.c 2005-01-16 18:32:26.000000000 -0600
|
||||||
|
+++ gaim-1.5.0-new/libpurple/plugins/ssl/ssl-nss.c 2005-11-12 21:42:23.000000000 -0600
|
||||||
|
@@ -269,6 +269,8 @@ static PurpleSslOps ssl_ops =
|
||||||
|
ssl_nss_connect,
|
||||||
|
ssl_nss_close,
|
||||||
|
ssl_nss_read,
|
||||||
|
+ ssl_nss_read,
|
||||||
|
+ ssl_nss_write,
|
||||||
|
ssl_nss_write,
|
||||||
|
|
||||||
|
/* padding */
|
||||||
|
diff -uprN gaim-1.5.0-old/libpurple/purple-fifo.c gaim-1.5.0-new/libpurple/purple-fifo.c
|
||||||
|
--- gaim-1.5.0-old/libpurple/purple-fifo.c 1969-12-31 18:00:00.000000000 -0600
|
||||||
|
+++ gaim-1.5.0-new/libpurple/purple-fifo.c 2005-11-12 21:42:23.000000000 -0600
|
||||||
|
@@ -0,0 +1,232 @@
|
||||||
|
+/*
|
||||||
|
+ * @file purple-fifo.c A FIFO byte queue.
|
||||||
|
+ * @ingroup core
|
||||||
|
+ *
|
||||||
|
+ * Pidgin 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"
|
||||||
|
+
|
||||||
|
+#define BUFFER_SIZE 256
|
||||||
|
+
|
||||||
|
+typedef struct
|
||||||
|
+{
|
||||||
|
+ GList *buffer_list;
|
||||||
|
+ GList *enqueue_buffer;
|
||||||
|
+ gint enqueue_pos;
|
||||||
|
+ GList *dequeue_buffer;
|
||||||
|
+ gint dequeue_pos;
|
||||||
|
+
|
||||||
|
+ gint total_used;
|
||||||
|
+}
|
||||||
|
+PurpleFifo;
|
||||||
|
+
|
||||||
|
+PurpleFifo *
|
||||||
|
+purple_fifo_new (void)
|
||||||
|
+{
|
||||||
|
+ return g_new0 (PurpleFifo, 1);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+purple_fifo_destroy (PurpleFifo *fifo)
|
||||||
|
+{
|
||||||
|
+ GList *l;
|
||||||
|
+
|
||||||
|
+ for (l = fifo->buffer_list; l; l = g_list_next (l))
|
||||||
|
+ g_free (l->data);
|
||||||
|
+
|
||||||
|
+ g_list_free (fifo->buffer_list);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gint
|
||||||
|
+purple_fifo_get_used (PurpleFifo *fifo)
|
||||||
|
+{
|
||||||
|
+ return fifo->total_used;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+ensure_buffers (PurpleFifo *fifo)
|
||||||
|
+{
|
||||||
|
+ if (!fifo->buffer_list)
|
||||||
|
+ {
|
||||||
|
+ fifo->buffer_list = g_list_append (NULL, g_malloc (BUFFER_SIZE));
|
||||||
|
+ fifo->enqueue_buffer = fifo->buffer_list;
|
||||||
|
+ fifo->dequeue_buffer = fifo->buffer_list;
|
||||||
|
+
|
||||||
|
+ fifo->buffer_list->data = g_malloc (BUFFER_SIZE);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+enqueue_next_buffer (PurpleFifo *fifo)
|
||||||
|
+{
|
||||||
|
+ g_list_append (fifo->enqueue_buffer, g_malloc (BUFFER_SIZE));
|
||||||
|
+ fifo->enqueue_buffer = g_list_next (fifo->enqueue_buffer);
|
||||||
|
+ fifo->enqueue_pos = 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+dequeue_next_buffer (PurpleFifo *fifo)
|
||||||
|
+{
|
||||||
|
+ g_free (fifo->dequeue_buffer->data);
|
||||||
|
+ fifo->dequeue_buffer = g_list_delete_link (fifo->dequeue_buffer, fifo->dequeue_buffer);
|
||||||
|
+
|
||||||
|
+ fifo->buffer_list = fifo->dequeue_buffer;
|
||||||
|
+ if (!fifo->buffer_list)
|
||||||
|
+ fifo->enqueue_buffer = NULL;
|
||||||
|
+
|
||||||
|
+ fifo->dequeue_pos = 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+purple_fifo_enqueue (PurpleFifo *fifo, gconstpointer libpurple, gint n)
|
||||||
|
+{
|
||||||
|
+ gint in_pos;
|
||||||
|
+
|
||||||
|
+ ensure_buffers (fifo);
|
||||||
|
+
|
||||||
|
+ for (in_pos = 0; in_pos < n; )
|
||||||
|
+ {
|
||||||
|
+ gint n_copied = MIN (BUFFER_SIZE - fifo->enqueue_pos, n - in_pos);
|
||||||
|
+
|
||||||
|
+ memcpy (((guint8 *) fifo->enqueue_buffer->data) + fifo->enqueue_pos, ((const guint8 *) libpurple) + in_pos, n_copied);
|
||||||
|
+
|
||||||
|
+ fifo->enqueue_pos += n_copied;
|
||||||
|
+ in_pos += n_copied;
|
||||||
|
+
|
||||||
|
+ if (fifo->enqueue_pos == BUFFER_SIZE)
|
||||||
|
+ enqueue_next_buffer (fifo);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ fifo->total_used += n;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gboolean
|
||||||
|
+purple_fifo_dequeue (PurpleFifo *fifo, gpointer dest, gint n)
|
||||||
|
+{
|
||||||
|
+ gint out_pos;
|
||||||
|
+
|
||||||
|
+ if (n > fifo->total_used)
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
+ for (out_pos = 0; out_pos < n; )
|
||||||
|
+ {
|
||||||
|
+ gint n_copied = MIN (BUFFER_SIZE - fifo->dequeue_pos, n - out_pos);
|
||||||
|
+
|
||||||
|
+ if (dest)
|
||||||
|
+ memcpy (((guint8 *) dest) + out_pos,
|
||||||
|
+ ((guint8 *) fifo->dequeue_buffer->data) + fifo->dequeue_pos,
|
||||||
|
+ n_copied);
|
||||||
|
+
|
||||||
|
+ fifo->dequeue_pos += n_copied;
|
||||||
|
+ out_pos += n_copied;
|
||||||
|
+
|
||||||
|
+ if (fifo->dequeue_pos == BUFFER_SIZE)
|
||||||
|
+ dequeue_next_buffer (fifo);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ fifo->total_used -= n;
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gboolean
|
||||||
|
+purple_fifo_dequeue_line (PurpleFifo *fifo, gchar **dest)
|
||||||
|
+{
|
||||||
|
+ gchar *line;
|
||||||
|
+ gboolean have_cr = FALSE;
|
||||||
|
+ gboolean have_crlf = FALSE;
|
||||||
|
+ GList *buffer_l;
|
||||||
|
+ gint pos;
|
||||||
|
+ gint n;
|
||||||
|
+
|
||||||
|
+ buffer_l = fifo->dequeue_buffer;
|
||||||
|
+ n = 0;
|
||||||
|
+
|
||||||
|
+ for (pos = fifo->dequeue_pos; n < fifo->total_used && !have_crlf; pos++, n++)
|
||||||
|
+ {
|
||||||
|
+ guint8 *p = ((guint8 *) buffer_l->data) + fifo->dequeue_pos;
|
||||||
|
+ guint8 c = *p;
|
||||||
|
+
|
||||||
|
+ if (c == '\r')
|
||||||
|
+ {
|
||||||
|
+ have_cr = TRUE;
|
||||||
|
+ have_crlf = FALSE;
|
||||||
|
+ }
|
||||||
|
+ else if (c == '\n' && have_cr)
|
||||||
|
+ {
|
||||||
|
+ have_crlf = TRUE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (pos == BUFFER_SIZE)
|
||||||
|
+ {
|
||||||
|
+ buffer_l = g_list_next (buffer_l);
|
||||||
|
+ pos = 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!have_crlf)
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
+ line = g_malloc (n + 1);
|
||||||
|
+ if (!purple_fifo_dequeue (fifo, line, n))
|
||||||
|
+ {
|
||||||
|
+ /* Paranoid check; can't happen in practice */
|
||||||
|
+ g_free (line);
|
||||||
|
+ return FALSE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ *(line + n) = '\0';
|
||||||
|
+ *dest = line;
|
||||||
|
+
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gboolean
|
||||||
|
+purple_fifo_peek (PurpleFifo *fifo, gpointer dest, gint n)
|
||||||
|
+{
|
||||||
|
+ GList *dequeue_buffer;
|
||||||
|
+ gint dequeue_pos;
|
||||||
|
+ gint out_pos;
|
||||||
|
+
|
||||||
|
+ if (n > fifo->total_used)
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
+ dequeue_buffer = fifo->dequeue_buffer;
|
||||||
|
+ dequeue_pos = fifo->dequeue_pos;
|
||||||
|
+
|
||||||
|
+ for (out_pos = 0; out_pos < n; )
|
||||||
|
+ {
|
||||||
|
+ gint n_copied = MIN (BUFFER_SIZE - dequeue_pos, n - out_pos);
|
||||||
|
+
|
||||||
|
+ if (dest)
|
||||||
|
+ memcpy (((guint8 *) dest) + out_pos,
|
||||||
|
+ ((guint8 *) dequeue_buffer->data) + dequeue_pos,
|
||||||
|
+ n_copied);
|
||||||
|
+
|
||||||
|
+ dequeue_pos += n_copied;
|
||||||
|
+ out_pos += n_copied;
|
||||||
|
+
|
||||||
|
+ if (dequeue_pos == BUFFER_SIZE)
|
||||||
|
+ {
|
||||||
|
+ dequeue_buffer = g_list_next (dequeue_buffer);
|
||||||
|
+ dequeue_pos = 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
diff -uprN gaim-1.5.0-old/libpurple/purple-fifo.h gaim-1.5.0-new/libpurple/purple-fifo.h
|
||||||
|
--- gaim-1.5.0-old/libpurple/purple-fifo.h 1969-12-31 18:00:00.000000000 -0600
|
||||||
|
+++ gaim-1.5.0-new/libpurple/purple-fifo.h 2005-11-12 21:42:23.000000000 -0600
|
||||||
|
@@ -0,0 +1,54 @@
|
||||||
|
+/**
|
||||||
|
+ * @file purple-fifo.h A FIFO byte queue.
|
||||||
|
+ * @ingroup core
|
||||||
|
+ *
|
||||||
|
+ * Pidgin 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 _purple_fifo_H_
|
||||||
|
+#define _purple_fifo_H_
|
||||||
|
+
|
||||||
|
+#include <glib.h>
|
||||||
|
+
|
||||||
|
+G_BEGIN_DECLS
|
||||||
|
+
|
||||||
|
+typedef struct
|
||||||
|
+{
|
||||||
|
+ GList *buffer_list;
|
||||||
|
+ GList *enqueue_buffer;
|
||||||
|
+ gint enqueue_pos;
|
||||||
|
+ GList *dequeue_buffer;
|
||||||
|
+ gint dequeue_pos;
|
||||||
|
+}
|
||||||
|
+PurpleFifo;
|
||||||
|
+
|
||||||
|
+PurpleFifo *purple_fifo_new (void);
|
||||||
|
+void purple_fifo_destroy (PurpleFifo *fifo);
|
||||||
|
+
|
||||||
|
+gint purple_fifo_get_used (PurpleFifo *fifo);
|
||||||
|
+
|
||||||
|
+void purple_fifo_enqueue (PurpleFifo *fifo, gconstpointer libpurple, gint n);
|
||||||
|
+gboolean purple_fifo_dequeue (PurpleFifo *fifo, gpointer dest, gint n);
|
||||||
|
+gboolean purple_fifo_dequeue_line (PurpleFifo *fifo, gchar **dest);
|
||||||
|
+
|
||||||
|
+gboolean purple_fifo_peek (PurpleFifo *fifo, gpointer dest, gint n);
|
||||||
|
+
|
||||||
|
+G_END_DECLS
|
||||||
|
+
|
||||||
|
+#endif /* _purple_fifo_H_ */
|
||||||
|
diff -uprN gaim-1.5.0-old/libpurple/purple-io.c gaim-1.5.0-new/libpurple/purple-io.c
|
||||||
|
--- gaim-1.5.0-old/libpurple/purple-io.c 1969-12-31 18:00:00.000000000 -0600
|
||||||
|
+++ gaim-1.5.0-new/libpurple/purple-io.c 2005-11-12 21:42:23.000000000 -0600
|
||||||
|
@@ -0,0 +1,391 @@
|
||||||
|
+/*
|
||||||
|
+ * @file purple-io.c Buffering I/O layer.
|
||||||
|
+ * @ingroup core
|
||||||
|
+ *
|
||||||
|
+ * Pidgin 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 "eventloop.h"
|
||||||
|
+#include "purple-io.h"
|
||||||
|
+
|
||||||
|
+#define OPERATION_MAX_BYTES 4096
|
||||||
|
+#define WRITE_LOW_WATER 512
|
||||||
|
+
|
||||||
|
+static void update_watches (PurpleIO *io);
|
||||||
|
+
|
||||||
|
+static gboolean
|
||||||
|
+can_read (PurpleIO *io)
|
||||||
|
+{
|
||||||
|
+ fd_set rfds;
|
||||||
|
+ struct timeval tv;
|
||||||
|
+ int retval;
|
||||||
|
+
|
||||||
|
+ FD_ZERO(&rfds);
|
||||||
|
+ FD_SET(io->fd, &rfds);
|
||||||
|
+
|
||||||
|
+ tv.tv_sec = 0;
|
||||||
|
+ tv.tv_usec = 1;
|
||||||
|
+
|
||||||
|
+ retval = select (io->fd + 1, &rfds, NULL, NULL, &tv);
|
||||||
|
+
|
||||||
|
+ return retval ? TRUE : FALSE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static gint
|
||||||
|
+try_read (PurpleIO *io, gint max_read, gint *read_errno)
|
||||||
|
+{
|
||||||
|
+ guint8 buf [OPERATION_MAX_BYTES];
|
||||||
|
+ glong flags;
|
||||||
|
+ gint n_read;
|
||||||
|
+
|
||||||
|
+ /* Do a non-blocking read */
|
||||||
|
+ flags = fcntl (io->fd, F_GETFL);
|
||||||
|
+ fcntl (io->fd, F_SETFL, flags | O_NONBLOCK);
|
||||||
|
+
|
||||||
|
+ if (io->gsc) {
|
||||||
|
+ n_read = purple_ssl_read_nonblock (io->gsc, buf, MIN (max_read, OPERATION_MAX_BYTES));
|
||||||
|
+
|
||||||
|
+ if (read_errno) {
|
||||||
|
+ if (n_read == PURPLE_SSL_IO_AGAIN)
|
||||||
|
+ *read_errno = EAGAIN;
|
||||||
|
+ else if (n_read == PURPLE_SSL_IO_INTERRUPTED)
|
||||||
|
+ *read_errno = EINTR;
|
||||||
|
+ else
|
||||||
|
+ *read_errno = 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (n_read < 0)
|
||||||
|
+ n_read = 0;
|
||||||
|
+ } else {
|
||||||
|
+ n_read = read (io->fd, buf, MIN (max_read, OPERATION_MAX_BYTES));
|
||||||
|
+ if (read_errno)
|
||||||
|
+ *read_errno = errno;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ fcntl (io->fd, F_SETFL, flags);
|
||||||
|
+
|
||||||
|
+ if (n_read > 0) {
|
||||||
|
+ /* Got some data */
|
||||||
|
+ purple_fifo_enqueue (io->read_fifo, buf, n_read);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return n_read;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+read_nonblock (PurpleIO *io, gint max_read)
|
||||||
|
+{
|
||||||
|
+ gint read_errno;
|
||||||
|
+
|
||||||
|
+ if (io->got_eof)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ if (max_read <= purple_fifo_get_used (io->read_fifo))
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ max_read -= purple_fifo_get_used (io->read_fifo);
|
||||||
|
+
|
||||||
|
+ if (can_read (io) && try_read (io, max_read, &read_errno) < 1 && read_errno != EINTR)
|
||||||
|
+ {
|
||||||
|
+ /* Disconnected */
|
||||||
|
+ io->got_eof = TRUE;
|
||||||
|
+ update_watches (io);
|
||||||
|
+
|
||||||
|
+ if (io->eof_func)
|
||||||
|
+ io->eof_func (io, io->eof_func_data);
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+read_cb (gpointer data, gint source, PurpleInputCondition condition)
|
||||||
|
+{
|
||||||
|
+ PurpleIO *io = data;
|
||||||
|
+ gint n_read;
|
||||||
|
+ gint read_errno;
|
||||||
|
+
|
||||||
|
+ n_read = try_read (io, OPERATION_MAX_BYTES, &read_errno);
|
||||||
|
+
|
||||||
|
+ /* If interrupted by signal, just retry later */
|
||||||
|
+ if (n_read < 0 && read_errno == EINTR)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ /* If we got 0 bytes or an error that's not EINTR, the connection was closed */
|
||||||
|
+ if (n_read < 1) {
|
||||||
|
+ io->got_eof = TRUE;
|
||||||
|
+ update_watches (io);
|
||||||
|
+
|
||||||
|
+ if (io->eof_func)
|
||||||
|
+ io->eof_func (io, io->eof_func_data);
|
||||||
|
+
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (io->read_func)
|
||||||
|
+ io->read_func (io, io->read_func_data);
|
||||||
|
+
|
||||||
|
+ update_watches (io);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+write_cb (gpointer data, gint source, PurpleInputCondition condition)
|
||||||
|
+{
|
||||||
|
+ PurpleIO *io = data;
|
||||||
|
+ guint8 buf [OPERATION_MAX_BYTES];
|
||||||
|
+ gint n_written;
|
||||||
|
+ glong flags;
|
||||||
|
+
|
||||||
|
+ n_written = purple_fifo_get_used (io->write_fifo);
|
||||||
|
+ n_written = MIN (OPERATION_MAX_BYTES, n_written);
|
||||||
|
+
|
||||||
|
+ /* Paranoid: Shouldn't happen */
|
||||||
|
+ if (n_written < 1)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ purple_fifo_peek (io->write_fifo, buf, n_written);
|
||||||
|
+
|
||||||
|
+ flags = fcntl (io->fd, F_GETFL);
|
||||||
|
+ fcntl (io->fd, F_SETFL, flags | O_NONBLOCK);
|
||||||
|
+
|
||||||
|
+ if (io->gsc) {
|
||||||
|
+ n_written = purple_ssl_write_nonblock (io->gsc, buf, n_written);
|
||||||
|
+ } else {
|
||||||
|
+ n_written = write (io->fd, buf, n_written);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ fcntl (io->fd, F_SETFL, flags);
|
||||||
|
+
|
||||||
|
+ if (n_written < 0)
|
||||||
|
+ io->got_eof = TRUE;
|
||||||
|
+
|
||||||
|
+ if (n_written < 1)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ /* Drop written data from buffer */
|
||||||
|
+ purple_fifo_dequeue (io->write_fifo, NULL, n_written);
|
||||||
|
+
|
||||||
|
+ if (io->flushed_func &&
|
||||||
|
+ purple_fifo_get_used (io->write_fifo) == 0)
|
||||||
|
+ io->flushed_func (io, io->flushed_func_data);
|
||||||
|
+
|
||||||
|
+ if (io->write_func &&
|
||||||
|
+ purple_fifo_get_used (io->write_fifo) < WRITE_LOW_WATER)
|
||||||
|
+ io->write_func (io, io->write_func_data);
|
||||||
|
+
|
||||||
|
+ update_watches (io);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void
|
||||||
|
+update_watches (PurpleIO *io)
|
||||||
|
+{
|
||||||
|
+ gboolean want_read_watch = FALSE;
|
||||||
|
+ gboolean want_write_watch = FALSE;
|
||||||
|
+
|
||||||
|
+ if (!io->got_eof) {
|
||||||
|
+ if (io->read_func)
|
||||||
|
+ want_read_watch = TRUE;
|
||||||
|
+
|
||||||
|
+ if (purple_fifo_get_used (io->write_fifo))
|
||||||
|
+ want_write_watch = TRUE;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (want_read_watch && !io->read_watch_id) {
|
||||||
|
+ io->read_watch_id = purple_input_add (io->fd, PURPLE_INPUT_READ, read_cb, io);
|
||||||
|
+ } else if (!want_read_watch && io->read_watch_id) {
|
||||||
|
+ purple_input_remove (io->read_watch_id);
|
||||||
|
+ io->read_watch_id = 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (want_write_watch && !io->write_watch_id) {
|
||||||
|
+ io->write_watch_id = purple_input_add (io->fd, PURPLE_INPUT_WRITE, write_cb, io);
|
||||||
|
+ } else if (!want_write_watch && io->write_watch_id) {
|
||||||
|
+ purple_input_remove (io->write_watch_id);
|
||||||
|
+ io->write_watch_id = 0;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+PurpleIO *
|
||||||
|
+purple_io_new (gint fd)
|
||||||
|
+{
|
||||||
|
+ PurpleIO *io;
|
||||||
|
+
|
||||||
|
+ io = g_new0 (PurpleIO, 1);
|
||||||
|
+
|
||||||
|
+ io->fd = fd;
|
||||||
|
+ io->read_fifo = purple_fifo_new ();
|
||||||
|
+ io->write_fifo = purple_fifo_new ();
|
||||||
|
+
|
||||||
|
+ return io;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+PurpleIO *
|
||||||
|
+purple_io_new_ssl (PurpleSslConnection *gsc)
|
||||||
|
+{
|
||||||
|
+ PurpleIO *io;
|
||||||
|
+
|
||||||
|
+ io = g_new0 (PurpleIO, 1);
|
||||||
|
+
|
||||||
|
+ io->gsc = gsc;
|
||||||
|
+ io->fd = gsc->fd;
|
||||||
|
+ io->read_fifo = purple_fifo_new ();
|
||||||
|
+ io->write_fifo = purple_fifo_new ();
|
||||||
|
+
|
||||||
|
+ return io;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+purple_io_destroy (PurpleIO *io)
|
||||||
|
+{
|
||||||
|
+#if 0
|
||||||
|
+ if (purple_fifo_get_used (io->write_fifo) > 0)
|
||||||
|
+ g_print ("Throwing away outbound data!\n");
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
+ if (io->read_watch_id)
|
||||||
|
+ purple_input_remove (io->read_watch_id);
|
||||||
|
+ if (io->write_watch_id)
|
||||||
|
+ purple_input_remove (io->write_watch_id);
|
||||||
|
+
|
||||||
|
+ purple_fifo_destroy (io->read_fifo);
|
||||||
|
+ purple_fifo_destroy (io->write_fifo);
|
||||||
|
+
|
||||||
|
+ if (io->gsc)
|
||||||
|
+ purple_ssl_close (io->gsc);
|
||||||
|
+ else
|
||||||
|
+ close (io->fd);
|
||||||
|
+
|
||||||
|
+ g_free (io);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gint
|
||||||
|
+purple_io_get_fd (PurpleIO *io)
|
||||||
|
+{
|
||||||
|
+ return io->fd;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+PurpleSslConnection *
|
||||||
|
+purple_io_get_ssl_connection (PurpleIO *io)
|
||||||
|
+{
|
||||||
|
+ return io->gsc;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gboolean
|
||||||
|
+purple_io_is_connected (PurpleIO *io)
|
||||||
|
+{
|
||||||
|
+ return !io->got_eof;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+purple_io_set_read_func (PurpleIO *io, PurpleIOFunc func, gpointer data)
|
||||||
|
+{
|
||||||
|
+ io->read_func = func;
|
||||||
|
+ io->read_func_data = data;
|
||||||
|
+
|
||||||
|
+ update_watches (io);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+purple_io_set_write_func (PurpleIO *io, PurpleIOFunc func, gpointer data)
|
||||||
|
+{
|
||||||
|
+ io->write_func = func;
|
||||||
|
+ io->write_func_data = data;
|
||||||
|
+
|
||||||
|
+ update_watches (io);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+purple_io_set_eof_func (PurpleIO *io, PurpleIOFunc func, gpointer data)
|
||||||
|
+{
|
||||||
|
+ io->eof_func = func;
|
||||||
|
+ io->eof_func_data = data;
|
||||||
|
+
|
||||||
|
+ update_watches (io);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+void
|
||||||
|
+purple_io_set_flushed_func (PurpleIO *io, PurpleIOFunc func, gpointer data)
|
||||||
|
+{
|
||||||
|
+ io->flushed_func = func;
|
||||||
|
+ io->flushed_func_data = data;
|
||||||
|
+
|
||||||
|
+ update_watches (io);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gboolean
|
||||||
|
+purple_io_write_bytes (PurpleIO *io, gconstpointer libpurple, gint n_bytes)
|
||||||
|
+{
|
||||||
|
+ if (io->got_eof)
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
+ purple_fifo_enqueue (io->write_fifo, libpurple, n_bytes);
|
||||||
|
+
|
||||||
|
+ update_watches (io);
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gboolean
|
||||||
|
+purple_io_write_line (PurpleIO *io, const gchar *line)
|
||||||
|
+{
|
||||||
|
+ if (io->got_eof)
|
||||||
|
+ return FALSE;
|
||||||
|
+
|
||||||
|
+ purple_fifo_enqueue (io->write_fifo, line, strlen (line));
|
||||||
|
+ purple_fifo_enqueue (io->write_fifo, "\r\n", 2);
|
||||||
|
+
|
||||||
|
+ update_watches (io);
|
||||||
|
+ return TRUE;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gboolean
|
||||||
|
+purple_io_read_bytes (PurpleIO *io, gpointer dest, gint n_bytes)
|
||||||
|
+{
|
||||||
|
+ gboolean result;
|
||||||
|
+
|
||||||
|
+ read_nonblock (io, n_bytes);
|
||||||
|
+
|
||||||
|
+ result = purple_fifo_dequeue (io->read_fifo, dest, n_bytes);
|
||||||
|
+
|
||||||
|
+ update_watches (io);
|
||||||
|
+ return result;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gboolean
|
||||||
|
+purple_io_read_line (PurpleIO *io, gchar **line)
|
||||||
|
+{
|
||||||
|
+ gboolean result;
|
||||||
|
+
|
||||||
|
+ read_nonblock (io, 65536);
|
||||||
|
+
|
||||||
|
+ result = purple_fifo_dequeue_line (io->read_fifo, line);
|
||||||
|
+
|
||||||
|
+ update_watches (io);
|
||||||
|
+ return result;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gint
|
||||||
|
+purple_io_get_pending_read (PurpleIO *io)
|
||||||
|
+{
|
||||||
|
+ return purple_fifo_get_used (io->read_fifo);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+gint
|
||||||
|
+purple_io_get_pending_write (PurpleIO *io)
|
||||||
|
+{
|
||||||
|
+ return purple_fifo_get_used (io->write_fifo);
|
||||||
|
+}
|
||||||
|
diff -uprN gaim-1.5.0-old/libpurple/purple-io.h gaim-1.5.0-new/libpurple/purple-io.h
|
||||||
|
--- gaim-1.5.0-old/libpurple/purple-io.h 1969-12-31 18:00:00.000000000 -0600
|
||||||
|
+++ gaim-1.5.0-new/libpurple/purple-io.h 2005-11-12 21:42:23.000000000 -0600
|
||||||
|
@@ -0,0 +1,87 @@
|
||||||
|
+/**
|
||||||
|
+ * @file purple-io.h Buffering I/O layer.
|
||||||
|
+ * @ingroup core
|
||||||
|
+ *
|
||||||
|
+ * Pidgin 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 _PURPLE_IO_H_
|
||||||
|
+#define _PURPLE_IO_H_
|
||||||
|
+
|
||||||
|
+#include "purple-fifo.h"
|
||||||
|
+#include "sslconn.h"
|
||||||
|
+
|
||||||
|
+G_BEGIN_DECLS
|
||||||
|
+
|
||||||
|
+typedef struct PurpleIO PurpleIO;
|
||||||
|
+
|
||||||
|
+typedef void (*PurpleIOFunc) (PurpleIO *io, gpointer data);
|
||||||
|
+
|
||||||
|
+struct PurpleIO
|
||||||
|
+{
|
||||||
|
+ gint fd;
|
||||||
|
+ PurpleSslConnection *gsc;
|
||||||
|
+
|
||||||
|
+ guint got_eof : 1;
|
||||||
|
+
|
||||||
|
+ PurpleFifo *read_fifo;
|
||||||
|
+ PurpleFifo *write_fifo;
|
||||||
|
+
|
||||||
|
+ guint read_watch_id;
|
||||||
|
+ guint write_watch_id;
|
||||||
|
+
|
||||||
|
+ /* Callback invoked when input buffer grows */
|
||||||
|
+ PurpleIOFunc read_func;
|
||||||
|
+ gpointer read_func_data;
|
||||||
|
+
|
||||||
|
+ /* Callback invoked when output buffer shrinks (sufficiently) */
|
||||||
|
+ PurpleIOFunc write_func;
|
||||||
|
+ gpointer write_func_data;
|
||||||
|
+
|
||||||
|
+ /* Callback invoked when connection drops */
|
||||||
|
+ PurpleIOFunc eof_func;
|
||||||
|
+ gpointer eof_func_data;
|
||||||
|
+
|
||||||
|
+ /* Callback invoked when output buffer empty */
|
||||||
|
+ PurpleIOFunc flushed_func;
|
||||||
|
+ gpointer flushed_func_data;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+PurpleIO *purple_io_new (gint fd);
|
||||||
|
+PurpleIO *purple_io_new_ssl (PurpleSslConnection *gsc);
|
||||||
|
+void purple_io_destroy (PurpleIO *io);
|
||||||
|
+
|
||||||
|
+gint purple_io_get_fd (PurpleIO *io);
|
||||||
|
+PurpleSslConnection *purple_io_get_ssl_connection (PurpleIO *io);
|
||||||
|
+gboolean purple_io_is_connected (PurpleIO *io);
|
||||||
|
+
|
||||||
|
+void purple_io_set_read_func (PurpleIO *io, PurpleIOFunc func, gpointer data);
|
||||||
|
+void purple_io_set_write_func (PurpleIO *io, PurpleIOFunc func, gpointer data);
|
||||||
|
+void purple_io_set_eof_func (PurpleIO *io, PurpleIOFunc func, gpointer data);
|
||||||
|
+void purple_io_set_flushed_func (PurpleIO *io, PurpleIOFunc func, gpointer data);
|
||||||
|
+
|
||||||
|
+gboolean purple_io_write_bytes (PurpleIO *io, gconstpointer libpurple, gint n_bytes);
|
||||||
|
+gboolean purple_io_write_line (PurpleIO *io, const gchar *line);
|
||||||
|
+
|
||||||
|
+gboolean purple_io_read_bytes (PurpleIO *io, gpointer dest, gint n_bytes);
|
||||||
|
+gboolean purple_io_read_line (PurpleIO *io, gchar **line);
|
||||||
|
+
|
||||||
|
+G_END_DECLS
|
||||||
|
+
|
||||||
|
+#endif /* _PURPLE_IO_H_ */
|
||||||
|
diff -uprN gaim-1.5.0-old/libpurple/sslconn.c gaim-1.5.0-new/libpurple/sslconn.c
|
||||||
|
--- gaim-1.5.0-old/libpurple/sslconn.c 2004-01-09 22:04:56.000000000 -0600
|
||||||
|
+++ gaim-1.5.0-new/libpurple/sslconn.c 2005-11-12 21:42:23.000000000 -0600
|
||||||
|
@@ -209,6 +209,27 @@ purple_ssl_read(PurpleSslConnection *gsc, vo
|
||||||
|
}
|
||||||
|
|
||||||
|
size_t
|
||||||
|
+purple_ssl_read_nonblock(PurpleSslConnection *gsc, void *data, size_t len)
|
||||||
|
+{
|
||||||
|
+ PurpleSslOps *ops;
|
||||||
|
+
|
||||||
|
+ g_return_val_if_fail(gsc != NULL, 0);
|
||||||
|
+ g_return_val_if_fail(data != NULL, 0);
|
||||||
|
+ g_return_val_if_fail(len > 0, 0);
|
||||||
|
+
|
||||||
|
+ ops = purple_ssl_get_ops();
|
||||||
|
+
|
||||||
|
+ if (ops != NULL) {
|
||||||
|
+ if (ops->read_nonblock != NULL)
|
||||||
|
+ return (ops->read_nonblock)(gsc, data, len);
|
||||||
|
+ else if (ops->read != NULL)
|
||||||
|
+ return (ops->read)(gsc, data, len);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+size_t
|
||||||
|
purple_ssl_write(PurpleSslConnection *gsc, const void *data, size_t len)
|
||||||
|
{
|
||||||
|
PurpleSslOps *ops;
|
||||||
|
@@ -225,6 +246,27 @@ purple_ssl_write(PurpleSslConnection *gsc, c
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+size_t
|
||||||
|
+purple_ssl_write_nonblock(PurpleSslConnection *gsc, const void *data, size_t len)
|
||||||
|
+{
|
||||||
|
+ PurpleSslOps *ops;
|
||||||
|
+
|
||||||
|
+ g_return_val_if_fail(gsc != NULL, 0);
|
||||||
|
+ g_return_val_if_fail(data != NULL, 0);
|
||||||
|
+ g_return_val_if_fail(len > 0, 0);
|
||||||
|
+
|
||||||
|
+ ops = purple_ssl_get_ops();
|
||||||
|
+
|
||||||
|
+ if (ops != NULL) {
|
||||||
|
+ if (ops->write_nonblock != NULL)
|
||||||
|
+ return (ops->write_nonblock)(gsc, data, len);
|
||||||
|
+ else if (ops->write != NULL)
|
||||||
|
+ return (ops->write)(gsc, data, len);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
void
|
||||||
|
purple_ssl_set_ops(PurpleSslOps *ops)
|
||||||
|
{
|
||||||
|
diff -uprN gaim-1.5.0-old/libpurple/sslconn.h gaim-1.5.0-new/libpurple/sslconn.h
|
||||||
|
--- gaim-1.5.0-old/libpurple/sslconn.h 2004-08-08 00:37:58.000000000 -0500
|
||||||
|
+++ gaim-1.5.0-new/libpurple/sslconn.h 2005-11-12 21:42:23.000000000 -0600
|
||||||
|
@@ -35,6 +35,12 @@ typedef enum
|
||||||
|
PURPLE_SSL_CONNECT_FAILED = 2
|
||||||
|
} PurpleSslErrorType;
|
||||||
|
|
||||||
|
+typedef enum
|
||||||
|
+{
|
||||||
|
+ PURPLE_SSL_IO_INTERRUPTED = -1,
|
||||||
|
+ PURPLE_SSL_IO_AGAIN = -2
|
||||||
|
+} PurpleSslIOErrorType;
|
||||||
|
+
|
||||||
|
typedef struct _PurpleSslConnection PurpleSslConnection;
|
||||||
|
|
||||||
|
typedef void (*PurpleSslInputFunction)(gpointer, PurpleSslConnection *,
|
||||||
|
@@ -70,7 +76,9 @@ typedef struct
|
||||||
|
PurpleInputFunction connect_cb;
|
||||||
|
void (*close)(PurpleSslConnection *gsc);
|
||||||
|
size_t (*read)(PurpleSslConnection *gsc, void *data, size_t len);
|
||||||
|
+ size_t (*read_nonblock)(PurpleSslConnection *gsc, void *data, size_t len);
|
||||||
|
size_t (*write)(PurpleSslConnection *gsc, const void *data, size_t len);
|
||||||
|
+ size_t (*write_nonblock)(PurpleSslConnection *gsc, const void *data, size_t len);
|
||||||
|
|
||||||
|
} PurpleSslOps;
|
||||||
|
|
||||||
|
@@ -152,6 +160,17 @@ void purple_ssl_close(PurpleSslConnection *g
|
||||||
|
size_t purple_ssl_read(PurpleSslConnection *gsc, void *buffer, size_t len);
|
||||||
|
|
||||||
|
/**
|
||||||
|
+ * Reads data from an SSL connection without blocking.
|
||||||
|
+ *
|
||||||
|
+ * @param gsc The SSL connection handle.
|
||||||
|
+ * @param buffer The destination buffer.
|
||||||
|
+ * @param len The maximum number of bytes to read.
|
||||||
|
+ *
|
||||||
|
+ * @return The number of bytes read.
|
||||||
|
+ */
|
||||||
|
+size_t purple_ssl_read_nonblock(PurpleSslConnection *gsc, void *buffer, size_t len);
|
||||||
|
+
|
||||||
|
+/**
|
||||||
|
* Writes data to an SSL connection.
|
||||||
|
*
|
||||||
|
* @param gsc The SSL connection handle.
|
||||||
|
@@ -162,6 +181,17 @@ size_t purple_ssl_read(PurpleSslConnection *
|
||||||
|
*/
|
||||||
|
size_t purple_ssl_write(PurpleSslConnection *gsc, const void *buffer, size_t len);
|
||||||
|
|
||||||
|
+/**
|
||||||
|
+ * Writes data to an SSL connection without blocking.
|
||||||
|
+ *
|
||||||
|
+ * @param gsc The SSL connection handle.
|
||||||
|
+ * @param buffer The buffer to write.
|
||||||
|
+ * @param len The length of the data to write.
|
||||||
|
+ *
|
||||||
|
+ * @return The number of bytes written.
|
||||||
|
+ */
|
||||||
|
+size_t purple_ssl_write_nonblock(PurpleSslConnection *gsc, const void *buffer, size_t len);
|
||||||
|
+
|
||||||
|
/*@}*/
|
||||||
|
|
||||||
|
/**************************************************************************/
|
21
pidgin-nonblock-common2.patch
Normal file
21
pidgin-nonblock-common2.patch
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
diff -ruN gaim-2.0.0beta6.orig/libgaim/Makefile.am gaim-2.0.0beta6/libgaim/Makefile.am
|
||||||
|
--- gaim-2.0.0beta6.orig/libpurple/Makefile.am 2007-01-19 04:28:24.000000000 +0000
|
||||||
|
+++ gaim-2.0.0beta6/libpurple/Makefile.am 2007-02-19 17:41:07.000000000 +0000
|
||||||
|
@@ -40,6 +40,8 @@
|
||||||
|
desktopitem.c \
|
||||||
|
eventloop.c \
|
||||||
|
ft.c \
|
||||||
|
+ purple-fifo.c \
|
||||||
|
+ purple-io.c \
|
||||||
|
idle.c \
|
||||||
|
imgstore.c \
|
||||||
|
log.c \
|
||||||
|
@@ -89,6 +91,8 @@
|
||||||
|
desktopitem.h \
|
||||||
|
eventloop.h \
|
||||||
|
ft.h \
|
||||||
|
+ purple-fifo.h \
|
||||||
|
+ purple-io.h \
|
||||||
|
gaim-compat.h \
|
||||||
|
idle.h \
|
||||||
|
imgstore.h \
|
87
pidgin-nonblock-gwim.patch
Normal file
87
pidgin-nonblock-gwim.patch
Normal file
@ -0,0 +1,87 @@
|
|||||||
|
diff -uprN gaim-1.5.0-clean/libpurple/protocols/novell/nmconn.c gaim-1.5.0-new-files/libpurple/protocols/novell/nmconn.c
|
||||||
|
--- gaim-1.5.0-clean/libpurple/protocols/novell/nmconn.c 2005-03-06 17:10:36.000000000 -0500
|
||||||
|
+++ gaim-1.5.0-new-files/libpurple/protocols/novell/nmconn.c 2005-10-05 14:57:03.000000000 -0400
|
||||||
|
@@ -191,6 +191,12 @@ void nm_release_conn(NMConn *conn)
|
||||||
|
g_free(conn->ssl_conn);
|
||||||
|
conn->ssl_conn = NULL;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ if (conn->io) {
|
||||||
|
+ purple_io_destroy (conn->io);
|
||||||
|
+ conn->io = NULL;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
g_free(conn->addr);
|
||||||
|
conn->addr = NULL;
|
||||||
|
g_free(conn);
|
||||||
|
@@ -203,11 +209,23 @@ nm_tcp_write(NMConn * conn, const void *
|
||||||
|
if (conn == NULL || buff == NULL)
|
||||||
|
return -1;
|
||||||
|
|
||||||
|
- if (!conn->use_ssl)
|
||||||
|
- return (write(conn->fd, buff, len));
|
||||||
|
- else if (conn->ssl_conn && conn->ssl_conn->write)
|
||||||
|
- return (conn->ssl_conn->write(conn->ssl_conn->data, buff, len));
|
||||||
|
- else
|
||||||
|
+ if (!conn->use_ssl) {
|
||||||
|
+ if (!conn->io || purple_io_get_fd (conn->io) != conn->fd) {
|
||||||
|
+ if (conn->io)
|
||||||
|
+ purple_io_destroy (conn->io);
|
||||||
|
+ conn->io = purple_io_new (conn->fd);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return purple_io_write_bytes (conn->io, buff, len);
|
||||||
|
+ } else if (conn->ssl_conn && conn->ssl_conn->data && conn->ssl_conn->write) {
|
||||||
|
+ if (!conn->io || purple_io_get_ssl_connection (conn->io) != conn->ssl_conn->data) {
|
||||||
|
+ if (conn->io)
|
||||||
|
+ purple_io_destroy (conn->io);
|
||||||
|
+ conn->io = purple_io_new_ssl (conn->ssl_conn->data);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return purple_io_write_bytes (conn->io, buff, len);
|
||||||
|
+ } else
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff -uprN gaim-1.5.0-clean/libpurple/protocols/novell/nmconn.h gaim-1.5.0-new-files/libpurple/protocols/novell/nmconn.h
|
||||||
|
--- gaim-1.5.0-clean/libpurple/protocols/novell/nmconn.h 2004-06-23 13:27:56.000000000 -0400
|
||||||
|
+++ gaim-1.5.0-new-files/libpurple/protocols/novell/nmconn.h 2005-10-05 12:53:52.000000000 -0400
|
||||||
|
@@ -24,6 +24,7 @@
|
||||||
|
typedef struct _NMConn NMConn;
|
||||||
|
typedef struct _NMSSLConn NMSSLConn;
|
||||||
|
|
||||||
|
+#include "purple-io.h"
|
||||||
|
#include "nmfield.h"
|
||||||
|
#include "nmuser.h"
|
||||||
|
|
||||||
|
@@ -42,6 +43,9 @@ struct _NMConn
|
||||||
|
/* The file descriptor of the socket for the connection. */
|
||||||
|
int fd;
|
||||||
|
|
||||||
|
+ /* The buffering I/O wrapper. */
|
||||||
|
+ PurpleIO *io;
|
||||||
|
+
|
||||||
|
/* The transaction counter. */
|
||||||
|
int trans_id;
|
||||||
|
|
||||||
|
diff -uprN gaim-1.5.0-clean/libpurple/protocols/novell/novell.c gaim-1.5.0-new-files/libpurple/protocols/novell/novell.c
|
||||||
|
--- gaim-1.5.0-clean/libpurple/protocols/novell/novell.c 2005-07-24 15:27:36.000000000 -0400
|
||||||
|
+++ gaim-1.5.0-new-files/libpurple/protocols/novell/novell.c 2005-10-05 14:57:03.000000000 -0400
|
||||||
|
@@ -2166,17 +2166,12 @@ static void
|
||||||
|
novell_close(PurpleConnection * gc)
|
||||||
|
{
|
||||||
|
NMUser *user;
|
||||||
|
- NMConn *conn;
|
||||||
|
|
||||||
|
if (gc == NULL)
|
||||||
|
return;
|
||||||
|
|
||||||
|
user = gc->proto_data;
|
||||||
|
if (user) {
|
||||||
|
- conn = user->conn;
|
||||||
|
- if (conn && conn->ssl_conn) {
|
||||||
|
- purple_ssl_close(user->conn->ssl_conn->data);
|
||||||
|
- }
|
||||||
|
nm_deinitialize_user(user);
|
||||||
|
}
|
||||||
|
gc->proto_data = NULL;
|
24
pidgin-undefined-operation.patch
Normal file
24
pidgin-undefined-operation.patch
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
http://developer.pidgin.im/ticket/889
|
||||||
|
|
||||||
|
I: Program causes undefined operation
|
||||||
|
(likely same variable used twiceand post/pre incremented in the same expression).
|
||||||
|
e.g. x = x++; Split it in two operations.
|
||||||
|
|
||||||
|
gntwm.c: In function 'dump_screen':
|
||||||
|
gntwm.c:610: warning: operation on 'fgp' may be undefined
|
||||||
|
|
||||||
|
--- finch/libgnt/gntwm.c
|
||||||
|
+++ finch/libgnt/gntwm.c
|
||||||
|
@@ -607,7 +607,11 @@
|
||||||
|
if (bgp == -1)
|
||||||
|
bgp = COLOR_WHITE;
|
||||||
|
if (now & A_REVERSE)
|
||||||
|
- fgp ^= bgp ^= fgp ^= bgp; /* *wink* */
|
||||||
|
+ {
|
||||||
|
+ short tgp = bgp;
|
||||||
|
+ bgp = fgp;
|
||||||
|
+ fgp = tgp;
|
||||||
|
+ }
|
||||||
|
ret = color_content(fgp, &r, &g, &b);
|
||||||
|
fg.r = r; fg.b = b; fg.g = g;
|
||||||
|
ret = color_content(bgp, &r, &g, &b);
|
22
pidgin.changes
Normal file
22
pidgin.changes
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
-------------------------------------------------------------------
|
||||||
|
Tue May 15 18:35:19 CEST 2007 - sbrabec@suse.cz
|
||||||
|
|
||||||
|
- Compile with SILC protocol support.
|
||||||
|
- Integrated patches ported by Martin Szulecki.
|
||||||
|
- Fixed NSS/NSPR detection.
|
||||||
|
- Split gaim compatibility binaries.
|
||||||
|
- Removed obsolete media files.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Mon May 14 17:52:45 CEST 2007 - sbrabec@suse.cz
|
||||||
|
|
||||||
|
- Fixed autoreconf.
|
||||||
|
- Fixed Provides/Obsoletes.
|
||||||
|
- Require basic SASL plugins required for Jabber.
|
||||||
|
|
||||||
|
-------------------------------------------------------------------
|
||||||
|
Thu May 10 18:41:44 CEST 2007 - sbrabec@suse.cz
|
||||||
|
|
||||||
|
- New SuSE package, version 2.0.0 (successor of gaim).
|
||||||
|
Spec file based on work of James Ogley.
|
||||||
|
|
939
pidgin.spec
Normal file
939
pidgin.spec
Normal file
@ -0,0 +1,939 @@
|
|||||||
|
#
|
||||||
|
# spec file for package pidgin (Version 2.0.0)
|
||||||
|
#
|
||||||
|
# Copyright (c) 2007 SUSE LINUX Products GmbH, Nuernberg, Germany.
|
||||||
|
# This file and all modifications and additions to the pristine
|
||||||
|
# package are under the same license as the package itself.
|
||||||
|
#
|
||||||
|
# Please submit bugfixes or comments via http://bugs.opensuse.org/
|
||||||
|
#
|
||||||
|
|
||||||
|
# norootforbuild
|
||||||
|
|
||||||
|
Name: pidgin
|
||||||
|
Summary: GTK+-Based Multiprotocol Instant Messaging Client
|
||||||
|
Version: 2.0.0
|
||||||
|
Release: 1
|
||||||
|
License: GNU General Public License (GPL)
|
||||||
|
Group: Productivity/Networking/AOLInstantMessenger
|
||||||
|
URL: http://www.pidgin.im/
|
||||||
|
Source: %{name}-%{version}.tar.bz2
|
||||||
|
Source1: pidgin-NLD-smiley-theme.tar.bz2
|
||||||
|
Source2: pidgin-Tango-smiley-theme.tar.bz2
|
||||||
|
Patch1: pidgin-gnome-keyring.patch
|
||||||
|
Patch2: pidgin-nonblock-aim.patch
|
||||||
|
Patch3: pidgin-nonblock-common.patch
|
||||||
|
Patch4: pidgin-nonblock-gwim.patch
|
||||||
|
Patch5: pidgin-nonblock-common2.patch
|
||||||
|
Patch6: pidgin-undefined-operation.patch
|
||||||
|
Patch7: pidgin-check.patch
|
||||||
|
# Can use external libzephyr
|
||||||
|
BuildRequires: cyrus-sasl-devel dbus-1-devel doxygen evolution-data-server-devel gnome-keyring-devel graphviz gtkspell-devel intltool libao-devel libbonobo-devel libgadu-devel libstdc++-devel libxml2-devel meanwhile-devel mono-devel mozilla-nspr-devel mozilla-nss-devel ncurses-devel perl-XML-Parser python sqlite-devel startup-notification-devel tk-devel update-desktop-files
|
||||||
|
# Product specific lines
|
||||||
|
%if %suse_version >= 1000 || 0%{?opensuse_bs}
|
||||||
|
BuildRequires: NetworkManager-devel
|
||||||
|
%endif
|
||||||
|
%if %suse_version == 1010 || 0%{?opensuse_bs}
|
||||||
|
BuildRequires: NetworkManager-gnome
|
||||||
|
%endif
|
||||||
|
%if %suse_version >= 1010 || 0%{?opensuse_bs}
|
||||||
|
BuildRequires: gstreamer010-devel
|
||||||
|
%else
|
||||||
|
BuildRequires: gstreamer-devel
|
||||||
|
%endif
|
||||||
|
%if %suse_version >= 1011 || 0%{?opensuse_bs}
|
||||||
|
BuildRequires: dbus-1-glib-devel
|
||||||
|
%else
|
||||||
|
BuildRequires: dbus-1-glib
|
||||||
|
%endif
|
||||||
|
%if %suse_version >= 1021 || 0%{?opensuse_bs}
|
||||||
|
BuildRequires: avahi-compat-howl-devel silc-toolkit-devel
|
||||||
|
%endif
|
||||||
|
BuildRoot: %{_tmppath}/%{name}-%{version}-build
|
||||||
|
|
||||||
|
%gconf_schemas_prereq
|
||||||
|
|
||||||
|
%description
|
||||||
|
Pidgin allows you to talk to anyone using a variety of messaging
|
||||||
|
protocols including AIM, MSN, Yahoo!, Jabber, Bonjour, Gadu-Gadu, ICQ,
|
||||||
|
IRC, Novell Groupwise, QQ, Lotus Sametime, SILC, Simple and Zephyr.
|
||||||
|
These protocols are implemented using a modular, easy to use design.
|
||||||
|
To use a protocol, just add an account using the account editor.
|
||||||
|
|
||||||
|
Pidgin supports many common features of other clients, as well as many
|
||||||
|
unique features, such as perl scripting, TCL scripting and C plugins.
|
||||||
|
|
||||||
|
Pidgin is not affiliated with or endorsed by America Online, Inc.,
|
||||||
|
Microsoft Corporation, Yahoo! Inc., or ICQ Inc.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Sean Egan <seanegan@gmail.com>
|
||||||
|
Daniel 'datallah' Atallah
|
||||||
|
Ethan 'Paco-Paco' Blanton
|
||||||
|
Thomas Butter
|
||||||
|
Sadrul Habib Chowdhury
|
||||||
|
Mark 'KingAnt' Doliner
|
||||||
|
Christian 'ChipX86' Hammond & Webmaster
|
||||||
|
Gary 'grim' Kramlich
|
||||||
|
Richard 'rlaager' Laager
|
||||||
|
Richard 'wabz' Nelson
|
||||||
|
Christopher 'siege' O'Brien
|
||||||
|
Bartosz Oler
|
||||||
|
Etan 'deryni' Reisner
|
||||||
|
Tim 'marv' Ringenbach
|
||||||
|
Luke 'LSchiere' Schierer
|
||||||
|
Megan 'Cae' Schneider
|
||||||
|
Evan Schoenberg
|
||||||
|
Stu 'nosnilmot' Tomlinson
|
||||||
|
Nathan 'faceprint' Walp
|
||||||
|
John 'rekkanoryo' Bailey
|
||||||
|
Ka-Hing 'javabsp' Cheung
|
||||||
|
Felipe 'shx' Contreras
|
||||||
|
Decklin Foster
|
||||||
|
Casey Harkins
|
||||||
|
Peter 'Bleeter' Lawler
|
||||||
|
Robert 'Robot101' McQueen
|
||||||
|
Benjamin Miller
|
||||||
|
Kevin 'SimGuy' Stange
|
||||||
|
Herman Bloggs
|
||||||
|
Jim Duchek <jim@linuxpimps.com>
|
||||||
|
Rob Flynn <gaim@robflynn.com>
|
||||||
|
Adam Fritzler
|
||||||
|
Syd Logan
|
||||||
|
Jim Seymour
|
||||||
|
Mark Spencer <markster@marko.net>
|
||||||
|
Eric Warmenhoven <eric@warmenhoven.org>
|
||||||
|
Hylke Bons
|
||||||
|
Naru Sundar
|
||||||
|
Peter Teichiman <peter@helixcode.com>
|
||||||
|
Larry Ewing
|
||||||
|
Jeramey A. Crawford
|
||||||
|
Nathan Walp
|
||||||
|
Neil Sanchala
|
||||||
|
Arkadiusz Miskiewicz
|
||||||
|
David Prater <draven@tcsx.net>
|
||||||
|
Sébastien Carp
|
||||||
|
Ari Pollak
|
||||||
|
Decklin Foster
|
||||||
|
David
|
||||||
|
S D Erle
|
||||||
|
BMiller
|
||||||
|
Lance Rocker
|
||||||
|
ergofobe
|
||||||
|
Justin M. Ward <justin@yossman.net>
|
||||||
|
G. Sumner Hayes
|
||||||
|
Brian Ryner
|
||||||
|
Ryan C. Gordon
|
||||||
|
Elliot Tobin <elliot@bha.udel.edu>
|
||||||
|
Jeroen van der Vegt
|
||||||
|
The OpenQ Team
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: Development Headers, Documentation, and Libraries for Pidgin
|
||||||
|
Group: Productivity/Networking/AOLInstantMessenger
|
||||||
|
Requires: %{name} = %{version} glib2-devel gtk2-devel libpurple-devel = %{version}
|
||||||
|
%package -n libpurple
|
||||||
|
Summary: Library for IM Clients Like Pidgin and Finch
|
||||||
|
Group: Productivity/Networking/AOLInstantMessenger
|
||||||
|
# Existed before 10.3:
|
||||||
|
Obsoletes: gaim
|
||||||
|
# Was never been in SuSE:
|
||||||
|
Obsoletes: gaim-applet
|
||||||
|
# Was only in the Build Service after 10.2:
|
||||||
|
Obsoletes: gaim-unstable
|
||||||
|
#Â Not really required, but standard Jabber accounts require it, if compiled with SASL support.
|
||||||
|
Requires: cyrus-sasl-digestmd5 cyrus-sasl-plain
|
||||||
|
%package -n libpurple-devel
|
||||||
|
Summary: Development Headers, Documentation, and Libraries for libpurple
|
||||||
|
Group: Productivity/Networking/AOLInstantMessenger
|
||||||
|
Requires: libpurple = %{version} glib2-devel gnome-keyring-devel
|
||||||
|
Requires: pkg-config
|
||||||
|
Obsoletes: gaim-devel
|
||||||
|
Obsoletes: gaim-unstable-devel
|
||||||
|
%package -n libpurple-meanwhile
|
||||||
|
Summary: Lotus Sametime Plugin for Pidgin Using the Meanwhile Library
|
||||||
|
Group: Productivity/Networking/AOLInstantMessenger
|
||||||
|
Requires: libpurple = %{version}
|
||||||
|
%package -n libpurple-mono
|
||||||
|
Summary: Mono .NET Plugin Support for Pidgin
|
||||||
|
Group: Productivity/Networking/AOLInstantMessenger
|
||||||
|
Requires: libpurple = %{version}
|
||||||
|
%package -n finch
|
||||||
|
Summary: Text-Based User Interface for Pidgin Instant Messaging Client
|
||||||
|
Group: Productivity/Networking/AOLInstantMessenger
|
||||||
|
Requires: libpurple = %{version}
|
||||||
|
Obsoletes: gaim-unstable-text
|
||||||
|
%package -n finch-devel
|
||||||
|
Summary: Headers etc. for finch Stuffs
|
||||||
|
Group: Productivity/Networking/AOLInstantMessenger
|
||||||
|
Requires: finch = %{version} glib2-devel glibc-devel libpurple-devel = %{version}
|
||||||
|
Requires: pkg-config
|
||||||
|
Obsoletes: gaim-unstable-text-devel
|
||||||
|
%package gaim-compat
|
||||||
|
Summary: Gaim Compatibility Launchers for Pidgin and Finch
|
||||||
|
Group: Productivity/Networking/AOLInstantMessenger
|
||||||
|
Requires: %{name} = %{version} finch = %{version}
|
||||||
|
Conflicts: gaim < 2.0.0
|
||||||
|
Conflicts: gaim-unstable < 2.0.0
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
The pidgin-devel package contains the header files, developer
|
||||||
|
documentation, and libraries required for development of Pidgin scripts
|
||||||
|
and plugins.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Sean Egan <seanegan@gmail.com>
|
||||||
|
Daniel 'datallah' Atallah
|
||||||
|
Ethan 'Paco-Paco' Blanton
|
||||||
|
Thomas Butter
|
||||||
|
Sadrul Habib Chowdhury
|
||||||
|
Mark 'KingAnt' Doliner
|
||||||
|
Christian 'ChipX86' Hammond & Webmaster
|
||||||
|
Gary 'grim' Kramlich
|
||||||
|
Richard 'rlaager' Laager
|
||||||
|
Richard 'wabz' Nelson
|
||||||
|
Christopher 'siege' O'Brien
|
||||||
|
Bartosz Oler
|
||||||
|
Etan 'deryni' Reisner
|
||||||
|
Tim 'marv' Ringenbach
|
||||||
|
Luke 'LSchiere' Schierer
|
||||||
|
Megan 'Cae' Schneider
|
||||||
|
Evan Schoenberg
|
||||||
|
Stu 'nosnilmot' Tomlinson
|
||||||
|
Nathan 'faceprint' Walp
|
||||||
|
John 'rekkanoryo' Bailey
|
||||||
|
Ka-Hing 'javabsp' Cheung
|
||||||
|
Felipe 'shx' Contreras
|
||||||
|
Decklin Foster
|
||||||
|
Casey Harkins
|
||||||
|
Peter 'Bleeter' Lawler
|
||||||
|
Robert 'Robot101' McQueen
|
||||||
|
Benjamin Miller
|
||||||
|
Kevin 'SimGuy' Stange
|
||||||
|
Herman Bloggs
|
||||||
|
Jim Duchek <jim@linuxpimps.com>
|
||||||
|
Rob Flynn <gaim@robflynn.com>
|
||||||
|
Adam Fritzler
|
||||||
|
Syd Logan
|
||||||
|
Jim Seymour
|
||||||
|
Mark Spencer <markster@marko.net>
|
||||||
|
Eric Warmenhoven <eric@warmenhoven.org>
|
||||||
|
Hylke Bons
|
||||||
|
Naru Sundar
|
||||||
|
Peter Teichiman <peter@helixcode.com>
|
||||||
|
Larry Ewing
|
||||||
|
Jeramey A. Crawford
|
||||||
|
Nathan Walp
|
||||||
|
Neil Sanchala
|
||||||
|
Arkadiusz Miskiewicz
|
||||||
|
David Prater <draven@tcsx.net>
|
||||||
|
Sébastien Carp
|
||||||
|
Ari Pollak
|
||||||
|
Decklin Foster
|
||||||
|
David
|
||||||
|
S D Erle
|
||||||
|
BMiller
|
||||||
|
Lance Rocker
|
||||||
|
ergofobe
|
||||||
|
Justin M. Ward <justin@yossman.net>
|
||||||
|
G. Sumner Hayes
|
||||||
|
Brian Ryner
|
||||||
|
Ryan C. Gordon
|
||||||
|
Elliot Tobin <elliot@bha.udel.edu>
|
||||||
|
Jeroen van der Vegt
|
||||||
|
The OpenQ Team
|
||||||
|
|
||||||
|
|
||||||
|
%description -n libpurple
|
||||||
|
libpurple contains the core IM support for IM clients such as Pidgin
|
||||||
|
and Finch.
|
||||||
|
|
||||||
|
libpurple supports a variety of messaging protocols including AIM, MSN,
|
||||||
|
Yahoo!, Jabber, Bonjour, Gadu-Gadu, ICQ, IRC, Novell Groupwise, QQ,
|
||||||
|
Lotus Sametime, SILC, Simple and Zephyr.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Sean Egan <seanegan@gmail.com>
|
||||||
|
Daniel 'datallah' Atallah
|
||||||
|
Ethan 'Paco-Paco' Blanton
|
||||||
|
Thomas Butter
|
||||||
|
Sadrul Habib Chowdhury
|
||||||
|
Mark 'KingAnt' Doliner
|
||||||
|
Christian 'ChipX86' Hammond & Webmaster
|
||||||
|
Gary 'grim' Kramlich
|
||||||
|
Richard 'rlaager' Laager
|
||||||
|
Richard 'wabz' Nelson
|
||||||
|
Christopher 'siege' O'Brien
|
||||||
|
Bartosz Oler
|
||||||
|
Etan 'deryni' Reisner
|
||||||
|
Tim 'marv' Ringenbach
|
||||||
|
Luke 'LSchiere' Schierer
|
||||||
|
Megan 'Cae' Schneider
|
||||||
|
Evan Schoenberg
|
||||||
|
Stu 'nosnilmot' Tomlinson
|
||||||
|
Nathan 'faceprint' Walp
|
||||||
|
John 'rekkanoryo' Bailey
|
||||||
|
Ka-Hing 'javabsp' Cheung
|
||||||
|
Felipe 'shx' Contreras
|
||||||
|
Decklin Foster
|
||||||
|
Casey Harkins
|
||||||
|
Peter 'Bleeter' Lawler
|
||||||
|
Robert 'Robot101' McQueen
|
||||||
|
Benjamin Miller
|
||||||
|
Kevin 'SimGuy' Stange
|
||||||
|
Herman Bloggs
|
||||||
|
Jim Duchek <jim@linuxpimps.com>
|
||||||
|
Rob Flynn <gaim@robflynn.com>
|
||||||
|
Adam Fritzler
|
||||||
|
Syd Logan
|
||||||
|
Jim Seymour
|
||||||
|
Mark Spencer <markster@marko.net>
|
||||||
|
Eric Warmenhoven <eric@warmenhoven.org>
|
||||||
|
Hylke Bons
|
||||||
|
Naru Sundar
|
||||||
|
Peter Teichiman <peter@helixcode.com>
|
||||||
|
Larry Ewing
|
||||||
|
Jeramey A. Crawford
|
||||||
|
Nathan Walp
|
||||||
|
Neil Sanchala
|
||||||
|
Arkadiusz Miskiewicz
|
||||||
|
David Prater <draven@tcsx.net>
|
||||||
|
Sébastien Carp
|
||||||
|
Ari Pollak
|
||||||
|
Decklin Foster
|
||||||
|
David
|
||||||
|
S D Erle
|
||||||
|
BMiller
|
||||||
|
Lance Rocker
|
||||||
|
ergofobe
|
||||||
|
Justin M. Ward <justin@yossman.net>
|
||||||
|
G. Sumner Hayes
|
||||||
|
Brian Ryner
|
||||||
|
Ryan C. Gordon
|
||||||
|
Elliot Tobin <elliot@bha.udel.edu>
|
||||||
|
Jeroen van der Vegt
|
||||||
|
The OpenQ Team
|
||||||
|
|
||||||
|
|
||||||
|
%description -n libpurple-devel
|
||||||
|
The libpurple-devel package contains the header files, developer
|
||||||
|
documentation, and libraries required for development of libpurple
|
||||||
|
based instant messaging clients or plugins for any libpurple based
|
||||||
|
client.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Sean Egan <seanegan@gmail.com>
|
||||||
|
Daniel 'datallah' Atallah
|
||||||
|
Ethan 'Paco-Paco' Blanton
|
||||||
|
Thomas Butter
|
||||||
|
Sadrul Habib Chowdhury
|
||||||
|
Mark 'KingAnt' Doliner
|
||||||
|
Christian 'ChipX86' Hammond & Webmaster
|
||||||
|
Gary 'grim' Kramlich
|
||||||
|
Richard 'rlaager' Laager
|
||||||
|
Richard 'wabz' Nelson
|
||||||
|
Christopher 'siege' O'Brien
|
||||||
|
Bartosz Oler
|
||||||
|
Etan 'deryni' Reisner
|
||||||
|
Tim 'marv' Ringenbach
|
||||||
|
Luke 'LSchiere' Schierer
|
||||||
|
Megan 'Cae' Schneider
|
||||||
|
Evan Schoenberg
|
||||||
|
Stu 'nosnilmot' Tomlinson
|
||||||
|
Nathan 'faceprint' Walp
|
||||||
|
John 'rekkanoryo' Bailey
|
||||||
|
Ka-Hing 'javabsp' Cheung
|
||||||
|
Felipe 'shx' Contreras
|
||||||
|
Decklin Foster
|
||||||
|
Casey Harkins
|
||||||
|
Peter 'Bleeter' Lawler
|
||||||
|
Robert 'Robot101' McQueen
|
||||||
|
Benjamin Miller
|
||||||
|
Kevin 'SimGuy' Stange
|
||||||
|
Herman Bloggs
|
||||||
|
Jim Duchek <jim@linuxpimps.com>
|
||||||
|
Rob Flynn <gaim@robflynn.com>
|
||||||
|
Adam Fritzler
|
||||||
|
Syd Logan
|
||||||
|
Jim Seymour
|
||||||
|
Mark Spencer <markster@marko.net>
|
||||||
|
Eric Warmenhoven <eric@warmenhoven.org>
|
||||||
|
Hylke Bons
|
||||||
|
Naru Sundar
|
||||||
|
Peter Teichiman <peter@helixcode.com>
|
||||||
|
Larry Ewing
|
||||||
|
Jeramey A. Crawford
|
||||||
|
Nathan Walp
|
||||||
|
Neil Sanchala
|
||||||
|
Arkadiusz Miskiewicz
|
||||||
|
David Prater <draven@tcsx.net>
|
||||||
|
Sébastien Carp
|
||||||
|
Ari Pollak
|
||||||
|
Decklin Foster
|
||||||
|
David
|
||||||
|
S D Erle
|
||||||
|
BMiller
|
||||||
|
Lance Rocker
|
||||||
|
ergofobe
|
||||||
|
Justin M. Ward <justin@yossman.net>
|
||||||
|
G. Sumner Hayes
|
||||||
|
Brian Ryner
|
||||||
|
Ryan C. Gordon
|
||||||
|
Elliot Tobin <elliot@bha.udel.edu>
|
||||||
|
Jeroen van der Vegt
|
||||||
|
The OpenQ Team
|
||||||
|
|
||||||
|
|
||||||
|
%description -n libpurple-meanwhile
|
||||||
|
Lotus Sametime plugin for Pidgin using the Meanwhile library.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Sean Egan <seanegan@gmail.com>
|
||||||
|
Daniel 'datallah' Atallah
|
||||||
|
Ethan 'Paco-Paco' Blanton
|
||||||
|
Thomas Butter
|
||||||
|
Sadrul Habib Chowdhury
|
||||||
|
Mark 'KingAnt' Doliner
|
||||||
|
Christian 'ChipX86' Hammond & Webmaster
|
||||||
|
Gary 'grim' Kramlich
|
||||||
|
Richard 'rlaager' Laager
|
||||||
|
Richard 'wabz' Nelson
|
||||||
|
Christopher 'siege' O'Brien
|
||||||
|
Bartosz Oler
|
||||||
|
Etan 'deryni' Reisner
|
||||||
|
Tim 'marv' Ringenbach
|
||||||
|
Luke 'LSchiere' Schierer
|
||||||
|
Megan 'Cae' Schneider
|
||||||
|
Evan Schoenberg
|
||||||
|
Stu 'nosnilmot' Tomlinson
|
||||||
|
Nathan 'faceprint' Walp
|
||||||
|
John 'rekkanoryo' Bailey
|
||||||
|
Ka-Hing 'javabsp' Cheung
|
||||||
|
Felipe 'shx' Contreras
|
||||||
|
Decklin Foster
|
||||||
|
Casey Harkins
|
||||||
|
Peter 'Bleeter' Lawler
|
||||||
|
Robert 'Robot101' McQueen
|
||||||
|
Benjamin Miller
|
||||||
|
Kevin 'SimGuy' Stange
|
||||||
|
Herman Bloggs
|
||||||
|
Jim Duchek <jim@linuxpimps.com>
|
||||||
|
Rob Flynn <gaim@robflynn.com>
|
||||||
|
Adam Fritzler
|
||||||
|
Syd Logan
|
||||||
|
Jim Seymour
|
||||||
|
Mark Spencer <markster@marko.net>
|
||||||
|
Eric Warmenhoven <eric@warmenhoven.org>
|
||||||
|
Hylke Bons
|
||||||
|
Naru Sundar
|
||||||
|
Peter Teichiman <peter@helixcode.com>
|
||||||
|
Larry Ewing
|
||||||
|
Jeramey A. Crawford
|
||||||
|
Nathan Walp
|
||||||
|
Neil Sanchala
|
||||||
|
Arkadiusz Miskiewicz
|
||||||
|
David Prater <draven@tcsx.net>
|
||||||
|
Sébastien Carp
|
||||||
|
Ari Pollak
|
||||||
|
Decklin Foster
|
||||||
|
David
|
||||||
|
S D Erle
|
||||||
|
BMiller
|
||||||
|
Lance Rocker
|
||||||
|
ergofobe
|
||||||
|
Justin M. Ward <justin@yossman.net>
|
||||||
|
G. Sumner Hayes
|
||||||
|
Brian Ryner
|
||||||
|
Ryan C. Gordon
|
||||||
|
Elliot Tobin <elliot@bha.udel.edu>
|
||||||
|
Jeroen van der Vegt
|
||||||
|
The OpenQ Team
|
||||||
|
|
||||||
|
|
||||||
|
%description -n libpurple-mono
|
||||||
|
Mono plugin loader for Pidgin. This package will allow you to write or
|
||||||
|
use Pidgin plugins written in the .NET programming language.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Sean Egan <seanegan@gmail.com>
|
||||||
|
Daniel 'datallah' Atallah
|
||||||
|
Ethan 'Paco-Paco' Blanton
|
||||||
|
Thomas Butter
|
||||||
|
Sadrul Habib Chowdhury
|
||||||
|
Mark 'KingAnt' Doliner
|
||||||
|
Christian 'ChipX86' Hammond & Webmaster
|
||||||
|
Gary 'grim' Kramlich
|
||||||
|
Richard 'rlaager' Laager
|
||||||
|
Richard 'wabz' Nelson
|
||||||
|
Christopher 'siege' O'Brien
|
||||||
|
Bartosz Oler
|
||||||
|
Etan 'deryni' Reisner
|
||||||
|
Tim 'marv' Ringenbach
|
||||||
|
Luke 'LSchiere' Schierer
|
||||||
|
Megan 'Cae' Schneider
|
||||||
|
Evan Schoenberg
|
||||||
|
Stu 'nosnilmot' Tomlinson
|
||||||
|
Nathan 'faceprint' Walp
|
||||||
|
John 'rekkanoryo' Bailey
|
||||||
|
Ka-Hing 'javabsp' Cheung
|
||||||
|
Felipe 'shx' Contreras
|
||||||
|
Decklin Foster
|
||||||
|
Casey Harkins
|
||||||
|
Peter 'Bleeter' Lawler
|
||||||
|
Robert 'Robot101' McQueen
|
||||||
|
Benjamin Miller
|
||||||
|
Kevin 'SimGuy' Stange
|
||||||
|
Herman Bloggs
|
||||||
|
Jim Duchek <jim@linuxpimps.com>
|
||||||
|
Rob Flynn <gaim@robflynn.com>
|
||||||
|
Adam Fritzler
|
||||||
|
Syd Logan
|
||||||
|
Jim Seymour
|
||||||
|
Mark Spencer <markster@marko.net>
|
||||||
|
Eric Warmenhoven <eric@warmenhoven.org>
|
||||||
|
Hylke Bons
|
||||||
|
Naru Sundar
|
||||||
|
Peter Teichiman <peter@helixcode.com>
|
||||||
|
Larry Ewing
|
||||||
|
Jeramey A. Crawford
|
||||||
|
Nathan Walp
|
||||||
|
Neil Sanchala
|
||||||
|
Arkadiusz Miskiewicz
|
||||||
|
David Prater <draven@tcsx.net>
|
||||||
|
Sébastien Carp
|
||||||
|
Ari Pollak
|
||||||
|
Decklin Foster
|
||||||
|
David
|
||||||
|
S D Erle
|
||||||
|
BMiller
|
||||||
|
Lance Rocker
|
||||||
|
ergofobe
|
||||||
|
Justin M. Ward <justin@yossman.net>
|
||||||
|
G. Sumner Hayes
|
||||||
|
Brian Ryner
|
||||||
|
Ryan C. Gordon
|
||||||
|
Elliot Tobin <elliot@bha.udel.edu>
|
||||||
|
Jeroen van der Vegt
|
||||||
|
The OpenQ Team
|
||||||
|
|
||||||
|
|
||||||
|
%description -n finch
|
||||||
|
A text-based user interface for using libpurple. This can be run from
|
||||||
|
a standard text console or from a terminal within X Windows. It uses
|
||||||
|
ncurses and our homegrown gnt library for drawing windows and text.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Sean Egan <seanegan@gmail.com>
|
||||||
|
Daniel 'datallah' Atallah
|
||||||
|
Ethan 'Paco-Paco' Blanton
|
||||||
|
Thomas Butter
|
||||||
|
Sadrul Habib Chowdhury
|
||||||
|
Mark 'KingAnt' Doliner
|
||||||
|
Christian 'ChipX86' Hammond & Webmaster
|
||||||
|
Gary 'grim' Kramlich
|
||||||
|
Richard 'rlaager' Laager
|
||||||
|
Richard 'wabz' Nelson
|
||||||
|
Christopher 'siege' O'Brien
|
||||||
|
Bartosz Oler
|
||||||
|
Etan 'deryni' Reisner
|
||||||
|
Tim 'marv' Ringenbach
|
||||||
|
Luke 'LSchiere' Schierer
|
||||||
|
Megan 'Cae' Schneider
|
||||||
|
Evan Schoenberg
|
||||||
|
Stu 'nosnilmot' Tomlinson
|
||||||
|
Nathan 'faceprint' Walp
|
||||||
|
John 'rekkanoryo' Bailey
|
||||||
|
Ka-Hing 'javabsp' Cheung
|
||||||
|
Felipe 'shx' Contreras
|
||||||
|
Decklin Foster
|
||||||
|
Casey Harkins
|
||||||
|
Peter 'Bleeter' Lawler
|
||||||
|
Robert 'Robot101' McQueen
|
||||||
|
Benjamin Miller
|
||||||
|
Kevin 'SimGuy' Stange
|
||||||
|
Herman Bloggs
|
||||||
|
Jim Duchek <jim@linuxpimps.com>
|
||||||
|
Rob Flynn <gaim@robflynn.com>
|
||||||
|
Adam Fritzler
|
||||||
|
Syd Logan
|
||||||
|
Jim Seymour
|
||||||
|
Mark Spencer <markster@marko.net>
|
||||||
|
Eric Warmenhoven <eric@warmenhoven.org>
|
||||||
|
Hylke Bons
|
||||||
|
Naru Sundar
|
||||||
|
Peter Teichiman <peter@helixcode.com>
|
||||||
|
Larry Ewing
|
||||||
|
Jeramey A. Crawford
|
||||||
|
Nathan Walp
|
||||||
|
Neil Sanchala
|
||||||
|
Arkadiusz Miskiewicz
|
||||||
|
David Prater <draven@tcsx.net>
|
||||||
|
Sébastien Carp
|
||||||
|
Ari Pollak
|
||||||
|
Decklin Foster
|
||||||
|
David
|
||||||
|
S D Erle
|
||||||
|
BMiller
|
||||||
|
Lance Rocker
|
||||||
|
ergofobe
|
||||||
|
Justin M. Ward <justin@yossman.net>
|
||||||
|
G. Sumner Hayes
|
||||||
|
Brian Ryner
|
||||||
|
Ryan C. Gordon
|
||||||
|
Elliot Tobin <elliot@bha.udel.edu>
|
||||||
|
Jeroen van der Vegt
|
||||||
|
The OpenQ Team
|
||||||
|
|
||||||
|
|
||||||
|
%description -n finch-devel
|
||||||
|
The finch-devel package contains the header files, developer
|
||||||
|
documentation, and libraries required for development of Finch scripts
|
||||||
|
and plugins.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Sean Egan <seanegan@gmail.com>
|
||||||
|
Daniel 'datallah' Atallah
|
||||||
|
Ethan 'Paco-Paco' Blanton
|
||||||
|
Thomas Butter
|
||||||
|
Sadrul Habib Chowdhury
|
||||||
|
Mark 'KingAnt' Doliner
|
||||||
|
Christian 'ChipX86' Hammond & Webmaster
|
||||||
|
Gary 'grim' Kramlich
|
||||||
|
Richard 'rlaager' Laager
|
||||||
|
Richard 'wabz' Nelson
|
||||||
|
Christopher 'siege' O'Brien
|
||||||
|
Bartosz Oler
|
||||||
|
Etan 'deryni' Reisner
|
||||||
|
Tim 'marv' Ringenbach
|
||||||
|
Luke 'LSchiere' Schierer
|
||||||
|
Megan 'Cae' Schneider
|
||||||
|
Evan Schoenberg
|
||||||
|
Stu 'nosnilmot' Tomlinson
|
||||||
|
Nathan 'faceprint' Walp
|
||||||
|
John 'rekkanoryo' Bailey
|
||||||
|
Ka-Hing 'javabsp' Cheung
|
||||||
|
Felipe 'shx' Contreras
|
||||||
|
Decklin Foster
|
||||||
|
Casey Harkins
|
||||||
|
Peter 'Bleeter' Lawler
|
||||||
|
Robert 'Robot101' McQueen
|
||||||
|
Benjamin Miller
|
||||||
|
Kevin 'SimGuy' Stange
|
||||||
|
Herman Bloggs
|
||||||
|
Jim Duchek <jim@linuxpimps.com>
|
||||||
|
Rob Flynn <gaim@robflynn.com>
|
||||||
|
Adam Fritzler
|
||||||
|
Syd Logan
|
||||||
|
Jim Seymour
|
||||||
|
Mark Spencer <markster@marko.net>
|
||||||
|
Eric Warmenhoven <eric@warmenhoven.org>
|
||||||
|
Hylke Bons
|
||||||
|
Naru Sundar
|
||||||
|
Peter Teichiman <peter@helixcode.com>
|
||||||
|
Larry Ewing
|
||||||
|
Jeramey A. Crawford
|
||||||
|
Nathan Walp
|
||||||
|
Neil Sanchala
|
||||||
|
Arkadiusz Miskiewicz
|
||||||
|
David Prater <draven@tcsx.net>
|
||||||
|
Sébastien Carp
|
||||||
|
Ari Pollak
|
||||||
|
Decklin Foster
|
||||||
|
David
|
||||||
|
S D Erle
|
||||||
|
BMiller
|
||||||
|
Lance Rocker
|
||||||
|
ergofobe
|
||||||
|
Justin M. Ward <justin@yossman.net>
|
||||||
|
G. Sumner Hayes
|
||||||
|
Brian Ryner
|
||||||
|
Ryan C. Gordon
|
||||||
|
Elliot Tobin <elliot@bha.udel.edu>
|
||||||
|
Jeroen van der Vegt
|
||||||
|
The OpenQ Team
|
||||||
|
|
||||||
|
|
||||||
|
%description gaim-compat
|
||||||
|
This package provides compatibility binaries for gaim and gaim-text to
|
||||||
|
notify users, that they should update their configuration to use new
|
||||||
|
name.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
Authors:
|
||||||
|
--------
|
||||||
|
Sean Egan <seanegan@gmail.com>
|
||||||
|
Daniel 'datallah' Atallah
|
||||||
|
Ethan 'Paco-Paco' Blanton
|
||||||
|
Thomas Butter
|
||||||
|
Sadrul Habib Chowdhury
|
||||||
|
Mark 'KingAnt' Doliner
|
||||||
|
Christian 'ChipX86' Hammond & Webmaster
|
||||||
|
Gary 'grim' Kramlich
|
||||||
|
Richard 'rlaager' Laager
|
||||||
|
Richard 'wabz' Nelson
|
||||||
|
Christopher 'siege' O'Brien
|
||||||
|
Bartosz Oler
|
||||||
|
Etan 'deryni' Reisner
|
||||||
|
Tim 'marv' Ringenbach
|
||||||
|
Luke 'LSchiere' Schierer
|
||||||
|
Megan 'Cae' Schneider
|
||||||
|
Evan Schoenberg
|
||||||
|
Stu 'nosnilmot' Tomlinson
|
||||||
|
Nathan 'faceprint' Walp
|
||||||
|
John 'rekkanoryo' Bailey
|
||||||
|
Ka-Hing 'javabsp' Cheung
|
||||||
|
Felipe 'shx' Contreras
|
||||||
|
Decklin Foster
|
||||||
|
Casey Harkins
|
||||||
|
Peter 'Bleeter' Lawler
|
||||||
|
Robert 'Robot101' McQueen
|
||||||
|
Benjamin Miller
|
||||||
|
Kevin 'SimGuy' Stange
|
||||||
|
Herman Bloggs
|
||||||
|
Jim Duchek <jim@linuxpimps.com>
|
||||||
|
Rob Flynn <gaim@robflynn.com>
|
||||||
|
Adam Fritzler
|
||||||
|
Syd Logan
|
||||||
|
Jim Seymour
|
||||||
|
Mark Spencer <markster@marko.net>
|
||||||
|
Eric Warmenhoven <eric@warmenhoven.org>
|
||||||
|
Hylke Bons
|
||||||
|
Naru Sundar
|
||||||
|
Peter Teichiman <peter@helixcode.com>
|
||||||
|
Larry Ewing
|
||||||
|
Jeramey A. Crawford
|
||||||
|
Nathan Walp
|
||||||
|
Neil Sanchala
|
||||||
|
Arkadiusz Miskiewicz
|
||||||
|
David Prater <draven@tcsx.net>
|
||||||
|
Sébastien Carp
|
||||||
|
Ari Pollak
|
||||||
|
Decklin Foster
|
||||||
|
David
|
||||||
|
S D Erle
|
||||||
|
BMiller
|
||||||
|
Lance Rocker
|
||||||
|
ergofobe
|
||||||
|
Justin M. Ward <justin@yossman.net>
|
||||||
|
G. Sumner Hayes
|
||||||
|
Brian Ryner
|
||||||
|
Ryan C. Gordon
|
||||||
|
Elliot Tobin <elliot@bha.udel.edu>
|
||||||
|
Jeroen van der Vegt
|
||||||
|
The OpenQ Team
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%setup -q -a1 -a2
|
||||||
|
%patch1 -p1
|
||||||
|
#Â FIXME: Port this patch:
|
||||||
|
#%patch2 -p1
|
||||||
|
%patch3 -p1
|
||||||
|
%patch4 -p1
|
||||||
|
%patch5 -p1
|
||||||
|
%patch6
|
||||||
|
%patch7
|
||||||
|
# Change Myanmar/Myanmar to Myanmar:
|
||||||
|
rename my_MM my po/my_MM.*
|
||||||
|
sed -i "/^ALL_LINGUAS/s/ my_MM / my /" configure.ac
|
||||||
|
|
||||||
|
%build
|
||||||
|
# -fno-strict-aliasing needed for 2.0.0
|
||||||
|
%if %suse_version > 1000
|
||||||
|
export CFLAGS="$RPM_OPT_FLAGS -fstack-protector -fPIC -fno-strict-aliasing"
|
||||||
|
export LDFLAGS="-pie"
|
||||||
|
%else
|
||||||
|
export CFLAGS="$RPM_OPT_FLAGS -fPIC -fno-strict-aliasing"
|
||||||
|
%endif
|
||||||
|
ACLOCAL="aclocal -I m4macros" autoreconf -f -i
|
||||||
|
%configure\
|
||||||
|
--disable-static\
|
||||||
|
--enable-plugins\
|
||||||
|
--enable-cyrus-sasl\
|
||||||
|
--enable-dbus=yes\
|
||||||
|
--enable-mono=yes\
|
||||||
|
--enable-gstreamer=yes\
|
||||||
|
--enable-gnome-keyring=yes\
|
||||||
|
--enable-nm=yes\
|
||||||
|
--enable-dbus=yes\
|
||||||
|
--with-perl-lib=/usr\
|
||||||
|
--with-nspr-includes=/usr/include/nspr4\
|
||||||
|
--with-nss-includes=/usr/include/nss3\
|
||||||
|
--with-tclconfig=/usr/%_lib\
|
||||||
|
--with-tkconfig=/usr/%_lib
|
||||||
|
make
|
||||||
|
# Mono bindings 2.0.0 are not parallel build ready:
|
||||||
|
#make %{?jobs:-j%jobs}
|
||||||
|
|
||||||
|
%install
|
||||||
|
%makeinstall
|
||||||
|
%perl_process_packlist
|
||||||
|
%suse_update_desktop_file -N Pidgin -G "Instant Messenger" %{name} InstantMessaging
|
||||||
|
cp -a NLD $RPM_BUILD_ROOT%{_prefix}/share/pixmaps/pidgin/emotes
|
||||||
|
cp -a Tango $RPM_BUILD_ROOT%{_prefix}/share/pixmaps/pidgin/emotes
|
||||||
|
rm $RPM_BUILD_ROOT%{_prefix}/%_lib/pidgin/*.*a
|
||||||
|
# FIXME: Should be nonversioned name:
|
||||||
|
test -L $RPM_BUILD_ROOT%{_libdir}/purple-2/liboscar.so && rm $RPM_BUILD_ROOT%{_libdir}/purple-2/liboscar.so
|
||||||
|
test -L $RPM_BUILD_ROOT%{_libdir}/purple-2/libjabber.so && rm $RPM_BUILD_ROOT%{_libdir}/purple-2/libjabber.so
|
||||||
|
#find $RPM_BUILD_ROOT -type f -name .packlist -exec rm {} ';'
|
||||||
|
#find $RPM_BUILD_ROOT -type f -name '*.bs' -empty -exec rm {} ';'
|
||||||
|
# binaries for gaim rename notification:
|
||||||
|
cat >$RPM_BUILD_ROOT%{_bindir}/gaim <<EOF
|
||||||
|
#!/bin/bash
|
||||||
|
echo >&2 "WARNING: gaim was replaced by pidgin. Please call it as \"pidgin\"."
|
||||||
|
(
|
||||||
|
exec 2>/dev/null
|
||||||
|
zenity --window-icon /usr/share/icons/hicolor/24x24/apps/pidgin.png --warning --text "WARNING: gaim was replaced by pidgin. Please call it as \"pidgin\"." &
|
||||||
|
KPID=\$!
|
||||||
|
( sleep 7 ; kill \$KPID ) &
|
||||||
|
wait \$KPID
|
||||||
|
)
|
||||||
|
exec %{_bindir}/pidgin "\$@"
|
||||||
|
EOF
|
||||||
|
chmod +x $RPM_BUILD_ROOT%{_bindir}/gaim
|
||||||
|
cat >$RPM_BUILD_ROOT%{_bindir}/gaim-text <<EOF
|
||||||
|
#!/bin/bash
|
||||||
|
echo >&2 "WARNING: gaim-text was replaced by finch. Please call it as \"finch\"."
|
||||||
|
exec %{_bindir}/finch "\$@"
|
||||||
|
EOF
|
||||||
|
chmod +x $RPM_BUILD_ROOT%{_bindir}/gaim-text
|
||||||
|
%find_lang %{name}
|
||||||
|
rm $RPM_BUILD_ROOT%{_libdir}/*/*.la
|
||||||
|
# NOTE: Original has also "grep -v /libbonjour.so | \"
|
||||||
|
find $RPM_BUILD_ROOT%{_libdir}/purple-2 -xtype f -print | \
|
||||||
|
sed "s@^$RPM_BUILD_ROOT@@g" | \
|
||||||
|
grep -v /libsametime.so | \
|
||||||
|
grep -v /mono.so | \
|
||||||
|
grep -v ".dll$" > %{name}-%{version}-purpleplugins
|
||||||
|
find $RPM_BUILD_ROOT%{_libdir}/pidgin -xtype f -print | \
|
||||||
|
sed "s@^$RPM_BUILD_ROOT@@g" > %{name}-%{version}-pidginplugins
|
||||||
|
find $RPM_BUILD_ROOT%{_libdir}/finch -xtype f -print | \
|
||||||
|
sed "s@^$RPM_BUILD_ROOT@@g" > %{name}-%{version}-finchplugins
|
||||||
|
%find_gconf_schemas
|
||||||
|
cat %{name}.schemas_list %{name}-%{version}-pidginplugins >%{name}.lst
|
||||||
|
cat %{name}.lang %{name}-%{version}-purpleplugins >libpurple.lst
|
||||||
|
|
||||||
|
%clean
|
||||||
|
rm -rf $RPM_BUILD_ROOT
|
||||||
|
|
||||||
|
%pre -f %{name}.schemas_pre
|
||||||
|
|
||||||
|
%posttrans -f %{name}.schemas_posttrans
|
||||||
|
|
||||||
|
%preun -f %{name}.schemas_preun
|
||||||
|
|
||||||
|
%files -f %{name}.lst
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%doc AUTHORS COPYING COPYRIGHT ChangeLog NEWS README README.MTN doc/the_penguin.txt
|
||||||
|
%dir %{_libdir}/pidgin
|
||||||
|
%{perl_vendorarch}/Pidgin.pm
|
||||||
|
%{perl_vendorarch}/auto/Pidgin
|
||||||
|
%{_bindir}/pidgin
|
||||||
|
%{_datadir}/pixmaps/pidgin
|
||||||
|
%{_datadir}/icons/hicolor/*/apps/pidgin.*
|
||||||
|
%dir %{_datadir}/sounds/pidgin
|
||||||
|
%{_datadir}/sounds/pidgin/*
|
||||||
|
%{_datadir}/applications/*.desktop
|
||||||
|
%doc %{_mandir}/man1/pidgin.*
|
||||||
|
%doc %{_mandir}/man3/Pidgin.*
|
||||||
|
/var/adm/perl-modules/pidgin
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%defattr(-,root,root)
|
||||||
|
%{_includedir}/pidgin
|
||||||
|
%{_libdir}/pkgconfig/pidgin.pc
|
||||||
|
|
||||||
|
%files -f libpurple.lst -n libpurple
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%doc libpurple/purple-notifications-example
|
||||||
|
%{_bindir}/purple-client-example
|
||||||
|
%{_bindir}/purple-remote
|
||||||
|
%{_bindir}/purple-send
|
||||||
|
%{_bindir}/purple-send-async
|
||||||
|
%{_bindir}/purple-url-handler
|
||||||
|
%{_datadir}/pixmaps/purple
|
||||||
|
%{_libdir}/libpurple.so.*
|
||||||
|
%{_libdir}/libpurple-client.so.*
|
||||||
|
%dir %{_libdir}/purple-2
|
||||||
|
%{perl_vendorarch}/Purple.pm
|
||||||
|
%{perl_vendorarch}/auto/Purple
|
||||||
|
|
||||||
|
%files -n libpurple-meanwhile
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%{_libdir}/purple-2/libsametime.*
|
||||||
|
|
||||||
|
%files -n libpurple-mono
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%{_libdir}/purple-2/mono.so
|
||||||
|
%{_libdir}/purple-2/*.dll
|
||||||
|
|
||||||
|
%files -n libpurple-devel
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%doc ChangeLog.API HACKING PLUGIN_HOWTO
|
||||||
|
%{_includedir}/libpurple
|
||||||
|
%{_datadir}/aclocal/purple.m4
|
||||||
|
%{_libdir}/libpurple.so
|
||||||
|
%{_libdir}/libpurple.*a
|
||||||
|
%{_libdir}/libpurple-client.so
|
||||||
|
%{_libdir}/libpurple-client.*a
|
||||||
|
%{_libdir}/pkgconfig/purple.pc
|
||||||
|
%doc %{_mandir}/man3/Purple.*
|
||||||
|
|
||||||
|
%files -f %{name}-%{version}-finchplugins -n finch
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%{_bindir}/finch
|
||||||
|
%{_libdir}/libgnt.so.*
|
||||||
|
%dir %{_libdir}/finch
|
||||||
|
%doc %{_mandir}/man1/finch.*
|
||||||
|
|
||||||
|
%files -n finch-devel
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%{_includedir}/finch
|
||||||
|
%{_includedir}/gnt
|
||||||
|
%{_libdir}/libgnt.so
|
||||||
|
%{_libdir}/libgnt.*a
|
||||||
|
%{_libdir}/pkgconfig/gnt.pc
|
||||||
|
|
||||||
|
%files gaim-compat
|
||||||
|
%defattr(-, root, root)
|
||||||
|
%{_bindir}/gaim
|
||||||
|
%{_bindir}/gaim-text
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Tue May 15 2007 - sbrabec@suse.cz
|
||||||
|
- Compile with SILC protocol support.
|
||||||
|
- Integrated patches ported by Martin Szulecki.
|
||||||
|
- Fixed NSS/NSPR detection.
|
||||||
|
- Split gaim compatibility binaries.
|
||||||
|
- Removed obsolete media files.
|
||||||
|
* Mon May 14 2007 - sbrabec@suse.cz
|
||||||
|
- Fixed autoreconf.
|
||||||
|
- Fixed Provides/Obsoletes.
|
||||||
|
- Require basic SASL plugins required for Jabber.
|
||||||
|
* Thu May 10 2007 - sbrabec@suse.cz
|
||||||
|
- New SuSE package, version 2.0.0 (successor of gaim).
|
||||||
|
Spec file based on work of James Ogley.
|
Loading…
x
Reference in New Issue
Block a user