diff --git a/src/libs/libNet.cpp b/src/libs/libNet.cpp index cbf851274..807332d26 100644 --- a/src/libs/libNet.cpp +++ b/src/libs/libNet.cpp @@ -113,6 +113,10 @@ int KYTY_SYSV_ABI NetResolverCreate(const char* name, int memid, int flags) { return NET_CALL(Net::NetResolverCreate(name, memid, flags)); } +int KYTY_SYSV_ABI NetResolverDestroy(int rid) { + return NET_CALL(Net::NetResolverDestroy(rid)); +} + int KYTY_SYSV_ABI NetResolverStartNtoa(int rid, const char* hostname, void* addr, int timeout, int retry, int flags) { return NET_CALL(Net::NetResolverStartNtoa(rid, hostname, addr, timeout, retry, flags)); @@ -194,6 +198,7 @@ LIB_DEFINE(InitNet_1_Net) { LIB_FUNC("dgJBaeJnGpo", LibNet::NetPoolCreate); LIB_FUNC("K7RlrTkI-mw", LibNet::NetPoolDestroy); LIB_FUNC("C4UgDHHPvdw", LibNet::NetResolverCreate); + LIB_FUNC("kJlYH5uMAWI", LibNet::NetResolverDestroy); LIB_FUNC("Nd91WaWmG2w", LibNet::NetResolverStartNtoa); LIB_FUNC("8Kcp5d-q1Uo", LibNet::NetInetPton); LIB_FUNC("9vA2aW+CHuA", LibNet::NetInetNtop); diff --git a/src/libs/network.cpp b/src/libs/network.cpp index dcf8702e2..d4e575cca 100644 --- a/src/libs/network.cpp +++ b/src/libs/network.cpp @@ -101,6 +101,7 @@ public: int PoolCreate(const char* name, int size); bool PoolDestroy(int memid); int ResolverCreate(const char* name, int memid); + bool ResolverDestroy(int rid); bool ResolverValid(int rid); Id SslInit(uint64_t pool_size); @@ -291,6 +292,17 @@ int Network::ResolverCreate(const char* name, int memid) { return -1; } +bool Network::ResolverDestroy(int rid) { + Common::LockGuard lock(m_mutex); + + if (rid >= 0 && rid < RESOLVERS_MAX && m_resolvers[rid].used) { + m_resolvers[rid] = {}; + return true; + } + + return false; +} + bool Network::ResolverValid(int rid) { Common::LockGuard lock(m_mutex); @@ -1231,6 +1243,19 @@ int KYTY_SYSV_ABI NetResolverCreate(const char* name, int memid, int flags) { return id; } +int KYTY_SYSV_ABI NetResolverDestroy(int rid) { + PRINT_NAME(); + + LOGF("\t rid = %d\n", rid); + + EXIT_IF(g_net == nullptr); + if (!g_net->ResolverDestroy(rid)) { + return NET_ERROR_EBADF; + } + + return OK; +} + int KYTY_SYSV_ABI NetResolverStartNtoa(int rid, const char* hostname, void* addr, int timeout, int retry, int flags) { PRINT_NAME(); diff --git a/src/libs/network.h b/src/libs/network.h index afd8c2986..9d2414773 100644 --- a/src/libs/network.h +++ b/src/libs/network.h @@ -40,6 +40,7 @@ int KYTY_SYSV_ABI NetTerm(); int KYTY_SYSV_ABI NetPoolCreate(const char* name, int size, int flags); int KYTY_SYSV_ABI NetPoolDestroy(int memid); int KYTY_SYSV_ABI NetResolverCreate(const char* name, int memid, int flags); +int KYTY_SYSV_ABI NetResolverDestroy(int rid); int KYTY_SYSV_ABI NetResolverStartNtoa(int rid, const char* hostname, void* addr, int timeout, int retry, int flags); int KYTY_SYSV_ABI NetInetPton(int af, const char* src, void* dst);