Sign Up
Log In
Log In
or
Sign Up
Places
All Projects
Status Monitor
Collapse sidebar
openSUSE:Leap:15.2:Staging:N
pidgin
pidgin-nonblock-gwim.patch
Overview
Repositories
Revisions
Requests
Users
Attributes
Meta
File pidgin-nonblock-gwim.patch of Package pidgin
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;
Locations
Projects
Search
Status Monitor
Help
OpenBuildService.org
Documentation
API Documentation
Code of Conduct
Contact
Support
@OBShq
Terms
openSUSE Build Service is sponsored by
The Open Build Service is an
openSUSE project
.
Sign Up
Log In
Places
Places
All Projects
Status Monitor