This repository was archived by the owner on Feb 24, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 26
Expand file tree
/
Copy pathcurl.response.pas
More file actions
108 lines (87 loc) · 3.84 KB
/
Copy pathcurl.response.pas
File metadata and controls
108 lines (87 loc) · 3.84 KB
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
96
97
98
99
100
101
102
103
104
105
106
107
108
(******************************************************************************)
(* 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.response;
{$IFDEF FPC}
{$mode objfpc}{$H+}
{$ENDIF}
{$IFOPT D+}
{$DEFINE DEBUG}
{$ENDIF}
interface
uses
libpascurl, curl.utils.errors_stack, curl.response.property_module,
container.memorybuffer;
type
TResponse = class
protected
{ CURL library handle. }
FCURL : libpascurl.CURL;
{ Store CURL library errors messages. }
FErrorsStack : PErrorsStack;
{ Download / Upload data buffer. }
FBuffer : PMemoryBuffer;
{ Return CURL library errors storage. }
function GetErrors : TErrorsStack;
{ Return pointer to CURL library errors storage. }
function GetErrorsStorage : PErrorsStack;
{ Get memory buffer download / upload data buffer. }
function GetMemoryBuffer : PMemoryBuffer;
{ Provide access to CURL handle. }
property Handle : libpascurl.CURL read FCURL;
{ Provide access to CURL error messages storage. }
property Errors : TErrorsStack read GetErrors;
{ Provide pointer to CURL error messages storage. }
property ErrorsStorage : PErrorsStack read GetErrorsStorage;
{ Get memory buffer download / upload data buffer. }
property MemoryBuffer : PMemoryBuffer read GetMemoryBuffer;
public
{ Initialize new curl easy session. }
constructor Create (ACURL : libpascurl.CURL; AErrorsStack : PErrorsStack;
ABuffer : PMemoryBuffer);
end;
implementation
{ TResponse }
constructor TResponse.Create(ACURL : libpascurl.CURL; AErrorsStack :
PErrorsStack; ABuffer : PMemoryBuffer);
begin
FCURL := ACURL;
FErrorsStack := AErrorsStack;
FBuffer := ABuffer;
FErrorsStack^.Push(curl_easy_perform(Handle));
end;
function TResponse.GetErrors : TErrorsStack;
begin
Result := FErrorsStack^;
end;
function TResponse.GetErrorsStorage : PErrorsStack;
begin
Result := FErrorsStack;
end;
function TResponse.GetMemoryBuffer : PMemoryBuffer;
begin
Result := FBuffer;
end;
end.