[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    KDE/kdelibs/dnssd
From:       Jakub Stachowski <qbast () go2 ! pl>
Date:       2008-11-03 14:28:30
Message-ID: 1225722510.528416.15714.nullmailer () svn ! kde ! org
[Download RAW message or body]

SVN commit 879596 by qbast:

Fixed service name collision handling for avahi



 M  +16 -3     avahi-publicservice.cpp  


--- trunk/KDE/kdelibs/dnssd/avahi-publicservice.cpp #879595:879596
@@ -169,8 +169,22 @@
     for (QMap<QString,QByteArray>::ConstIterator it = m_textData.constBegin(); \
it!=itEnd ; ++it)   if (it.value().isNull()) txt.append(it.key().toAscii());
 	else txt.append(it.key().toAscii()+'='+it.value());
-    m_group->AddService(-1,-1, 0, m_serviceName, m_type , domainToDNS(m_domain) ,
-	m_hostName, m_port,txt);
+	
+	
+    for (;;) {
+        QDBusReply<void> ret = m_group->AddService(-1,-1, 0, m_serviceName, m_type , \
domainToDNS(m_domain) , +    	m_hostName, m_port,txt);
+        if (ret.isValid()) break;
+        
+        // serious error, bail out
+        if (ret.error().name()!=QLatin1String("org.freedesktop.Avahi.CollisionError")) \
return false; +        
+        // name collision, try another
+        QDBusReply<QString> rep=m_server->GetAlternativeServiceName(m_serviceName);
+        if (rep.isValid()) m_serviceName = rep.value();
+        else return false;
+    }
+    
     Q_FOREACH(const QString &subtype, m_subtypes) 
 	m_group->AddServiceSubtype(-1,-1, 0, m_serviceName, m_type, domainToDNS(m_domain) , \
subtype);  return true;
@@ -211,7 +225,6 @@
 	QDBusReply<int> rep=d->m_server->GetState();
 	
 	if (rep.isValid()) state=rep.value();
-
 	d->m_running=true; 
 	d->m_collision=true; // make it look like server is getting out of collision to \
force registering  d->serverStateChanged(state, QString());


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic