8e86eb5579
Accepted submit request 53822 from user dimstar OBS-URL: https://build.opensuse.org/request/show/53822 OBS-URL: https://build.opensuse.org/package/show/openSUSE:Factory/pidgin?expand=0&rev=61
91 lines
2.5 KiB
Diff
91 lines
2.5 KiB
Diff
Index: pidgin-2.7.6/libpurple/protocols/novell/nmconn.c
|
|
===================================================================
|
|
--- pidgin-2.7.6.orig/libpurple/protocols/novell/nmconn.c
|
|
+++ pidgin-2.7.6/libpurple/protocols/novell/nmconn.c
|
|
@@ -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;
|
|
}
|
|
|
|
Index: pidgin-2.7.6/libpurple/protocols/novell/nmconn.h
|
|
===================================================================
|
|
--- pidgin-2.7.6.orig/libpurple/protocols/novell/nmconn.h
|
|
+++ pidgin-2.7.6/libpurple/protocols/novell/nmconn.h
|
|
@@ -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;
|
|
|
|
Index: pidgin-2.7.6/libpurple/protocols/novell/novell.c
|
|
===================================================================
|
|
--- pidgin-2.7.6.orig/libpurple/protocols/novell/novell.c
|
|
+++ pidgin-2.7.6/libpurple/protocols/novell/novell.c
|
|
@@ -2223,17 +2223,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;
|