1 /**
2 * Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved.
3 * SPDX-License-Identifier: Apache-2.0.
4 */
5
6 #include <aws/s3-crt/model/SelectObjectContentRequest.h>
7 #include <aws/core/utils/xml/XmlSerializer.h>
8 #include <aws/core/utils/memory/stl/AWSStringStream.h>
9 #include <aws/core/http/URI.h>
10 #include <aws/core/utils/memory/stl/AWSStringStream.h>
11
12 #include <utility>
13
14 using namespace Aws::S3Crt::Model;
15 using namespace Aws::Utils::Xml;
16 using namespace Aws::Utils;
17 using namespace Aws::Http;
18
SelectObjectContentRequest()19 SelectObjectContentRequest::SelectObjectContentRequest() :
20 m_bucketHasBeenSet(false),
21 m_keyHasBeenSet(false),
22 m_sSECustomerAlgorithmHasBeenSet(false),
23 m_sSECustomerKeyHasBeenSet(false),
24 m_sSECustomerKeyMD5HasBeenSet(false),
25 m_expressionHasBeenSet(false),
26 m_expressionType(ExpressionType::NOT_SET),
27 m_expressionTypeHasBeenSet(false),
28 m_requestProgressHasBeenSet(false),
29 m_inputSerializationHasBeenSet(false),
30 m_outputSerializationHasBeenSet(false),
31 m_scanRangeHasBeenSet(false),
32 m_expectedBucketOwnerHasBeenSet(false),
33 m_customizedAccessLogTagHasBeenSet(false),
34 m_decoder(Aws::Utils::Event::EventStreamDecoder(&m_handler))
35 {
36 }
37
SerializePayload() const38 Aws::String SelectObjectContentRequest::SerializePayload() const
39 {
40 XmlDocument payloadDoc = XmlDocument::CreateWithRootNode("SelectObjectContentRequest");
41
42 XmlNode parentNode = payloadDoc.GetRootElement();
43 parentNode.SetAttributeValue("xmlns", "http://s3.amazonaws.com/doc/2006-03-01/");
44
45 Aws::StringStream ss;
46 if(m_expressionHasBeenSet)
47 {
48 XmlNode expressionNode = parentNode.CreateChildElement("Expression");
49 expressionNode.SetText(m_expression);
50 }
51
52 if(m_expressionTypeHasBeenSet)
53 {
54 XmlNode expressionTypeNode = parentNode.CreateChildElement("ExpressionType");
55 expressionTypeNode.SetText(ExpressionTypeMapper::GetNameForExpressionType(m_expressionType));
56 }
57
58 if(m_requestProgressHasBeenSet)
59 {
60 XmlNode requestProgressNode = parentNode.CreateChildElement("RequestProgress");
61 m_requestProgress.AddToNode(requestProgressNode);
62 }
63
64 if(m_inputSerializationHasBeenSet)
65 {
66 XmlNode inputSerializationNode = parentNode.CreateChildElement("InputSerialization");
67 m_inputSerialization.AddToNode(inputSerializationNode);
68 }
69
70 if(m_outputSerializationHasBeenSet)
71 {
72 XmlNode outputSerializationNode = parentNode.CreateChildElement("OutputSerialization");
73 m_outputSerialization.AddToNode(outputSerializationNode);
74 }
75
76 if(m_scanRangeHasBeenSet)
77 {
78 XmlNode scanRangeNode = parentNode.CreateChildElement("ScanRange");
79 m_scanRange.AddToNode(scanRangeNode);
80 }
81
82 return payloadDoc.ConvertToString();
83 }
84
AddQueryStringParameters(URI & uri) const85 void SelectObjectContentRequest::AddQueryStringParameters(URI& uri) const
86 {
87 Aws::StringStream ss;
88 if(!m_customizedAccessLogTag.empty())
89 {
90 // only accept customized LogTag which starts with "x-"
91 Aws::Map<Aws::String, Aws::String> collectedLogTags;
92 for(const auto& entry: m_customizedAccessLogTag)
93 {
94 if (!entry.first.empty() && !entry.second.empty() && entry.first.substr(0, 2) == "x-")
95 {
96 collectedLogTags.emplace(entry.first, entry.second);
97 }
98 }
99
100 if (!collectedLogTags.empty())
101 {
102 uri.AddQueryStringParameter(collectedLogTags);
103 }
104 }
105 }
106
GetRequestSpecificHeaders() const107 Aws::Http::HeaderValueCollection SelectObjectContentRequest::GetRequestSpecificHeaders() const
108 {
109 Aws::Http::HeaderValueCollection headers;
110 Aws::StringStream ss;
111 if(m_sSECustomerAlgorithmHasBeenSet)
112 {
113 ss << m_sSECustomerAlgorithm;
114 headers.emplace("x-amz-server-side-encryption-customer-algorithm", ss.str());
115 ss.str("");
116 }
117
118 if(m_sSECustomerKeyHasBeenSet)
119 {
120 ss << m_sSECustomerKey;
121 headers.emplace("x-amz-server-side-encryption-customer-key", ss.str());
122 ss.str("");
123 }
124
125 if(m_sSECustomerKeyMD5HasBeenSet)
126 {
127 ss << m_sSECustomerKeyMD5;
128 headers.emplace("x-amz-server-side-encryption-customer-key-md5", ss.str());
129 ss.str("");
130 }
131
132 if(m_expectedBucketOwnerHasBeenSet)
133 {
134 ss << m_expectedBucketOwner;
135 headers.emplace("x-amz-expected-bucket-owner", ss.str());
136 ss.str("");
137 }
138
139 return headers;
140 }
141