summaryrefslogtreecommitdiffstats
path: root/krfb/srvloc/kserviceregistry.h
diff options
context:
space:
mode:
Diffstat (limited to 'krfb/srvloc/kserviceregistry.h')
-rw-r--r--krfb/srvloc/kserviceregistry.h161
1 files changed, 161 insertions, 0 deletions
diff --git a/krfb/srvloc/kserviceregistry.h b/krfb/srvloc/kserviceregistry.h
new file mode 100644
index 00000000..f017b129
--- /dev/null
+++ b/krfb/srvloc/kserviceregistry.h
@@ -0,0 +1,161 @@
+/*
+ * Interface to register SLP services.
+ * Copyright (C) 2002 Tim Jansen <tim@tjansen.de>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 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
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public License
+ * along with this library; see the file COPYING.LIB. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+/*
+ * TODO: put private variables and SLP-dependencies in private class
+ */
+
+#ifndef __KSERVICEREGISTRY_H
+#define __KSERVICEREGISTRY_H
+
+#include <qstring.h>
+#include <qstringlist.h>
+#include <qmap.h>
+
+class KServiceRegistryPrivate;
+
+/**
+ * KServiceRegistry allows you to announce your service using SLP (RFC 2608).
+ *
+ * Use KServiceRegistry to announce a service. The service will be valid
+ * until its lifespan ends, you unregister it or delete the KServiceRegistry,
+ * whatever comes first.
+ * A service will be described using a Service URL and an optional list of
+ * attributes. The syntax for a simple Service URL is
+ * <pre>
+ * service:%srvtype%://%addrspec%
+ * </pre>
+ * where "%srvtype%" specifies the protocol and "%addrspec5" the address.
+ * Examples of valid Service URLs are "service:http://www.kde.org",
+ * "service:lpr://printer.example.org/myqueure" and
+ * "service:http://your.server.org:8080".
+ * To provide more information about your service than just the protocol,
+ * port and address you can use abstract service types.
+ * A Service URL that uses an abstract service type has the form
+ * <pre>
+ * service:%abstract-type%:%concrete-type%
+ * </pre>
+ * where %abstract-type% describes the kind of service and %concrete-type% specifies
+ * the protocol and address. Examples are
+ * "service:printer:lpr://printer.example.com/lp0" and
+ * "service:printer:ipp://printer.example.com/".
+ * Note that you cannot invent you own types but only take those that are
+ * registered at IANA. To create your own service type you must become a naming
+ * authority. Then you can use service types of the form
+ * "%srvtype%.%naming-authority%". Assuming that "kde" is the id of a
+ * IANA-registered naming authority, a valid Service URL would be
+ * "service:weatherp.kde://weather.example.com". You can find more information
+ * about Service URLs in the IETF RFCs 2608 and 3224.
+ * Additionally each service can have one or more attributes to carry
+ * additional information about the service. Attributes are a simple pair of
+ * strings, one for the attributes name and one for the value. They can be
+ * used, for example, to describe the type of a printer or the email address
+ * of an administrator.
+ *
+ * Service templates can be used to describe an abstract type, including the
+ * syntax of the concrete type and the attributes. The use of service
+ * templates is described in RFC 2609, you can find the existing service
+ * templates at http://www.iana.org/assignments/svrloc-templates.htm .
+ *
+ * Example:
+ * <pre>
+ * KServiceRegistry ksr;
+ * KInetAddress kia = KInetAddress->getLocalAddress();
+ * ksr.registerService(QString("service:remotedesktop.kde:vnc://%1:0").arg(kia->nodeName()),
+ * "(type=shared)");
+ * delete kia;
+ * </pre>
+ *
+ * @version $Id$
+ * @author Tim Jansen, tim@tjansen.de
+ */
+class KServiceRegistry {
+ public:
+ /**
+ * Creates a new service registration instance for the given
+ * language.
+ * @param lang the language as two letter code, or QString::null for the
+ * system default
+ */
+ KServiceRegistry(const QString &lang = QString::null);
+ virtual ~KServiceRegistry();
+
+ /**
+ * Returns true if service registration is generally possible.
+ * Reasons for a failure could be that the SLP libraries are not
+ * installed or no SA daemon (slpd) is installed
+ * @return true if service registration seems to be possible
+ */
+ bool available();
+
+ /**
+ * Creates a comma-separated string of lists, as required by many functions.
+ * @param map the items of this list will be converted
+ * @return the comma-separated list
+ */
+ static QString createCommaList(const QStringList &values);
+
+ /**
+ * Encodes an QString for use as a attribute value. This will escape
+ * all characters that are not allowed. This method is only available
+ * when a SLP library is available, otherwise it will return the
+ * given value.
+ * @param value the value string to encode
+ * @return the encoded value string
+ */
+ static QString encodeAttributeValue(const QString &value);
+
+ /**
+ * Registers the given service.
+ * @param serviceURL the service URL to register
+ * @param attributes a list of the attributes to register, encoded in
+ * the format "(attr1=val1),(attr2=val2),(attr3=val3)"
+ * Use an empty string if you dont want to set attributes
+ * @param lifetime the lifetime of the service in seconds, or 0 for infinite
+ * @return true if successful, false otherwise. False usually means that no
+ * SA daemon (slpd) is running.
+ */
+ bool registerService(const QString &serviceURL,
+ QString attributes = QString::null,
+ unsigned short lifetime = 0);
+
+ /**
+ * Registers the given service.
+ * @param serviceURL the service URL to register
+ * @param attributes a map of all attributes
+ * @param lifetime the lifetime of the service in seconds, or 0 for infinite
+ * @return true if successful, false otherwise. False usually means that no
+ * SA daemon is running (slpd).
+ */
+ bool registerService(const QString &serviceURL,
+ QMap<QString,QString> attributes,
+ unsigned short lifetime = 0);
+
+ /**
+ * Unregisters the given service.
+ * @param serviceURL the service URL to unregister
+ */
+ void unregisterService(const QString &serviceURL);
+
+ private:
+ KServiceRegistryPrivate *d;
+};
+
+#endif