Neuron®
The Neuron® is the basis for the creation of open and secure federated networks for smart societies.
Loading...
Searching...
No Matches
DataGetter.cs
1using System;
3using System.Security.Cryptography.X509Certificates;
4using System.Threading.Tasks;
7
9{
14 {
18 public DataGetter()
19 {
20 }
21
25 public string[] UriSchemes => new string[] { "data" };
26
33 public bool CanGet(Uri Uri, out Grade Grade)
34 {
35 switch (Uri.Scheme.ToLower())
36 {
37 case "data":
38 Grade = Grade.Ok;
39 return true;
40
41 default:
42 Grade = Grade.NotAtAll;
43 return false;
44 }
45 }
46
55 public Task<ContentResponse> GetAsync(Uri Uri, X509Certificate Certificate,
56 EventHandler<RemoteCertificateEventArgs> RemoteCertificateValidator, params KeyValuePair<string, string>[] Headers)
57 {
58 return this.GetAsync(Uri, Certificate, RemoteCertificateValidator, InternetContent.DefaultTimeout, Headers);
59 }
60
70 public Task<ContentResponse> GetAsync(Uri Uri, X509Certificate Certificate, EventHandler<RemoteCertificateEventArgs> RemoteCertificateValidator,
71 int TimeoutMs, params KeyValuePair<string, string>[] Headers)
72 {
74 if (P.HasError)
75 return Task.FromResult(new ContentResponse(P.Error));
76 else
78 }
79
86 public static ContentBinaryResponse Decode(Uri Uri)
87 {
88 string s = Uri.OriginalString;
89 int i = s.IndexOf(':');
90 if (i < 0)
91 return new ContentBinaryResponse(new ArgumentException("Invalid Data URI.", nameof(Uri)));
92
93 int j = s.IndexOf(';', i + 1);
94 if (j < 0)
95 return new ContentBinaryResponse(new ArgumentException("Content-Type not encoded in Data URI.", nameof(Uri)));
96
97 string ContentType = s.Substring(i + 1, j - i - 1);
98
99 int k = s.IndexOf(',', j + 1);
100 if (k < 0)
101 return new ContentBinaryResponse(new ArgumentException("Data not encoded in Data URI.", nameof(Uri)));
102
103 byte[] Bin = Convert.FromBase64String(s.Substring(k + 1));
104
105 return new ContentBinaryResponse(ContentType, Bin);
106 }
107
116 public Task<ContentStreamResponse> GetTempStreamAsync(Uri Uri, X509Certificate Certificate,
117 EventHandler<RemoteCertificateEventArgs> RemoteCertificateValidator, params KeyValuePair<string, string>[] Headers)
118 {
119 return this.GetTempStreamAsync(Uri, Certificate, RemoteCertificateValidator, InternetContent.DefaultTimeout, Headers);
120 }
121
131 public Task<ContentStreamResponse> GetTempStreamAsync(Uri Uri, X509Certificate Certificate,
132 EventHandler<RemoteCertificateEventArgs> RemoteCertificateValidator, TemporaryStream Destination, params KeyValuePair<string, string>[] Headers)
133 {
134 return this.GetTempStreamAsync(Uri, Certificate, RemoteCertificateValidator, InternetContent.DefaultTimeout, Destination, Headers);
135 }
136
146 public Task<ContentStreamResponse> GetTempStreamAsync(Uri Uri, X509Certificate Certificate,
147 EventHandler<RemoteCertificateEventArgs> RemoteCertificateValidator, int TimeoutMs, params KeyValuePair<string, string>[] Headers)
148 {
149 return this.GetTempStreamAsync(Uri, Certificate, RemoteCertificateValidator, TimeoutMs, null, Headers);
150 }
151
162 public async Task<ContentStreamResponse> GetTempStreamAsync(Uri Uri, X509Certificate Certificate,
163 EventHandler<RemoteCertificateEventArgs> RemoteCertificateValidator, int TimeoutMs, TemporaryStream Destination,
164 params KeyValuePair<string, string>[] Headers)
165 {
167 if (P.HasError)
168 return new ContentStreamResponse(P.Error);
169
170 if (Destination is null)
171 Destination = new TemporaryStream();
172
173 await Destination.WriteAsync(P.Encoded, 0, P.Encoded.Length);
174
175 return new ContentStreamResponse(P.ContentType, Destination);
176 }
177
184 public bool CanHead(Uri Uri, out Grade Grade)
185 {
186 Grade = Grade.NotAtAll;
187 return false;
188 }
189
198 public Task<ContentResponse> HeadAsync(Uri Uri, X509Certificate Certificate, EventHandler<RemoteCertificateEventArgs> RemoteCertificateValidator,
199 params KeyValuePair<string, string>[] Headers)
200 {
202 if (P.HasError)
203 return Task.FromResult(new ContentResponse(P.Error));
204 else
205 return Task.FromResult(new ContentResponse(P.ContentType, null, null));
206 }
207
217 public Task<ContentResponse> HeadAsync(Uri Uri, X509Certificate Certificate, EventHandler<RemoteCertificateEventArgs> RemoteCertificateValidator,
218 int TimeoutMs, params KeyValuePair<string, string>[] Headers)
219 {
220 return this.HeadAsync(Uri, Certificate, RemoteCertificateValidator, Headers);
221 }
222
223 }
224}
Contains information about a binary response to a content request.
string ContentType
Internet Content-Type of encoded object.
Contains information about a response to a content request.
Contains information about a stream response to a content request.
Gets data encoded into data URIs.
Definition: DataGetter.cs:14
bool CanGet(Uri Uri, out Grade Grade)
If the getter is able to get a resource, given its URI.
Definition: DataGetter.cs:33
DataGetter()
Gets data encoded into data URIs.
Definition: DataGetter.cs:18
string[] UriSchemes
Supported URI schemes.
Definition: DataGetter.cs:25
Task< ContentResponse > GetAsync(Uri Uri, X509Certificate Certificate, EventHandler< RemoteCertificateEventArgs > RemoteCertificateValidator, params KeyValuePair< string, string >[] Headers)
Gets a resource, using a Uniform Resource Identifier (or Locator).
Definition: DataGetter.cs:55
async Task< ContentStreamResponse > GetTempStreamAsync(Uri Uri, X509Certificate Certificate, EventHandler< RemoteCertificateEventArgs > RemoteCertificateValidator, int TimeoutMs, TemporaryStream Destination, params KeyValuePair< string, string >[] Headers)
Gets a (possibly big) resource, using a Uniform Resource Identifier (or Locator).
Definition: DataGetter.cs:162
Task< ContentStreamResponse > GetTempStreamAsync(Uri Uri, X509Certificate Certificate, EventHandler< RemoteCertificateEventArgs > RemoteCertificateValidator, int TimeoutMs, params KeyValuePair< string, string >[] Headers)
Gets a (possibly big) resource, using a Uniform Resource Identifier (or Locator).
Definition: DataGetter.cs:146
Task< ContentResponse > HeadAsync(Uri Uri, X509Certificate Certificate, EventHandler< RemoteCertificateEventArgs > RemoteCertificateValidator, params KeyValuePair< string, string >[] Headers)
Gets the headers of a resource, using a Uniform Resource Identifier (or Locator).
Definition: DataGetter.cs:198
Task< ContentStreamResponse > GetTempStreamAsync(Uri Uri, X509Certificate Certificate, EventHandler< RemoteCertificateEventArgs > RemoteCertificateValidator, TemporaryStream Destination, params KeyValuePair< string, string >[] Headers)
Gets a (possibly big) resource, using a Uniform Resource Identifier (or Locator).
Definition: DataGetter.cs:131
static ContentBinaryResponse Decode(Uri Uri)
Decodes a Data URI.
Definition: DataGetter.cs:86
bool CanHead(Uri Uri, out Grade Grade)
If the getter is able to get headers of a resource, given its URI.
Definition: DataGetter.cs:184
Task< ContentResponse > GetAsync(Uri Uri, X509Certificate Certificate, EventHandler< RemoteCertificateEventArgs > RemoteCertificateValidator, int TimeoutMs, params KeyValuePair< string, string >[] Headers)
Gets a resource, using a Uniform Resource Identifier (or Locator).
Definition: DataGetter.cs:70
Task< ContentStreamResponse > GetTempStreamAsync(Uri Uri, X509Certificate Certificate, EventHandler< RemoteCertificateEventArgs > RemoteCertificateValidator, params KeyValuePair< string, string >[] Headers)
Gets a (possibly big) resource, using a Uniform Resource Identifier (or Locator).
Definition: DataGetter.cs:116
Task< ContentResponse > HeadAsync(Uri Uri, X509Certificate Certificate, EventHandler< RemoteCertificateEventArgs > RemoteCertificateValidator, int TimeoutMs, params KeyValuePair< string, string >[] Headers)
Gets the headers of a resource, using a Uniform Resource Identifier (or Locator).
Definition: DataGetter.cs:217
Static class managing encoding and decoding of internet content.
static int DefaultTimeout
Default timeout of internet access methods, in milliseconds.
static Task< ContentResponse > DecodeAsync(string ContentType, byte[] Data, Encoding Encoding, KeyValuePair< string, string >[] Fields, Uri BaseUri)
Decodes an object.
Manages a temporary stream. Contents is kept in-memory, if below a memory threshold,...
override async Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancellationToken)
Asynchronously writes a sequence of bytes to the current stream, advances the current position within...
Basic interface for Internet Content getters. A class implementing this interface and having a defaul...
Basic interface for Internet Content headers. A class implementing this interface and having a defaul...
Grade
Grade enumeration
Definition: Grade.cs:7