Implemented a lot of Netbios().
diff --git a/dlls/netapi32/netapi32.c b/dlls/netapi32/netapi32.c
index 05540d0..f62ea1d 100644
--- a/dlls/netapi32/netapi32.c
+++ b/dlls/netapi32/netapi32.c
@@ -1,5 +1,5 @@
-/*
- * Copyright 2001 Mike McCormack
+/* Copyright 2001 Mike McCormack
+ * Copyright 2003 Juan Lang
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
@@ -18,185 +18,36 @@
#include "config.h"
-#include <string.h>
-#include <stdarg.h>
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif
-
-#include "windef.h"
-#include "winbase.h"
-#include "winreg.h"
-#include "wingdi.h"
-#include "winuser.h"
#include "wine/debug.h"
-#include "winerror.h"
-#include "nb30.h"
-#include "lm.h"
-#include "iphlpapi.h"
+#include "netbios.h"
WINE_DEFAULT_DEBUG_CHANNEL(netbios);
HMODULE NETAPI32_hModule = 0;
-static UCHAR NETBIOS_Enum(PNCB ncb)
-{
- int i;
- LANA_ENUM *lanas = (PLANA_ENUM) ncb->ncb_buffer;
- DWORD apiReturn, size = 0;
- PMIB_IFTABLE table;
- UCHAR ret;
-
- TRACE("NCBENUM\n");
-
- apiReturn = GetIfTable(NULL, &size, FALSE);
- if (apiReturn != NO_ERROR)
- {
- table = (PMIB_IFTABLE)malloc(size);
- if (table)
- {
- apiReturn = GetIfTable(table, &size, FALSE);
- if (apiReturn == NO_ERROR)
- {
- lanas->length = 0;
- for (i = 0; i < table->dwNumEntries && lanas->length < MAX_LANA;
- i++)
- {
- if (table->table[i].dwType != MIB_IF_TYPE_LOOPBACK)
- {
- lanas->lana[lanas->length] = table->table[i].dwIndex;
- lanas->length++;
- }
- }
- ret = NRC_GOODRET;
- }
- else
- ret = NRC_SYSTEM;
- free(table);
- }
- else
- ret = NRC_NORESOURCES;
- }
- else
- ret = NRC_SYSTEM;
- return ret;
-}
-
-
-static UCHAR NETBIOS_Astat(PNCB ncb)
-{
- PADAPTER_STATUS astat = (PADAPTER_STATUS) ncb->ncb_buffer;
- MIB_IFROW row;
-
- TRACE("NCBASTAT (Adapter %d)\n", ncb->ncb_lana_num);
-
- memset(astat, 0, sizeof astat);
-
- row.dwIndex = ncb->ncb_lana_num;
- if (GetIfEntry(&row) != NO_ERROR)
- return NRC_INVADDRESS;
- /* doubt anyone cares, but why not.. */
- if (row.dwType == MIB_IF_TYPE_TOKENRING)
- astat->adapter_type = 0xff;
- else
- astat->adapter_type = 0xfe; /* for Ethernet */
- return NRC_GOODRET;
-}
-
BOOL WINAPI DllMain (HINSTANCE hinstDLL, DWORD fdwReason, LPVOID lpvReserved)
{
TRACE("%p,%lx,%p\n", hinstDLL, fdwReason, lpvReserved);
switch (fdwReason) {
- case DLL_PROCESS_ATTACH:
+ case DLL_PROCESS_ATTACH:
+ {
DisableThreadLibraryCalls(hinstDLL);
NETAPI32_hModule = hinstDLL;
- break;
- case DLL_PROCESS_DETACH:
- break;
+ NetBIOSInit();
+ NetBTInit();
+ break;
+ }
+ case DLL_PROCESS_DETACH:
+ {
+ NetBIOSShutdown();
+ break;
+ }
}
return TRUE;
}
-UCHAR WINAPI Netbios(PNCB pncb)
-{
- UCHAR ret = NRC_ILLCMD;
-
- TRACE("ncb = %p\n",pncb);
-
- if(!pncb)
- return NRC_INVADDRESS;
-
- switch(pncb->ncb_command&0x7f)
- {
- case NCBRESET:
- FIXME("NCBRESET adapter %d\n",pncb->ncb_lana_num);
- if(pncb->ncb_lana_num < MAX_LANA )
- {
- MIB_IFROW row;
-
- row.dwIndex = pncb->ncb_lana_num;
- if (GetIfEntry(&row) != NO_ERROR)
- ret = NRC_GOODRET;
- else
- ret = NRC_ILLCMD; /* NetBIOS emulator not found */
- }
- else
- ret = NRC_ILLCMD; /* NetBIOS emulator not found */
- break;
-
- case NCBADDNAME:
- FIXME("NCBADDNAME\n");
- break;
-
- case NCBADDGRNAME:
- FIXME("NCBADDGRNAME\n");
- break;
-
- case NCBDELNAME:
- FIXME("NCBDELNAME\n");
- break;
-
- case NCBSEND:
- FIXME("NCBSEND\n");
- break;
-
- case NCBRECV:
- FIXME("NCBRECV\n");
- break;
-
- case NCBHANGUP:
- FIXME("NCBHANGUP\n");
- break;
-
- case NCBCANCEL:
- FIXME("NCBCANCEL\n");
- break;
-
- case NCBLISTEN:
- FIXME("NCBLISTEN\n");
- break;
-
- case NCBASTAT:
- ret = NETBIOS_Astat(pncb);
- break;
-
- case NCBENUM:
- ret = NETBIOS_Enum(pncb);
- break;
-
- default:
- FIXME("(%p): command code %02x\n", pncb, pncb->ncb_command);
-
- ret = NRC_ILLCMD; /* NetBIOS emulator not found */
- }
- pncb->ncb_retcode = ret;
- return ret;
-}
-
NET_API_STATUS WINAPI NetServerEnum(
LPCWSTR servername,
DWORD level,