• Skip to content
  • Skip to link menu
KDE 3.5 API Reference
  • KDE API Reference
  • API Reference
  • Sitemap
  • Contact Us
 

DNSSD

servicebase.cpp

Go to the documentation of this file.
00001 /* This file is part of the KDE project
00002  *
00003  * Copyright (C) 2004 Jakub Stachowski <qbast@go2.pl>
00004  *
00005  * This library is free software; you can redistribute it and/or
00006  * modify it under the terms of the GNU Library General Public
00007  * License as published by the Free Software Foundation; either
00008  * version 2 of the License, or (at your option) any later version.
00009  *
00010  * This library is distributed in the hope that it will be useful,
00011  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00012  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013  * Library General Public License for more details.
00014  *
00015  * You should have received a copy of the GNU Library General Public License
00016  * along with this library; see the file COPYING.LIB.  If not, write to
00017  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
00018  * Boston, MA 02110-1301, USA.
00019  */
00020 
00021 #include "servicebase.h"
00022 #include <qregexp.h>
00023 
00024 namespace DNSSD
00025 {
00026 
00027 ServiceBase::ServiceBase(const QString& name, const QString& type, const QString& domain,
00028              const QString& host, unsigned short port) : 
00029             m_serviceName(name), m_type(type), m_domain(domain), m_hostName(host), m_port(port)
00030 {}
00031 
00032 ServiceBase::~ServiceBase()
00033 {}
00034 
00035 QString ServiceBase::encode()
00036 {
00037     return  m_serviceName.replace("\\","\\\\").replace(".","\\.") + QString(".") + m_type +
00038              QString(".") + m_domain;
00039 }
00040 
00041 // example: 3rd\.\032Floor\032Copy\032Room._ipp._tcp.dns-sd.org.  - normal service
00042 // 3rd\.\032Floor\032Copy\032Room.dns-sd.org  - domain
00043 //  _ipp._tcp.dns-sd.org    - metaquery
00044 
00045 void ServiceBase::decode(const QString& name)
00046 {
00047     QString rest;
00048     if (name[0]=='_') {         // metaquery
00049         m_serviceName="";
00050         rest=name;
00051     } else {        // normal service or domain
00052         QString decoded_name=name;
00053         decoded_name=decoded_name.replace("\\\\","\\");
00054         int i = decoded_name.find(QRegExp("[^\\\\]\\."));
00055         if (i==-1) return;            // first find service name
00056         rest = decoded_name.mid(i+2);
00057         m_serviceName=decoded_name.left(i+1).replace("\\.",".");
00058     }
00059     m_type = rest.section('.',0,1);
00060     // does it really have a type?
00061     if (m_type[0]=='_' && m_type[m_type.find('.')+1]=='_')
00062         m_domain = rest.section('.',2,-1,QString::SectionIncludeTrailingSep);
00063     else {
00064         m_type="";
00065         m_domain=rest;
00066     }
00067 }
00068 
00069 const QString& ServiceBase::serviceName() const
00070 {
00071     return m_serviceName;
00072 }
00073 
00074 const QString& ServiceBase::type() const
00075 {
00076     return m_type;
00077 }
00078 
00079 const QString& ServiceBase::domain() const
00080 {
00081     return m_domain;
00082 }
00083 
00084 const QString& ServiceBase::hostName() const
00085 {
00086     return m_hostName;
00087 }
00088 
00089 unsigned short ServiceBase::port() const
00090 {
00091     return m_port;
00092 }
00093 const QMap<QString,QString>& ServiceBase::textData() const
00094 {
00095     return m_textData;
00096 }
00097 
00098 void ServiceBase::virtual_hook(int, void*)
00099 {}
00100 
00101 QDataStream & operator<< (QDataStream & s, const ServiceBase & a)
00102 {
00103     s << a.m_serviceName << a.m_type << a.m_domain << a.m_hostName << Q_INT16(a.m_port) << a.m_textData;
00104     return s;
00105 }
00106 
00107 QDataStream & operator>> (QDataStream & s, ServiceBase & a)
00108 {
00109     Q_INT16 port;
00110     s >> a.m_serviceName >> a.m_type >> a.m_domain >> a.m_hostName >> port >> a.m_textData;
00111     a.m_port = port;    
00112     return s;
00113 }
00114 
00115 }

DNSSD

Skip menu "DNSSD"
  • Main Page
  • Namespace List
  • Class Hierarchy
  • Alphabetical List
  • Class List
  • File List
  • Namespace Members
  • Class Members
  • Related Pages

API Reference

Skip menu "API Reference"
  • dcop
  • DNSSD
  • interfaces
  • Kate
  • kconf_update
  • KDECore
  • KDED
  • kdefx
  • KDEsu
  • kdeui
  • KDocTools
  • KHTML
  • KImgIO
  • KInit
  • kio
  • kioslave
  • KJS
  • KNewStuff
  • KParts
  • KUtils
Generated for API Reference by doxygen 1.5.9
This website is maintained by Adriaan de Groot and Allen Winter.
KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal