123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- #include "il2cpp-config.h"
- #include "icalls/System/System.Net/Dns.h"
- #include "il2cpp-class-internals.h"
- #include "il2cpp-object-internals.h"
- #include "gc/GarbageCollector.h"
- #include "vm/Array.h"
- #include "vm/String.h"
- #include "os/Socket.h"
- #include "os/WaitStatus.h"
- #include "utils/StringUtils.h"
- namespace il2cpp
- {
- namespace icalls
- {
- namespace System
- {
- namespace System
- {
- namespace Net
- {
- bool Dns::GetHostByAddr_icall(Il2CppString* addr, Il2CppString** h_name, Il2CppArray** h_aliases, Il2CppArray** h_addr_list, int32_t hint)
- {
- std::string name;
- std::vector<std::string> aliases;
- std::vector<std::string> addr_list;
- const std::string address = il2cpp::utils::StringUtils::Utf16ToUtf8(addr->chars);
- const os::WaitStatus result = os::Socket::GetHostByAddr(address, name, aliases, addr_list);
- *h_name = vm::String::New(name.c_str());
- *h_aliases = vm::Array::New(il2cpp_defaults.string_class, (il2cpp_array_size_t)aliases.size());
- *h_addr_list = vm::Array::New(il2cpp_defaults.string_class, (il2cpp_array_size_t)addr_list.size());
- int32_t index = 0;
- std::vector<std::string>::const_iterator it = aliases.begin();
- while (it != aliases.end())
- {
- il2cpp_array_setref(*h_aliases, index++, vm::String::New((*it).c_str()));
- ++it;
- }
- index = 0;
- it = addr_list.begin();
- while (it != addr_list.end())
- {
- il2cpp_array_setref(*h_addr_list, index++, vm::String::New((*it).c_str()));
- ++it;
- }
- return (result != kWaitStatusFailure);
- }
- bool Dns::GetHostByName_icall(Il2CppString* host, Il2CppString** h_name, Il2CppArray** h_aliases, Il2CppArray** h_addr_list, int32_t hint)
- {
- std::string name;
- std::vector<std::string> aliases;
- std::vector<std::string> addr_list;
- const std::string host_name = il2cpp::utils::StringUtils::Utf16ToUtf8(host->chars);
- const os::WaitStatus result = os::Socket::GetHostByName(host_name, name, aliases, addr_list);
- *h_name = vm::String::New(name.c_str());
- il2cpp::gc::GarbageCollector::SetWriteBarrier((void**)h_name);
- *h_aliases = vm::Array::New(il2cpp_defaults.string_class, (il2cpp_array_size_t)aliases.size());
- il2cpp::gc::GarbageCollector::SetWriteBarrier((void**)h_aliases);
- *h_addr_list = vm::Array::New(il2cpp_defaults.string_class, (il2cpp_array_size_t)addr_list.size());
- il2cpp::gc::GarbageCollector::SetWriteBarrier((void**)h_addr_list);
- int32_t index = 0;
- std::vector<std::string>::const_iterator it = aliases.begin();
- while (it != aliases.end())
- {
- il2cpp_array_setref(*h_aliases, index++, vm::String::New((*it).c_str()));
- ++it;
- }
- index = 0;
- it = addr_list.begin();
- while (it != addr_list.end())
- {
- il2cpp_array_setref(*h_addr_list, index++, vm::String::New((*it).c_str()));
- ++it;
- }
- return (result != kWaitStatusFailure);
- }
- bool Dns::GetHostName_icall(Il2CppString** h_name)
- {
- std::string host_name;
- *h_name = (os::Socket::GetHostName(host_name) != kWaitStatusFailure)
- ? vm::String::New(host_name.c_str())
- : NULL;
- il2cpp::gc::GarbageCollector::SetWriteBarrier((void**)h_name);
- return *h_name != NULL;
- }
- } /* namespace Net */
- } /* namespace System */
- } /* namespace System */
- } /* namespace icalls */
- } /* namespace il2cpp */
|