19642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd/***
29642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  This file is part of avahi.
3a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering
49642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  avahi is free software; you can redistribute it and/or modify it
59642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  under the terms of the GNU Lesser General Public License as
69642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  published by the Free Software Foundation; either version 2.1 of the
79642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  License, or (at your option) any later version.
8a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering
99642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  avahi is distributed in the hope that it will be useful, but WITHOUT
109642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
119642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General
129642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  Public License for more details.
13a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering
149642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  You should have received a copy of the GNU Lesser General Public
159642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  License along with avahi; if not, write to the Free Software
169642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
179642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd  USA.
189642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd***/
199642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd
209642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd#ifdef HAVE_CONFIG_H
219642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd#include <config.h>
229642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd#endif
239642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd
249642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd#include <stdlib.h>
259642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd#include <string.h>
269642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd#include <assert.h>
279642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd
289642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd#include <avahi-common/error.h>
299642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd#include <avahi-common/dbus.h>
309642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd
319642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloydstatic const char * const table[- AVAHI_ERR_MAX] = {
32f17d2832301b0f2fcd50fdcc6fec77666178158fLennart Poettering    AVAHI_DBUS_ERR_OK,
33dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_FAILURE,
34dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_BAD_STATE,
35dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_INVALID_HOST_NAME,
36dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_INVALID_DOMAIN_NAME,
37dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_NO_NETWORK,
38dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_INVALID_TTL,
39dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_IS_PATTERN,
40f17d2832301b0f2fcd50fdcc6fec77666178158fLennart Poettering    AVAHI_DBUS_ERR_COLLISION,
41dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_INVALID_RECORD,
42a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering
43dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_INVALID_SERVICE_NAME,
44dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_INVALID_SERVICE_TYPE,
45dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_INVALID_PORT,
46dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_INVALID_KEY,
47dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_INVALID_ADDRESS,
48dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_TIMEOUT,
49dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_TOO_MANY_CLIENTS,
50dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_TOO_MANY_OBJECTS,
51dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_TOO_MANY_ENTRIES,
52dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_OS,
53a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering
54dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_ACCESS_DENIED,
55dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_INVALID_OPERATION,
56dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_DBUS_ERROR,
574e2113a7d5b702ff070e8220b32662bb00ae02ddLennart Poettering    AVAHI_DBUS_ERR_DISCONNECTED,
58dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_NO_MEMORY,
59dad41109f1726a876dd918290187d0a5296b267dLennart Poettering    AVAHI_DBUS_ERR_INVALID_OBJECT,
601a0fb70d743f900859d9278c6ae01cfc2a993dadLennart Poettering    AVAHI_DBUS_ERR_NO_DAEMON,
611a0fb70d743f900859d9278c6ae01cfc2a993dadLennart Poettering    AVAHI_DBUS_ERR_INVALID_INTERFACE,
621a0fb70d743f900859d9278c6ae01cfc2a993dadLennart Poettering    AVAHI_DBUS_ERR_INVALID_PROTOCOL,
631a0fb70d743f900859d9278c6ae01cfc2a993dadLennart Poettering    AVAHI_DBUS_ERR_INVALID_FLAGS,
64a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering
651a0fb70d743f900859d9278c6ae01cfc2a993dadLennart Poettering    AVAHI_DBUS_ERR_NOT_FOUND,
668782ae678cf60713b5513016f16b039251c40870Lennart Poettering    AVAHI_DBUS_ERR_INVALID_CONFIG,
67c1d9b9cffd6f756339c1d98a2d2914d49195cb41Lennart Poettering    AVAHI_DBUS_ERR_VERSION_MISMATCH,
68bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_INVALID_SERVICE_SUBTYPE,
69bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_INVALID_PACKET,
70bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_INVALID_DNS_ERROR,
71bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_DNS_FORMERR,
72bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_DNS_SERVFAIL,
73bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_DNS_NXDOMAIN,
74bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_DNS_NOTIMP,
75a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering
76bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_DNS_REFUSED,
77bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_DNS_YXDOMAIN,
78bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_DNS_YXRRSET,
79bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_DNS_NXRRSET,
80bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_DNS_NOTAUTH,
81bb14e0a8aa3173c8a6d80b1a9c8b300a452ee9f1Lennart Poettering    AVAHI_DBUS_ERR_DNS_NOTZONE,
82f6712902a92eb82b6c8d7e7fd0980a20a716fa0dLennart Poettering    AVAHI_DBUS_ERR_INVALID_RDATA,
83f6712902a92eb82b6c8d7e7fd0980a20a716fa0dLennart Poettering    AVAHI_DBUS_ERR_INVALID_DNS_CLASS,
84fbce111b069aa1e4c701ed37ee1d9f6d6cefaac5Lennart Poettering    AVAHI_DBUS_ERR_INVALID_DNS_TYPE,
85fbce111b069aa1e4c701ed37ee1d9f6d6cefaac5Lennart Poettering    AVAHI_DBUS_ERR_NOT_SUPPORTED,
86fbce111b069aa1e4c701ed37ee1d9f6d6cefaac5Lennart Poettering
873632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    AVAHI_DBUS_ERR_NOT_PERMITTED,
8865ff53f25c418feea1c3e6223fbe0031b6dc5ba1Lennart Poettering    AVAHI_DBUS_ERR_INVALID_ARGUMENT,
8983d9a20d5add460cba13dcd0d767dbb7bd8c5916Lennart Poettering    AVAHI_DBUS_ERR_IS_EMPTY,
9083d9a20d5add460cba13dcd0d767dbb7bd8c5916Lennart Poettering    AVAHI_DBUS_ERR_NO_CHANGE
913632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering};
923632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering
933632da5dea3a2e961729664d17808d98bfc2b325Lennart Poetteringstruct error_map {
943632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    const char *dbus_error;
953632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    int avahi_error;
963632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering};
973632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering
983632da5dea3a2e961729664d17808d98bfc2b325Lennart Poetteringstatic struct error_map error_map[] = {
993632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_FAILED,           AVAHI_ERR_FAILURE },
1003632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_NO_MEMORY,        AVAHI_ERR_NO_MEMORY },
1013632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_SERVICE_UNKNOWN,  AVAHI_ERR_NO_DAEMON },
1023632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_BAD_ADDRESS,      AVAHI_ERR_NO_DAEMON },
1033632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_NOT_SUPPORTED,    AVAHI_ERR_NOT_SUPPORTED },
1043632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_LIMITS_EXCEEDED,  AVAHI_ERR_TOO_MANY_OBJECTS },
1053632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_ACCESS_DENIED,    AVAHI_ERR_ACCESS_DENIED },
1063632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_AUTH_FAILED,      AVAHI_ERR_ACCESS_DENIED },
1073632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_NO_SERVER,        AVAHI_ERR_NO_DAEMON },
1083632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_TIMEOUT,          AVAHI_ERR_TIMEOUT },
1093632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_NO_NETWORK,       AVAHI_ERR_NO_NETWORK },
1103632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_DISCONNECTED,     AVAHI_ERR_DISCONNECTED },
1113632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_INVALID_ARGS,     AVAHI_ERR_INVALID_ARGUMENT },
1123632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { DBUS_ERROR_TIMED_OUT,        AVAHI_ERR_TIMEOUT },
1133632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    { NULL, 0 }
114dad41109f1726a876dd918290187d0a5296b267dLennart Poettering};
1159642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd
116dad41109f1726a876dd918290187d0a5296b267dLennart Poetteringint avahi_error_dbus_to_number(const char *s) {
1179642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd    int e;
1183632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    const struct error_map *m;
1199642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd
1202551f4d1cb1c2dfb02474c3ff4b5c2606076ffbaLennart Poettering    assert(s);
1219642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd
1222551f4d1cb1c2dfb02474c3ff4b5c2606076ffbaLennart Poettering    for (e = -1; e > AVAHI_ERR_MAX; e--)
123dad41109f1726a876dd918290187d0a5296b267dLennart Poettering        if (strcmp(s, table[-e]) == 0)
1249642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd            return e;
1259642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd
1263632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering    for (m = error_map; m->dbus_error; m++)
1273632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering        if (strcmp(m->dbus_error, s) == 0)
1283632da5dea3a2e961729664d17808d98bfc2b325Lennart Poettering            return m->avahi_error;
129a97605e07ad7f44f2f65e15be64880e61a39ab43Lennart Poettering
1309642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd    return AVAHI_ERR_DBUS_ERROR;
1319642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd}
1329642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd
133dad41109f1726a876dd918290187d0a5296b267dLennart Poetteringconst char *avahi_error_number_to_dbus(int error) {
1349642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd    assert(error > AVAHI_ERR_MAX);
1359642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd    assert(error < 1);
1369642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd
1379642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd    return table[-error];
1389642bac4b85de24ce62c53ad6a8e2ab4b2dd31baTrent Lloyd}
139