From c30c47d2918837cbdeb8702f50da03eed692169f Mon Sep 17 00:00:00 2001
From: Lance Stout <lancestout@gmail.com>
Date: Thu, 14 Feb 2013 10:37:38 -0800
Subject: Add XEP-0020 support.

---
 setup.py                                          |  1 +
 sleekxmpp/plugins/__init__.py                     |  1 +
 sleekxmpp/plugins/xep_0020/__init__.py            | 16 ++++++++++
 sleekxmpp/plugins/xep_0020/feature_negotiation.py | 36 +++++++++++++++++++++++
 sleekxmpp/plugins/xep_0020/stanza.py              | 17 +++++++++++
 5 files changed, 71 insertions(+)
 create mode 100644 sleekxmpp/plugins/xep_0020/__init__.py
 create mode 100644 sleekxmpp/plugins/xep_0020/feature_negotiation.py
 create mode 100644 sleekxmpp/plugins/xep_0020/stanza.py

diff --git a/setup.py b/setup.py
index a7d1cdb9..f48de173 100755
--- a/setup.py
+++ b/setup.py
@@ -62,6 +62,7 @@ packages     = [ 'sleekxmpp',
                  'sleekxmpp/plugins/xep_0012',
                  'sleekxmpp/plugins/xep_0013',
                  'sleekxmpp/plugins/xep_0016',
+                 'sleekxmpp/plugins/xep_0020',
                  'sleekxmpp/plugins/xep_0027',
                  'sleekxmpp/plugins/xep_0030',
                  'sleekxmpp/plugins/xep_0030/stanza',
diff --git a/sleekxmpp/plugins/__init__.py b/sleekxmpp/plugins/__init__.py
index 302a64be..e3e01a5e 100644
--- a/sleekxmpp/plugins/__init__.py
+++ b/sleekxmpp/plugins/__init__.py
@@ -17,6 +17,7 @@ __all__ = [
     'xep_0012',  # Last Activity
     'xep_0013',  # Flexible Offline Message Retrieval
     'xep_0016',  # Privacy Lists
+    'xep_0020',  # Feature Negotiation
     'xep_0027',  # Current Jabber OpenPGP Usage
     'xep_0030',  # Service Discovery
     'xep_0033',  # Extended Stanza Addresses
diff --git a/sleekxmpp/plugins/xep_0020/__init__.py b/sleekxmpp/plugins/xep_0020/__init__.py
new file mode 100644
index 00000000..c6aafe97
--- /dev/null
+++ b/sleekxmpp/plugins/xep_0020/__init__.py
@@ -0,0 +1,16 @@
+"""
+    SleekXMPP: The Sleek XMPP Library
+    Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout
+    This file is part of SleekXMPP.
+
+    See the file LICENSE for copying permission.
+"""
+
+from sleekxmpp.plugins.base import register_plugin
+
+from sleekxmpp.plugins.xep_0020 import stanza
+from sleekxmpp.plugins.xep_0020.stanza import FeatureNegotiation
+from sleekxmpp.plugins.xep_0020.feature_negotiation import XEP_0020
+
+
+register_plugin(XEP_0020)
diff --git a/sleekxmpp/plugins/xep_0020/feature_negotiation.py b/sleekxmpp/plugins/xep_0020/feature_negotiation.py
new file mode 100644
index 00000000..7cb82cd5
--- /dev/null
+++ b/sleekxmpp/plugins/xep_0020/feature_negotiation.py
@@ -0,0 +1,36 @@
+"""
+    SleekXMPP: The Sleek XMPP Library
+    Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout
+    This file is part of SleekXMPP.
+
+    See the file LICENSE for copying permission.
+"""
+
+import logging
+
+from sleekxmpp import Iq, Message
+from sleekxmpp.plugins import BasePlugin
+from sleekxmpp.xmlstream.handler import Callback
+from sleekxmpp.xmlstream.matcher import StanzaPath
+from sleekxmpp.xmlstream import register_stanza_plugin, JID
+from sleekxmpp.plugins.xep_0020 import stanza, FeatureNegotiation
+from sleekxmpp.plugins.xep_0004 import Form
+
+
+log = logging.getLogger(__name__)
+
+
+class XEP_0020(BasePlugin):
+
+    name = 'xep_0020'
+    description = 'XEP-0020: Feature Negotiation'
+    dependencies = set(['xep_0004', 'xep_0030'])
+    stanza = stanza
+
+    def plugin_init(self):
+        self.xmpp['xep_0030'].add_feature(FeatureNegotiation.namespace)
+
+        register_stanza_plugin(FeatureNegotiation, Form)
+
+        register_stanza_plugin(Iq, FeatureNegotiation)
+        register_stanza_plugin(Message, FeatureNegotiation)
diff --git a/sleekxmpp/plugins/xep_0020/stanza.py b/sleekxmpp/plugins/xep_0020/stanza.py
new file mode 100644
index 00000000..13e4056e
--- /dev/null
+++ b/sleekxmpp/plugins/xep_0020/stanza.py
@@ -0,0 +1,17 @@
+"""
+    SleekXMPP: The Sleek XMPP Library
+    Copyright (C) 2013 Nathanael C. Fritz, Lance J.T. Stout
+    This file is part of SleekXMPP.
+
+    See the file LICENSE for copying permission.
+"""
+
+from sleekxmpp.xmlstream import ElementBase
+
+
+class FeatureNegotiation(ElementBase):
+
+    name = 'feature'
+    namespace = 'http://jabber.org/protocol/feature-neg'
+    plugin_attrib = 'feature_neg'
+    interfaces = set()
-- 
cgit v1.2.3