/*** Copyright (C) 2022 J Reece Wilson (a/k/a "Reece"). All rights reserved. File: AuNetSrvResolve.cpp Date: 2022-8-16 Author: Reece ***/ #include "Networking.hpp" #include "AuNetSrvResolve.hpp" #include "AuNetInterface.hpp" #include "AuNetWorker.hpp" #include "AuNetResolver.hpp" namespace Aurora::IO::Net { NetSrvResolve::NetSrvResolve(NetInterface *pParent) : pParent_(pParent) { } AuSPtr NetSrvResolve::SimpleAResolve(const AuString &hostname, const AuSPtr, NetError>> &info) { return this->SimpleResolve(hostname, true, false, info); } AuSPtr NetSrvResolve::SimpleAAAAResolve(const AuString &hostname, const AuSPtr, NetError>> &info) { return this->SimpleResolve(hostname, false, true, info); } AuSPtr NetSrvResolve::SimpleAllResolve(const AuString &hostname, const AuSPtr, NetError>> &info) { return this->SimpleResolve(hostname, true, true, info); } AuSPtr NetSrvResolve::SimpleResolve(const AuString &hostname, bool ipv4, bool ipv6, const AuSPtr, NetError>> &info) { auto pWorker = this->pParent_->TryScheduleEx(); if (!pWorker) { return {}; } if (!info) { return {}; } auto pResolver = AuMakeShared(pWorker); pResolver->bAAAA = ipv6; pResolver->bA = ipv4; pResolver->hostname = hostname; if (!pWorker->TryScheduleInternalTemplate>([pResolver](const AuSPtr, NetError>> &callback) { pResolver->SetCompletion(callback); if (!pResolver->Start()) { callback->OnFailure((void *)nullptr); } }, info)) { return {}; } return pResolver; } }