summaryrefslogtreecommitdiff
path: root/extlib/Net/IDNA.php
diff options
context:
space:
mode:
authorBrion Vibber <brion@pobox.com>2010-04-02 15:56:25 -0700
committerBrion Vibber <brion@pobox.com>2010-04-02 15:56:25 -0700
commit2f4438fe24a99e5493469f734bf41547c8ad2ce5 (patch)
tree71bd93323bb6d39696ea6d13d961d4395be59ee4 /extlib/Net/IDNA.php
parent01a03e34c8d286011c0f4301e60c103d992a449a (diff)
parente4d934827bd7b2162e870611662549a5df759b57 (diff)
Merge branch '0.9.x' into 1.0.x
Conflicts: actions/imsettings.php lib/jabber.php Made a quick attempt to merge the new JID validation into the XmppPlugin, have not had a chance to test that version live yet. Should also move over the test cases.
Diffstat (limited to 'extlib/Net/IDNA.php')
-rw-r--r--extlib/Net/IDNA.php100
1 files changed, 100 insertions, 0 deletions
diff --git a/extlib/Net/IDNA.php b/extlib/Net/IDNA.php
new file mode 100644
index 000000000..987a37ef1
--- /dev/null
+++ b/extlib/Net/IDNA.php
@@ -0,0 +1,100 @@
+<?php
+
+// {{{ license
+
+/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4 foldmethod=marker: */
+//
+// +----------------------------------------------------------------------+
+// | This library is free software; you can redistribute it and/or modify |
+// | it under the terms of the GNU Lesser General Public License as |
+// | published by the Free Software Foundation; either version 2.1 of the |
+// | License, or (at your option) any later version. |
+// | |
+// | This library is distributed in the hope that it will be useful, but |
+// | WITHOUT ANY WARRANTY; without even the implied warranty of |
+// | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
+// | Lesser General Public License for more details. |
+// | |
+// | You should have received a copy of the GNU Lesser General Public |
+// | License along with this library; if not, write to the Free Software |
+// | Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 |
+// | USA. |
+// +----------------------------------------------------------------------+
+//
+
+// }}}
+
+
+/**
+ * Encode/decode Internationalized Domain Names.
+ * Factory class to get correct implementation either for php4 or php5.
+ *
+ * @author Markus Nix <mnix@docuverse.de>
+ * @author Matthias Sommerfeld <mso@phlylabs.de>
+ * @package Net
+ * @version $Id: IDNA.php 284681 2009-07-24 04:24:27Z clockwerx $
+ */
+
+class Net_IDNA
+{
+ // {{{ factory
+ /**
+ * Attempts to return a concrete IDNA instance for either php4 or php5.
+ *
+ * @param array $params Set of paramaters
+ * @return object IDNA The newly created concrete Log instance, or an
+ * false on an error.
+ * @access public
+ */
+ function getInstance($params = array())
+ {
+ $version = explode( '.', phpversion() );
+ $handler = ((int)$version[0] > 4) ? 'php5' : 'php4';
+ $class = 'Net_IDNA_' . $handler;
+ $classfile = 'Net/IDNA/' . $handler . '.php';
+
+ /*
+ * Attempt to include our version of the named class, but don't treat
+ * a failure as fatal. The caller may have already included their own
+ * version of the named class.
+ */
+ @include_once $classfile;
+
+ /* If the class exists, return a new instance of it. */
+ if (class_exists($class)) {
+ return new $class($params);
+ }
+
+ return false;
+ }
+ // }}}
+
+ // {{{ singleton
+ /**
+ * Attempts to return a concrete IDNA instance for either php4 or php5,
+ * only creating a new instance if no IDNA instance with the same
+ * parameters currently exists.
+ *
+ * @param array $params Set of paramaters
+ * @return object IDNA The newly created concrete Log instance, or an
+ * false on an error.
+ * @access public
+ */
+ function singleton($params = array())
+ {
+ static $instances;
+ if (!isset($instances)) {
+ $instances = array();
+ }
+
+ $signature = serialize($params);
+ if (!isset($instances[$signature])) {
+ $instances[$signature] = Net_IDNA::getInstance($params);
+ }
+
+ return $instances[$signature];
+ }
+ // }}}
+}
+
+?>