[MSAFD] Implement async connect
[reactos.git] / reactos / dll / win32 / msafd / msafd.h
index 52d3330..86d7d62 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * COPYRIGHT:   See COPYING in the top level directory
  * PROJECT:     ReactOS Ancillary Function Driver DLL
- * FILE:        include/msafd.h
+ * FILE:        dll/win32/msafd/msafd.h
  * PURPOSE:     Ancillary Function Driver DLL header
  */
 
@@ -27,6 +27,7 @@
 #include <wsahelp.h>
 #include <tdi.h>
 #include <afd/shared.h>
+#include <mswsock.h>
 #include "include/helpers.h"
 
 extern HANDLE GlobalHeap;
@@ -47,6 +48,7 @@ typedef enum _SOCKET_STATE {
 
 typedef struct _SOCK_SHARED_INFO {
     SOCKET_STATE                               State;
+    LONG                                               RefCount;
     INT                                                        AddressFamily;
     INT                                                        SocketType;
     INT                                                        Protocol;
@@ -72,7 +74,6 @@ typedef struct _SOCK_SHARED_INFO {
                BOOLEAN                                 UseSAN:1;
     }; // Flags
     DWORD                                              CreateFlags;
-    DWORD                                              CatalogEntryId;
     DWORD                                              ServiceFlags1;
     DWORD                                              ProviderFlags;
     GROUP                                              GroupID;
@@ -85,12 +86,14 @@ typedef struct _SOCK_SHARED_INFO {
     UINT                                               wMsg;
     LONG                                               AsyncEvents;
     LONG                                               AsyncDisabledEvents;
+    SOCKADDR                                   WSLocalAddress;
+    SOCKADDR                                   WSRemoteAddress;
 } SOCK_SHARED_INFO, *PSOCK_SHARED_INFO;
 
 typedef struct _SOCKET_INFORMATION {
-       ULONG RefCount;
        SOCKET Handle;
-       SOCK_SHARED_INFO SharedData;
+       PSOCK_SHARED_INFO SharedData;
+       HANDLE SharedDataHandle;
        DWORD HelperEvents;
        PHELPER_DATA HelperData;
        PVOID HelperContext;
@@ -104,8 +107,7 @@ typedef struct _SOCKET_INFORMATION {
        CRITICAL_SECTION Lock;
        PVOID SanData;
        BOOL TrySAN;
-       SOCKADDR WSLocalAddress;
-       SOCKADDR WSRemoteAddress;
+       WSAPROTOCOL_INFOW ProtocolInfo;
        struct _SOCKET_INFORMATION *NextSocket;
 } SOCKET_INFORMATION, *PSOCKET_INFORMATION;
 
@@ -126,6 +128,19 @@ typedef struct _ASYNC_DATA {
        AFD_POLL_INFO AsyncSelectInfo;
 } ASYNC_DATA, *PASYNC_DATA;
 
+typedef struct _AFDAPCCONTEXT
+{
+    LPWSAOVERLAPPED lpOverlapped;
+    LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine;
+    PSOCKET_INFORMATION lpSocket;
+} AFDAPCCONTEXT, *PAFDAPCCONTEXT;
+
+typedef struct _AFDCONNECTAPCCONTEXT
+{
+    PAFD_CONNECT_INFO lpConnectInfo;
+    PSOCKET_INFORMATION lpSocket;
+} AFDCONNECTAPCCONTEXT, *PAFDCONNECTAPCCONTEXT;
+
 SOCKET
 WSPAPI
 WSPAccept(
@@ -425,7 +440,9 @@ int GetSocketInformation(
        ULONG                           AfdInformationClass,
     PBOOLEAN            Boolean      OPTIONAL,
        PULONG              Ulong        OPTIONAL,
-       PLARGE_INTEGER          LargeInteger OPTIONAL
+       PLARGE_INTEGER          LargeInteger OPTIONAL,
+    LPWSAOVERLAPPED     Overlapped   OPTIONAL,
+    LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
 );
 
 int SetSocketInformation(
@@ -433,7 +450,9 @@ int SetSocketInformation(
        ULONG                           AfdInformationClass,
     PBOOLEAN            Boolean      OPTIONAL,
        PULONG                          Ulong            OPTIONAL,
-       PLARGE_INTEGER          LargeInteger OPTIONAL
+       PLARGE_INTEGER          LargeInteger OPTIONAL,
+    LPWSAOVERLAPPED     Overlapped   OPTIONAL,
+    LPWSAOVERLAPPED_COMPLETION_ROUTINE CompletionRoutine OPTIONAL
 );
 
 int CreateContext(