mirror of
https://bitbucket.org/smil3y/kdelibs.git
synced 2025-02-23 10:22:48 +00:00
kutils: check if the avahi client pointer is null before using it in KDNSSD
should fix crashes due to internal avahi asserts in some cases (e.g. when the daemon is not running) Signed-off-by: Ivailo Monev <xakepa10@gmail.com>
This commit is contained in:
parent
476b1a291d
commit
ceaddee1dd
1 changed files with 6 additions and 15 deletions
|
@ -149,6 +149,9 @@ KDNSSDPrivate::~KDNSSDPrivate()
|
|||
bool KDNSSDPrivate::publishService(const QByteArray &servicetype, const uint serviceport, const QString &servicename)
|
||||
{
|
||||
#if defined(HAVE_AVAHI)
|
||||
if (!m_avahiclient) {
|
||||
return false;
|
||||
}
|
||||
if (m_avahigroup) {
|
||||
avahi_entry_group_reset(m_avahigroup);
|
||||
}
|
||||
|
@ -158,7 +161,6 @@ bool KDNSSDPrivate::publishService(const QByteArray &servicetype, const uint ser
|
|||
return false;
|
||||
}
|
||||
const QByteArray servicenamebytes = servicename.toUtf8();
|
||||
// qDebug() << Q_FUNC_INFO << servicenamebytes << servicetype;
|
||||
int avahiresult = avahi_entry_group_add_service(
|
||||
m_avahigroup,
|
||||
AVAHI_IF_UNSPEC, s_avahiproto,
|
||||
|
@ -201,8 +203,9 @@ bool KDNSSDPrivate::unpublishService()
|
|||
bool KDNSSDPrivate::startBrowse(const QByteArray &servicetype)
|
||||
{
|
||||
#if defined(HAVE_AVAHI)
|
||||
// qDebug() << Q_FUNC_INFO << servicetype;
|
||||
|
||||
if (!m_avahiclient) {
|
||||
return false;
|
||||
}
|
||||
m_pollcounter = 0;
|
||||
QList<QByteArray> servicetypes;
|
||||
if (servicetype.isEmpty()) {
|
||||
|
@ -220,7 +223,6 @@ bool KDNSSDPrivate::startBrowse(const QByteArray &servicetype)
|
|||
m_pollcounter++;
|
||||
m_servicetypes.clear();
|
||||
while (m_pollcounter) {
|
||||
// qDebug() << Q_FUNC_INFO << m_pollcounter;
|
||||
avahi_simple_poll_iterate(m_avahipoll, 0);
|
||||
}
|
||||
|
||||
|
@ -247,7 +249,6 @@ bool KDNSSDPrivate::startBrowse(const QByteArray &servicetype)
|
|||
|
||||
m_pollcounter++;
|
||||
while (m_pollcounter) {
|
||||
// qDebug() << Q_FUNC_INFO << m_pollcounter;
|
||||
avahi_simple_poll_iterate(m_avahipoll, 0);
|
||||
}
|
||||
|
||||
|
@ -277,8 +278,6 @@ QString KDNSSDPrivate::errorString() const
|
|||
#if defined(HAVE_AVAHI)
|
||||
void KDNSSDPrivate::groupCallback(AvahiEntryGroup *avahigroup, AvahiEntryGroupState avahistate, void *userdata)
|
||||
{
|
||||
// qDebug() << Q_FUNC_INFO << avahigroup << avahistate << userdata;
|
||||
|
||||
if (avahistate == AVAHI_ENTRY_GROUP_FAILURE) {
|
||||
KDNSSDPrivate *kdnssdprivate = static_cast<KDNSSDPrivate*>(userdata);
|
||||
kdnssdprivate->m_errorstring = getAvahiClientError(avahi_entry_group_get_client(avahigroup));
|
||||
|
@ -287,8 +286,6 @@ void KDNSSDPrivate::groupCallback(AvahiEntryGroup *avahigroup, AvahiEntryGroupSt
|
|||
|
||||
void KDNSSDPrivate::clientCallback(AvahiClient *avahiclient, AvahiClientState avahistate, void *userdata)
|
||||
{
|
||||
// qDebug() << Q_FUNC_INFO << avahistate << userdata;
|
||||
|
||||
if (avahistate == AVAHI_CLIENT_FAILURE) {
|
||||
KDNSSDPrivate *kdnssdprivate = static_cast<KDNSSDPrivate*>(userdata);
|
||||
kdnssdprivate->m_errorstring = getAvahiClientError(avahiclient);
|
||||
|
@ -303,8 +300,6 @@ void KDNSSDPrivate::browseCallback(AvahiServiceBrowser *avahibrowser, AvahiIfInd
|
|||
{
|
||||
Q_UNUSED(avahiflags);
|
||||
|
||||
// qDebug() << Q_FUNC_INFO << avahievent << avahiname << avahitype << avahidomain << userdata;
|
||||
|
||||
KDNSSDPrivate *kdnssdprivate = static_cast<KDNSSDPrivate*>(userdata);
|
||||
AvahiClient *avahiclient = avahi_service_browser_get_client(avahibrowser);
|
||||
switch (avahievent) {
|
||||
|
@ -357,8 +352,6 @@ void KDNSSDPrivate::resolveCallback(AvahiServiceResolver *avahiresolver, AvahiIf
|
|||
Q_UNUSED(avahiflags);
|
||||
Q_UNUSED(avahiflags);
|
||||
|
||||
// qDebug() << Q_FUNC_INFO << avahievent << avahiname << avahitype << avahidomain << userdata;
|
||||
|
||||
KDNSSDPrivate *kdnssdprivate = static_cast<KDNSSDPrivate*>(userdata);
|
||||
switch (avahievent) {
|
||||
case AVAHI_RESOLVER_FOUND: {
|
||||
|
@ -429,8 +422,6 @@ void KDNSSDPrivate::serviceCallback(AvahiServiceTypeBrowser *avahiservice,
|
|||
Q_UNUSED(avahiprotocol);
|
||||
Q_UNUSED(avahiflags);
|
||||
|
||||
// qDebug() << Q_FUNC_INFO << avahievent << avahitype << avahidomain << userdata;
|
||||
|
||||
KDNSSDPrivate *kdnssdprivate = static_cast<KDNSSDPrivate*>(userdata);
|
||||
AvahiClient *avahiclient = avahi_service_type_browser_get_client(avahiservice);
|
||||
switch (avahievent) {
|
||||
|
|
Loading…
Add table
Reference in a new issue