You've already forked linux-packaging-mono
Imported Upstream version 4.6.0.125
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
This commit is contained in:
parent
a569aebcfd
commit
e79aa3c0ed
@ -0,0 +1,103 @@
|
||||
//------------------------------------------------------------------------------
|
||||
// <copyright file="UnmanagedWebSocketContext.cs" company="Microsoft">
|
||||
// Copyright (c) Microsoft Corporation. All rights reserved.
|
||||
// </copyright>
|
||||
//------------------------------------------------------------------------------
|
||||
|
||||
namespace System.Web.WebSockets {
|
||||
using System;
|
||||
using System.Runtime.InteropServices;
|
||||
using System.Security;
|
||||
using System.Security.Permissions;
|
||||
|
||||
// Concrete implementation of IUnmanagedWebSocketContext, implemented by IIS8 unmanaged WebSocket module
|
||||
// SECURITY NOTE: All parameters are assumed to have been validated by the caller
|
||||
|
||||
[SecurityPermission(SecurityAction.LinkDemand, UnmanagedCode = true)]
|
||||
internal sealed class UnmanagedWebSocketContext : IUnmanagedWebSocketContext {
|
||||
|
||||
// the 'this' parameter for the unmanaged interface
|
||||
private readonly IntPtr _pWebSocketContext;
|
||||
|
||||
internal UnmanagedWebSocketContext(IntPtr pWebSocketContext) {
|
||||
_pWebSocketContext = pWebSocketContext;
|
||||
}
|
||||
|
||||
public int WriteFragment(IntPtr pData, ref int pcbSent, bool fAsync, bool fUtf8Encoded, bool fFinalFragment, IntPtr pfnCompletion, IntPtr pvCompletionContext, out bool pfCompletionExpected) {
|
||||
return IIS.MgdWebSocketWriteFragment(_pWebSocketContext, pData, ref pcbSent, fAsync, fUtf8Encoded, fFinalFragment, pfnCompletion, pvCompletionContext, out pfCompletionExpected);
|
||||
}
|
||||
|
||||
public int ReadFragment(IntPtr pData, ref int pcbData, bool fAsync, out bool pfUtf8Encoded, out bool pfFinalFragment, out bool pfConnectionClose, IntPtr pfnCompletion, IntPtr pvCompletionContext, out bool pfCompletionExpected) {
|
||||
return IIS.MgdWebSocketReadFragment(_pWebSocketContext, pData, ref pcbData, fAsync, out pfUtf8Encoded, out pfFinalFragment, out pfConnectionClose, pfnCompletion, pvCompletionContext, out pfCompletionExpected);
|
||||
}
|
||||
|
||||
public int SendConnectionClose(bool fAsync, ushort uStatusCode, string szReason, IntPtr pfnCompletion, IntPtr pvCompletionContext, out bool pfCompletionExpected) {
|
||||
return IIS.MgdWebSocketSendConnectionClose(_pWebSocketContext, fAsync, uStatusCode, szReason, pfnCompletion, pvCompletionContext, out pfCompletionExpected);
|
||||
}
|
||||
|
||||
public int GetCloseStatus(out ushort pStatusCode, out IntPtr ppszReason, out ushort pcchReason) {
|
||||
return IIS.MgdWebSocketGetCloseStatus(_pWebSocketContext, out pStatusCode, out ppszReason, out pcchReason);
|
||||
}
|
||||
|
||||
public void CloseTcpConnection() {
|
||||
IIS.MgdWebSocketCloseTcpConnection(_pWebSocketContext);
|
||||
}
|
||||
|
||||
// API documentation for each method can be found in ndp/fx/src/xsp/webengine/mgdexports.cxx.
|
||||
[SuppressUnmanagedCodeSecurity]
|
||||
private static class IIS {
|
||||
private const string _IIS_NATIVE_DLL = ModName.MGDENG_FULL_NAME;
|
||||
|
||||
// Write a data fragment to the provided IWebSocketContext.
|
||||
[DllImport(_IIS_NATIVE_DLL)]
|
||||
internal static extern int MgdWebSocketWriteFragment(
|
||||
IntPtr pContext,
|
||||
IntPtr pData,
|
||||
ref int pcbSent,
|
||||
bool fAsync,
|
||||
bool fUTF8Encoded,
|
||||
bool fFinalFragment,
|
||||
IntPtr pfnCompletion,
|
||||
IntPtr pvCompletionContext,
|
||||
out bool pfCompletionExpected);
|
||||
|
||||
// Reads a data fragment from the provided IWebSocketContext.
|
||||
[DllImport(_IIS_NATIVE_DLL)]
|
||||
internal static extern int MgdWebSocketReadFragment(
|
||||
IntPtr pContext,
|
||||
IntPtr pData,
|
||||
ref int pcbData,
|
||||
bool fAsync,
|
||||
out bool pfUTF8Encoded,
|
||||
out bool pfFinalFragment,
|
||||
out bool pfConnectionClose,
|
||||
IntPtr pfnCompletion,
|
||||
IntPtr pvCompletionContext,
|
||||
out bool pfCompletionExpected);
|
||||
|
||||
// Sends a CLOSE frame to the provided IWebSocketContext.
|
||||
[DllImport(_IIS_NATIVE_DLL)]
|
||||
internal static extern int MgdWebSocketSendConnectionClose(
|
||||
IntPtr pContext,
|
||||
bool fAsync,
|
||||
ushort pStatusCode,
|
||||
[MarshalAs(UnmanagedType.LPWStr)] string pszReason,
|
||||
IntPtr pfnCompletion,
|
||||
IntPtr pvCompletionContext,
|
||||
out bool pfCompletionExpected);
|
||||
|
||||
// Gets information on the CLOSE frame sent from the client to the server.
|
||||
[DllImport(_IIS_NATIVE_DLL)]
|
||||
internal static extern int MgdWebSocketGetCloseStatus(
|
||||
IntPtr pContext,
|
||||
out ushort pStatusCode,
|
||||
out IntPtr ppszReason,
|
||||
out ushort pcchReason);
|
||||
|
||||
// Closes the TCP connection used by the provided IWebSocketContext.
|
||||
[DllImport(_IIS_NATIVE_DLL)]
|
||||
internal static extern void MgdWebSocketCloseTcpConnection(
|
||||
IntPtr pContext);
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user