-
Notifications
You must be signed in to change notification settings - Fork 22
/
curl.session.property_modules.request.pas
95 lines (82 loc) · 3.96 KB
/
curl.session.property_modules.request.pas
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
(******************************************************************************)
(* libPasCURL *)
(* delphi and object pascal wrapper around cURL library *)
(* https://github.com/curl/curl *)
(* *)
(* Copyright (c) 2020 Ivan Semenkov *)
(* https://github.com/isemenkov/libpascurl ivan@semenkov.pro *)
(* Ukraine *)
(******************************************************************************)
(* *)
(* This source is free software; you can redistribute it and/or modify it *)
(* under the terms of the GNU General Public License as published by the Free *)
(* Software Foundation; either version 3 of the License. *)
(* *)
(* This code is distributed in the hope that it will be useful, but WITHOUT *)
(* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or *)
(* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for *)
(* more details. *)
(* *)
(* A copy of the GNU General Public License is available on the World Wide *)
(* Web at <http://www.gnu.org/copyleft/gpl.html>. You can also obtain it by *)
(* writing to the Free Software Foundation, Inc., 51 Franklin Street - Fifth *)
(* Floor, Boston, MA 02110-1335, USA. *)
(* *)
(******************************************************************************)
unit curl.session.property_modules.request;
{$IFDEF FPC}
{$mode objfpc}{$H+}
{$ENDIF}
{$IFOPT D+}
{$DEFINE DEBUG}
{$ENDIF}
interface
uses
libpascurl, curl.session.property_module;
type
TModuleRequest = class(TPropertyModule)
public
type
TResolverStartFunction = function (resolver_state : Pointer) : Boolean
of object;
protected
FResolverFunction : TResolverStartFunction;
{ Set callback to be called before a new resolve request is started. }
procedure SetResolverStartFunction (ACallback : TResolverStartFunction);
protected
{ Set callback to be called before a new resolve request is started.
This callback function gets called by libcurl every time before a new
resolve request is started.
resolver_state points to a backend-specific resolver state. Currently only
the ares resolver backend has a resolver state. It can be used to set up
any desired option on the ares channel before it's used, for example
setting up socket callback options. }
property ResolverStartCallback : TResolverStartFunction
read FResolverFunction write SetResolverStartFunction;
private
class function ResolverStartFunctionCallback (resolver_state : Pointer;
reserved : Pointer; userdata : Pointer) : Integer; static; cdecl;
end;
implementation
{ TModuleRequest }
class function TModuleRequest.ResolverStartFunctionCallback (resolver_state :
Pointer; reserved : Pointer; userdata : Pointer) : Integer; cdecl;
begin
if Assigned(TModuleRequest(userdata).FResolverFunction) then
begin
Result := Longint(
not TModuleRequest(userdata).FResolverFunction(resolver_state));
end else
begin
Result := 1;
end;
end;
procedure TModuleRequest.SetResolverStartFunction (ACallback :
TResolverStartFunction);
begin
FResolverFunction := ACallback;
Option(CURLOPT_RESOLVER_START_DATA, Pointer(Self));
Option(CURLOPT_RESOLVER_START_FUNCTION,
@TModuleRequest.ResolverStartFunctionCallback);
end;
end.