text: /*++
  
  Copyright (c) Microsoft.  All rights reserved.
  
  Module Name:
  
      iiswebsocket.h
  
  Abstract:
  
      Header file for IIS Websocket API's.
  
  --*/
  
  #ifndef _IISWEBSOCKET_H
  
  #ifdef _MSC_VER
  #pragma once
  #endif
  
  #pragma region Desktop Family
  #if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP)
  
  #if NTDDI_VERSION >= NTDDI_WIN8
  
  #define IIS_WEBSOCKET L"websockets"
  #define IIS_WEBSOCKET_SERVER_VARIABLE "IIS_WEBSOCK"
  
  typedef
  VOID
  (WINAPI * PFN_WEBSOCKET_COMPLETION)(
      HRESULT     hrError,
      VOID *      pvCompletionContext,
      DWORD       cbIO,
      BOOL        fUTF8Encoded,
      BOOL        fFinalFragment,
      BOOL        fClose
  );
  
  class IWebSocketContext : public IHttpStoredContext
  {
  public:
  
      virtual
      HRESULT
      WriteFragment(
          _In_    VOID *                   pData,
          _Inout_ DWORD *                  pcbSent,
          _In_    BOOL                     fAsync,
          _In_    BOOL                     fUTF8Encoded,
          _In_    BOOL                     fFinalFragment,
          _In_    PFN_WEBSOCKET_COMPLETION pfnCompletion        = NULL,
          _In_    VOID *                   pvCompletionContext  = NULL, 
          _Out_   BOOL *                   pfCompletionExpected = NULL
      ) = 0;
  
      virtual
      HRESULT
      ReadFragment(
          _Out_   VOID *                   pData,
          _Inout_ DWORD *                  pcbData,
          _In_    BOOL                     fAsync,
          _Out_   BOOL *                   pfUTF8Encoded,
          _Out_   BOOL *                   pfFinalFragment,
          _Out_   BOOL *                   pfConnectionClose,
          _In_    PFN_WEBSOCKET_COMPLETION pfnCompletion        = NULL,
          _In_    VOID *                   pvCompletionContext  = NULL,
          _Out_   BOOL *                   pfCompletionExpected = NULL
      ) = 0;
  
      virtual
      HRESULT
      SendConnectionClose(
          _In_    BOOL                     fAsync,
          _In_    USHORT                   uStatusCode,
          _In_    LPCWSTR                  pszReason            = NULL,
          _In_    PFN_WEBSOCKET_COMPLETION pfnCompletion        = NULL,
          _In_    VOID *                   pvCompletionContext  = NULL,
          _Out_   BOOL *                   pfCompletionExpected = NULL
      ) = 0;
  
      virtual
      HRESULT
      GetCloseStatus(
          _Out_   USHORT *              pStatusCode,
          _Out_   LPCWSTR *             ppszReason = NULL,
          _Out_   USHORT *              pcchReason = NULL
      ) = 0;
  
      virtual
      VOID
      CloseTcpConnection(
          VOID
      ) = 0;
  
      virtual
      VOID
      CancelOutstandingIO(
          VOID
      ) = 0;
  };
  
  #endif /* NTDDI_VERSION >= NTDDI_WIN8 */
  
  #endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) */
  #pragma endregion
  
  #define _IISWEBSOCKET_H
  #endif /* _IISWEBSOCKET_H */