2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FNetHttp_HttpRequestImpl.cpp
20 * @brief This is the implementation file for _HttpRequestImpl class.
23 #include <unique_ptr.h>
24 #include <FBaseString.h>
25 #include <FBaseByteBuffer.h>
26 #include <FNetNetTypes.h>
27 #include <FNetHttpHttpHeader.h>
28 #include <FNetHttpHttpRequest.h>
29 #include <FBaseColIEnumerator.h>
30 #include <FBaseSysLog.h>
31 #include "FNetHttp_HttpCommon.h"
32 #include "FNetHttp_HttpRequestImpl.h"
33 #include "FNetHttp_HttpSessionImpl.h"
34 #include "FNetHttp_HttpTransactionImpl.h"
35 #include "FNetHttp_HttpHeaderImpl.h"
38 using namespace Tizen::Base;
39 using namespace Tizen::Base::Collection;
40 using namespace Tizen::Base::Utility;
42 namespace Tizen { namespace Net { namespace Http
45 _HttpRequestImpl::_HttpRequestImpl(HttpRequest* pRequest)
46 : __method(NET_HTTP_METHOD_GET)
47 , __httpVersion(HTTP_VERSION_1_1)
48 , __cookieFlag(NET_HTTP_COOKIE_FLAG_ALWAYS_MANUAL)
49 , __recommendedSize(0)
50 , __isFirstChunk(false)
51 , __isLastChunk(false)
52 , __isReceivedTransactionReadyToWriteEvent(false)
53 , __pIHttpEntity(null)
54 , __pSendingBuffer(null)
55 , __pHttpTransactionImpl(null)
56 , __pHttpRequest(pRequest)
60 _HttpRequestImpl::~_HttpRequestImpl(void)
62 __pIHttpEntity = null;
63 __pSendingBuffer = null;
64 __pHttpTransactionImpl = null;
65 __pHttpRequest = null;
69 _HttpRequestImpl::Construct(const _HttpTransactionImpl& httpTransactionImpl, const HttpHeader* pCommonHeader)
73 __pHttpTransactionImpl = const_cast< _HttpTransactionImpl* >(&httpTransactionImpl);
75 unique_ptr<HttpHeader> pHeader(new (std::nothrow) HttpHeader(pCommonHeader));
77 SysTryReturnResult(NID_NET_HTTP, pHeader != null, r,
81 r = __pHttpRequest->_bodyQueue.Construct();
82 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS, E_OUT_OF_MEMORY,
83 "Memory allocation failed.");
85 _HttpSessionImpl* pHttpSessionImpl = httpTransactionImpl.GetHttpSessioinImpl();
86 SysTryReturnResult(NID_NET_HTTP, pHttpSessionImpl != null,
87 E_SYSTEM, "HttpSession must not be null.");
89 __cookieFlag = pHttpSessionImpl->GetHttpCookieFlag();
90 __pHttpRequest->_pHeader = pHeader.release();
92 // Total Length of the body initialization
93 __pHttpRequest->_totalLen = 0;
99 _HttpRequestImpl::CreateHttpRequestN(void)
101 return new (std::nothrow) HttpRequest();
105 _HttpRequestImpl::DeleteHttpRequest(HttpRequest* pHttpRequest)
111 _HttpRequestImpl::IsEmptyBody(void) const
113 int countOfCurrentBuffer = __pHttpRequest->_bodyQueue.GetCount();
114 if (countOfCurrentBuffer == 0)
125 _HttpRequestImpl::GetTotalBodyLength(void) const
127 return __pHttpRequest->_totalLen;
131 _HttpRequestImpl::SetRecommendedSize(int recommendedSize)
133 __recommendedSize = recommendedSize;
137 _HttpRequestImpl::SetReceivedTransactionReadyToWriteEvent(bool isReceviedEvent)
139 __isReceivedTransactionReadyToWriteEvent = isReceviedEvent;
143 _HttpRequestImpl::SetFirstChunkBody(bool isFirstChunk)
145 __isFirstChunk = isFirstChunk;
149 _HttpRequestImpl::IsFirstChunkBody(void) const
151 return __isFirstChunk;
155 _HttpRequestImpl::IsLastChunkBody(void) const
157 return __isLastChunk;
161 _HttpRequestImpl::HasCookie(void) const
163 bool rs = !(__cookieValue.IsEmpty());
169 _HttpRequestImpl::SetSendingBuffer(ByteBuffer* pBuffer)
171 __pSendingBuffer = pBuffer;
175 _HttpRequestImpl::GetSendingBuffer(void) const
177 return __pSendingBuffer;
181 _HttpRequestImpl::GetMethodName(void) const
187 _HttpRequestImpl::SetMethod(const NetHttpMethod method)
189 result r = E_SUCCESS;
191 SysTryReturnResult(NID_NET_HTTP, __pHttpTransactionImpl->IsSubmitted() == false,
192 E_INVALID_STATE, "HttpRequest is already submitted.");
194 SysTryReturnResult(NID_NET_HTTP,
195 ((method >= NET_HTTP_METHOD_GET) &&
196 (method <= NET_HTTP_METHOD_TRACE)) || method == NET_HTTP_METHOD_POST || method == NET_HTTP_METHOD_PUT || method == NET_HTTP_METHOD_CONNECT,
197 E_INVALID_ARG, "The method is invalid.");
201 case NET_HTTP_METHOD_GET:
202 __methodName = L"GET";
205 case NET_HTTP_METHOD_OPTIONS:
206 __methodName = L"OPTIONS";
209 case NET_HTTP_METHOD_HEAD:
210 __methodName = L"HEAD";
213 case NET_HTTP_METHOD_DELETE:
214 __methodName = L"DELETE";
217 case NET_HTTP_METHOD_TRACE:
218 __methodName = L"TRACE";
221 case NET_HTTP_METHOD_POST:
222 __methodName = L"POST";
225 case NET_HTTP_METHOD_PUT:
226 __methodName = L"PUT";
229 case NET_HTTP_METHOD_CONNECT:
230 __methodName = L"CONNECT";
236 SysLog(NID_NET_HTTP, "The method is %ls.", __methodName.GetPointer());
242 _HttpRequestImpl::SetCustomMethod(const String& method)
244 result r = E_SUCCESS;
246 SysTryReturnResult(NID_NET_HTTP, __pHttpTransactionImpl->IsSubmitted() == false,
247 E_INVALID_STATE, "HttpRequest is already submitted.");
249 SysTryReturnResult(NID_NET_HTTP, method.IsEmpty() == false,
250 E_INVALID_ARG, "The method is empty.");
252 __customMethodName = method;
253 __methodName = method;
255 SysLog(NID_NET_HTTP, "The custom method is %ls.", method.GetPointer());
261 _HttpRequestImpl::SetVersion(HttpVersion version)
263 result r = E_SUCCESS;
265 SysTryReturnResult(NID_NET_HTTP, __pHttpTransactionImpl->IsSubmitted() == false,
266 E_INVALID_STATE, "HttpRequest is already submitted.");
268 SysTryReturnResult(NID_NET_HTTP, version == HTTP_VERSION_1_0 || version == HTTP_VERSION_1_1,
269 E_INVALID_ARG, "The version is invalid.");
271 __httpVersion = version;
273 SysLog(NID_NET_HTTP, "The http version is %s.", version == HTTP_VERSION_1_0 ? "HTTP_VERSION_1_0": "HTTP_VERSION_1_1");
279 _HttpRequestImpl::SetUri(const String& uri)
281 result r = E_SUCCESS;
283 SysTryReturnResult(NID_NET_HTTP, __pHttpTransactionImpl->IsSubmitted() == false,
284 E_INVALID_STATE, "HttpRequest is already submitted.");
286 SysTryReturnResult(NID_NET_HTTP, uri.GetLength() > 0,
287 E_INVALID_ARG, "The uri is empty");
291 SysSecureLog(NID_NET_HTTP, "The uri is %ls.", uri.GetPointer());
297 _HttpRequestImpl::WriteBody(const Tizen::Base::ByteBuffer& body)
299 result r = E_SUCCESS;
301 unique_ptr<ByteBuffer> pBodyBuffer;
302 int srcBodySize = body.GetRemaining();
304 SysTryReturnResult(NID_NET_HTTP, srcBodySize >= 0,
305 E_INVALID_ARG, "The remaining of the buffer MUST be greater than or equal to 0.");
308 if (__pHttpTransactionImpl->IsSubmitted() == false)
310 pBodyBuffer.reset(new (std::nothrow) ByteBuffer());
311 SysTryReturnResult(NID_NET_HTTP, pBodyBuffer != null, E_OUT_OF_MEMORY,
312 "[E_OUT_OF_MEMORY] Memory allocation failed.");
314 r = pBodyBuffer->Construct(body);
315 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS, r,
316 "Failed to construct the ByteBuffer.");
318 r = __pHttpRequest->_bodyQueue.Enqueue(*pBodyBuffer);
319 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS, r,
320 "Failed to enqueue the ByteBuffer to the queue.");
322 __pHttpRequest->_totalLen += srcBodySize;
323 __isFirstChunk = true;
325 SysLog(NID_NET_HTTP, "Enqueue the body(%d) to queue. Total(%ld)", srcBodySize, __pHttpRequest->_totalLen);
327 //After submitting in OnTransactionReadyToWrite().
329 else if (__pHttpTransactionImpl->IsSubmitted() == true && __pHttpTransactionImpl->IsTransactionReadyToWriteEanbled() == true)
331 SysTryReturnResult(NID_NET_HTTP, __method == NET_HTTP_METHOD_POST || __method == NET_HTTP_METHOD_PUT, E_INVALID_STATE,
332 "Failed to construct the ByteBuffer.");
334 SysTryReturnResult(NID_NET_HTTP, __isReceivedTransactionReadyToWriteEvent == true, E_INVALID_STATE,
335 "OnTransactionReadyToWrite event not received yet.");
337 SysTryReturnResult(NID_NET_HTTP, __recommendedSize >= srcBodySize, E_OUT_OF_RANGE,
338 "The buffer size(%d) MUST be smaller than the recommended size(%d).", srcBodySize, __recommendedSize);
340 pBodyBuffer.reset(new (std::nothrow) ByteBuffer());
341 SysTryReturnResult(NID_NET_HTTP, pBodyBuffer != null, E_OUT_OF_MEMORY,
342 "[E_OUT_OF_MEMORY] Memory allocation failed.");
344 r = pBodyBuffer->Construct(body);
345 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS, r,
346 "Failed to construct the ByteBuffer.");
348 r = __pHttpRequest->_bodyQueue.Enqueue(*pBodyBuffer);
349 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS, r,
350 "Failed to enqueue the ByteBuffer to the queue.");
352 __pHttpRequest->_totalLen += srcBodySize;
353 __isFirstChunk = false;
355 SysLog(NID_NET_HTTP, "Enqueue the body(%d) to queue.(OnTransactionReadyToWrite). Total(%ld)", srcBodySize, __pHttpRequest->_totalLen);
358 pBodyBuffer.release();
364 _HttpRequestImpl::SetEntity(IHttpEntity& entity)
366 result r = E_SUCCESS;
368 SysTryReturnResult(NID_NET_HTTP, __pHttpTransactionImpl->IsSubmitted() == false,
369 E_INVALID_STATE, "HttpTransaction is already submitted.");
371 SysTryReturnResult(NID_NET_HTTP, __pHttpRequest->_totalLen == 0,
372 E_INVALID_STATE, "The body(buffer) is already set to the HttpRequest.");
375 String contentLength(L"0");
376 unique_ptr<ByteBuffer> pByteBuffer;
377 long long length = 0;
378 _HttpHeaderImpl* pHeaderImpl = null;
380 __pIHttpEntity = &entity;
382 pHeaderImpl = _HttpHeaderImpl::GetInstance(*__pHttpRequest->_pHeader);
384 //ToDo test.. chunked mode for entity.
385 __pHttpTransactionImpl->EnableTransactionReadyToWrite();
387 if (pHeaderImpl->HasHeader(_HTTP_CONTENT_TYPE_HEADER_NAME, keyName))
389 pHeaderImpl->RemoveField(keyName);
390 SysLog(NID_NET_HTTP, "The Content-Type header was removed.");
393 if (pHeaderImpl->HasHeader(_HTTP_CONTENT_LENGTH_HEADER_NAME, keyName))
395 pHeaderImpl->RemoveField(keyName);
396 SysLog(NID_NET_HTTP, "The Content-Length header was removed.");
399 r = pHeaderImpl->AddField(_HTTP_CONTENT_TYPE_HEADER_NAME, entity.GetContentType());
400 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS, E_OUT_OF_MEMORY,
401 "Memory allocation failed.");
403 length = entity.GetContentLength();
404 SysTryReturnResult(NID_NET_HTTP, length != _HTTP_INVALID_CONTENT_LENGTH, E_INVALID_ARG,
405 "The content-length of entity is invalid.");
407 contentLength = LongLong::ToString(length);
409 r = pHeaderImpl->AddField(_HTTP_CONTENT_LENGTH_HEADER_NAME, contentLength);
410 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS, E_OUT_OF_MEMORY,
411 "Memory allocation failed.");
413 SysLog(NID_NET_HTTP, "The Content-Type is %ls.", entity.GetContentType().GetPointer());
414 SysLog(NID_NET_HTTP, "The Content-Length is %ls.", contentLength.GetPointer());
416 if (entity.HasNextData())
418 //generates the form data from IHttpEntity.
419 pByteBuffer.reset(entity.GetNextDataN(length));
421 SysTryReturnResult(NID_NET_HTTP, pByteBuffer != null, r,
422 "Failed to generate form data from the IHttpEntity.");
424 r = WriteBody(*pByteBuffer);
425 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS, r,
426 "Failed to write the byte buffer.");
429 SysLog(NID_NET_HTTP, "Completed to set the entity.");
435 _HttpRequestImpl::GetHeader(void) const
439 SysTryReturn(NID_NET_HTTP, __pHttpRequest->_pHeader != null, null, E_INVALID_HEADER,
440 "[E_INVALID_HEADER] HttpHeader must not be null.");
442 return __pHttpRequest->_pHeader;
446 _HttpRequestImpl::GetMethod() const
454 _HttpRequestImpl::GetCustomMethod(String& method) const
456 result r = E_SUCCESS;
458 method = __customMethodName;
464 _HttpRequestImpl::GetVersion(void) const
468 return __httpVersion;
472 _HttpRequestImpl::GetUri(String& uri) const
474 result r = E_SUCCESS;
481 Tizen::Base::ByteBuffer*
482 _HttpRequestImpl::ReadBodyN()
485 result r = E_SUCCESS;
487 unique_ptr<ByteBuffer> pResultBuffer;
488 ByteBuffer* pByteBuffer = null;
489 int resultBufferLen = 0;
490 int countOfCurrentBuffer = 0;
492 countOfCurrentBuffer = __pHttpRequest->_bodyQueue.GetCount();
493 if (countOfCurrentBuffer <= 0)
497 SysLog(NID_NET_HTTP, "No more data to read.");
501 pResultBuffer.reset(new (std::nothrow) ByteBuffer());
502 SysTryReturn(NID_NET_HTTP, pResultBuffer != null, null, E_OUT_OF_MEMORY,
503 "[E_OUT_OF_MEMORY] Memory allocation failed.");
505 r = pResultBuffer->Construct(__pHttpRequest->_totalLen);
506 SysTryReturn(NID_NET_HTTP, r == E_SUCCESS, null, E_OUT_OF_MEMORY,
507 "[E_OUT_OF_MEMORY] Memory allocation failed.");
509 for (int i = 0; i < countOfCurrentBuffer; i++)
513 pByteBuffer = dynamic_cast< ByteBuffer* >(__pHttpRequest->_bodyQueue.Dequeue());
514 SysTryReturn(NID_NET_HTTP, pByteBuffer != null, null, E_EMPTY_BODY,
515 "[E_EMPTY_BODY] The buffer of the body is empty.");
517 bufferSize = pByteBuffer->GetRemaining();
519 r = pResultBuffer->CopyFrom(*pByteBuffer);
520 SysTryReturn(NID_NET_HTTP, r == E_SUCCESS, null, E_OUT_OF_RANGE,
521 "[E_OUT_OF_RANGE] Failed to copy the buffer to new buffer.");
527 SysLog(NID_NET_HTTP, "Write the last chunk(Empty Body).");
528 __isLastChunk = true;
533 pResultBuffer->Flip();
534 resultBufferLen = pResultBuffer->GetRemaining();
535 __pHttpRequest->_totalLen = __pHttpRequest->_totalLen - resultBufferLen;
537 SysLog(NID_NET_HTTP, "Read the body(%d), Remained Body(%d).", resultBufferLen, __pHttpRequest->_totalLen);
539 return pResultBuffer.release();
542 Tizen::Base::ByteBuffer*
543 _HttpRequestImpl::ReadAllBodyN(void) const
546 result r = E_SUCCESS;
548 unique_ptr<ByteBuffer> pResultBuffer;
549 ByteBuffer* pByteBuffer = null;
550 int resultBufferLen = 0;
552 unique_ptr<IEnumerator> pEnum;
553 int countOfCurrentBuffer = 0;
555 countOfCurrentBuffer = __pHttpRequest->_bodyQueue.GetCount();
556 if (countOfCurrentBuffer <= 0)
560 SysLog(NID_NET_HTTP, "No more data to read.");
564 pEnum.reset(__pHttpRequest->_bodyQueue.GetEnumeratorN());
565 SysTryReturn(NID_NET_HTTP, pEnum != null, null, E_OUT_OF_MEMORY,
566 "[E_OUT_OF_MEMORY] Memory allocation failed.");
568 pResultBuffer.reset(new (std::nothrow) ByteBuffer());
569 SysTryReturn(NID_NET_HTTP, pResultBuffer != null, null, E_OUT_OF_MEMORY,
570 "[E_OUT_OF_MEMORY] Memory allocation failed.");
572 r = pResultBuffer->Construct(__pHttpRequest->_totalLen);
573 SysTryReturn(NID_NET_HTTP, r == E_SUCCESS, null, E_OUT_OF_MEMORY,
574 "[E_OUT_OF_MEMORY] Memory allocation failed.");
576 while (pEnum->MoveNext() == E_SUCCESS)
580 pByteBuffer = dynamic_cast< ByteBuffer* >(pEnum->GetCurrent());
581 SysTryReturn(NID_NET_HTTP, pByteBuffer != null, null, E_EMPTY_BODY,
582 "[E_EMPTY_BODY] The buffer of the body is empty.");
584 bufferSize = pByteBuffer->GetRemaining();
586 r = pResultBuffer->CopyFrom(*pByteBuffer);
587 SysTryReturn(NID_NET_HTTP, r == E_SUCCESS, null, E_OUT_OF_RANGE,
588 "[E_OUT_OF_RANGE] Failed to copy the buffer to new buffer.");
593 pResultBuffer->Flip();
594 resultBufferLen = pResultBuffer->GetRemaining();
596 SysLog(NID_NET_HTTP, "Read the body(%d).", resultBufferLen);
598 return pResultBuffer.release();
602 _HttpRequestImpl::GetEntity(void) const
604 return __pIHttpEntity;
608 _HttpRequestImpl::HasNextData(void)
611 rs = __pIHttpEntity->HasNextData();
617 _HttpRequestImpl::GetNextDataN(int recommendedSize)
619 ByteBuffer* pBuffer = null;
620 pBuffer = __pIHttpEntity->GetNextDataN(recommendedSize);
626 _HttpRequestImpl::Set(_HttpRequestImpl* pHttpRequestImpl)
628 result r = E_SUCCESS;
630 HttpHeader* pHttpHeader = null;
631 HttpHeader* pSrcHttpHeader = null;
633 //Sets member variables.
634 __method = pHttpRequestImpl->GetMethod();
635 pHttpRequestImpl->GetCustomMethod(__customMethodName);
636 __methodName = pHttpRequestImpl->GetMethodName();
637 __httpVersion = pHttpRequestImpl->GetVersion();
638 pHttpRequestImpl->GetUri(__uri);
639 __cookieValue = pHttpRequestImpl->GetCookie();
640 __encoding = pHttpRequestImpl->GetAcceptEncoding();
641 __pIHttpEntity = pHttpRequestImpl->GetEntity();
643 pHttpHeader = pHttpRequestImpl->GetHeader();
645 //Sets request buffer. (message queue).
646 ByteBuffer* pBuffer = null;
649 pBuffer = pHttpRequestImpl->ReadBodyN();
652 this->WriteBody(*pBuffer);
655 while(pBuffer != null);
658 pSrcHttpHeader = new (std::nothrow) HttpHeader(pHttpHeader);
659 SysTryReturn(NID_NET_HTTP, pSrcHttpHeader != null, null, E_OUT_OF_MEMORY,
660 "[E_OUT_OF_MEMORY] Memory allocation failed.");
662 __pHttpRequest->_pHeader = pSrcHttpHeader;
668 _HttpRequestImpl::SetCookie(const Tizen::Base::String& cookieString)
670 result r = E_SUCCESS;
672 SysTryReturnResult(NID_NET_HTTP, cookieString.IsEmpty() == false,
673 E_INVALID_ARG, "The input argument is empty.");
675 SysTryReturnResult(NID_NET_HTTP, __cookieFlag == NET_HTTP_COOKIE_FLAG_ALWAYS_MANUAL,
676 E_INVALID_STATE, "The cookieFlag of HttpSession is invalid.");
678 SysTryReturnResult(NID_NET_HTTP, __pHttpTransactionImpl->IsSubmitted() == false,
679 E_INVALID_STATE, "HttpTransaction is already submitted.");
682 String subCookieString;
684 r = cookieString.ToLower(lowerString);
685 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS,
686 E_INVALID_ARG, "The input argument is invalid.");
688 SysTryReturnResult(NID_NET_HTTP, lowerString.StartsWith(L"cookie:", 0),
689 E_INVALID_ARG, "Cookie string doesn't start with Cookie:");
691 r = cookieString.SubString(_COOKIE_PREFIX_LENGTH, subCookieString);
692 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS,
693 E_INVALID_ARG, "Failed to get the sub cookie string.");
695 subCookieString.Trim();
697 __cookieValue = subCookieString;
699 SysSecureLog(NID_NET_HTTP, "The cookie string is %ls.", cookieString.GetPointer());
705 _HttpRequestImpl::GetCookie(void) const
709 SysTryReturn(NID_NET_HTTP, __cookieValue.IsEmpty() == false, L"", E_INVALID_STATE,
710 "[E_INVALID_STATE] Cookies is empty.");
712 SysTryReturn(NID_NET_HTTP, __cookieFlag == NET_HTTP_COOKIE_FLAG_ALWAYS_MANUAL, L"", E_INVALID_STATE,
713 "[E_INVALID_STATE] The cookieFlag of HttpSession is invalid.");
715 return __cookieValue;
719 _HttpRequestImpl::SetAcceptEncoding(const Tizen::Base::String& encoding)
721 result r = E_SUCCESS;
723 SysTryReturnResult(NID_NET_HTTP, __pHttpTransactionImpl->IsSubmitted() == false, E_INVALID_STATE, "HttpRequest is already submitted.");
724 SysTryReturnResult(NID_NET_HTTP, encoding.IsEmpty() == false, E_INVALID_ARG, "The input argument is empty.");
726 __encoding = encoding;
732 _HttpRequestImpl::GetAcceptEncoding(void) const
738 _HttpRequestImpl::GetInstance(HttpRequest& httpRequest)
740 return httpRequest.__pHttpRequestImpl;
743 const _HttpRequestImpl*
744 _HttpRequestImpl::GetInstance(const HttpRequest& httpRequest)
746 return httpRequest.__pHttpRequestImpl;
749 } } } // Tizen::Net::Http