CodePorting.Translator Cs2Cpp
CodePorting.Translator.Cs2Cpp.Framework
http_headers.h
1
2#pragma once
3
4#include <system/array.h>
5#include <system/collections/dictionary.h>
6#include <system/collections/hashset.h>
7#include <system/collections/ienumerable.h>
8#include <system/collections/ienumerator.h>
9#include <system/collections/iequality_comparer.h>
10#include <system/collections/keyvalue_pair.h>
11#include <system/collections/list.h>
12#include <system/collections/sorted_dictionary.h>
13#include <system/constraints.h>
14#include <system/diagnostics/debug.h>
15#include <system/exceptions.h>
16#include <system/object.h>
17#include <system/object_ext.h>
18#include <system/shared_ptr.h>
19#include <system/string.h>
20
21namespace System { namespace Net { namespace Http { namespace Headers {
22
23template <typename TResult>
24using HeaderFunc = System::MulticastDelegate<TResult()>;
25
26class HttpHeaderParser;
27
32class ASPOSECPP_SHARED_CLASS ABSTRACT HttpHeaders
33 : public System::Collections::Generic::IEnumerable<System::Collections::Generic::KeyValuePair<
34 System::String, System::SharedPtr<System::Collections::Generic::IEnumerable<System::String>>>>
35{
37 typedef HttpHeaders ThisType;
42
44 typedef ::System::BaseTypesInfo<BaseType> ThisTypeBaseTypesInfo;
46 ASPOSECPP_SHARED_RTTI_INFO_DECL();
47
48private:
50 enum class StoreLocation
51 {
52 Raw,
53 Invalid,
54 Parsed
55 };
56
57private:
59 class HeaderStoreItemInfo : public System::Object
60 {
61 typedef HeaderStoreItemInfo ThisType;
63
64 typedef ::System::BaseTypesInfo<BaseType> ThisTypeBaseTypesInfo;
65 ASPOSECPP_SHARED_RTTI_INFO_DECL();
66
67 public:
68 System::SharedPtr<Object> get_RawValue();
69 void set_RawValue(System::SharedPtr<Object> value);
70 System::SharedPtr<Object> get_InvalidValue();
71 void set_InvalidValue(System::SharedPtr<Object> value);
72 System::SharedPtr<Object> get_ParsedValue();
73 void set_ParsedValue(System::SharedPtr<Object> value);
75 bool get_CanAddValue();
76 bool get_IsEmpty();
77
78 HeaderStoreItemInfo(System::SharedPtr<HttpHeaderParser> parser);
79
80 private:
82 System::SharedPtr<Object> _invalidValue;
83 System::SharedPtr<Object> _parsedValue;
85 };
86
87public:
95 ASPOSECPP_SHARED_API void Add(String name, String value);
99 ASPOSECPP_SHARED_API bool TryAddWithoutValidation(String name, String value);
103 ASPOSECPP_SHARED_API bool
106 ASPOSECPP_SHARED_API void Clear();
110 ASPOSECPP_SHARED_API bool Remove(String name);
119 ASPOSECPP_SHARED_API bool TryGetValues(String name,
121 ASPOSECPP_SHARED_API bool Contains(String name);
123 ASPOSECPP_SHARED_API String ToString() const override;
126 ASPOSECPP_SHARED_API
132 ASPOSECPP_SHARED_API String GetHeaderString(String headerName);
137 ASPOSECPP_SHARED_API String GetHeaderString(String headerName, System::SharedPtr<Object> exclude);
141 GetEnumerator() override;
143 ASPOSECPP_SHARED_API void SetConfiguration(
149 ASPOSECPP_SHARED_API void AddParsedValue(String name, System::SharedPtr<Object> value);
153 ASPOSECPP_SHARED_API void SetParsedValue(String name, System::SharedPtr<Object> value);
158 ASPOSECPP_SHARED_API void SetOrRemoveParsedValue(String name, System::SharedPtr<Object> value);
163 ASPOSECPP_SHARED_API bool RemoveParsedValue(String name, System::SharedPtr<Object> value);
168 ASPOSECPP_SHARED_API bool ContainsParsedValue(String name, System::SharedPtr<Object> value);
171 ASPOSECPP_SHARED_API virtual void AddHeaders(System::SharedPtr<HttpHeaders> sourceHeaders);
176 ASPOSECPP_SHARED_API bool TryParseAndAddValue(String name, String value);
185
186protected:
187#ifdef ASPOSE_GET_SHARED_MEMBERS
189 void GetSharedMembers(System::Object::shared_members_type& result) const override;
190#endif
193
194private:
198 String ToStringNC();
199
203 _headerStore;
208
214 void AddHeaderInfo(String headerName, System::SharedPtr<HttpHeaders::HeaderStoreItemInfo> sourceInfo);
216 static void CloneAndAddValue(System::SharedPtr<HttpHeaders::HeaderStoreItemInfo> destinationInfo,
219 static System::SharedPtr<Object> CloneStringHeaderInfoValues(System::SharedPtr<Object> source);
222 System::SharedPtr<HttpHeaders::HeaderStoreItemInfo> GetOrCreateHeaderInfo(String name, bool parseRawValues);
225 System::SharedPtr<HttpHeaders::HeaderStoreItemInfo> CreateAndAddHeaderToStore(String name);
227 void AddHeaderToStore(String name, System::SharedPtr<HttpHeaders::HeaderStoreItemInfo> info);
229 bool TryGetHeaderInfo(String name, System::SharedPtr<HttpHeaders::HeaderStoreItemInfo>& info);
231 bool TryGetAndParseHeaderInfo(String name, System::SharedPtr<HttpHeaders::HeaderStoreItemInfo>& info);
233 bool ParseRawHeaderValues(String name, System::SharedPtr<HttpHeaders::HeaderStoreItemInfo> info,
234 bool removeEmptyHeader);
236 static void ParseMultipleRawHeaderValues(
240 static void ParseSingleRawHeaderValue(String name, System::SharedPtr<HttpHeaders::HeaderStoreItemInfo> info);
242 static bool TryParseAndAddRawHeaderValue(String name, System::SharedPtr<HttpHeaders::HeaderStoreItemInfo> info,
243 String value, bool addWhenInvalid);
246 HttpHeaders::StoreLocation location);
248 static void AddValueToStoreValue(System::SharedPtr<HttpHeaders::HeaderStoreItemInfo> info,
249 System::SharedPtr<Object> value, System::SharedPtr<Object>& currentStoreValue);
250
252 void PrepareHeaderInfoForAdd(String name, System::SharedPtr<HttpHeaders::HeaderStoreItemInfo>& info,
253 bool& addToStore);
255 void ParseAndAddValue(String name, System::SharedPtr<HttpHeaders::HeaderStoreItemInfo> info, String value);
259 void CheckHeaderName(String name);
261 bool TryCheckHeaderName(String name);
263 static void CheckInvalidNewLine(String value);
265 static bool ContainsInvalidNewLine(String value, String name);
272 static int32_t GetValueCount(System::SharedPtr<HttpHeaders::HeaderStoreItemInfo> info);
274 template <typename T>
275 static void UpdateValueCount(System::SharedPtr<Object> valueStore, int32_t& valueCount)
276 {
277 if (valueStore == nullptr)
278 {
279 return;
280 }
281
283 System::AsCast<System::Collections::Generic::List<T>>(valueStore);
284 if (values != nullptr)
285 {
286 valueCount += values->get_Count();
287 }
288 else
289 {
290 valueCount++;
291 }
292 }
293
295 bool AreEqual(System::SharedPtr<Object> value, System::SharedPtr<Object> storeValue,
297};
298
299
300
301}}}} // namespace System::Net::Http::Headers
Forward declaration of Dictionary class.
Definition: dictionary.h:96
Forward declaration of HashSet class.
Definition: hashset.h:82
Interface of object providing enumerator on contained elements.
Definition: ienumerable.h:25
Interface of enumerator which can be used to iterate through some elements. Objects of this class sho...
Definition: ienumerator.h:63
Interface providing means to compare two objects for equality. Objects of this class should only be a...
Definition: iequality_comparer.h:17
Pair of key and value. This type should be allocated on stack and passed to functions by value or by ...
Definition: keyvalue_pair.h:20
List forward declaration.
Definition: list.h:127
Sorted dictionary type forward declaration.
Definition: sorted_dictionary.h:52
The collection of the HTTP headers. Objects of this class should only be allocated using System::Make...
Definition: http_headers.h:35
bool TryAddWithoutValidation(String name, System::SharedPtr< Collections::Generic::IEnumerable< String > > values)
Adds a collection of name-value pairs to the current collection.
virtual void AddHeaders(System::SharedPtr< HttpHeaders > sourceHeaders)
Concatenates the specified HttpHeaders-class instance with the current one.
String ToString() const override
Analog of C# Object.ToString() method. Enables converting custom objects to string.
void Add(String name, String value)
Validates a new name-value pair and adds it to the current collection.
void SetConfiguration(System::SharedPtr< Collections::Generic::Dictionary< String, System::SharedPtr< HttpHeaderParser > > > parserStore, System::SharedPtr< Collections::Generic::HashSet< String > > invalidHeaders)
bool TryAddWithoutValidation(String name, String value)
Tries to add a new name-value pair to the current collection.
HttpHeaders()
Constructs a new instance.
System::SharedPtr< Collections::Generic::IEnumerable< Collections::Generic::KeyValuePair< String, String > > > GetHeaderStrings()
Returns a collection that contains string representations of headers' values.
static System::SharedPtr< System::Collections::Generic::List< System::SharedPtr< System::Object > > > ParsedValuesAsList(const System::SharedPtr< Object > parsedValues)
Converts parsed values to list.
void AddParsedValue(String name, System::SharedPtr< Object > value)
Gets a header by the specified name and adds a parsed value to the header.
System::SharedPtr< Collections::Generic::IEnumerable< String > > GetValues(String name)
Returns corresponding values by the specified name.
System::SharedPtr< Collections::Generic::IEnumerator< Collections::Generic::KeyValuePair< String, System::SharedPtr< Collections::Generic::IEnumerable< String > > > > > GetEnumerator() override
Gets enumerator.
bool ContainsParsedValue(String name, System::SharedPtr< Object > value)
Checks if the header contains the specified value.
void SetParsedValue(String name, System::SharedPtr< Object > value)
Gets a header by the specified name and sets a parsed value to the header.
String GetHeaderString(String headerName, System::SharedPtr< Object > exclude)
Returns a string representation of values by the specified header name.
bool TryGetValues(String name, System::SharedPtr< Collections::Generic::IEnumerable< String > > &values)
Tries to get corresponding values by the specified name.
void Add(String name, System::SharedPtr< Collections::Generic::IEnumerable< String > > values)
Validates a new name-values pair and adds it to the current collection.
bool TryParseAndAddValue(String name, String value)
Tries to parse the specified value and add it to the header values.
void SetOrRemoveParsedValue(String name, System::SharedPtr< Object > value)
Gets a header by the specified name and sets or removes its value. The header value will be removed w...
String GetHeaderString(String headerName)
Returns a string representation of values by the specified header name.
bool Remove(String name)
Tries to remove an item by the specified name.
bool RemoveParsedValue(String name, System::SharedPtr< Object > value)
Gets a header by the specified name and removes a parsed value from the header.
System::SharedPtr< Object > GetParsedValues(String name)
Returns parsed values by the specified header name.
void Clear()
Removes all items from the collection.
Base class that enables using methods available for System.Object class in C#. All non-trivial classe...
Definition: object.h:62
Pointer class to wrap types being allocated on heap. Use it to manage memory for classes inheriting O...
Definition: smart_ptr.h:180
String class used across the library. Is a substitute for C# System.String when translating code....
Definition: string.h:122
System::MulticastDelegate< TResult()> HeaderFunc
Definition: http_headers.h:24
@ Parsed
The parsing is successfully done.
Definition: db_command.h:9