/* srp-log.c
 *
 * Copyright (c) 2021 Apple Inc. All rights reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *     https://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 *
 * This file contains the functions that help to create better logs.
 */

#include "srp-log.h"

#ifndef THREAD_DEVKIT_ADK
#include <netinet/in.h> // For struct in_addr and struct in6_addr used in "dns-msg.h".
#endif
#include "dns-msg.h" // For dns_qclass_xxx and dns_rrtype_xxx.

//======================================================================================================================
// MARK: - Functions

const char *
dns_qclass_to_string(const uint16_t qclass)
{
#define CASE_TO_STR(s) case dns_qclass_ ## s: return (#s)
    switch(qclass)
    {
        CASE_TO_STR(in);
        CASE_TO_STR(chaos);
        CASE_TO_STR(hesiod);
        CASE_TO_STR(none);
        CASE_TO_STR(any);
    }
#undef CASE_TO_STR
    FAULT("Invalid qclass - qclass: %u", qclass);
    return "<INVALID dns_qclass>";
}

//======================================================================================================================

const char *
dns_rrtype_to_string(const uint16_t rrtype)
{
#define CASE_TO_STR(s) case dns_rrtype_ ## s: return (#s)
    switch(rrtype)
    {
        CASE_TO_STR(a);
        CASE_TO_STR(ns);
        CASE_TO_STR(md);
        CASE_TO_STR(mf);
        CASE_TO_STR(cname);
        CASE_TO_STR(soa);
        CASE_TO_STR(mb);
        CASE_TO_STR(mg);
        CASE_TO_STR(mr);
        CASE_TO_STR(null);
        CASE_TO_STR(wks);
        CASE_TO_STR(ptr);
        CASE_TO_STR(hinfo);
        CASE_TO_STR(minfo);
        CASE_TO_STR(mx);
        CASE_TO_STR(txt);
        CASE_TO_STR(rp);
        CASE_TO_STR(afsdb);
        CASE_TO_STR(x25);
        CASE_TO_STR(isdn);
        CASE_TO_STR(rt);
        CASE_TO_STR(nsap);
        CASE_TO_STR(nsap_ptr);
        CASE_TO_STR(sig);
        CASE_TO_STR(key);
        CASE_TO_STR(px);
        CASE_TO_STR(gpos);
        CASE_TO_STR(aaaa);
        CASE_TO_STR(loc);
        CASE_TO_STR(nxt);
        CASE_TO_STR(eid);
        CASE_TO_STR(nimloc);
        CASE_TO_STR(srv);
        CASE_TO_STR(atma);
        CASE_TO_STR(naptr);
        CASE_TO_STR(kx);
        CASE_TO_STR(cert);
        CASE_TO_STR(a6);
        CASE_TO_STR(dname);
        CASE_TO_STR(sink);
        CASE_TO_STR(opt);
        CASE_TO_STR(apl);
        CASE_TO_STR(ds);
        CASE_TO_STR(sshfp);
        CASE_TO_STR(ipseckey);
        CASE_TO_STR(rrsig);
        CASE_TO_STR(nsec);
        CASE_TO_STR(dnskey);
        CASE_TO_STR(dhcid);
        CASE_TO_STR(nsec3);
        CASE_TO_STR(nsec3param);
        CASE_TO_STR(tlsa);
        CASE_TO_STR(smimea);
        CASE_TO_STR(hip);
        CASE_TO_STR(ninfo);
        CASE_TO_STR(rkey);
        CASE_TO_STR(talink);
        CASE_TO_STR(cds);
        CASE_TO_STR(cdnskey);
        CASE_TO_STR(openpgpkey);
        CASE_TO_STR(csync);
        CASE_TO_STR(zonemd);
        CASE_TO_STR(svcb);
        CASE_TO_STR(https);
        CASE_TO_STR(spf);
        CASE_TO_STR(uinfo);
        CASE_TO_STR(uid);
        CASE_TO_STR(gid);
        CASE_TO_STR(unspec);
        CASE_TO_STR(nid);
        CASE_TO_STR(l32);
        CASE_TO_STR(l64);
        CASE_TO_STR(lp);
        CASE_TO_STR(eui48);
        CASE_TO_STR(eui64);
        CASE_TO_STR(tkey);
        CASE_TO_STR(tsig);
        CASE_TO_STR(ixfr);
        CASE_TO_STR(axfr);
        CASE_TO_STR(mailb);
        CASE_TO_STR(maila);
        CASE_TO_STR(any);
        CASE_TO_STR(uri);
        CASE_TO_STR(caa);
        CASE_TO_STR(avc);
        CASE_TO_STR(doa);
        CASE_TO_STR(amtrelay);
        CASE_TO_STR(ta);
        CASE_TO_STR(dlv);
    }
#undef CASE_TO_STR
    FAULT("Invalid dns_rrtype - rrtype: %u", rrtype);
    return "<INVALID dns_rrtype>";
}

// Local Variables:
// mode: C
// tab-width: 4
// c-file-style: "bsd"
// c-basic-offset: 4
// fill-column: 120
// indent-tabs-mode: nil
// End:
