[papyon] Add patch to use correct server. (#750884)

Brian Pepple bpepple at fedoraproject.org
Wed Nov 9 01:26:43 UTC 2011


commit a49738d274c54b2de0fae44869b4a5fdef1a5a37
Author: Brian Pepple <bpepple at fedoraproject.org>
Date:   Tue Nov 8 20:26:26 2011 -0500

    Add patch to use correct server. (#750884)

 ...the-right-server-for-AB-and-Sharing-servi.patch |  170 ++++++++++++++++++++
 papyon.spec                                        |    7 +-
 2 files changed, 176 insertions(+), 1 deletions(-)
---
diff --git a/0001-bugfix-use-the-right-server-for-AB-and-Sharing-servi.patch b/0001-bugfix-use-the-right-server-for-AB-and-Sharing-servi.patch
new file mode 100644
index 0000000..1353edb
--- /dev/null
+++ b/0001-bugfix-use-the-right-server-for-AB-and-Sharing-servi.patch
@@ -0,0 +1,170 @@
+From d2cd1fd379978ff095150dafb2e99bef7327acf2 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Louis-Francis=20Ratt=C3=A9-Boulianne?=
+ <louis-francis.ratte-boulianne at collabora.co.uk>
+Date: Tue, 8 Nov 2011 11:56:02 -0500
+Subject: [PATCH] bugfix: use the right server for AB and Sharing services and
+ allow HTTP redirection (fdo #42689)
+
+---
+ papyon/gnet/parser.py                          |    1 -
+ papyon/gnet/protocol/HTTP.py                   |   70 +++++++++++++++++-------
+ papyon/service/description/AB/__init__.py      |    2 +-
+ papyon/service/description/Sharing/__init__.py |    2 +-
+ 4 files changed, 52 insertions(+), 23 deletions(-)
+
+diff --git a/papyon/gnet/parser.py b/papyon/gnet/parser.py
+index 1f6c199..82c1daa 100644
+--- a/papyon/gnet/parser.py
++++ b/papyon/gnet/parser.py
+@@ -212,4 +212,3 @@ class HTTPParser(AbstractParser):
+         response.parse(self._receive_buffer)
+         self.emit("received", response)
+         self._reset_state()
+-
+diff --git a/papyon/gnet/protocol/HTTP.py b/papyon/gnet/protocol/HTTP.py
+index 0628d34..3efe909 100644
+--- a/papyon/gnet/protocol/HTTP.py
++++ b/papyon/gnet/protocol/HTTP.py
+@@ -25,6 +25,8 @@ from papyon.gnet.io import TCPClient
+ from papyon.gnet.parser import HTTPParser
+ from papyon.gnet.proxy.factory import ProxyFactory
+ 
++from urlparse import urlsplit
++
+ import gobject
+ import base64
+ import logging
+@@ -71,7 +73,10 @@ class HTTP(gobject.GObject):
+         self._transport = None
+         self._http_parser = None
+         self._outgoing_queue = []
++        self._redirected = False
+         self._waiting_response = False
++        self._parser_handles = []
++        self._transport_handles = []
+ 
+         if self._proxies and self._proxies.get('http', None):
+             if self._proxies['http'].type == 'http':
+@@ -100,17 +105,32 @@ class HTTP(gobject.GObject):
+ 
+     def _setup_parser(self):
+         self._http_parser = HTTPParser(self._transport)
+-        self._http_parser.connect("received", self._on_response_received)
+-        self._transport.connect("notify::status", self._on_status_change)
+-        self._transport.connect("error", self._on_error)
+-        self._transport.connect("sent", self._on_request_sent)
++        self._parser_handles.append(self._http_parser.connect("received",
++            self._on_response_received))
++
++        self._transport_handles.append(self._transport.connect("notify::status",
++            self._on_status_change))
++        self._transport_handles.append(self._transport.connect("error",
++            self._on_error))
++        self._transport_handles.append(self._transport.connect("sent",
++            self._on_request_sent))
++
++    def _clean_transport(self):
++        if self._http_parser:
++            self._http_parser.disable()
++            for handle in self._parser_handles:
++                self._http_parser.disconnect(handle)
++            self._http_parser = None
++        if self._transport:
++            for handle in self._transport_handles:
++                self._transport.disconnect(handle)
+ 
+     def _on_status_change(self, transport, param):
+         if transport.get_property("status") == IoStatus.OPEN:
+             self._process_queue()
+         elif transport.get_property("status") == IoStatus.CLOSED and\
+                 (self._waiting_response or len(self._outgoing_queue) > 0) and\
+-                not self._errored:
++                not (self._errored or self._redirected):
+             self._waiting_response = False
+             self._setup_transport()
+ 
+@@ -123,24 +143,32 @@ class HTTP(gobject.GObject):
+         if response.status >= 100 and response.status < 200:
+             return
+         if not self._waiting_response:
+-            logger.warning("Received response but wasn't waiting for one")
++            logger.warning("Received response but wasn't waiting for one %s" % (parser))
++            logger.warning(response)
+             return
+-        #if response.status in (301, 302): # UNTESTED: please test
+-        #    location = response.headers['Location']
+ 
+-        #    location = location.rsplit("://", 1)
+-        #    if len(location) == 2:
+-        #        scheme = location[0]
+-        #        location = location[1]
+-        #    if scheme == "http":
+-        #        location = location.rsplit(":", 1)
+-        #        self._host = location[0]
+-        #        if len(location) == 2:
+-        #            self._port = int(location[1])
+-        #        self._outgoing_queue[0].headers['Host'] = response.headers['Location']
+-        #        self._setup_transport()
+-        #        return
+         self._waiting_response = False
++
++        if response.status in (301, 302):
++            self.close()
++            location = response.headers['Location']
++            logger.info("Server moved to %s" % location)
++            logger.warning(response)
++
++            protocol, host, path, query, fragment = urlsplit(location)
++            if protocol == "http":
++                self._redirected = True
++                self._outgoing_queue[0].headers['Host'] = host
++                try:
++                    host, port = host.rsplit(":", 1)
++                    port = int(port)
++                except:
++                    port = None
++                self._host = host
++                self._redirected = False
++                self._setup_transport()
++                return
++
+         if len(self._outgoing_queue) > 0:
+             self._outgoing_queue.pop(0) # pop the request from the queue
+         if response.status >= 400:
+@@ -186,5 +214,7 @@ class HTTP(gobject.GObject):
+         self._process_queue()
+ 
+     def close(self):
++        self._clean_transport()
+         if self._transport:
+             self._transport.close()
++        self._transport = None
+diff --git a/papyon/service/description/AB/__init__.py b/papyon/service/description/AB/__init__.py
+index 48af7e2..9015064 100644
+--- a/papyon/service/description/AB/__init__.py
++++ b/papyon/service/description/AB/__init__.py
+@@ -20,7 +20,7 @@
+ name = "AB"
+ description = "Hotmail address book service"
+ 
+-url = "http://contacts.msn.com/abservice/abservice.asmx"
++url = "http://byrdr.omega.contacts.msn.com/abservice/abservice.asmx"
+ 
+ from constants import *
+ 
+diff --git a/papyon/service/description/Sharing/__init__.py b/papyon/service/description/Sharing/__init__.py
+index 20423c9..10dde65 100644
+--- a/papyon/service/description/Sharing/__init__.py
++++ b/papyon/service/description/Sharing/__init__.py
+@@ -20,7 +20,7 @@
+ name = "Sharing"
+ description = "Membership address book service"
+ 
+-url = "http://contacts.msn.com/abservice/SharingService.asmx"
++url = "http://byrdr.omega.contacts.msn.com/abservice/SharingService.asmx"
+ 
+ import FindMembership
+ import AddMember
+-- 
+1.7.7
+
diff --git a/papyon.spec b/papyon.spec
index 3d4bbc5..6656565 100644
--- a/papyon.spec
+++ b/papyon.spec
@@ -2,13 +2,14 @@
 
 Name:           papyon
 Version:        0.5.5
-Release:        1%{?dist}
+Release:        2%{?dist}
 Summary:        Python libraries for MSN Messenger network
 
 Group:          Development/Languages
 License:        GPLv2+
 URL:            http://telepathy.freedesktop.org/wiki/Papyon
 Source0:        http://telepathy.freedesktop.org/releases/%{name}/%{name}-%{version}.tar.gz
+Patch0:		0001-bugfix-use-the-right-server-for-AB-and-Sharing-servi.patch
 
 BuildArch:      noarch
 
@@ -38,6 +39,7 @@ asynchronous manner
 %prep
 %setup -q
 %{__sed} -i 's|\#!/usr/bin/env python||' papyon/msnp2p/test.py
+%patch0 -p1 -b .servers
 
 
 %build
@@ -58,6 +60,9 @@ rm -rf $RPM_BUILD_ROOT
 
 
 %changelog
+* Wed Nov  9 2011 Brian Pepple <bpepple at fedoraproject.org> - 0.5.5-2
+- Add patch to use correct server. (#750884)
+
 * Tue Apr 19 2011 Brian Pepple <bpepple at fedoraproject.org> - 0.5.5-1
 - Update to 0.5.5.
 


More information about the scm-commits mailing list