dnssd Library API Documentation

servicebase.cpp

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., 59 Temple Place - Suite 330, 00018 * Boston, MA 02111-1307, 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 }
KDE Logo
This file is part of the documentation for dnssd Library Version 3.4.0.
Documentation copyright © 1996-2004 the KDE developers.
Generated on Tue Apr 12 23:21:56 2005 by doxygen 1.3.7 written by Dimitri van Heesch, © 1997-2003