| /* Copyright (c) 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 | |
| * License as published by the Free Software Foundation; either | |
| * version 2.1 of the License, or (at your option) any later version. | |
| * | |
| * This library is distributed in the hope that it will be useful, | |
| * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU | |
| * Lesser General Public License for more details. | |
| * | |
| * You should have received a copy of the GNU Lesser General Public | |
| * License along with this library; if not, write to the Free Software | |
| * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
| */ | |
| #ifndef __WINE_NETBIOS_H__ | |
| #define __WINE_NETBIOS_H__ | |
| #include <stdarg.h> | |
| #include "windef.h" | |
| #include "winbase.h" | |
| #include "lm.h" | |
| #include "nb30.h" | |
| /* This file describes the interface WINE's NetBIOS implementation uses to | |
| * interact with a transport implementation (where a transport might be | |
| * NetBIOS-over-TCP/IP (aka NetBT, NBT), NetBIOS-over-IPX, etc.) | |
| */ | |
| /** | |
| * Public functions | |
| */ | |
| void NetBIOSInit(void); | |
| void NetBIOSShutdown(void); | |
| struct _NetBIOSTransport; | |
| /* A transport should register itself during its init function (see below) with | |
| * a unique id (the transport_id of ACTION_HEADER, for example) and an | |
| * implementation. Returns TRUE on success, and FALSE on failure. | |
| */ | |
| BOOL NetBIOSRegisterTransport(ULONG id, struct _NetBIOSTransport *transport); | |
| /* Registers an adapter with the given transport and ifIndex with NetBIOS. | |
| * ifIndex is an interface index usable by the IpHlpApi. ifIndex is not | |
| * required to be unique, but is required so that NetWkstaTransportEnum can use | |
| * GetIfEntry to get the name and hardware address of the adapter. | |
| * Returns TRUE on success, FALSE on failure. | |
| * FIXME: need functions for retrieving the name and hardware index, rather | |
| * than assuming a correlation with IpHlpApi. | |
| */ | |
| BOOL NetBIOSRegisterAdapter(ULONG transport, DWORD ifIndex, void *adapter); | |
| /* During enumeration, all adapters from your transport are disabled | |
| * internally. If an adapter is still valid, reenable it with this function. | |
| * Adapters you don't enable will have their transport's NetBIOSCleanupAdapter | |
| * function (see below) called on them, and will be removed from the table. | |
| * (This is to deal with lack of plug-and-play--sorry.) | |
| */ | |
| void NetBIOSEnableAdapter(UCHAR lana); | |
| /* Gets a quick count of the number of NetBIOS adapters. Not guaranteed not | |
| * to change from one call to the next, depending on what's been enumerated | |
| * lately. See also NetBIOSEnumAdapters. | |
| */ | |
| UCHAR NetBIOSNumAdapters(void); | |
| typedef struct _NetBIOSAdapterImpl { | |
| UCHAR lana; | |
| DWORD ifIndex; | |
| void *data; | |
| } NetBIOSAdapterImpl; | |
| typedef BOOL (*NetBIOSEnumAdaptersCallback)(UCHAR totalLANAs, UCHAR lanaIndex, | |
| ULONG transport, const NetBIOSAdapterImpl *data, void *closure); | |
| /* Enumerates all NetBIOS adapters for the transport transport, or for all | |
| * transports if transport is ALL_TRANSPORTS. Your callback will be called | |
| * once for every enumerated adapter, with a count of how many adapters have | |
| * been enumerated, a 0-based index relative to that count, the adapter's | |
| * transport, and its ifIndex. | |
| * Your callback should return FALSE if it no longer wishes to be called. | |
| */ | |
| void NetBIOSEnumAdapters(ULONG transport, NetBIOSEnumAdaptersCallback cb, | |
| void *closure); | |
| /* Hangs up the session identified in the NCB; the NCB need not be a NCBHANGUP. | |
| * Will result in the transport's hangup function being called, so release any | |
| * locks you own before calling to avoid deadlock. | |
| * This function is intended for use by a transport, if the session is closed | |
| * by some error in the transport layer. | |
| */ | |
| void NetBIOSHangupSession(PNCB ncb); | |
| /** | |
| * Functions a transport implementation must implement | |
| */ | |
| /* This function is called to ask a transport implementation to enumerate any | |
| * LANAs into the NetBIOS adapter table by: | |
| * - calling NetBIOSRegisterAdapter for any new adapters | |
| * - calling NetBIOSEnableAdapter for any existing adapters | |
| * NetBIOSEnumAdapters (see) may be of use to determine which adapters already | |
| * exist. | |
| * A transport can assume no other thread is modifying the NetBIOS adapter | |
| * table during the lifetime of its NetBIOSEnum function (and, therefore, that | |
| * this function won't be called reentrantly). | |
| */ | |
| typedef UCHAR (*NetBIOSEnum)(void); | |
| /* A cleanup function for a transport. This is the last function called on a | |
| * transport. | |
| */ | |
| typedef void (*NetBIOSCleanup)(void); | |
| /* Adapter functions */ | |
| /* Functions with direct mappings to the Netbios interface. These functions | |
| * are expected to be synchronous, although the first four bytes of the | |
| * reserved member of the ncb are a cancel flag. A long-running function | |
| * should check whether this is not FALSE from time to time (see the | |
| * NCB_CANCELLED macro), and return NRC_CMDCAN if it's been cancelled. (The | |
| * remainder of the NCB's reserved field is, well, reserved.) | |
| */ | |
| /* Used to see whether the pointer to an NCB has been cancelled. The NetBIOS | |
| * interface designates certain functions as non-cancellable functions, but I | |
| * use this flag for all NCBs. Support it if you can. | |
| * FIXME: this isn't enough, need to support an EVENT or some such, because | |
| * some calls (recv) will block indefinitely, so a reset, shutdown, etc. will | |
| * never occur. | |
| */ | |
| #define NCB_CANCELLED(pncb) *(PBOOL)((pncb)->ncb_reserve) | |
| typedef UCHAR (*NetBIOSAstat)(void *adapter, PNCB ncb); | |
| typedef UCHAR (*NetBIOSFindName)(void *adapter, PNCB ncb); | |
| /* Functions to support the session service */ | |
| /* Implement to support the NCBCALL command. If you need data stored for the | |
| * session, return it in *session. You can clean it up in your NetBIOSHangup | |
| * function (see). | |
| */ | |
| typedef UCHAR (*NetBIOSCall)(void *adapter, PNCB ncb, void **session); | |
| typedef UCHAR (*NetBIOSSend)(void *adapter, void *session, PNCB ncb); | |
| typedef UCHAR (*NetBIOSRecv)(void *adapter, void *session, PNCB ncb); | |
| typedef UCHAR (*NetBIOSHangup)(void *adapter, void *session); | |
| /* The last function called on an adapter; it is not called reentrantly, and | |
| * no new calls will be made on the adapter once this has been entered. Clean | |
| * up any resources allocated for the adapter here. | |
| */ | |
| typedef void (*NetBIOSCleanupAdapter)(void *adapter); | |
| typedef struct _NetBIOSTransport | |
| { | |
| NetBIOSEnum enumerate; | |
| NetBIOSAstat astat; | |
| NetBIOSFindName findName; | |
| NetBIOSCall call; | |
| NetBIOSSend send; | |
| NetBIOSRecv recv; | |
| NetBIOSHangup hangup; | |
| NetBIOSCleanupAdapter cleanupAdapter; | |
| NetBIOSCleanup cleanup; | |
| } NetBIOSTransport; | |
| /* Transport-specific functions. When adding a transport, add a call to its | |
| * init function in netapi32's DllMain. The transport can do any global | |
| * initialization it needs here. It should call NetBIOSRegisterTransport to | |
| * register itself with NetBIOS. | |
| */ | |
| /* NetBIOS-over-TCP/IP (NetBT) functions */ | |
| /* Not defined by MS, so make my own private define: */ | |
| #define TRANSPORT_NBT "MNBT" | |
| void NetBTInit(void); | |
| #endif /* ndef __WINE_NETBIOS_H__ */ |