First cut at NetWkstaTransportEnum
Uwe Bonnes
bon at elektron.ikp.physik.tu-darmstadt.de
Fri Feb 7 14:06:02 CST 2003
Changelog:
dlls/netapi32/netapi32.c
Separate "Enumerate Hardware Addresses" as function, as
other netapi32 function need it
dlls/netapi32/wksta.c:
Implement level 0 of NetWkstaTransportEnum
This is needed by Altera Quartus
--
Uwe Bonnes bon at elektron.ikp.physik.tu-darmstadt.de
Institut fuer Kernphysik Schlossgartenstrasse 9 64289 Darmstadt
--------- Tel. 06151 162516 -------- Fax. 06151 164321 ----------
Index: wine/dlls/netapi32/netapi32.c
===================================================================
RCS file: /home/wine/wine/dlls/netapi32/netapi32.c,v
retrieving revision 1.8
diff -u -r1.8 netapi32.c
--- wine/dlls/netapi32/netapi32.c 4 Nov 2002 23:53:44 -0000 1.8
+++ wine/dlls/netapi32/netapi32.c 12 Jan 2003 20:13:37 -0000
@@ -99,22 +99,15 @@
# endif /* SIOCGENADDR */
# endif /* SIOCGIFHWADDR */
-static UCHAR NETBIOS_Enum(PNCB ncb)
+int enum_hw(void)
{
+ int ret = 0;
#ifdef HAVE_NET_IF_H
int sd;
struct ifreq ifr, *ifrp;
struct ifconf ifc;
unsigned char buf[1024];
int i, ofs;
-#endif
- LANA_ENUM *lanas = (PLANA_ENUM) ncb->ncb_buffer;
-
- TRACE("NCBENUM\n");
-
- lanas->length = 0;
-
-#ifdef HAVE_NET_IF_H
/* BSD 4.4 defines the size of an ifreq to be
* max(sizeof(ifreq), sizeof(ifreq.ifr_name)+ifreq.ifr_addr.sa_len
* However, under earlier systems, sa_len isn't present, so
@@ -156,13 +149,45 @@
a[0],a[1],a[2],a[3],a[4],a[5]);
NETBIOS_Adapter[i].valid = TRUE;
- lanas->lana[lanas->length] = i;
- lanas->length++;
+ ret++;
}
ofs += ifreq_size(ifr);
}
close(sd);
+ TRACE("found %d adapters\n",ret);
#endif /* HAVE_NET_IF_H */
+ return ret;
+}
+
+void wprint_mac(WCHAR* buffer, int index)
+{
+ buffer[0]=(WCHAR)NETBIOS_Adapter[index].address[5]>>4;
+ buffer[1]=(WCHAR)NETBIOS_Adapter[index].address[5]&& 0xf;
+ buffer[2]=(WCHAR)NETBIOS_Adapter[index].address[4]>>4;
+ buffer[3]=(WCHAR)NETBIOS_Adapter[index].address[4]&& 0xf;
+ buffer[4]=(WCHAR)NETBIOS_Adapter[index].address[3]>>4;
+ buffer[5]=(WCHAR)NETBIOS_Adapter[index].address[3]&& 0xf;
+ buffer[6]=(WCHAR)NETBIOS_Adapter[index].address[2]>>4;
+ buffer[7]=(WCHAR)NETBIOS_Adapter[index].address[2]&& 0xf;
+ buffer[8]=(WCHAR)NETBIOS_Adapter[index].address[1]>>4;
+ buffer[9]=(WCHAR)NETBIOS_Adapter[index].address[1]&& 0xf;
+ buffer[10]=(WCHAR)NETBIOS_Adapter[index].address[0]>>4;
+ buffer[11]=(WCHAR)NETBIOS_Adapter[index].address[0]&& 0xf;
+ buffer[12]=(WCHAR)0;
+}
+static UCHAR NETBIOS_Enum(PNCB ncb)
+{
+ int i;
+ LANA_ENUM *lanas = (PLANA_ENUM) ncb->ncb_buffer;
+
+ TRACE("NCBENUM\n");
+
+ lanas->length = 0;
+ for (i = 0; i < enum_hw(); i++)
+ {
+ lanas->lana[lanas->length] = i;
+ lanas->length++;
+ }
return NRC_GOODRET;
}
Index: wine/include/lmwksta.h
===================================================================
RCS file: /home/wine/wine/include/lmwksta.h,v
retrieving revision 1.1
diff -u -r1.1 lmwksta.h
--- wine/include/lmwksta.h 11 Sep 2002 02:35:18 -0000 1.1
+++ wine/include/lmwksta.h 12 Jan 2003 20:13:37 -0000
@@ -28,6 +28,14 @@
/* NetBIOS */
UCHAR WINAPI Netbios(PNCB pncb);
+typedef struct _WKSTA_TRANSPORT_INFO_0 {
+ DWORD wkti0_quality_of_service;
+ DWORD wkti0_number_of_vcs;
+ LPWSTR wkti0_transport_name;
+ LPWSTR wkti0_transport_address;
+ BOOL wkti0_wan_ish;
+} WKSTA_TRANSPORT_INFO_0, *PWKSTA_TRANSPORT_INFO_0, *LPWKSTA_TRANSPORT_INFO_0;
+
typedef struct _WKSTA_USER_INFO_0 {
LPWSTR wkui0_username;
} WKSTA_USER_INFO_0, *PWKSTA_USER_INFO_0, *LPWKSTA_USER_INFO_0;
Index: wine/dlls/netapi32/netapi32.spec
===================================================================
RCS file: /home/wine/wine/dlls/netapi32/netapi32.spec,v
retrieving revision 1.8
diff -u -w -r1.8 netapi32.spec
--- wine/dlls/netapi32/netapi32.spec 13 Dec 2002 20:28:03 -0000 1.8
+++ wine/dlls/netapi32/netapi32.spec 7 Feb 2003 19:31:06 -0000
@@ -198,7 +198,7 @@
@ stub NetWkstaSetInfo
@ stub NetWkstaTransportAdd
@ stub NetWkstaTransportDel
-@ stub NetWkstaTransportEnum
+@ stdcall NetWkstaTransportEnum (wstr long ptr long ptr ptr ptr) NetWkstaTransportEnum
@ stub NetWkstaUserEnum
@ stdcall NetWkstaUserGetInfo(wstr long ptr) NetWkstaUserGetInfo
@ stub NetWkstaUserSetInfo
Index: wine/dlls/netapi32/wksta.c
===================================================================
RCS file: /home/wine/wine/dlls/netapi32/wksta.c,v
retrieving revision 1.4
diff -u -w -r1.4 wksta.c
--- wine/dlls/netapi32/wksta.c 24 Sep 2002 18:29:39 -0000 1.4
+++ wine/dlls/netapi32/wksta.c 7 Feb 2003 19:55:42 -0000
@@ -59,6 +59,76 @@
}
}
+int enum_hw(void);
+void wprint_mac(WCHAR* buffer, int index);
+
+NET_API_STATUS WINAPI
+NetWkstaTransportEnum(LPCWSTR ServerName, DWORD level, LPBYTE* pbuf,
+ DWORD prefmaxlen, LPDWORD read_entries,
+ LPDWORD total_entries, LPDWORD hresume)
+{
+ FIXME(":%s, 0x%08lx, %p, 0x%08lx, %p, %p, %p\n", debugstr_w(ServerName),
+ level, pbuf, prefmaxlen, read_entries, total_entries,hresume);
+ if (!NETAPI_IsLocalComputer(ServerName))
+ {
+ FIXME(":not implemented for non-local computers\n");
+ return ERROR_INVALID_LEVEL;
+ }
+ else
+ {
+ if (hresume && *hresume)
+ {
+ FIXME(":resume handle not implemented\n");
+ return ERROR_INVALID_LEVEL;
+ }
+
+ switch (level)
+ {
+ case 0: /* transport info */
+ {
+ PWKSTA_TRANSPORT_INFO_0 ti;
+ int i,size_needed,n_adapt = enum_hw();
+
+ size_needed = n_adapt * (sizeof(WKSTA_TRANSPORT_INFO_0)
+ * 13 * sizeof (WCHAR));
+ if (prefmaxlen == MAX_PREFERRED_LENGTH)
+ NetApiBufferAllocate( size_needed, (LPVOID *) pbuf);
+ else
+ {
+ if (size_needed > prefmaxlen)
+ return ERROR_MORE_DATA;
+ NetApiBufferAllocate(prefmaxlen,
+ (LPVOID *) pbuf);
+ }
+ for (i = 0; i <n_adapt; i++)
+ {
+ ti = (PWKSTA_TRANSPORT_INFO_0)
+ ((PBYTE) *pbuf + i * sizeof(WKSTA_TRANSPORT_INFO_0));
+ ti->wkti0_quality_of_service=0;
+ ti->wkti0_number_of_vcs=0;
+ ti->wkti0_transport_name=NULL;
+ ti->wkti0_transport_address= (LPWSTR)
+ ((PBYTE )*pbuf + n_adapt* sizeof(WKSTA_TRANSPORT_INFO_0)
+ + i * 13 * sizeof (WCHAR));
+ ti->wkti0_wan_ish=TRUE; /*TCPIP/NETBIOS Protocoll*/
+ wprint_mac(ti->wkti0_transport_address,i);
+ TRACE("BON:%d of %d:ti at %p transport_address at %p %s\n",i,n_adapt,
+ ti, ti->wkti0_transport_address, debugstr_w(ti->wkti0_transport_address));
+ }
+ if(read_entries)*read_entries = n_adapt;
+ if(total_entries)*total_entries = n_adapt;
+ if(hresume) *hresume= 0;
+ break;
+ }
+ default:
+ ERR("Invalid level %ld is specified\n", level);
+ return ERROR_INVALID_LEVEL;
+ }
+ return NERR_Success;
+ }
+}
+
+
/************************************************************
* NetWkstaUserGetInfo (NETAPI32.@)
*/
More information about the wine-patches
mailing list