This repository has been archived on 2026-05-31. You can view files and clone it, but cannot push or open issues or pull requests.
powersync-app/libmea-core/discovery/avahi/qtavahiservice_p.cpp
2018-05-29 13:33:58 +02:00

82 lines
3.3 KiB
C++

/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* *
* Copyright (C) 2016 Simon Stürz <simon.stuerz@guh.io> *
* *
* This file is part of mea. *
* *
* 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, see *
* <http://www.gnu.org/licenses/>. *
* *
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
#include "qtavahiservice_p.h"
#include <QString>
#include <QHash>
#include <QStringList>
QtAvahiServicePrivate::QtAvahiServicePrivate() :
client(0),
group(0),
error(0)
{
}
void QtAvahiServicePrivate::callback(AvahiEntryGroup *group, AvahiEntryGroupState state, void *userdata)
{
Q_UNUSED(group);
QtAvahiService *service = static_cast<QtAvahiService *>(userdata);
if (!service)
return;
if (service->state() == (QtAvahiService::QtAvahiServiceState)state)
return;
switch (state) {
case AVAHI_ENTRY_GROUP_UNCOMMITED:
emit service->serviceStateChanged(QtAvahiService::QtAvahiServiceStateUncomitted);
break;
case AVAHI_ENTRY_GROUP_REGISTERING:
emit service->serviceStateChanged(QtAvahiService::QtAvahiServiceStateRegistering);
break;
case AVAHI_ENTRY_GROUP_ESTABLISHED:
emit service->serviceStateChanged(QtAvahiService::QtAvahiServiceStateEstablished);
break;
case AVAHI_ENTRY_GROUP_COLLISION:
emit service->serviceStateChanged(QtAvahiService::QtAvahiServiceStateCollision);
break;
case AVAHI_ENTRY_GROUP_FAILURE:
emit service->serviceStateChanged(QtAvahiService::QtAvahiServiceStateFailure);
break;
}
}
AvahiStringList *QtAvahiServicePrivate::createTxtList(const QHash<QString, QString> &txt)
{
AvahiStringList *list = NULL;
if (txt.isEmpty())
return list;
const QStringList keys = txt.keys();
list = avahi_string_list_new((keys.first() + '=' + txt[keys.first()]).toLatin1().constData(), nullptr);
for (const QString &key : keys.mid(1)) {
list = avahi_string_list_add_pair(list, key.toLatin1().constData(), txt[key].toLatin1().constData());
}
return list;
}