skeleton for TCP communicator
[oweals/gnunet.git] / src / include / winproc.h
index 5dd29df5669838cf50a58cd624c1da1c4b779677..3910321d77e7794057160d5809f063d9cdf84448 100644 (file)
@@ -1,27 +1,28 @@
 /*
      This file is part of GNUnet.
-     (C) 2001, 2002, 2003, 2004, 2005 Christian Grothoff (and other contributing authors)
+     Copyright (C) 2001, 2002, 2003, 2004, 2005 GNUnet e.V.
 
-     GNUnet is free software; you can redistribute it and/or modify
-     it under the terms of the GNU General Public License as published
-     by the Free Software Foundation; either version 2, or (at your
-     option) any later version.
+     GNUnet is free software: you can redistribute it and/or modify it
+     under the terms of the GNU Affero General Public License as published
+     by the Free Software Foundation, either version 3 of the License,
+     or (at your option) any later version.
 
      GNUnet 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
-     General Public License for more details.
+     Affero General Public License for more details.
+    
+     You should have received a copy of the GNU Affero General Public License
+     along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-     You should have received a copy of the GNU General Public License
-     along with GNUnet; see the file COPYING.  If not, write to the
-     Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-     Boston, MA 02111-1307, USA.
+     SPDX-License-Identifier: AGPL3.0-or-later
 */
 
 /**
- * @file include/winproc.h
- * @brief Definitions for MS Windows
  * @author Nils Durner
+ *
+ * @file
+ * Definitions for MS Windows
  */
 
 #ifndef _WINPROC_H
 #include <sys/timeb.h>
 #include <time.h>
 #include <dirent.h>
+#ifndef FD_SETSIZE
+#define FD_SETSIZE 1024
+#endif
+#include <winsock2.h>
+#include <ws2tcpip.h>
 #include <windows.h>
-#include <winsock.h>
 #include <winerror.h>
 #include <iphlpapi.h>
 #include <shlobj.h>
 #include <objbase.h>
 #include <sys/param.h>          /* #define BYTE_ORDER */
-#include <Ntsecapi.h>
+#include <ntsecapi.h>
 #include <lm.h>
-#include <Aclapi.h>
+#include <aclapi.h>
 
 
 #ifdef __cplusplus
@@ -55,13 +60,16 @@ extern "C"
 #define MAX_NAME_LENGTH 25
 #endif
 
-  typedef DWORD WINAPI (*TNtQuerySystemInformation) (int, PVOID, ULONG,
-                                                     PULONG);
+  typedef DWORD WINAPI (*TNtQuerySystemInformation) (int, PVOID, ULONG, PULONG);
   typedef DWORD WINAPI (*TGetIfEntry) (PMIB_IFROW pIfRow);
   typedef DWORD WINAPI (*TGetIpAddrTable) (PMIB_IPADDRTABLE pIpAddrTable,
                                            PULONG pdwSize, BOOL bOrder);
   typedef DWORD WINAPI (*TGetIfTable) (PMIB_IFTABLE pIfTable, PULONG pdwSize,
                                        BOOL bOrder);
+  typedef DWORD WINAPI (*TGetBestInterfaceEx) (struct sockaddr *, PDWORD);
+  /* TODO: Explicitly import -A variants (i.e. TCreateHardLinkA) or -W
+   * variants (TCreateHardLinkW), etc.
+   */
   typedef DWORD WINAPI (*TCreateHardLink) (LPCTSTR lpFileName,
                                            LPCTSTR lpExistingFileName,
                                            LPSECURITY_ATTRIBUTES
@@ -99,23 +107,19 @@ extern "C"
   typedef SC_HANDLE WINAPI (*TOpenService) (SC_HANDLE hSCManager,
                                             LPCTSTR lpServiceName,
                                             DWORD dwDesiredAccess);
-  typedef DWORD WINAPI (*TGetBestInterface) (IPAddr dwDestAddr,
-                                             PDWORD pdwBestIfIndex);
   typedef DWORD WINAPI (*TGetAdaptersInfo) (PIP_ADAPTER_INFO pAdapterInfo,
                                             PULONG pOutBufLen);
-  typedef NET_API_STATUS WINAPI (*TNetUserAdd) (LPCWSTR, DWORD, PBYTE,
-                                                PDWORD);
+  typedef NET_API_STATUS WINAPI (*TNetUserAdd) (LPCWSTR, DWORD, PBYTE, PDWORD);
   typedef NET_API_STATUS WINAPI (*TNetUserSetInfo) (LPCWSTR servername,
                                                     LPCWSTR username,
                                                     DWORD level, LPBYTE buf,
-                                                    LPDWORD parm_err);
+                                                    LPDWORD param_err);
   typedef NTSTATUS NTAPI (*TLsaOpenPolicy) (PLSA_UNICODE_STRING,
-                                            PLSA_OBJECT_ATTRIBUTES,
-                                            ACCESS_MASK, PLSA_HANDLE);
+                                            PLSA_OBJECT_ATTRIBUTES, ACCESS_MASK,
+                                            PLSA_HANDLE);
   typedef NTSTATUS NTAPI (*TLsaAddAccountRights) (LSA_HANDLE, PSID,
                                                   PLSA_UNICODE_STRING, ULONG);
-  typedef NTSTATUS NTAPI (*TLsaRemoveAccountRights) (LSA_HANDLE, PSID,
-                                                     BOOLEAN,
+  typedef NTSTATUS NTAPI (*TLsaRemoveAccountRights) (LSA_HANDLE, PSID, BOOLEAN,
                                                      PLSA_UNICODE_STRING,
                                                      ULONG);
   typedef NTSTATUS NTAPI (*TLsaClose) (LSA_HANDLE);
@@ -140,8 +144,7 @@ extern "C"
                                                      LPBOOL lpbDaclPresent,
                                                      PACL * pDacl,
                                                      LPBOOL lpbDaclDefaulted);
-  typedef BOOL WINAPI (*TGetAclInformation) (PACL pAcl,
-                                             LPVOID pAclInformation,
+  typedef BOOL WINAPI (*TGetAclInformation) (PACL pAcl, LPVOID pAclInformation,
                                              DWORD nAclInformationLength,
                                              ACL_INFORMATION_CLASS
                                              dwAclInformationClass);
@@ -161,6 +164,7 @@ extern "C"
                                                 PSID psidGroup, PACL pDacl,
                                                 PACL pSacl);
 
+  extern TGetBestInterfaceEx GNGetBestInterfaceEx;
   extern TNtQuerySystemInformation GNNtQuerySystemInformation;
   extern TGetIfEntry GNGetIfEntry;
   extern TGetIpAddrTable GNGetIpAddrTable;
@@ -175,8 +179,7 @@ extern "C"
   extern TStartServiceCtrlDispatcher GNStartServiceCtrlDispatcher;
   extern TControlService GNControlService;
   extern TOpenService GNOpenService;
-  extern TGetBestInterface GNGetBestInterface;
-  extern TGetAdaptersInfo GGetAdaptersInfo;
+  extern TGetAdaptersInfo GNGetAdaptersInfo;
   extern TNetUserAdd GNNetUserAdd;
   extern TNetUserSetInfo GNNetUserSetInfo;
   extern TLsaOpenPolicy GNLsaOpenPolicy;
@@ -198,16 +201,34 @@ extern "C"
 
   BOOL CreateShortcut (const char *pszSrc, const char *pszDest);
   BOOL DereferenceShortcut (char *pszShortcut);
-  long QueryRegistry (HKEY hMainKey, char *pszKey, char *pszSubKey,
+  long QueryRegistry (HKEY hMainKey, const char *pszKey, const char *pszSubKey,
                       char *pszBuffer, long *pdLength);
   int ListNICs (void (*callback) (void *, const char *, int), void *cls);
   BOOL AddPathAccessRights (char *lpszFileName, char *lpszAccountName,
                             DWORD dwAccessMask);
   char *winErrorStr (const char *prefix, int dwErr);
-
+  void EnumNICs (PMIB_IFTABLE * pIfTable, PMIB_IPADDRTABLE * pAddrTable);
+
+#define ENUMNICS3_MASK_OK 0x01
+#define ENUMNICS3_BCAST_OK 0x02
+
+  struct EnumNICs3_results
+  {
+    unsigned char flags;
+    int is_default;
+    char pretty_name[1001];
+    size_t addr_size;
+    SOCKADDR_STORAGE address;
+    SOCKADDR_STORAGE mask;
+    SOCKADDR_STORAGE broadcast;
+  };
+
+  int EnumNICs3 (struct EnumNICs3_results **, int *EnumNICs3_results_count);
+  void EnumNICs3_free (struct EnumNICs3_results *);
   int GNInitWinEnv ();
   void GNShutdownWinEnv ();
 
+  BOOL SafeTerminateProcess (HANDLE hProcess, UINT uExitCode, DWORD dwTimeout);
 #ifdef __cplusplus
 }
 #endif