Based on previous patches from Felipe Contreras.
---
cvr/pn_direct_conn.c | 16 +++++++++-------
cvr/pn_direct_conn.h | 2 +-
cvr/pn_peer_link.c | 13 +++++++++++++
cvr/pn_peer_link.h | 4 ++++
cvr/pn_peer_msg.c | 6 +++---
msn.c | 4 ++++
6 files changed, 34 insertions(+), 11 deletions(-)
diff --git a/cvr/pn_direct_conn.c b/cvr/pn_direct_conn.c
index 21459c6..96ed31b 100644
--- a/cvr/pn_direct_conn.c
+++ b/cvr/pn_direct_conn.c
@@ -23,6 +23,7 @@
#include "session.h"
#include "pn_peer_msg.h"
+#include "pn_peer_link.h"
#include "io/pn_node.h"
@@ -50,7 +51,7 @@ pn_direct_conn_send_handshake(struct pn_direct_conn *direct_conn)
link = direct_conn->link;
- peer_msg = pn_peer_msg_new(link);
+ peer_msg = pn_peer_msg_new();
peer_msg->flags = 0x100;
if (direct_conn->nonce != NULL)
@@ -408,7 +409,7 @@ pn_direct_conn_connect(struct pn_direct_conn *direct_conn, const char *host, int
pn_log ("begin");
- session = direct_conn->link->session;
+ session = pn_peer_link_get_session(direct_conn->link);
#if 0
if (session->http_method)
@@ -417,8 +418,9 @@ pn_direct_conn_connect(struct pn_direct_conn *direct_conn, const char *host, int
}
#endif
- direct_conn->connect_data = purple_proxy_connect(NULL, msn_session_get_account (session),
- host, port, direct_conn_connect_cb, direct_conn);
+ direct_conn->connect_data = purple_proxy_connect(NULL,
+ msn_session_get_user_data(session),
+ host, port, direct_conn_connect_cb, direct_conn);
pn_log ("end");
@@ -458,10 +460,10 @@ pn_direct_conn_new(struct pn_peer_link *link)
direct_conn->link = link;
- if (link->direct_conn != NULL)
+ if (pn_peer_link_get_directconn(link) != NULL)
pn_warning ("got_transresp: LEAK");
- link->direct_conn = direct_conn;
+ pn_peer_link_set_directconn(link, direct_conn);
pn_log ("end");
@@ -492,7 +494,7 @@ pn_direct_conn_destroy(struct pn_direct_conn *direct_conn)
if (direct_conn->nonce != NULL)
g_free(direct_conn->nonce);
- direct_conn->link->direct_conn = NULL;
+ pn_peer_link_set_directconn(direct_conn->link, NULL);
g_free(direct_conn);
diff --git a/cvr/pn_direct_conn.h b/cvr/pn_direct_conn.h
index 3d203da..38a5d63 100644
--- a/cvr/pn_direct_conn.h
+++ b/cvr/pn_direct_conn.h
@@ -44,7 +44,7 @@ struct pn_direct_conn {
int c;
struct _PurpleProxyConnectData *connect_data;
- PecanStream *stream;
+ PnStream *stream;
};
struct pn_direct_conn *pn_direct_conn_new(struct pn_peer_link *link);
diff --git a/cvr/pn_peer_link.c b/cvr/pn_peer_link.c
index 162c7db..f535a50 100644
--- a/cvr/pn_peer_link.c
+++ b/cvr/pn_peer_link.c
@@ -789,3 +789,16 @@ pn_peer_link_request_object(struct pn_peer_link *link,
g_free(msnobj_base64);
}
+
+struct pn_direct_conn *
+pn_peer_link_get_directconn(const struct pn_peer_link *link)
+{
+ return link->direct_conn;
+}
+
+void
+pn_peer_link_set_directconn(struct pn_peer_link *link,
+ struct pn_direct_conn *direct_conn)
+{
+ link->direct_conn = direct_conn;
+}
diff --git a/cvr/pn_peer_link.h b/cvr/pn_peer_link.h
index 66ccd67..92624b7 100644
--- a/cvr/pn_peer_link.h
+++ b/cvr/pn_peer_link.h
@@ -70,4 +70,8 @@ struct pn_peer_link *msn_session_find_peer_link(struct MsnSession *session,
struct pn_peer_link *msn_session_get_peer_link(struct MsnSession *session,
const char *username);
+struct pn_direct_conn *pn_peer_link_get_directconn(const struct pn_peer_link *link);
+void pn_peer_link_set_directconn(struct pn_peer_link *link,
+ struct pn_direct_conn *direct_conn);
+
#endif /* PN_PEERLINK_H */
diff --git a/cvr/pn_peer_msg.c b/cvr/pn_peer_msg.c
index 31bfb9a..2291a78 100644
--- a/cvr/pn_peer_msg.c
+++ b/cvr/pn_peer_msg.c
@@ -698,8 +698,8 @@ got_ok(struct pn_peer_call *call,
if (strcmp(type, "application/x-msnmsgr-sessionreqbody") == 0) {
#ifdef MSN_DIRECTCONN
- if (call->link->session->use_direct_conn &&
- call->type == PN_PEER_CALL_DC)
+ if (msn_session_get_bool(pn_peer_link_get_session(call->link),
+ "use_direct_conn"))
{
/* First let's try a DirectConnection. */
@@ -720,7 +720,7 @@ got_ok(struct pn_peer_call *call,
"ICF: false\r\n");
header = g_strdup_printf("INVITE MSNMSGR:%s MSNSLP/1.0",
- link->remote_user);
+ pn_peer_link_get_passport(link));
peer_msg = sip_new(call, 0, header, branch,
"application/x-msnmsgr-transreqbody",
diff --git a/msn.c b/msn.c
index 25c982d..67ebb44 100644
--- a/msn.c
+++ b/msn.c
@@ -906,8 +906,10 @@ login (PurpleAccount *account)
session->user_data = account;
msn_session_set_bool (session, "use_server_alias",
purple_account_get_bool (account, "use_server_alias", FALSE));
+#ifdef MSN_DIRECTCONN
msn_session_set_bool (session, "use_direct_conn",
purple_account_get_bool (account, "use_direct_conn", FALSE));
+#endif
msn_session_set_bool (session, "use_userdisplay",
purple_account_get_bool (account, "use_userdisplay", TRUE));
@@ -1844,8 +1846,10 @@ init_plugin (PurplePlugin *plugin)
option = purple_account_option_bool_new (_("Use server-side alias"), "use_server_alias", FALSE);
prpl_info.protocol_options = g_list_append (prpl_info.protocol_options, option);
+#ifdef MSN_DIRECTCONN
option = purple_account_option_bool_new (_("Use direct connections"), "use_direct_conn", FALSE);
prpl_info.protocol_options = g_list_append (prpl_info.protocol_options, option);
+#endif
option = purple_account_option_bool_new (_("Use user displays"), "use_userdisplay", TRUE);
prpl_info.protocol_options = g_list_append (prpl_info.protocol_options, option);
--
1.6.5.3