summaryrefslogtreecommitdiff
path: root/sleekxmpp/plugins/xep_0332/http.py
diff options
context:
space:
mode:
Diffstat (limited to 'sleekxmpp/plugins/xep_0332/http.py')
-rw-r--r--sleekxmpp/plugins/xep_0332/http.py159
1 files changed, 0 insertions, 159 deletions
diff --git a/sleekxmpp/plugins/xep_0332/http.py b/sleekxmpp/plugins/xep_0332/http.py
deleted file mode 100644
index 70bcafa6..00000000
--- a/sleekxmpp/plugins/xep_0332/http.py
+++ /dev/null
@@ -1,159 +0,0 @@
-"""
- SleekXMPP: The Sleek XMPP Library
- Implementation of HTTP over XMPP transport
- http://xmpp.org/extensions/xep-0332.html
- Copyright (C) 2015 Riptide IO, sangeeth@riptideio.com
- This file is part of SleekXMPP.
-
- See the file LICENSE for copying permission.
-"""
-
-import logging
-
-from sleekxmpp import Iq
-
-from sleekxmpp.xmlstream import register_stanza_plugin
-from sleekxmpp.xmlstream.handler import Callback
-from sleekxmpp.xmlstream.matcher import StanzaPath
-
-from sleekxmpp.plugins.base import BasePlugin
-from sleekxmpp.plugins.xep_0332.stanza import (
- HTTPRequest, HTTPResponse, HTTPData
-)
-from sleekxmpp.plugins.xep_0131.stanza import Headers
-
-
-log = logging.getLogger(__name__)
-
-
-class XEP_0332(BasePlugin):
- """
- XEP-0332: HTTP over XMPP transport
- """
-
- name = 'xep_0332'
- description = 'XEP-0332: HTTP over XMPP transport'
-
- #: xep_0047 not included.
- #: xep_0001, 0137 and 0166 are missing
- dependencies = set(['xep_0030', 'xep_0131'])
-
- #: TODO: Do we really need to mention the supported_headers?!
- default_config = {
- 'supported_headers': set([
- 'Content-Length', 'Transfer-Encoding', 'DateTime',
- 'Accept-Charset', 'Location', 'Content-ID', 'Description',
- 'Content-Language', 'Content-Transfer-Encoding', 'Timestamp',
- 'Expires', 'User-Agent', 'Host', 'Proxy-Authorization', 'Date',
- 'WWW-Authenticate', 'Accept-Encoding', 'Server', 'Error-Info',
- 'Identifier', 'Content-Location', 'Content-Encoding', 'Distribute',
- 'Accept', 'Proxy-Authenticate', 'ETag', 'Expect', 'Content-Type'
- ])
- }
-
- def plugin_init(self):
- self.xmpp.register_handler(
- Callback(
- 'HTTP Request',
- StanzaPath('iq/http-req'),
- self._handle_request
- )
- )
- self.xmpp.register_handler(
- Callback(
- 'HTTP Response',
- StanzaPath('iq/http-resp'),
- self._handle_response
- )
- )
- register_stanza_plugin(Iq, HTTPRequest, iterable=True)
- register_stanza_plugin(Iq, HTTPResponse, iterable=True)
- register_stanza_plugin(HTTPRequest, Headers, iterable=True)
- register_stanza_plugin(HTTPRequest, HTTPData, iterable=True)
- register_stanza_plugin(HTTPResponse, Headers, iterable=True)
- register_stanza_plugin(HTTPResponse, HTTPData, iterable=True)
- # TODO: Should we register any api's here? self.api.register()
-
- def plugin_end(self):
- self.xmpp.remove_handler('HTTP Request')
- self.xmpp.remove_handler('HTTP Response')
- self.xmpp['xep_0030'].del_feature('urn:xmpp:http')
- for header in self.supported_headers:
- self.xmpp['xep_0030'].del_feature(
- feature='%s#%s' % (Headers.namespace, header)
- )
-
- def session_bind(self, jid):
- self.xmpp['xep_0030'].add_feature('urn:xmpp:http')
- for header in self.supported_headers:
- self.xmpp['xep_0030'].add_feature(
- '%s#%s' % (Headers.namespace, header)
- )
- # TODO: Do we need to add the supported headers to xep_0131?
- # self.xmpp['xep_0131'].supported_headers.add(header)
-
- def _handle_request(self, iq):
- self.xmpp.event('http_request', iq)
-
- def _handle_response(self, iq):
- self.xmpp.event('http_response', iq)
-
- def send_request(self, to=None, method=None, resource=None, headers=None,
- data=None, **kwargs):
- iq = self.xmpp.Iq()
- iq['from'] = self.xmpp.boundjid
- iq['to'] = to
- iq['type'] = 'set'
- iq['http-req']['headers'] = headers
- iq['http-req']['method'] = method
- iq['http-req']['resource'] = resource
- iq['http-req']['version'] = '1.1' # TODO: set this implicitly
- if 'id' in kwargs:
- iq['id'] = kwargs["id"]
- if data is not None:
- iq['http-req']['data'] = data
- return iq.send(
- timeout=kwargs.get('timeout', None),
- block=kwargs.get('block', True),
- callback=kwargs.get('callback', None),
- timeout_callback=kwargs.get('timeout_callback', None)
- )
-
- def send_response(self, to=None, code=None, message=None, headers=None,
- data=None, **kwargs):
- iq = self.xmpp.Iq()
- iq['from'] = self.xmpp.boundjid
- iq['to'] = to
- iq['type'] = 'result'
- iq['http-resp']['headers'] = headers
- iq['http-resp']['code'] = code
- iq['http-resp']['message'] = message
- iq['http-resp']['version'] = '1.1' # TODO: set this implicitly
- if 'id' in kwargs:
- iq['id'] = kwargs["id"]
- if data is not None:
- iq['http-resp']['data'] = data
- return iq.send(
- timeout=kwargs.get('timeout', None),
- block=kwargs.get('block', True),
- callback=kwargs.get('callback', None),
- timeout_callback=kwargs.get('timeout_callback', None)
- )
-
- def send_error(self, to=None, ecode='500', etype='wait',
- econd='internal-server-error', **kwargs):
- iq = self.xmpp.Iq()
- iq['from'] = self.xmpp.boundjid
- iq['to'] = to
- iq['type'] = 'error'
- iq['error']['code'] = ecode
- iq['error']['type'] = etype
- iq['error']['condition'] = econd
- if 'id' in kwargs:
- iq['id'] = kwargs["id"]
- return iq.send(
- timeout=kwargs.get('timeout', None),
- block=kwargs.get('block', True),
- callback=kwargs.get('callback', None),
- timeout_callback=kwargs.get('timeout_callback', None)
- )