mirror of
https://github.com/Jackett/Jackett.git
synced 2025-09-17 17:34:09 +02:00
Feature/netcore preparation (#2035)
* Move to use package reference for restoring nuget packages. * Return a task result for this async method. * Update to a supported version of the .NET Framework. This also has the side effect of allowing us to automatically generate our binding redirects on build. * Set the solution to target VS2017 * Update test solution csproj file to support being built through MSBuild 15 * Move to use package reference for restoring nuget packages. * Return a task result for this async method. * Update to a supported version of the .NET Framework. This also has the side effect of allowing us to automatically generate our binding redirects on build. * Set the solution to target VS2017 * Update test solution csproj file to support being built through MSBuild 15 * DateTimeRoutines does not have Nuget packages that support .NET Standard (and therefore .NET Core). We will have to include them for now until we can get rid of this dependency. * Move the interfaces into their own files. This will be useful when we share them between the .NET Core and .NET Framework WebAPI * Stage services that need to point to the new interface namespace. * Update CurlSharp to fix memory leak issue and support better runtime compatibility with OSX and Linux * Start spliting some interfaces into their own files - this will help by allowing us to split them out in the future into a seperate project so the actual implementations can stay within their respective architectures when required
This commit is contained in:

committed by
flightlevel

parent
7829643104
commit
8a6b9d4de7
@@ -2,8 +2,9 @@
|
||||
*
|
||||
* CurlS#arp
|
||||
*
|
||||
* Copyright (c) 2014 Dr. Masroor Ehsan (masroore@gmail.com)
|
||||
* Copyright (c) 2013-2017 Dr. Masroor Ehsan (masroore@gmail.com)
|
||||
* Portions copyright (c) 2004, 2005 Jeff Phillips (jeff@jeffp.net)
|
||||
* Portions copyright (c) 2017 Katelyn Gigante (https://github.com/silasary)
|
||||
*
|
||||
* This software is licensed as described in the file LICENSE, which you
|
||||
* should have received as part of this distribution.
|
||||
@@ -20,383 +21,598 @@
|
||||
//#define USE_LIBCURLSHIM
|
||||
|
||||
using System;
|
||||
using System.IO;
|
||||
using System.Reflection;
|
||||
using System.Runtime.InteropServices;
|
||||
|
||||
namespace CurlSharp
|
||||
{
|
||||
/// <summary>
|
||||
/// P/Invoke signatures.
|
||||
/// </summary>
|
||||
internal static unsafe class NativeMethods
|
||||
{
|
||||
#if WIN64
|
||||
private const string CURL_LIB = "libcurl64.dll";
|
||||
/// <summary>
|
||||
/// P/Invoke signatures.
|
||||
/// </summary>
|
||||
internal static unsafe class NativeMethods
|
||||
{
|
||||
private const string LIBCURL = "libcurl";
|
||||
|
||||
private const string LIBCURLSHIM = "libcurlshim";
|
||||
|
||||
private const string LIBC_LINUX = "libc";
|
||||
|
||||
|
||||
|
||||
#if USE_LIBCURLSHIM
|
||||
private const string CURLSHIM_LIB = "libcurlshim64.dll";
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
||||
#else
|
||||
#if LINUX
|
||||
private const string CURL_LIB = "libcurl";
|
||||
#else
|
||||
private const string CURL_LIB = "libcurl.dll";
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
#if USE_LIBCURLSHIM
|
||||
private const string CURLSHIM_LIB = "libcurlshim.dll";
|
||||
#endif
|
||||
#endif
|
||||
#endif
|
||||
#if !USE_LIBCURLSHIM
|
||||
#if LINUX
|
||||
private const string WINSOCK_LIB = "libc";
|
||||
#else
|
||||
private const string WINSOCK_LIB = "ws2_32.dll";
|
||||
|
||||
private const string LIB_DIR_WIN64 = "amd64";
|
||||
|
||||
private const string LIB_DIR_WIN32 = "i386";
|
||||
|
||||
static NativeMethods()
|
||||
{
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
switch (RuntimeInformation.OSArchitecture)
|
||||
{
|
||||
case Architecture.X64:
|
||||
SetDllDirectory(Path.Combine(AssemblyDirectory, LIB_DIR_WIN64));
|
||||
break;
|
||||
case Architecture.X86:
|
||||
SetDllDirectory(Path.Combine(AssemblyDirectory, LIB_DIR_WIN32));
|
||||
break;
|
||||
}
|
||||
}
|
||||
#if USE_LIBCURLSHIM
|
||||
if (!RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
throw new InvalidOperationException("Can not run on other platform than Win NET");
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
|
||||
[return: MarshalAs(UnmanagedType.Bool)]
|
||||
private static extern bool SetDllDirectory(string lpPathName);
|
||||
|
||||
private static string AssemblyDirectory
|
||||
{
|
||||
get
|
||||
{
|
||||
var codeBase = typeof(NativeMethods).GetTypeInfo().Assembly.CodeBase;
|
||||
var uri = new UriBuilder(codeBase);
|
||||
var path = Uri.UnescapeDataString(uri.Path);
|
||||
return Path.GetDirectoryName(path);
|
||||
}
|
||||
}
|
||||
|
||||
// internal delegates from cURL
|
||||
#region curl_global_init
|
||||
|
||||
// libcurl imports
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlCode curl_global_init (int flags);
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_global_init(int flags);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_global_cleanup ();
|
||||
#endregion
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
|
||||
internal static extern IntPtr curl_escape (String url, int length);
|
||||
#region curl_global_cleanup
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
|
||||
internal static extern IntPtr curl_unescape (String url, int length);
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_global_cleanup();
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_free (IntPtr p);
|
||||
#endregion
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_version ();
|
||||
#region curl_easy_escape
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_easy_init ();
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
|
||||
public static extern IntPtr curl_easy_escape(IntPtr pEasy, string url, int length);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_easy_cleanup (IntPtr pCurl);
|
||||
#endregion
|
||||
|
||||
[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
|
||||
internal delegate int _CurlGenericCallback (IntPtr ptr, int sz, int nmemb, IntPtr userdata);
|
||||
|
||||
[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
|
||||
internal delegate int _CurlProgressCallback (
|
||||
IntPtr extraData, double dlTotal, double dlNow, double ulTotal, double ulNow);
|
||||
|
||||
[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
|
||||
internal delegate int _CurlDebugCallback (
|
||||
IntPtr ptrCurl, CurlInfoType infoType, string message, int size, IntPtr ptrUserData);
|
||||
|
||||
[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
|
||||
internal delegate int _CurlSslCtxCallback (IntPtr ctx, IntPtr parm);
|
||||
|
||||
[UnmanagedFunctionPointer (CallingConvention.Cdecl)]
|
||||
internal delegate CurlIoError _CurlIoctlCallback (CurlIoCommand cmd, IntPtr parm);
|
||||
|
||||
// curl_easy_setopt() overloads
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlCode curl_easy_setopt (IntPtr pCurl, CurlOption opt, IntPtr parm);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlCode curl_easy_setopt (IntPtr pCurl, CurlOption opt, string parm);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlCode curl_easy_setopt (IntPtr pCurl, CurlOption opt, byte[] parm);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlCode curl_easy_setopt (IntPtr pCurl, CurlOption opt, long parm);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlCode curl_easy_setopt (IntPtr pCurl, CurlOption opt, bool parm);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl, EntryPoint = "curl_easy_setopt")]
|
||||
internal static extern CurlCode curl_easy_setopt_cb (IntPtr pCurl, CurlOption opt, _CurlGenericCallback parm);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl, EntryPoint = "curl_easy_setopt")]
|
||||
internal static extern CurlCode curl_easy_setopt_cb (IntPtr pCurl, CurlOption opt, _CurlProgressCallback parm);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl, EntryPoint = "curl_easy_setopt")]
|
||||
internal static extern CurlCode curl_easy_setopt_cb (IntPtr pCurl, CurlOption opt, _CurlDebugCallback parm);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl, EntryPoint = "curl_easy_setopt")]
|
||||
internal static extern CurlCode curl_easy_setopt_cb (IntPtr pCurl, CurlOption opt, _CurlSslCtxCallback parm);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl, EntryPoint = "curl_easy_setopt")]
|
||||
internal static extern CurlCode curl_easy_setopt_cb (IntPtr pCurl, CurlOption opt, _CurlIoctlCallback parm);
|
||||
|
||||
#if !USE_LIBCURLSHIM
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlMultiCode curl_multi_fdset (IntPtr pmulti,
|
||||
[In, Out] ref fd_set read_fd_set,
|
||||
[In, Out] ref fd_set write_fd_set,
|
||||
[In, Out] ref fd_set exc_fd_set,
|
||||
[In, Out] ref int max_fd);
|
||||
|
||||
[StructLayout (LayoutKind.Sequential)]
|
||||
internal struct fd_set
|
||||
{
|
||||
internal uint fd_count;
|
||||
//[MarshalAs(UnmanagedType.ByValArray, SizeConst = FD_SETSIZE)] internal IntPtr[] fd_array;
|
||||
internal fixed uint fd_array[FD_SETSIZE];
|
||||
#region curl_easy_unescape
|
||||
|
||||
internal const int FD_SETSIZE = 64;
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
|
||||
public static extern IntPtr curl_easy_unescape(IntPtr pEasy, string url, int inLength, out int outLength);
|
||||
|
||||
internal void Cleanup ()
|
||||
{
|
||||
//fd_array = null;
|
||||
}
|
||||
#endregion
|
||||
|
||||
internal static fd_set Create ()
|
||||
{
|
||||
return new fd_set {
|
||||
//fd_array = new IntPtr[FD_SETSIZE],
|
||||
fd_count = 0
|
||||
};
|
||||
}
|
||||
|
||||
internal static fd_set Create (IntPtr socket)
|
||||
{
|
||||
var handle = Create ();
|
||||
handle.fd_count = 1;
|
||||
handle.fd_array [0] = (uint)socket;
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
|
||||
internal static void FD_ZERO (fd_set fds)
|
||||
{
|
||||
for (var i = 0; i < fd_set.FD_SETSIZE; i++) {
|
||||
//fds.fd_array[i] = (IntPtr) 0;
|
||||
fds.fd_array [i] = 0;
|
||||
}
|
||||
fds.fd_count = 0;
|
||||
}
|
||||
|
||||
[StructLayout (LayoutKind.Sequential)]
|
||||
internal struct timeval
|
||||
{
|
||||
/// <summary>
|
||||
/// Time interval, in seconds.
|
||||
/// </summary>
|
||||
internal int tv_sec;
|
||||
|
||||
/// <summary>
|
||||
/// Time interval, in microseconds.
|
||||
/// </summary>
|
||||
internal int tv_usec;
|
||||
|
||||
internal static timeval Create (int milliseconds)
|
||||
{
|
||||
return new timeval {
|
||||
tv_sec = milliseconds / 1000,
|
||||
tv_usec = (milliseconds % 1000) * 1000
|
||||
};
|
||||
}
|
||||
};
|
||||
|
||||
[DllImport (WINSOCK_LIB, EntryPoint = "select")]
|
||||
internal static extern int select (
|
||||
int nfds, // number of sockets, (ignored in winsock)
|
||||
[In, Out] ref fd_set readfds, // read sockets to watch
|
||||
[In, Out] ref fd_set writefds, // write sockets to watch
|
||||
[In, Out] ref fd_set exceptfds, // error sockets to watch
|
||||
ref timeval timeout);
|
||||
|
||||
//[DllImport(WINSOCK_LIB, EntryPoint = "select")]
|
||||
//internal static extern int select(int ndfs, fd_set* readfds, fd_set* writefds, fd_set* exceptfds, timeval* timeout);
|
||||
#endif
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlCode curl_easy_perform (IntPtr pCurl);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_easy_duphandle (IntPtr pCurl);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_easy_strerror (CurlCode err);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlCode curl_easy_getinfo (IntPtr pCurl, CurlInfo info, ref IntPtr pInfo);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlCode curl_easy_getinfo (IntPtr pCurl, CurlInfo info, ref double dblVal);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_easy_reset (IntPtr pCurl);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_multi_init ();
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlMultiCode curl_multi_cleanup (IntPtr pmulti);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlMultiCode curl_multi_add_handle (IntPtr pmulti, IntPtr peasy);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlMultiCode curl_multi_remove_handle (IntPtr pmulti, IntPtr peasy);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_multi_strerror (CurlMultiCode errorNum);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlMultiCode curl_multi_perform (IntPtr pmulti, ref int runningHandles);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_formfree (IntPtr pForm);
|
||||
|
||||
#if !USE_LIBCURLSHIM
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern int curl_formadd (ref IntPtr pHttppost, ref IntPtr pLastPost,
|
||||
int codeFirst, IntPtr bufFirst,
|
||||
int codeNext, IntPtr bufNext,
|
||||
int codeLast);
|
||||
#endif
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_share_init ();
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlShareCode curl_share_cleanup (IntPtr pShare);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_share_strerror (CurlShareCode errorCode);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlShareCode curl_share_setopt (IntPtr pShare, CurlShareOption optCode, IntPtr option);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
|
||||
internal static extern IntPtr curl_slist_append (IntPtr slist, string data);
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlShareCode curl_slist_free_all (IntPtr pList);
|
||||
#region curl_free
|
||||
|
||||
[DllImport (CURL_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_version_info (CurlVersion ver);
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_free(IntPtr p);
|
||||
|
||||
#if USE_LIBCURLSHIM
|
||||
|
||||
// libcurlshim imports
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_shim_initialize();
|
||||
#endregion
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_shim_cleanup();
|
||||
#region curl_version
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_shim_alloc_strings();
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_version();
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl,
|
||||
CharSet = CharSet.Ansi)]
|
||||
internal static extern IntPtr curl_shim_add_string_to_slist(
|
||||
IntPtr pStrings, String str);
|
||||
#endregion
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl,
|
||||
CharSet = CharSet.Ansi)]
|
||||
internal static extern IntPtr curl_shim_get_string_from_slist(
|
||||
IntPtr pSlist, ref IntPtr pStr);
|
||||
#region curl_version_info
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl,
|
||||
CharSet = CharSet.Ansi)]
|
||||
internal static extern IntPtr curl_shim_add_string(IntPtr pStrings, String str);
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_version_info(CurlVersion ver);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_shim_free_strings(IntPtr pStrings);
|
||||
#endregion
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern int curl_shim_install_delegates(IntPtr pCurl, IntPtr pThis,
|
||||
_ShimWriteCallback pWrite, _ShimReadCallback pRead,
|
||||
_ShimProgressCallback pProgress, _ShimDebugCallback pDebug,
|
||||
_ShimHeaderCallback pHeader, _ShimSslCtxCallback pCtx,
|
||||
#region curl_easy_init
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_easy_init();
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_easy_cleanup
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_easy_cleanup(IntPtr pCurl);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_easy_setopt
|
||||
|
||||
#region Delegates
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate int _CurlGenericCallback(IntPtr ptr, int sz, int nmemb, IntPtr userdata);
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate int _CurlProgressCallback(
|
||||
IntPtr extraData,
|
||||
double dlTotal,
|
||||
double dlNow,
|
||||
double ulTotal,
|
||||
double ulNow);
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate int _CurlDebugCallback(
|
||||
IntPtr ptrCurl,
|
||||
CurlInfoType infoType,
|
||||
string message,
|
||||
int size,
|
||||
IntPtr ptrUserData);
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate int _CurlSslCtxCallback(IntPtr ctx, IntPtr parm);
|
||||
|
||||
[UnmanagedFunctionPointer(CallingConvention.Cdecl)]
|
||||
public delegate CurlIoError _CurlIoctlCallback(CurlIoCommand cmd, IntPtr parm);
|
||||
|
||||
#endregion
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_setopt(IntPtr pCurl, CurlOption opt, IntPtr parm);
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_setopt(IntPtr pCurl, CurlOption opt, string parm);
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_setopt(IntPtr pCurl, CurlOption opt, byte[] parm);
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_setopt(IntPtr pCurl, CurlOption opt, long parm);
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_setopt(IntPtr pCurl, CurlOption opt, bool parm);
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_setopt(IntPtr pCurl, CurlOption opt, _CurlGenericCallback parm);
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_setopt(IntPtr pCurl, CurlOption opt, _CurlProgressCallback parm);
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_setopt(IntPtr pCurl, CurlOption opt, _CurlDebugCallback parm);
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_setopt(IntPtr pCurl, CurlOption opt, _CurlSslCtxCallback parm);
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_setopt(IntPtr pCurl, CurlOption opt, _CurlIoctlCallback parm);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_easy_perform
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_perform(IntPtr pCurl);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_easy_duphandle
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_easy_duphandle(IntPtr pCurl);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_easy_strerror
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_easy_strerror(CurlCode err);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_easy_getinfo
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_getinfo(IntPtr pCurl, CurlInfo info, ref IntPtr pInfo);
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlCode curl_easy_getinfo(IntPtr pCurl, CurlInfo info, ref double dblVal);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_easy_reset
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_easy_reset(IntPtr pCurl);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_multi_init
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_multi_init();
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_multi_cleanup
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlMultiCode curl_multi_cleanup(IntPtr pmulti);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_multi_add_handle
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlMultiCode curl_multi_add_handle(IntPtr pmulti, IntPtr peasy);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_multi_remove_handle
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlMultiCode curl_multi_remove_handle(IntPtr pmulti, IntPtr peasy);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_multi_setopt
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlMultiCode curl_multi_setopt(IntPtr pmulti, CurlMultiOption opt, bool parm);
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlMultiCode curl_multi_setopt(IntPtr pmulti, CurlMultiOption opt, long parm);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_multi_strerror
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_multi_strerror(CurlMultiCode errorNum);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_multi_perform
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlMultiCode curl_multi_perform(IntPtr pmulti, ref int runningHandles);
|
||||
|
||||
#endregion
|
||||
|
||||
#if !USE_LIBCURLSHIM
|
||||
|
||||
#region curl_multi_fdset
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlMultiCode curl_multi_fdset(IntPtr pmulti,
|
||||
[In] [Out] ref fd_set read_fd_set,
|
||||
[In] [Out] ref fd_set write_fd_set,
|
||||
[In] [Out] ref fd_set exc_fd_set,
|
||||
[In] [Out] ref int max_fd);
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct fd_set
|
||||
{
|
||||
public uint fd_count;
|
||||
|
||||
// [MarshalAs(UnmanagedType.ByValArray, SizeConst = FD_SETSIZE)] public IntPtr[] fd_array;
|
||||
public fixed uint fd_array[FD_SETSIZE];
|
||||
|
||||
public const int FD_SETSIZE = 64;
|
||||
|
||||
public void Cleanup()
|
||||
{
|
||||
// fd_array = null;
|
||||
}
|
||||
|
||||
public static fd_set Create()
|
||||
{
|
||||
return new fd_set
|
||||
{
|
||||
// fd_array = new IntPtr[FD_SETSIZE],
|
||||
fd_count = 0
|
||||
};
|
||||
}
|
||||
|
||||
public static fd_set Create(IntPtr socket)
|
||||
{
|
||||
var handle = Create();
|
||||
handle.fd_count = 1;
|
||||
handle.fd_array[0] = (uint) socket;
|
||||
return handle;
|
||||
}
|
||||
}
|
||||
|
||||
public static void FD_ZERO(fd_set fds)
|
||||
{
|
||||
for (var i = 0; i < fd_set.FD_SETSIZE; i++)
|
||||
{
|
||||
fds.fd_array[i] = 0;
|
||||
}
|
||||
fds.fd_count = 0;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#region select
|
||||
|
||||
[StructLayout(LayoutKind.Sequential)]
|
||||
public struct timeval
|
||||
{
|
||||
/// <summary>
|
||||
/// Time interval, in seconds.
|
||||
/// </summary>
|
||||
public int tv_sec;
|
||||
|
||||
/// <summary>
|
||||
/// Time interval, in microseconds.
|
||||
/// </summary>
|
||||
public int tv_usec;
|
||||
|
||||
public static timeval Create(int milliseconds)
|
||||
{
|
||||
return new timeval
|
||||
{
|
||||
tv_sec = milliseconds / 1000,
|
||||
tv_usec = milliseconds % 1000 * 1000
|
||||
};
|
||||
}
|
||||
}
|
||||
|
||||
[DllImport(LIBC_LINUX, EntryPoint = "select")]
|
||||
private static extern int select_unix(
|
||||
int nfds, // number of sockets, (ignored in winsock)
|
||||
[In] [Out] ref fd_set readfds, // read sockets to watch
|
||||
[In] [Out] ref fd_set writefds, // write sockets to watch
|
||||
[In] [Out] ref fd_set exceptfds, // error sockets to watch
|
||||
ref timeval timeout);
|
||||
|
||||
[DllImport(WINSOCK_LIB, EntryPoint = "select")]
|
||||
private static extern int select_win(
|
||||
int nfds, // number of sockets, (ignored in winsock)
|
||||
[In] [Out] ref fd_set readfds, // read sockets to watch
|
||||
[In] [Out] ref fd_set writefds, // write sockets to watch
|
||||
[In] [Out] ref fd_set exceptfds, // error sockets to watch
|
||||
ref timeval timeout);
|
||||
|
||||
public static int select(
|
||||
int nfds, // number of sockets, (ignored in winsock)
|
||||
[In] [Out] ref fd_set readfds, // read sockets to watch
|
||||
[In] [Out] ref fd_set writefds, // write sockets to watch
|
||||
[In] [Out] ref fd_set exceptfds, // error sockets to watch
|
||||
ref timeval timeout)
|
||||
{
|
||||
int result;
|
||||
|
||||
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
|
||||
{
|
||||
result = select_win(
|
||||
nfds, // number of sockets, (ignored in winsock)
|
||||
ref readfds, // read sockets to watch
|
||||
ref writefds, // write sockets to watch
|
||||
ref exceptfds, // error sockets to watch
|
||||
ref timeout);
|
||||
}
|
||||
else
|
||||
{
|
||||
result = select_unix(
|
||||
nfds, // number of sockets, (ignored in winsock)
|
||||
ref readfds, // read sockets to watch
|
||||
ref writefds, // write sockets to watch
|
||||
ref exceptfds, // error sockets to watch
|
||||
ref timeout);
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
#endregion
|
||||
|
||||
#endif
|
||||
|
||||
#region curl_share_init
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_share_init();
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_share_cleanup
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlShareCode curl_share_cleanup(IntPtr pShare);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_share_strerror
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_share_strerror(CurlShareCode errorCode);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_share_setopt
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlShareCode curl_share_setopt(
|
||||
IntPtr pShare,
|
||||
CurlShareOption optCode,
|
||||
IntPtr option);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_formadd
|
||||
|
||||
#if !USE_LIBCURLSHIM
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int curl_formadd(ref IntPtr pHttppost, ref IntPtr pLastPost,
|
||||
int codeFirst, IntPtr bufFirst,
|
||||
int codeNext, IntPtr bufNext,
|
||||
int codeLast);
|
||||
|
||||
#endif
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_formfree
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_formfree(IntPtr pForm);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_slist_append
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
|
||||
public static extern IntPtr curl_slist_append(IntPtr slist, string data);
|
||||
|
||||
#endregion
|
||||
|
||||
#region curl_slist_free_all
|
||||
|
||||
[DllImport(LIBCURL, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_slist_free_all(IntPtr pList);
|
||||
|
||||
#endregion
|
||||
|
||||
#if USE_LIBCURLSHIM
|
||||
|
||||
#region libcurlshim imports
|
||||
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_shim_initialize();
|
||||
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_shim_cleanup();
|
||||
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_shim_alloc_strings();
|
||||
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
|
||||
public static extern IntPtr curl_shim_add_string_to_slist(IntPtr pStrings, string str);
|
||||
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
|
||||
public static extern IntPtr curl_shim_get_string_from_slist(IntPtr pSlist, ref IntPtr pStr);
|
||||
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
|
||||
public static extern IntPtr curl_shim_add_string(IntPtr pStrings, string str);
|
||||
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_shim_free_strings(IntPtr pStrings);
|
||||
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int curl_shim_install_delegates(
|
||||
IntPtr pCurl,
|
||||
IntPtr pThis,
|
||||
_ShimWriteCallback pWrite,
|
||||
_ShimReadCallback pRead,
|
||||
_ShimProgressCallback pProgress,
|
||||
_ShimDebugCallback pDebug,
|
||||
_ShimHeaderCallback pHeader,
|
||||
_ShimSslCtxCallback pCtx,
|
||||
_ShimIoctlCallback pIoctl);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_shim_cleanup_delegates(IntPtr pThis);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_shim_cleanup_delegates(IntPtr pThis);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_shim_get_file_time(int unixTime,
|
||||
ref int yy, ref int mm, ref int dd, ref int hh, ref int mn, ref int ss);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_shim_get_file_time(
|
||||
int unixTime,
|
||||
ref int yy,
|
||||
ref int mm,
|
||||
ref int dd,
|
||||
ref int hh,
|
||||
ref int mn,
|
||||
ref int ss);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_shim_free_slist(IntPtr p);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_shim_free_slist(IntPtr p);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_shim_alloc_fd_sets();
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_shim_alloc_fd_sets();
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_shim_free_fd_sets(IntPtr fdsets);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_shim_free_fd_sets(IntPtr fdsets);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern CurlMultiCode curl_shim_multi_fdset(IntPtr multi,
|
||||
IntPtr fdsets, ref int maxFD);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern CurlMultiCode curl_shim_multi_fdset(IntPtr multi, IntPtr fdsets, ref int maxFD);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern int curl_shim_select(int maxFD, IntPtr fdsets,
|
||||
int milliseconds);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int curl_shim_select(int maxFD, IntPtr fdsets, int milliseconds);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_shim_multi_info_read(IntPtr multi,
|
||||
ref int nMsgs);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_shim_multi_info_read(IntPtr multi, ref int nMsgs);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_shim_multi_info_free(IntPtr multiInfo);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_shim_multi_info_free(IntPtr multiInfo);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern int curl_shim_formadd(IntPtr[] ppForms, IntPtr[] pParams, int nParams);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int curl_shim_formadd(IntPtr[] ppForms, IntPtr[] pParams, int nParams);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern int curl_shim_install_share_delegates(IntPtr pShare,
|
||||
IntPtr pThis, _ShimLockCallback pLock, _ShimUnlockCallback pUnlock);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int curl_shim_install_share_delegates(
|
||||
IntPtr pShare,
|
||||
IntPtr pThis,
|
||||
_ShimLockCallback pLock,
|
||||
_ShimUnlockCallback pUnlock);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern void curl_shim_cleanup_share_delegates(IntPtr pShare);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern void curl_shim_cleanup_share_delegates(IntPtr pShare);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern int curl_shim_get_version_int_value(IntPtr p, int offset);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int curl_shim_get_version_int_value(IntPtr p, int offset);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_shim_get_version_char_ptr(IntPtr p, int offset);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_shim_get_version_char_ptr(IntPtr p, int offset);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern int curl_shim_get_number_of_protocols(IntPtr p, int offset);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern int curl_shim_get_number_of_protocols(IntPtr p, int offset);
|
||||
|
||||
[DllImport(CURLSHIM_LIB, CallingConvention = CallingConvention.Cdecl)]
|
||||
internal static extern IntPtr curl_shim_get_protocol_string(IntPtr p, int offset, int index);
|
||||
[DllImport(LIBCURLSHIM, CallingConvention = CallingConvention.Cdecl)]
|
||||
public static extern IntPtr curl_shim_get_protocol_string(IntPtr p, int offset, int index);
|
||||
|
||||
internal delegate void _ShimLockCallback(int data, int access, IntPtr userPtr);
|
||||
public delegate void _ShimLockCallback(int data, int access, IntPtr userPtr);
|
||||
|
||||
internal delegate void _ShimUnlockCallback(int data, IntPtr userPtr);
|
||||
public delegate void _ShimUnlockCallback(int data, IntPtr userPtr);
|
||||
|
||||
internal delegate int _ShimDebugCallback(CurlInfoType infoType, IntPtr msgBuf, int msgBufSize, IntPtr parm);
|
||||
public delegate int _ShimDebugCallback(CurlInfoType infoType, IntPtr msgBuf, int msgBufSize, IntPtr parm);
|
||||
|
||||
internal delegate int _ShimHeaderCallback(IntPtr buf, int sz, int nmemb, IntPtr stream);
|
||||
public delegate int _ShimHeaderCallback(IntPtr buf, int sz, int nmemb, IntPtr stream);
|
||||
|
||||
internal delegate CurlIoError _ShimIoctlCallback(CurlIoCommand cmd, IntPtr parm);
|
||||
public delegate CurlIoError _ShimIoctlCallback(CurlIoCommand cmd, IntPtr parm);
|
||||
|
||||
internal delegate int _ShimProgressCallback(IntPtr parm, double dlTotal, double dlNow, double ulTotal, double ulNow);
|
||||
public delegate int _ShimProgressCallback(
|
||||
IntPtr parm,
|
||||
double dlTotal,
|
||||
double dlNow,
|
||||
double ulTotal,
|
||||
double ulNow);
|
||||
|
||||
internal delegate int _ShimReadCallback(IntPtr buf, int sz, int nmemb, IntPtr parm);
|
||||
public delegate int _ShimReadCallback(IntPtr buf, int sz, int nmemb, IntPtr parm);
|
||||
|
||||
internal delegate int _ShimSslCtxCallback(IntPtr ctx, IntPtr parm);
|
||||
public delegate int _ShimSslCtxCallback(IntPtr ctx, IntPtr parm);
|
||||
|
||||
public delegate int _ShimWriteCallback(IntPtr buf, int sz, int nmemb, IntPtr parm);
|
||||
|
||||
#endregion
|
||||
|
||||
internal delegate int _ShimWriteCallback(IntPtr buf, int sz, int nmemb, IntPtr parm);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user