[NETAPI32]
[reactos.git] / reactos / dll / win32 / netapi32 / browser.c
index 5a05ccb..49635c1 100644 (file)
@@ -75,6 +75,32 @@ BROWSER_IDENTIFY_HANDLE_unbind(BROWSER_IDENTIFY_HANDLE pszSystemName,
 }
 
 
+NET_API_STATUS
+WINAPI
+I_BrowserDebugTrace(
+    _In_opt_ LPWSTR ServerName,
+    _In_ PCHAR Buffer)
+{
+    NET_API_STATUS status;
+
+    TRACE("I_BrowserDebugTrace(%s %s)\n",
+          debugstr_w(ServerName), Buffer);
+
+    RpcTryExcept
+    {
+        status = I_BrowserrDebugTrace(ServerName,
+                                      Buffer);
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+
+
 NET_API_STATUS
 WINAPI
 I_BrowserQueryEmulatedDomains(
@@ -152,6 +178,61 @@ I_BrowserQueryOtherDomains(
 }
 
 
+NET_API_STATUS
+WINAPI
+I_BrowserServerEnum(
+    _In_opt_ LPCWSTR ServerName,
+    _In_opt_ LPCWSTR Transport,
+    _In_opt_ LPCWSTR ClientName,
+    _In_ DWORD Level,
+    _Out_ LPBYTE *BufPtr,
+    _In_ DWORD PrefMaxLen,
+    _Out_ LPDWORD EntriesRead,
+    _Out_ LPDWORD TotalEntries,
+    _In_ DWORD ServerType,
+    _In_opt_ LPCWSTR Domain,
+    _Inout_opt_ LPDWORD ResumeHandle)
+{
+    SERVER_INFO_100_CONTAINER Level100Container = {0, NULL};
+    SERVER_ENUM_STRUCT EnumStruct;
+    NET_API_STATUS status;
+
+    TRACE("I_BrowserServerEnum(%s %s %s %lu %p %lu %p %p %lu %s %p)\n",
+          debugstr_w(ServerName), debugstr_w(Transport), debugstr_w(ClientName),
+          Level, BufPtr, PrefMaxLen, EntriesRead, TotalEntries, ServerType,
+          debugstr_w(Domain), ResumeHandle);
+
+    EnumStruct.Level = 100;
+    EnumStruct.ServerInfo.Level100 = &Level100Container;
+
+    RpcTryExcept
+    {
+        status = I_BrowserrServerEnum((PWSTR)ServerName,
+                                      (PWSTR)Transport,
+                                      (PWSTR)ClientName,
+                                      &EnumStruct,
+                                      PrefMaxLen,
+                                      TotalEntries,
+                                      ServerType,
+                                      (PWSTR)Domain,
+                                      ResumeHandle);
+
+        if (status == NERR_Success || status == ERROR_MORE_DATA)
+        {
+            *BufPtr = (LPBYTE)EnumStruct.ServerInfo.Level100->Buffer;
+            *EntriesRead = EnumStruct.ServerInfo.Level100->EntriesRead;
+        }
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+
+
 NET_API_STATUS
 WINAPI
 I_BrowserQueryStatistics(
@@ -257,6 +338,69 @@ I_BrowserSetNetlogonState(
 }
 
 
+NET_API_STATUS
+WINAPI
+NetBrowserStatisticsGet(
+    _In_ LPWSTR ServerName,
+    _In_ DWORD Level,
+    _Out_ LPBYTE *Buffer)
+{
+    BROWSER_STATISTICS_STRUCT StatisticsStruct;
+    BROWSER_STATISTICS_100_CONTAINER Level100Container = {0, NULL};
+    BROWSER_STATISTICS_101_CONTAINER Level101Container = {0, NULL};
+    NET_API_STATUS status;
+
+    TRACE("NetBrowserStatisticsGet(%s %lu %p)\n",
+          debugstr_w(ServerName), Level, Buffer);
+
+    if (Level != 100 && Level != 101)
+        return ERROR_INVALID_LEVEL;
+
+    StatisticsStruct.Level = Level;
+    switch (Level)
+    {
+        case 100:
+            StatisticsStruct.Statistics.Level100 = &Level100Container;
+            break;
+
+        case 101:
+            StatisticsStruct.Statistics.Level101 = &Level101Container;
+            break;
+    }
+
+    RpcTryExcept
+    {
+        status = NetrBrowserStatisticsGet(ServerName,
+                                          Level,
+                                          &StatisticsStruct);
+
+        switch (Level)
+        {
+            case 100:
+                if (StatisticsStruct.Statistics.Level100->Buffer != NULL)
+                {
+                    *Buffer = (LPBYTE)StatisticsStruct.Statistics.Level100->Buffer;
+                }
+                break;
+
+            case 101:
+                if (StatisticsStruct.Statistics.Level101->Buffer != NULL)
+                {
+                    *Buffer = (LPBYTE)StatisticsStruct.Statistics.Level101->Buffer;
+                }
+                break;
+        }
+    }
+    RpcExcept(EXCEPTION_EXECUTE_HANDLER)
+    {
+        status = I_RpcMapWin32Status(RpcExceptionCode());
+    }
+    RpcEndExcept;
+
+    return status;
+}
+
+
 NET_API_STATUS
 WINAPI
 NetServerEnum(
@@ -270,11 +414,22 @@ NetServerEnum(
     _In_opt_ LMCSTR domain,
     _Inout_opt_ LPDWORD resume_handle)
 {
-    FIXME("NetServerEnum(%s %lu %p %lu %p %p %lu %s %p)\n",
+    TRACE("NetServerEnum(%s %lu %p %lu %p %p %lu %s %p)\n",
           debugstr_w(servername), level, bufptr, prefmaxlen, entriesread,
           totalentries, servertype, debugstr_w(domain), resume_handle);
 
-    return ERROR_NO_BROWSER_SERVERS_FOUND;
+    if (resume_handle != NULL)
+        *resume_handle = 0;
+
+    return NetServerEnumEx(servername,
+                           level,
+                           bufptr,
+                           prefmaxlen,
+                           entriesread,
+                           totalentries,
+                           servertype,
+                           domain,
+                           NULL);
 }