Welcome to mirror list, hosted at ThFree Co, Russian Federation.

dev.gajim.org/gajim/gajim-plugins.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJefry Lagrange <jefry.reyes@gmail.com>2013-07-28 19:13:17 +0400
committerJefry Lagrange <jefry.reyes@gmail.com>2013-07-28 19:13:17 +0400
commitc66cb3700c9684292c761f60abdbbacc2c07c43d (patch)
treee6d309b7e2dd10adde74f06ed9fe6d7ca7b934ea
parent82c868595b67ec30b5fd22dc9bc6c3161915597c (diff)
file sharing. Fix request; Include unit testing.
-rw-r--r--file_sharing/fshare_protocol.py138
-rw-r--r--file_sharing/manifest.ini2
-rw-r--r--file_sharing/tests/TestProtocol.py32
3 files changed, 111 insertions, 61 deletions
diff --git a/file_sharing/fshare_protocol.py b/file_sharing/fshare_protocol.py
index 3247b46..38a8390 100644
--- a/file_sharing/fshare_protocol.py
+++ b/file_sharing/fshare_protocol.py
@@ -1,12 +1,71 @@
-from common import xmpp
-from common import helpers
-from common import gajim
-from common import XMPPDispatcher
-from common.xmpp import Hashes
+import nbxmpp
+from nbxmpp import Hashes
+
+try:
+ from common import helpers
+ from common import gajim
+except ImportError:
+ print "Import Error: Ignore if we are testing"
+
# Namespace for file sharing
NS_FILE_SHARING = 'http://gajim.org/protocol/filesharing'
class Protocol():
+ '''
+ Creates and extracts information from stanzas
+ '''
+
+
+ def __init__(self, ourjid):
+ # set our jid with resource
+ self.ourjid = ourjid
+
+ def request(self, contact, stanzaID, path=None):
+ iq = nbxmpp.Iq(typ='get', to=contact, frm=self.ourjid)
+ iq.setID(stanzaID)
+ query = iq.setQuery()
+ query.setNamespace(NS_FILE_SHARING)
+ query.setAttr('node', path)
+ return iq
+
+ def buildReply(self, typ, stanza):
+ iq = nbxmpp.Iq(typ, to=stanza.getFrom(), frm=stanza.getTo(),
+ attrs={'id': stanza.getID()})
+ iq.addChild(name='match', namespace=NS_FILE_SHARING)
+ return iq
+
+
+ def offer(self, id_, contact, items):
+ iq = nbxmpp.Iq(typ='result', to=contact, frm=self.ourjid,
+ attrs={'id': id_})
+ match = iq.addChild(name='match', namespace=NS_FILE_SHARING)
+ offer = match.addChild(name='offer')
+ if len(items) == 0:
+ offer.addChild(name='directory')
+ else:
+ for i in items:
+ # if it is a directory
+ if i[5] == True:
+ item = offer.addChild(name='directory')
+ name = item.addChild('name')
+ name.setData('/' + i[0])
+ else:
+ item = offer.addChild(name='file')
+ item.addChild('name').setData('/' + i[0])
+ if i[1] != '':
+ h = Hashes()
+ h.addHash(i[1], 'sha-1')
+ item.addChild(node=h)
+ item.addChild('size').setData(i[2])
+ item.addChild('desc').setData(i[3])
+ item.addChild('date').setData(i[4])
+ return iq
+
+class ProtocolDispatcher():
+ '''
+ Sends and receives stanzas
+ '''
+
def __init__(self, account, plugin):
self.account = account
@@ -16,27 +75,24 @@ class Protocol():
self.ourjid = gajim.get_jid_from_account(self.account)
self.fsw = None
+
+ def set_window(self, fsw):
+ self.fsw = fsw
+
+
def set_window(self, window):
self.fsw = window
- def request(self, contact, name=None, isFile=False):
- iq = xmpp.Iq(typ='get', to=contact, frm=self.ourjid)
- match = iq.addChild(name='match', namespace=NS_FILE_SHARING)
- request = match.addChild(name='request')
- if not isFile and name is None:
- request.addChild(name='directory')
- elif not isFile and name is not None:
- dir_ = request.addChild(name='directory')
- dir_.addChild(name='name').addData('/' + name)
- elif isFile:
- pass
- return iq
- def __buildReply(self, typ, stanza):
- iq = xmpp.Iq(typ, to=stanza.getFrom(), frm=stanza.getTo(),
- attrs={'id': stanza.getID()})
- iq.addChild(name='match', namespace=NS_FILE_SHARING)
- return iq
+ def handler(self, stanza):
+ # handles incoming match stanza
+ if stanza.getTag('match').getTag('offer'):
+ self.on_offer(stanza)
+ elif stanza.getTag('match').getTag('request'):
+ self.on_request(stanza)
+ else:
+ # TODO: reply with malformed stanza error
+ pass
def on_request(self, stanza):
try:
@@ -98,44 +154,6 @@ class Protocol():
row = self.fsw.ts_search.append(parent, ('',))
self.fsw.empty_row_child[dir_] = row
- def handler(self, stanza):
- # handles incoming match stanza
- if stanza.getTag('match').getTag('offer'):
- self.on_offer(stanza)
- elif stanza.getTag('match').getTag('request'):
- self.on_request(stanza)
- else:
- # TODO: reply with malformed stanza error
- pass
-
- def offer(self, id_, contact, items):
- iq = xmpp.Iq(typ='result', to=contact, frm=self.ourjid,
- attrs={'id': id_})
- match = iq.addChild(name='match', namespace=NS_FILE_SHARING)
- offer = match.addChild(name='offer')
- if len(items) == 0:
- offer.addChild(name='directory')
- else:
- for i in items:
- # if it is a directory
- if i[5] == True:
- item = offer.addChild(name='directory')
- name = item.addChild('name')
- name.setData('/' + i[0])
- else:
- item = offer.addChild(name='file')
- item.addChild('name').setData('/' + i[0])
- if i[1] != '':
- h = Hashes()
- h.addHash(i[1], 'sha-1')
- item.addChild(node=h)
- item.addChild('size').setData(i[2])
- item.addChild('desc').setData(i[3])
- item.addChild('date').setData(i[4])
- return iq
-
- def set_window(self, fsw):
- self.fsw = fsw
def get_files_info(stanza):
diff --git a/file_sharing/manifest.ini b/file_sharing/manifest.ini
index 226c920..ebc9a2d 100644
--- a/file_sharing/manifest.ini
+++ b/file_sharing/manifest.ini
@@ -4,6 +4,6 @@ short_name: fshare
#version: 0.1.1
description: This plugin allows you to share folders with your peers using jingle file transfer.
authors: Jefry Lagrange <jefry.reyes@gmail.com>
-homepage: www.google.com
+homepage: www.gajim.org
max_gajim_version: 0.16.9
diff --git a/file_sharing/tests/TestProtocol.py b/file_sharing/tests/TestProtocol.py
new file mode 100644
index 0000000..ab6b1ed
--- /dev/null
+++ b/file_sharing/tests/TestProtocol.py
@@ -0,0 +1,32 @@
+#/usr/bin/python
+
+
+import unittest
+
+import sys, os
+sys.path.append(os.path.abspath(sys.path[0]) + '/../')
+
+import fshare_protocol
+
+class TestProtocol(unittest.TestCase):
+
+ def setUp(self):
+ self.protocol = fshare_protocol.Protocol('test@gajim.org/test')
+
+ def test_request(self):
+ iq = self.protocol.request('peer@gajim.org/test', '1234', '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')
+
+ def test_offer(self):
+ pass
+
+ def test_reply(self):
+ pass
+
+
+if __name__ == '__main__':
+ unittest.main()