/
curl.response.property_modules.content.pas
98 lines (81 loc) · 3.61 KB
/
curl.response.property_modules.content.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
96
97
98
(******************************************************************************)
(* 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.property_modules.content;
{$IFDEF FPC}
{$mode objfpc}{$H+}
{$ENDIF}
{$IFOPT D+}
{$DEFINE DEBUG}
{$ENDIF}
interface
uses
libpascurl, container.memorybuffer, curl.utils.errors_stack, utils.datasize,
curl.response.property_module;
type
TModuleContent = class(TPropertyModule)
protected
FBuffer : PMemoryBuffer;
{ Get content buffer length. }
function GetBufferLength : TDataSize;
{ Get the number of downloaded bytes. }
function GetDownloadedSize : TDataSize;
{ Get content as memory buffer. }
function GetBuffer : TMemoryBuffer;
protected
{ Get content as memory buffer. }
property Buffer : TMemoryBuffer read GetBuffer;
{ Get content buffer length. }
property BufferLength : TDataSize read GetBufferLength;
{ Get the number of downloaded bytes. }
property DownloadedSize : TDataSize read GetDownloadedSize;
public
constructor Create (ACURL : libpascurl.CURL; AErrorsStack : PErrorsStack;
ABuffer : PMemoryBuffer);
end;
implementation
{ TModuleContent }
constructor TModuleContent.Create(ACURL : libpascurl.CURL; AErrorsStack :
PErrorsStack; ABuffer : PMemoryBuffer);
begin
inherited Create(ACURL, AErrorsStack);
FBuffer := ABuffer;
end;
function TModuleContent.GetBuffer : TMemoryBuffer;
begin
Result := FBuffer^;
end;
function TModuleContent.GetBufferLength : TDataSize;
begin
Result := TDataSize.Create;
Result.Bytes := FBuffer^.GetBufferDataSize;
end;
function TModuleContent.GetDownloadedSize : TDataSize;
begin
Result := TDataSize.Create;
Result.Bytes := GetInt64Value(CURLINFO_SIZE_DOWNLOAD,
CURLINFO_SIZE_DOWNLOAD_T);
end;
end.