changeset b024c3868083 in /home/hg/repos/gajim-plugins
author: Jefry Lagrange <jefry.reyes(a)gmail.com>
branches:
details:gajim-plugins?cmd=changeset;node=b024c3868083
description: sends request, replies with offer
diffstat:
file_sharing/fshare.py | 11 ++++++-----
file_sharing/fshare_protocol.py | 35 +++++------------------------------
file_sharing/tests/TestProtocol.py | 16 +++++-----------
3 files changed, 16 insertions(+), 46 deletions(-)
diffs (175 lines):
diff -r 4a3d1e985d27 -r b024c3868083 file_sharing/fshare.py
--- a/file_sharing/fshare.py Sat Aug 31 20:52:19 2013 -0400
+++ b/file_sharing/fshare.py Sun Sep 01 22:33:43 2013 -0400
@@ -14,7 +14,7 @@
import fshare_protocol
from common import ged
from common import caps_cache
-from common import xmpp
+from common import nbxmpp
from plugins.gui import GajimPluginConfigDialog
@@ -34,7 +34,7 @@
accounts = gajim.contacts.get_accounts()
for account in gajim.contacts.get_accounts():
FileSharePlugin.prohandler[account] = \
- fshare_protocol.Protocol(account, self)
+ fshare_protocol.ProtocolDispatcher(account, self)
self.events_handlers = {
'raw-iq-received': (ged.CORE, self._nec_raw_iq)
}
@@ -79,12 +79,13 @@
gajim.connections[a].status)
def _nec_raw_iq(self, obj):
- if obj.stanza.getTag('match',
+ if obj.stanza.getTag('query',
namespace=fshare_protocol.NS_FILE_SHARING) and self.activated:
account = obj.conn.name
pro = FileSharePlugin.prohandler[account]
- pro.handler(obj.stanza)
- raise xmpp.NodeProcessed
+ peerjid = obj.stanza.getFrom()
+ pro.handler(obj.stanza, str(peerjid))
+ raise nbxmpp.NodeProcessed
def __get_contact_menu(self, contact, account):
raise NotImplementedError
diff -r 4a3d1e985d27 -r b024c3868083 file_sharing/fshare_protocol.py
--- a/file_sharing/fshare_protocol.py Sat Aug 31 20:52:19 2013 -0400
+++ b/file_sharing/fshare_protocol.py Sun Sep 01 22:33:43 2013 -0400
@@ -8,7 +8,7 @@
print "Import Error: Ignore if we are testing"
# Namespace for file sharing
-NS_FILE_SHARING = 'urn:xmpp:fis'
+NS_FILE_SHARING = 'urn:xmpp:fis:0'
class Protocol():
@@ -42,9 +42,8 @@
formatted.append(r)
return formatted
- def request(self, contact, stanzaID, path=None):
+ def request(self, contact, path=None):
iq = nbxmpp.Iq(typ='get', to=contact, frm=self.ourjid)
- iq.setID(stanzaID)
query = iq.setQuery()
query.setNamespace(NS_FILE_SHARING)
if path:
@@ -108,17 +107,17 @@
def handler(self, stanza, fjid):
- # handles incoming match stanza
+ # handles incoming stanza
# TODO: Stanza checking
if stanza.getType() == 'get':
- self.on_request(stanza, fjid)
+ offer = self.on_request(stanza, fjid)
+ self.conn.connection.send(offer)
elif stanza.getType() == 'result':
return self.on_offer(stanza, fjid)
else:
# TODO: reply with malformed stanza error
pass
-
def on_toplevel_request(self, stanza, jid):
roots = self.plugin.database.get_toplevel_dirs(self.account, jid)
items = []
@@ -179,30 +178,6 @@
return offered
-
def get_jid_without_resource(jid):
return jid.split('/')[0]
-def get_files_info(stanza):
- # Crawls the stanza in search for file and dir structure.
- files = []
- dirs = []
- children = stanza.getTag('match').getTag('offer').getChildren()
- for c in children:
- if c.getName() == 'file':
- f = {'name' : \
- c.getTag('name').getData()[1:] if c.getTag('name') else '',
- 'size' : c.getTag('size').getData() if c.getTag('size') else '',
- 'date' : c.getTag('date').getData() if c.getTag('date') else '',
- 'desc' : c.getTag('desc').getData() if c.getTag('desc') else '',
- # TODO: handle different hash algo
- 'hash' : c.getTag('hash').getData() if c.getTag('hash') else '',
- }
- files.append(f)
- else:
- dirname = c.getTag('name')
- if dirname is None:
- return None
- dirs.append(dirname.getData()[1:])
- return (files, dirs)
-
diff -r 4a3d1e985d27 -r b024c3868083 file_sharing/tests/TestProtocol.py
--- a/file_sharing/tests/TestProtocol.py Sat Aug 31 20:52:19 2013 -0400
+++ b/file_sharing/tests/TestProtocol.py Sun Sep 01 22:33:43 2013 -0400
@@ -15,9 +15,8 @@
self.protocol = fshare_protocol.Protocol('test(a)gajim.org/test')
def test_request(self):
- iq = self.protocol.request('peer(a)gajim.org/test', '1234', 'documents/test2.txt')
+ iq = self.protocol.request('peer(a)gajim.org/test', 'documents/test2.txt')
self.assertEqual(iq.getType(), 'get')
- self.assertNotEqual(iq.getID(), None)
self.assertEqual(iq.getQuery().getName(), 'query')
self.assertEqual(iq.getQuery().getNamespace(), fshare_protocol.NS_FILE_SHARING)
self.assertEqual(iq.getQuery().getAttr('node'), 'documents/test2.txt')
@@ -96,7 +95,7 @@
self.account, plugin)
def test_handler(self):
- iq = self.protocol.request('peer(a)gajim.org/test', '1234',
+ iq = self.protocol.request('peer(a)gajim.org/test',
'documents/test2.txt')
#offer = self.dispatcher.on_offer
request = self.dispatcher.on_request
@@ -121,12 +120,10 @@
self.assertEqual(len(offered_files), 2)
def test_on_dir_request(self):
- iq = self.protocol.request('peer(a)gajim.org/test', '1234',
- 'documents')
+ iq = self.protocol.request('peer(a)gajim.org/test', 'documents')
response = self.dispatcher.on_dir_request(iq, 'peer(a)gajim.org/test',
'peer(a)gajim.org', 'documents')
self.assertEqual(response.getType(), 'result')
- self.assertNotEqual(response.getID(), None)
self.assertEqual(response.getQuery().getName(), 'query')
self.assertEqual(response.getQuery().getNamespace(), fshare_protocol.NS_FILE_SHARING)
self.assertEqual(response.getQuery().getAttr('node'), 'documents')
@@ -134,11 +131,9 @@
self.assertEqual(len(node.getChildren()), 2)
def test_on_request(self):
- iq = self.protocol.request('peer(a)gajim.org/test', '1234',
- 'documents/file1.txt')
+ iq = self.protocol.request('peer(a)gajim.org/test','documents/file1.txt')
response = self.dispatcher.on_request(iq, 'peer(a)gajim.org/test')
self.assertEqual(response.getType(), 'result')
- self.assertNotEqual(response.getID(), None)
self.assertEqual(response.getQuery().getName(), 'query')
self.assertEqual(response.getQuery().getNamespace(), fshare_protocol.NS_FILE_SHARING)
self.assertEqual(response.getQuery().getAttr('node'), 'documents/file1.txt')
@@ -146,10 +141,9 @@
self.assertEqual(len(node.getChildren()), 1)
def test_on_toplevel_request(self):
- iq = self.protocol.request('peer(a)gajim.org/test', '1234')
+ iq = self.protocol.request('peer(a)gajim.org/test')
response = self.dispatcher.on_toplevel_request(iq, 'peer(a)gajim.org')
self.assertEqual(response.getType(), 'result')
- self.assertNotEqual(response.getID(), None)
self.assertEqual(response.getQuery().getName(), 'query')
self.assertEqual(response.getQuery().getNamespace(), fshare_protocol.NS_FILE_SHARING)
node = response.getQuery()