mirror of
https://github.com/fergalmoran/ladybird.git
synced 2026-01-06 08:36:15 +00:00
The implementation is extremely basic, and is far from fully conforming to the spec. Among other things, it does not really work in case there are multiple network adapters. Nevertheless, it works quite well for the simple case! You can now do this on your host machine: $ ping courage.local and same on your Serenity box: $ ping host-machine-name.local
47 lines
945 B
C++
47 lines
945 B
C++
/*
|
|
* Copyright (c) 2021, Sergey Bugaev <bugaevc@serenityos.org>
|
|
*
|
|
* SPDX-License-Identifier: BSD-2-Clause
|
|
*/
|
|
|
|
#pragma once
|
|
|
|
#include "DNSAnswer.h"
|
|
#include "DNSName.h"
|
|
#include "DNSPacket.h"
|
|
#include <AK/IPv4Address.h>
|
|
#include <LibCore/UDPServer.h>
|
|
#include <netinet/in.h>
|
|
|
|
namespace LookupServer {
|
|
|
|
class MulticastDNS : public Core::UDPServer {
|
|
C_OBJECT(MulticastDNS)
|
|
public:
|
|
Vector<DNSAnswer> lookup(const DNSName&, unsigned short record_type);
|
|
|
|
private:
|
|
explicit MulticastDNS(Object* parent = nullptr);
|
|
|
|
void announce();
|
|
ssize_t emit_packet(const DNSPacket&, const sockaddr_in* destination = nullptr);
|
|
|
|
void handle_packet();
|
|
void handle_query(const DNSPacket&);
|
|
|
|
Vector<IPv4Address> local_addresses() const;
|
|
|
|
DNSName m_hostname;
|
|
|
|
static constexpr sockaddr_in mdns_addr {
|
|
AF_INET,
|
|
// htons(5353)
|
|
0xe914,
|
|
// 224.0.0.251
|
|
{ 0xfb0000e0 },
|
|
0
|
|
};
|
|
};
|
|
|
|
}
|