8#define LWIP_DONT_PROVIDE_BYTEORDER_FUNCTIONS 1
10#include "pedigree/kernel/process/TerminationDeferral.h"
11#include "pedigree/kernel/utilities/utility.h"
18class ResolverFile final :
public File {
21 :
File(
String(
"resolv.conf"), 0, 0, 0, inode, filesystem, 0, parent) {
27 uint64_t
readBytewise(uint64_t location, uint64_t size, uintptr_t buffer,
28 bool bCanBlock =
true)
override {
31 const String contents = generateString();
32 if (location >= contents.length())
34 const uint64_t remaining = contents.length() - location;
37 MemoryCopy(
reinterpret_cast<void*
>(buffer), contents.cstr() + location, size);
41 uint64_t
writeBytewise(uint64_t, uint64_t, uintptr_t,
bool =
true)
override {
45 size_t getSize()
override {
46 return generateString().length();
54 static String generateString() {
61 const auto snapshot = [](
void* context) {
62 auto* addresses =
static_cast<ip_addr_t*
>(context);
64 addresses[i] = *dns_getserver(
static_cast<u8_t
>(i));
69 for (
const auto& server : servers) {
70 if (ip_addr_isany(&server))
72 char address[IPADDR_STRLEN_MAX];
73 if (!ipaddr_ntoa_r(&server, address,
sizeof(address)))
75 contents +=
"nameserver ";
85void ProcFs::initialiseResolverFile() {
86 auto* resolver =
new ResolverFile(getNextInode(),
this, m_pRoot);
87 m_pRoot->addEntry(resolver->getName(), resolver);
virtual uint64_t readBytewise(uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true)
virtual bool isBytewise() const
void setGidOnly(size_t gid)
void setPermissionsOnly(uint32_t perms)
void setUidOnly(size_t uid)
virtual uint64_t writeBytewise(uint64_t location, uint64_t size, uintptr_t buffer, bool bCanBlock=true)
err_t tcpip_callback_wait(tcpip_callback_fn function, void *ctx)