On 3/14/06, Norman Rasmussen <[EMAIL PROTECTED]> wrote:
> I'm pretty sure that this error is 'left over' from the startup, so
> there's no real stack trace at all. I think a few sys.exc_clear()'s
> might be in order. I've found that python doesn't keep track of where
> the exception applies to so well. I've added the exc_clear's in
> main.py, and we'll see how it goes.
Here's the patch if you're interested:
Index: src/main.py
===================================================================
--- src/main.py (revision 137)
+++ src/main.py (working copy)
@@ -11,16 +11,20 @@
try:
from twisted.internet import epollreactor as bestreactor
except:
+ sys.exc_clear()
try:
from twisted.internet import kqreactor as bestreactor
except:
+ sys.exc_clear()
try:
from twisted.internet import pollreactor as bestreactor
except:
+ sys.exc_clear()
try:
from twisted.internet import
selectreactor as bestreactor
print selectWarning
except:
+ sys.exc_clear()
try:
from twisted.internet import
default as bestreactor
print selectWarning
--
- Norman Rasmussen
- Email: [EMAIL PROTECTED]
- Home page: http://norman.rasmussen.co.za/
From [EMAIL PROTECTED] Sun Apr 16 14:02:11 2006
From: [EMAIL PROTECTED] (James Bunton)
Date: Sun Apr 16 14:02:19 2006
Subject: [py-transports] PyMSNt: Fix avatars in Google Talk
In-Reply-To: <[EMAIL PROTECTED]>
References: <[EMAIL PROTECTED]>
Message-ID: <[EMAIL PROTECTED]>
On 11/04/2006, at 3:00 AM, Lars T. Mikkelsen wrote:
> As you might know, Google Talk recently got support for vCard-Based
> Avatars. Unfortunately, the avatars won't work with PyMSNt. I've
> attached two patches to fix the issue.
>
> gtalk-avatars-receiving.patch (receiving avatars from MSN users):
> While PyMSNt breaks the base64 encoded avatar data into lines of 76
> characters as recommended by JEP-0153, Section 4.6, Google Talk doesn't
> ignore the whitespace characters as required by the JEP - and thus the
> avatars in Google Talk will be all black. This is clearly a bug in
> Google Talk and I've reported it to Google. This patch is a simple
> workaround that encodes the avatar data without line breaks.
>
> gtalk-avatars-sending.patch (sending avatars to MSN users):
> Google Talk uses XML namespaces for vCard updates, that is:
> <presence>...<upd:x xmlns:upd='vcard-temp:x:update'>...</presence>
> To make PyMSNt correctly detect the namespace, it seems that the
> Element.uri attribute has to be used (and not Element.defaultUri) - I
> don't know the exact difference between uri and defaultUri, but perhaps
> defaultUri should just be replaced with uri throughout the entire
> source
> code. Furthermore, the Google Talk server won't allow retrieval of the
> vCard, unless the requesting entity has a resource (otherwise a
> resource-constraint error is returned). This patch fixes both issues.
>
> Finally, the Google Talk server seems to do some kind of rate limiting
> on vCard requests. Currently, PyMSNt will make a lot of requests for
> the
> same vCard. I don't have an exact solution for this, however, I'm
> thinking that it's sufficient to only process presence stanzas to the
> transport itself in jabw.JabberConnection.onPresence() - that is add a
> "if to.find('@') < 0" somewhere in this function. I think it's a
> general
> (and important) issue if PyMSNt makes more vCard requests than
> necessary, as this requires a lot of bandwith.
>
> Best regards,
> Lars
Thanks for the detailed information.
I've done the first patch slightly differently to maintain
compatibility with Python 2.3, no b64encode method :(
I also agree that changing defaultUri->uri is a good idea. I need to
clean up my use of domish.Element in a few places. That's for 0.12.
The transport only does vcard requests when it receives an avatar hash
that it hasn't cached yet. Have a look in Session.avatarHashReceived,
it already does check that it isn't a presence to a contact. Could
Google Talk be incorrectly calculating the hashes?
Could you please apply this patch, then run
$ tail -f debug.log|grep avatarHashReceived
Then muck around with Google Talk for a bit, and the results should
give us an idea whats going on.
Thanks!
---
James
Index: session.py
===================================================================
--- session.py (revision 139)
+++ session.py (working copy)
@@ -182,6 +182,7 @@
def avatarHashReceived(self, source, dest, avatarHash):
if dest.find('@') > 0: return # Ignore presence packets
sent to users
+ print "avatarHashReceived", source, dest, avatarHash
if avatarHash == " ": # Setting no avatar
self.legacycon.updateAvatar() # Default
@@ -191,6 +192,7 @@
self.avatar = av # Stuff in the cache
is always PNG
self.legacycon.updateAvatar(self.avatar)
else:
+ print "avatarHashReceived - retrieving
vCard"
self.doVCardUpdate()
def messageReceived(self, source, resource, dest, destr, mtype,
body, noerror):