[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