mirror of
https://github.com/Jackett/Jackett.git
synced 2025-12-22 06:06:43 +01:00
* 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
128 lines
4.1 KiB
C#
128 lines
4.1 KiB
C#
/***************************************************************************
|
|
*
|
|
* CurlS#arp
|
|
*
|
|
* Copyright (c) 2013-2017 Dr. Masroor Ehsan (masroore@gmail.com)
|
|
* Portions copyright (c) 2004, 2005 Jeff Phillips (jeff@jeffp.net)
|
|
*
|
|
* This software is licensed as described in the file LICENSE, which you
|
|
* should have received as part of this distribution.
|
|
*
|
|
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
|
|
* copies of this Software, and permit persons to whom the Software is
|
|
* furnished to do so, under the terms of the LICENSE file.
|
|
*
|
|
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF
|
|
* ANY KIND, either express or implied.
|
|
*
|
|
**************************************************************************/
|
|
|
|
using System;
|
|
using System.Runtime.InteropServices;
|
|
|
|
namespace CurlSharp
|
|
{
|
|
/// <summary>
|
|
/// Top-level class for initialization and cleanup.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// It also implements static methods for capabilities that don't
|
|
/// logically belong in a class.
|
|
/// </remarks>
|
|
public static class Curl
|
|
{
|
|
// for state management
|
|
private static CurlCode _initCode;
|
|
|
|
/// <summary>
|
|
/// Class constructor - initialize global status.
|
|
/// </summary>
|
|
static Curl()
|
|
{
|
|
_initCode = CurlCode.FailedInit;
|
|
}
|
|
|
|
// hidden instance stuff
|
|
|
|
/// <summary>
|
|
/// Get the underlying cURL version as a string, example "7.12.2".
|
|
/// </summary>
|
|
/// <exception cref="System.InvalidOperationException">
|
|
/// Thrown if cURL isn't properly initialized.
|
|
/// </exception>
|
|
public static string Version
|
|
{
|
|
get
|
|
{
|
|
EnsureCurl();
|
|
return Marshal.PtrToStringAnsi(NativeMethods.curl_version());
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Process-wide initialization -- call only once per process.
|
|
/// </summary>
|
|
/// <param name="flags">
|
|
/// An or'd combination of
|
|
/// <see cref="CurlInitFlag" /> members.
|
|
/// </param>
|
|
/// <returns>
|
|
/// A <see cref="CurlCode" />, hopefully
|
|
/// <c>CurlCode.Ok</c>.
|
|
/// </returns>
|
|
public static CurlCode GlobalInit(CurlInitFlag flags)
|
|
{
|
|
_initCode = NativeMethods.curl_global_init((int) flags);
|
|
#if USE_LIBCURLSHIM
|
|
if (_initCode == CurlCode.Ok)
|
|
NativeMethods.curl_shim_initialize();
|
|
#endif
|
|
return _initCode;
|
|
}
|
|
|
|
/// <summary>
|
|
/// Process-wide cleanup -- call just before exiting process.
|
|
/// </summary>
|
|
/// <remarks>
|
|
/// While it's not necessary that your program call this method
|
|
/// before exiting, doing so will prevent leaks of native cURL resources.
|
|
/// </remarks>
|
|
public static void GlobalCleanup()
|
|
{
|
|
if (_initCode == CurlCode.Ok)
|
|
{
|
|
#if USE_LIBCURLSHIM
|
|
NativeMethods.curl_shim_cleanup();
|
|
#endif
|
|
NativeMethods.curl_global_cleanup();
|
|
_initCode = CurlCode.FailedInit;
|
|
}
|
|
}
|
|
|
|
/// <summary>
|
|
/// Get a <see cref="CurlVersionInfoData" /> object.
|
|
/// </summary>
|
|
/// <param name="ver">
|
|
/// Specify a <see cref="CurlVersion" />, such as
|
|
/// <c>CurlVersion.Now</c>.
|
|
/// </param>
|
|
/// <returns>A <see cref="CurlVersionInfoData" /> object.</returns>
|
|
/// <exception cref="System.InvalidOperationException">
|
|
/// Thrown if cURL isn't properly initialized.
|
|
/// </exception>
|
|
public static CurlVersionInfoData GetVersionInfo(CurlVersion ver)
|
|
{
|
|
EnsureCurl();
|
|
return new CurlVersionInfoData(ver);
|
|
}
|
|
|
|
/// <summary>
|
|
/// Called by other classes to ensure valid cURL state.
|
|
/// </summary>
|
|
internal static void EnsureCurl()
|
|
{
|
|
if (_initCode != CurlCode.Ok)
|
|
throw new InvalidOperationException("cURL not initialized");
|
|
}
|
|
}
|
|
} |