diff --git a/Userland/Libraries/LibDNS/DNSAnswer.cpp b/Userland/Libraries/LibDNS/DNSAnswer.cpp index 9dce5f4877..e395eee498 100644 --- a/Userland/Libraries/LibDNS/DNSAnswer.cpp +++ b/Userland/Libraries/LibDNS/DNSAnswer.cpp @@ -6,6 +6,8 @@ #include "DNSAnswer.h" #include +#include +#include #include namespace DNS { @@ -95,3 +97,30 @@ ErrorOr AK::Formatter::format(AK::FormatBuilder& buil TRY(builder.put_u64((u16)value)); return {}; } + +namespace IPC { + +bool encode(Encoder& encoder, DNS::DNSAnswer const& answer) +{ + encoder << answer.name().as_string() << (u16)answer.type() << (u16)answer.class_code() << answer.ttl() << answer.record_data() << answer.mdns_cache_flush(); + return true; +} + +ErrorOr decode(Decoder& decoder, DNS::DNSAnswer& answer) +{ + String name; + TRY(decoder.decode(name)); + u16 record_type, class_code; + TRY(decoder.decode(record_type)); + TRY(decoder.decode(class_code)); + u32 ttl; + TRY(decoder.decode(ttl)); + String record_data; + TRY(decoder.decode(record_data)); + bool cache_flush; + TRY(decoder.decode(cache_flush)); + answer = { { name }, (DNS::DNSRecordType)record_type, (DNS::DNSRecordClass)class_code, ttl, record_data, cache_flush }; + return {}; +} + +} diff --git a/Userland/Libraries/LibDNS/DNSAnswer.h b/Userland/Libraries/LibDNS/DNSAnswer.h index 459028dc7a..b237aad2b1 100644 --- a/Userland/Libraries/LibDNS/DNSAnswer.h +++ b/Userland/Libraries/LibDNS/DNSAnswer.h @@ -11,6 +11,7 @@ #include #include #include +#include namespace DNS { @@ -90,3 +91,10 @@ struct AK::Formatter : StandardFormatter { ErrorOr format(AK::FormatBuilder&, DNS::DNSRecordClass); }; + +namespace IPC { + +bool encode(Encoder&, DNS::DNSAnswer const&); +ErrorOr decode(Decoder&, DNS::DNSAnswer&); + +}