[telepathy-python/master] Fixing TargetID handle search

Thiago Borges Abdnur bolaum at gmail.com
Sat Aug 1 11:45:06 PDT 2009


It seems that there was a semantic error regarding TargetID. This patch
changes _alter_properties() to search for TargetID in each handle, that
would be the value returned by get_name(), which is different from
handle's id. The mistake was considering TargetID == handle.get_id()
in this function.
Another change was in EnsureChannel(). It was testing if the channel
existed before fixing the request.
There was a bug in _check_basic_properties(): line 436 was enforcing the
existance of a key that is allowed to be missing.

Signed-off-by: Thiago Borges Abdnur <bolaum at gmail.com>
Signed-off-by: Jonny Lamb <jonny.lamb at collabora.co.uk>
---
 src/server/conn.py |   14 +++++++++-----
 1 files changed, 9 insertions(+), 5 deletions(-)

diff --git a/src/server/conn.py b/src/server/conn.py
index e196764..b300d66 100644
--- a/src/server/conn.py
+++ b/src/server/conn.py
@@ -433,7 +433,7 @@ class ConnectionInterfaceRequests(
         type = props[CHANNEL_INTERFACE + '.ChannelType']
         handle_type = props.get(CHANNEL_INTERFACE + '.TargetHandleType',
                 HANDLE_TYPE_NONE)
-        handle = props[CHANNEL_INTERFACE + '.TargetHandle']
+        handle = props.get(CHANNEL_INTERFACE + '.TargetHandle', 0)
 
         return (type, handle_type, handle)
 
@@ -476,8 +476,12 @@ class ConnectionInterfaceRequests(
         if target_handle_type != HANDLE_TYPE_NONE:
             if target_handle == None:
                 # Turn TargetID into TargetHandle.
-                self.check_handle(target_handle_type, target_id)
-                target_handle = self._handles[target_handle_type, target_id]
+                for handle in self._handles.itervalues():
+                    if handle.get_name() == target_id and handle.get_type() == target_handle_type:
+                        target_handle = handle.get_id()
+                if not target_handle:
+                    raise InvalidHandle('TargetID %s not valid for type %d' %
+                        target_id, target_handle_type)
 
                 altered_properties[CHANNEL_INTERFACE + '.TargetHandle'] = \
                     target_handle
@@ -522,12 +526,12 @@ class ConnectionInterfaceRequests(
         in_signature='a{sv}', out_signature='boa{sv}',
         async_callbacks=('_success', '_error'))
     def EnsureChannel(self, request, _success, _error):
-        yours = not self._channel_manager.channel_exists(request)
-
         type, handle_type, handle = self._check_basic_properties(request)
         self._validate_handle(request)
         props = self._alter_properties(request)
 
+        yours = not self._channel_manager.channel_exists(props)
+
         channel = self._channel_manager.channel_for_props(props, signal=False)
 
         _success(yours, channel._object_path, props)
-- 
1.5.6.5




More information about the telepathy-commits mailing list