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_HttpCommon.cpp
20 * @brief This file implement the common macro or function used by internal module.
23 #include <unique_ptr.h>
25 #include <FBaseString.h>
26 #include <FBaseByteBuffer.h>
27 #include <FBaseUtil.h>
28 #include <FBaseRtMutex.h>
29 #include <FBaseRtMutexGuard.h>
32 #include <FBaseSysLog.h>
33 #include <FBase_StringConverter.h>
34 #include <FApp_AppInfo.h>
35 #include <FIoDirectory.h>
36 #include "FNetHttp_HttpCommon.h"
37 #include "FNetHttp_HttpTransactionEvent.h"
40 using namespace Tizen::Base;
41 using namespace Tizen::Base::Runtime;
42 using namespace Tizen::Base::Utility;
43 using namespace Tizen::Base::Collection;
44 using namespace Tizen::App;
45 using namespace Tizen::Io;
47 namespace Tizen { namespace Net { namespace Http
50 extern const wchar_t _HTTP_USERAGENT_HEADER_NAME[] = L"User-Agent";
52 extern const wchar_t _HTTP_CONTENT_LENGTH_HEADER_NAME[] = L"Content-Length";
54 extern const wchar_t _HTTP_CONTENT_TYPE_HEADER_NAME[] = L"Content-Type";
56 extern const wchar_t _HTTP_TRANSFER_ENCODING_HEADER_NAME[] = L"Transfer-Encoding";
58 extern const wchar_t _HTTP_EXPECT_HEADER_NAME[] = L"Expect";
60 extern const wchar_t _HTTP_SET_COOKIE_HEADER_NAME[] = L"Set-Cookie";
62 extern const wchar_t _HTTP_PROXY_AUTHENTICATE_HEADER_NAME[] = L"Proxy-Authenticate";
64 extern const wchar_t _HTTP_WWW_AUTHENTICATE_HEADER_NAME[] = L"WWW-Authenticate";
66 extern const wchar_t _HTTP_CHUNKED_HEADER_VALUE[] = L"chunked";
68 extern const wchar_t _HTTP_PROTOCOL_SCHEME[] = L"http://";
70 extern const wchar_t _HTTPS_PROTOCOL_SCHEME[] = L"https://";
72 extern const wchar_t _HTTP_DEFAULT_BODY_CHARSET[] = L"ISO-8859-1";
74 extern const wchar_t _MULTI_PART_FORM_DATA_PREFIX[] = L"multipart/form-data; boundary=";
76 extern const wchar_t _HTTP_STRING_PART_DEFAULT_CHARSET[] = L"ISO-8859-1";
78 extern const wchar_t _HTTP_FILE_PART_DEFAULT_CHARSET[] = L"";
80 extern const wchar_t _HTTP_MULTI_PART_BOUNDARY_CHARACTER_SET[] = L"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
82 extern const wchar_t _HTTP_SET_COOKIE_DELIMITER[] = L";";
84 extern const wchar_t _HTTP_SET_COOKIE_FLAG_DELIMITER[] = L"=";
86 extern const wchar_t _HTTP_COOKIE_COMMENT_NAME[] = L"Comment";
88 extern const wchar_t _HTTP_COOKIE_COMMENTURL_NAME[] = L"CommentURL";
90 extern const wchar_t _HTTP_COOKIE_DISCARD_NAME[] = L"Discard";
92 extern const wchar_t _HTTP_COOKIE_EXPIRES_NAME[] = L"Expires";
94 extern const wchar_t _HTTP_COOKIE_DOMAIN_NAME[] = L"Domain";
96 extern const wchar_t _HTTP_COOKIE_MAX_AGE_NAME[] = L"Max-Age";
98 extern const wchar_t _HTTP_COOKIE_PATH_NAME[] = L"Path";
100 extern const wchar_t _HTTP_COOKIE_PORT_NAME[] = L"Port";
102 extern const wchar_t _HTTP_COOKIE_SECURE_NAME[] = L"Secure";
104 extern const wchar_t _HTTP_COOKIE_VERSION_NAME[] = L"Version";
106 extern const wchar_t _HTTP_COOKIE_HTTP_ONLY[] = L"HttpOnly";
108 extern const wchar_t _HTTP_CARRIAGE_RETURN_LINE_FEED[] = L"\r\n";
110 extern const wchar_t _CURL_COOKIE_HTTP_ONLY_PREFIX[] = L"#HttpOnly_";
112 extern const wchar_t _HTTP_COOKIE_FILE[] = L"data/cookies.txt";
114 static const char* NetHttpTransactionEventTypesToString[] =
116 "_HTTP_TRANSACTION_EVENT_TYPE_UNDEFINED", "_HTTP_TRANSACTION_EVENT_TYPE_HEADER_COMPLETED",
117 "_HTTP_TRANSACTION_EVENT_TYPE_READY_TO_READ", "_HTTP_TRANSACTION_EVENT_TYPE_READY_TO_WRITE",
118 "_HTTP_TRANSACTION_EVENT_TYPE_COMPLETD", "_HTTP_TRANSACTION_EVENT_TYPE_ABORTED",
119 "_HTTP_TRANSACTION_EVENT_TYPE_CERT_VERIFICATION_REQUIRED", "_HTTP_TRANSACTION_EVENT_TYPE_UPLOAD_PROGRESS",
120 "_HTTP_TRANSACTION_EVENT_TYPE_DOWNLOAD_PROGRESS"
123 static const char* NetHttpCertificateVerificationFlagToString[] =
125 "HTTP_CV_FLAG_AUTOMATIC",
126 "HTTP_CV_FLAG_MANUAL",
127 "HTTP_CV_FLAG_IGNORED"
131 _HttpUtility::ConvertHttpTransactionEventTypeToString(_HttpTransactionEventType type)
133 return NetHttpTransactionEventTypesToString[type];
137 _HttpUtility::ConvertNetHttpCertificateVerificationFlagToString(NetHttpCertificateVerificationFlag flag)
139 return NetHttpCertificateVerificationFlagToString[flag];
143 _HttpUtility::PrintCurlMultiErrorCode(CURLMcode code)
145 const char* pErrorMessage = null;
148 case CURLM_CALL_MULTI_PERFORM:
149 pErrorMessage = "CURLM_CALL_MULTI_PERFORM";
151 case CURLM_BAD_HANDLE:
152 pErrorMessage = "CURLM_BAD_HANDLE";
154 case CURLM_BAD_EASY_HANDLE:
155 pErrorMessage = "CURLM_BAD_EASY_HANDLE";
157 case CURLM_OUT_OF_MEMORY:
158 pErrorMessage = "CURLM_OUT_OF_MEMORY";
160 case CURLM_INTERNAL_ERROR:
161 pErrorMessage = "CURLM_INTERNAL_ERROR";
163 case CURLM_BAD_SOCKET:
164 pErrorMessage = "CURLM_BAD_SOCKET";
166 case CURLM_UNKNOWN_OPTION:
167 pErrorMessage = "CURLM_UNKNOWN_OPTION";
170 pErrorMessage = "CURLM_LAST";
173 pErrorMessage = "CURLM_UNKNOWN_ERROR";
177 SysLog(NID_NET_HTTP, "CURLMcode(%d): %s", code, pErrorMessage);
181 _HttpUtility::ConvertErrorCode(CURLcode code)
183 result r = E_SUCCESS;
190 case CURLE_COULDNT_CONNECT: // 7
191 r = E_HOST_UNREACHABLE;
194 case CURLE_READ_ERROR: // 26 - couldn't open/read from file
195 r = E_NOT_RESPONDING;
198 case CURLE_OPERATION_TIMEDOUT: // 28 - the timeout time was reached
202 case CURLE_SSL_CONNECT_ERROR: // 35 - wrong when connecting with SSL
203 r = E_CONNECTION_RESET;
206 case CURLE_ABORTED_BY_CALLBACK: // 42 - aborted by callback.
207 r = E_OPERATION_CANCELED;
210 case CURLE_BAD_CONTENT_ENCODING: // 61 - Unrecognized transfer encoding
211 r = E_INVALID_CONTENT;
214 case CURLE_OUT_OF_MEMORY: // 27 Note: CURLE_OUT_OF_MEMORY may sometimes indicate a conversion error instead of a memory allocation error if CURL_DOES_CONVERSIONS is defined
218 case CURLE_UNSUPPORTED_PROTOCOL: // 1
219 case CURLE_URL_MALFORMAT: // 3
220 case CURLE_COULDNT_RESOLVE_PROXY: // 5
221 case CURLE_COULDNT_RESOLVE_HOST: // 6
222 case CURLE_REMOTE_ACCESS_DENIED: // 9 a service was denied by the server due to lack of access - when login fails this is not returned.
223 case CURLE_PARTIAL_FILE: // 18
224 case CURLE_QUOTE_ERROR: // 21 - quote command failure
225 case CURLE_HTTP_RETURNED_ERROR: // 22
226 case CURLE_WRITE_ERROR: // 23
227 case CURLE_UPLOAD_FAILED: // 25 - failed upload "command"
228 case CURLE_RANGE_ERROR: // 33 - RANGE "command" didn't work
229 case CURLE_HTTP_POST_ERROR: // 34
230 case CURLE_BAD_DOWNLOAD_RESUME: // 36 - couldn't resume download
231 case CURLE_FILE_COULDNT_READ_FILE: // 37
232 case CURLE_FUNCTION_NOT_FOUND: // 41
233 case CURLE_BAD_FUNCTION_ARGUMENT: // 43
234 case CURLE_INTERFACE_FAILED: // 45 - CURLOPT_INTERFACE failed
235 case CURLE_TOO_MANY_REDIRECTS: // 47 - catch endless re-direct loops
236 case CURLE_GOT_NOTHING: // 52 - when this is a specific error
237 case CURLE_SEND_ERROR: // 55 - failed sending network data
238 case CURLE_RECV_ERROR: // 56 - failure in receiving network data
239 case CURLE_PEER_FAILED_VERIFICATION: // 51 - peer's certificate or fingerprint wasn't verified fine
240 case CURLE_SSL_CERTPROBLEM: // 58 - problem with the local certificate
241 case CURLE_SSL_CIPHER: // 59 - couldn't use specified cipher
242 case CURLE_SSL_CACERT: // 60 - problem with the CA cert (path?)
243 case CURLE_SSL_ISSUER_ERROR: // 83 - Issuer check failed. (Added in 7.19.0)
244 case CURLE_SSL_CRL_BADFILE: // 82 - could not load CRL file, missing or wrong format (Added in 7.19.0)
245 case CURLE_SSL_CACERT_BADFILE: // 77 - could not load CACERT file, missing or wrong format
246 case CURLE_FILESIZE_EXCEEDED: // 63 - Maximum file size exceeded
247 case CURLE_SEND_FAIL_REWIND: // 65 - Sending the data requires a rewind that failed
248 case CURLE_SSL_ENGINE_INITFAILED: // 66 - failed to initialise ENGINE
249 case CURLE_LOGIN_DENIED: // 67 - user, password or similar was not accepted and we failed to login
250 case CURLE_REMOTE_DISK_FULL: // 70 - out of disk space on server
251 case CURLE_REMOTE_FILE_EXISTS: // 73 - File already exists
252 case CURLE_CONV_FAILED: // 75 - conversion failed
253 case CURLE_CONV_REQD: // 76 - caller must register conversion callbacks using curl_easy_setopt options CURLOPT_CONV_FROM_NETWORK_FUNCTION, CURLOPT_CONV_TO_NETWORK_FUNCTION, and CURLOPT_CONV_FROM_UTF8_FUNCTION
254 case CURLE_REMOTE_FILE_NOT_FOUND: // 78 - remote file not found
255 case CURLE_AGAIN: // 81 - socket is not ready for send/recv, wait till it's ready and try again (Added in 7.18.2)
256 case CURLE_CHUNK_FAILED: // 88 - chunk callback reported error
257 case CURL_LAST: // never use!
261 case CURLE_SSL_ENGINE_NOTFOUND: // 53 - SSL crypto engine not found
262 case CURLE_SSL_ENGINE_SETFAILED: // 54 - can not set SSL crypto engine as default
263 case CURLE_SSL_SHUTDOWN_FAILED: // 80 - Failed to shut down the SSL connection
271 SysLog(NID_NET_HTTP, "Converter Error Code(CURLE(%d) => OSP result(%lu: %s)", code, r, GetErrorMessage(r));
276 _HttpUtility::IsSslError(CURLcode code)
278 bool isSSLError = false;
281 case CURLE_SSL_CONNECT_ERROR:
282 case CURLE_PEER_FAILED_VERIFICATION: // 51 - peer's certificate or fingerprint wasn't verified fine
283 case CURLE_SSL_CERTPROBLEM: // 58 - problem with the local certificate
284 case CURLE_SSL_CIPHER: // 59 - couldn't use specified cipher
285 case CURLE_SSL_CACERT: // 60 - problem with the CA cert (path?)
286 case CURLE_SSL_ISSUER_ERROR: // 83 - Issuer check failed. (Added in 7.19.0)
287 case CURLE_SSL_CRL_BADFILE: // 82 - could not load CRL file, missing or wrong format (Added in 7.19.0)
288 case CURLE_SSL_CACERT_BADFILE: // 77 - could not load CACERT file, missing or wrong format
300 _HttpUtility::AddHeaderByteBufferToBuffer(ByteBuffer **ppSrcBuffer, const ByteBuffer & destBuffer)
302 result r = E_SUCCESS;
304 r = AddByteBufferToBuffer(ppSrcBuffer, destBuffer, _HTTP_DEFAULT_HEADER_SIZE);
305 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS, r, "Propagating.");
311 _HttpUtility::AddHeaderBytesToBuffer(ByteBuffer **ppSrcBuffer, const byte *pDestBytes, int destBytesSize)
313 result r = E_SUCCESS;
315 r = AddBytesToBuffer(ppSrcBuffer, pDestBytes, destBytesSize, _HTTP_DEFAULT_HEADER_SIZE);
316 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS, r, "Propagating.");
322 _HttpUtility::AddByteBufferToBuffer(ByteBuffer **ppSrcBuffer, const ByteBuffer & destBuffer, int defaultExtendedSize)
324 result r = E_SUCCESS;
326 r = AddBytesToBuffer(ppSrcBuffer, destBuffer.GetPointer(), destBuffer.GetRemaining(), defaultExtendedSize);
327 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS, r, "Propagating.");
333 _HttpUtility::AddBytesToBuffer(ByteBuffer **ppSrcBuffer, const byte *pDestBytes, int destBytesSize, int defaultExtendedSize)
335 result r = E_SUCCESS;
336 ByteBuffer* pBuffer = null;
337 int srcBufferRemainSize = 0;
339 SysTryReturnResult(NID_NET_HTTP, ppSrcBuffer != null && *ppSrcBuffer != null,
340 E_SYSTEM, "Input buffer is invalid.");
342 //creates the new buffer.
343 srcBufferRemainSize = (*ppSrcBuffer)->GetRemaining();
344 if (srcBufferRemainSize >= destBytesSize)
346 r = (*ppSrcBuffer)->SetArray(pDestBytes, 0, destBytesSize);
347 SysTryCatch(NID_NET_HTTP, r == E_SUCCESS, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
348 "[E_OUT_OF_MEMORY] Memory allocation failed.");
353 (*ppSrcBuffer)->Flip();
354 srcBufferRemainSize = (*ppSrcBuffer)->GetRemaining();
355 int newBufferSize = srcBufferRemainSize + destBytesSize + defaultExtendedSize;
357 pBuffer = new (std::nothrow) ByteBuffer();
358 r = pBuffer->Construct(newBufferSize);
359 SysTryCatch(NID_NET_HTTP, r == E_SUCCESS, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
360 "[E_OUT_OF_MEMORY] Memory allocation failed.");
362 r = pBuffer->CopyFrom((** ppSrcBuffer));
363 SysTryCatch(NID_NET_HTTP, r == E_SUCCESS, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
364 "[E_OUT_OF_MEMORY] Memory allocation failed.");
366 r = pBuffer->SetArray(pDestBytes, 0, destBytesSize);
367 SysTryCatch(NID_NET_HTTP, r == E_SUCCESS, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
368 "[E_OUT_OF_MEMORY] Memory allocation failed.");
370 SysLog(NID_NET_HTTP, "Creates a new ByteBuffer(%d): ppSrcBuffer(%d), pDestBytes(%d).", newBufferSize,
371 srcBufferRemainSize, destBytesSize);
374 *ppSrcBuffer = pBuffer;
385 bool _HttpUtility::__initialized = false;
386 Mutex* _HttpUtility::__pHttpMutex = null;
387 IList* _HttpUtility::__pSslCertList = null;
390 _HttpUtility::DestroyHttp(void)
393 delete __pSslCertList;
394 __initialized = false;
396 SysLog(NID_NET_HTTP, "Called DestroyHttp.");
400 _HttpUtility::InitializeHttpOnce(void)
402 result r = E_SUCCESS;
404 unique_ptr<Mutex> pMutex(new (std::nothrow)Mutex());
405 SysTryReturnVoidResult(NID_NET_HTTP, pMutex != null, E_OUT_OF_MEMORY,
406 "[E_OUT_OF_MEMORY] Memory allocation failed.");
408 r = pMutex->Create();
409 SysTryReturnVoidResult(NID_NET_HTTP, r == E_SUCCESS, r,
410 "[%s] Propagating.", GetErrorMessage(r));
412 SysLog(NID_NET_HTTP, "Created the mutex.");
414 unique_ptr<IList> pSslCertList(new (std::nothrow)LinkedList());
415 SysTryReturnVoidResult(NID_NET_HTTP, pSslCertList != null, E_OUT_OF_MEMORY,
416 "[E_OUT_OF_MEMORY] Memory allocation failed.");
418 CURLcode code = curl_global_init(CURL_GLOBAL_ALL);
419 SysTryReturnVoidResult(NID_NET_HTTP, code == CURLE_OK, E_SYSTEM, "[E_SYSTEM] Failed to call curl_global_init()");
421 SysLog(NID_NET_HTTP, "Called curl_global_init()");
423 __pHttpMutex = pMutex.release();
424 __pSslCertList = pSslCertList.release();
425 __initialized = true;
427 SysLog(NID_NET_HTTP, "Allocated the LinkedList.");
429 //std::atexit(DestroyHttp);
433 _HttpUtility::InitializeHttp(void)
435 static pthread_once_t onceBlock = PTHREAD_ONCE_INIT;
440 SysLog(NID_NET_HTTP, "Initializing HTTP.");
441 pthread_once(&onceBlock, InitializeHttpOnce);
442 result r = GetLastResult();
445 onceBlock = PTHREAD_ONCE_INIT;
446 SysLogException(NID_NET_HTTP, r, "[%s] Failed to initialize HTTP.", GetErrorMessage(r));
450 SysLog(NID_NET_HTTP, "Initialized HTTP.");
454 SysLog(NID_NET_HTTP, "HTTP is already initialized.");
459 _HttpUtility::GetHttpMutex(void)
461 SysAssertf(__pHttpMutex != null, "pHttpMutex is null.");
466 _HttpUtility::GetSslCertList(void)
468 SysAssertf(__pSslCertList != null, "pSSLCertList is null.");
469 return __pSslCertList;
473 _HttpUtility::SetSslCertInfo(_HttpSslInfo & sslInfo)
475 result r = E_SUCCESS;
477 IList* pServerCertList = GetSslCertList();
478 Mutex* pHttpMutex = GetHttpMutex();
480 MutexGuard locked(*pHttpMutex);
481 SysTryReturnResult(NID_NET_HTTP, locked.IsLocked(), E_SYSTEM,
482 "Failed to lock mutex.");
484 r = pServerCertList->Add(sslInfo);
485 SysTryReturnResult(NID_NET_HTTP, r == E_SUCCESS, E_OUT_OF_MEMORY,
486 "Memory allocation failed.");
492 _HttpUtility::GetSslCertInfo(int socketFd)
496 IList* pServerCertList = GetSslCertList();
497 Mutex* pHttpMutex = GetHttpMutex();
498 _HttpSslInfo* pSSLInfo = null;
500 MutexGuard locked(*pHttpMutex);
501 SysTryReturn(NID_NET_HTTP, locked.IsLocked(), null, E_SYSTEM,
502 "[E_SYSTEM] Failed to lock mutex.");
504 unique_ptr<IEnumerator> pEnum(pServerCertList->GetEnumeratorN());
505 SysTryReturn(NID_NET_HTTP, pEnum != null, null, E_OUT_OF_MEMORY,
506 "[E_OUT_OF_MEMORY] Memory allocation failed.");
508 while (pEnum->MoveNext() == E_SUCCESS)
510 pSSLInfo = dynamic_cast< _HttpSslInfo* >(pEnum->GetCurrent());
511 SysTryReturn(NID_NET_HTTP, pSSLInfo != null, null, E_OUT_OF_MEMORY,
512 "[E_OUT_OF_MEMORY] Memory allocation failed.");
514 if (pSSLInfo->GetSocketFd() == socketFd)
516 SysLog(NID_NET_HTTP, "Found the same server cert.");
525 _HttpUtility::RemoveSslCertInfo(_HttpSslInfo & sslInfo)
528 result r = E_SUCCESS;
529 Mutex* pHttpMutex = GetHttpMutex();
530 IList *pServerCertList = GetSslCertList();
532 MutexGuard locked(*pHttpMutex);
533 SysTryReturnResult(NID_NET_HTTP, locked.IsLocked(), E_SYSTEM,
534 "Failed to lock mutex.");
536 pServerCertList->Remove(sslInfo, true);
542 _HttpUtility::HasProtocolScheme(const Tizen::Base::String & host)
544 result r = E_SUCCESS;
545 int indexOfDelimiter = -1;
547 //Check if the prefix of hostAddr includes "http://".
548 r = host.IndexOf(_HTTP_PROTOCOL_SCHEME, 0, indexOfDelimiter);
549 if (r == E_OBJ_NOT_FOUND)
551 //Check if the prefix of hostAddr includes "https://".
552 r = host.IndexOf(_HTTPS_PROTOCOL_SCHEME, 0, indexOfDelimiter);
553 if (r == E_OBJ_NOT_FOUND)
563 _HttpUtility::GetProtocolScheme(const String & host)
565 result r = E_SUCCESS;
569 r = hostUri.SetUri(host);
570 SysTryReturn(NID_NET_HTTP, r == E_SUCCESS, L"", E_INVALID_ARG,
571 "[E_INVALID_ARG] Failed to set uri");
572 scheme = hostUri.GetScheme();
579 _HttpUtility::CompareHost(const Tizen::Base::String & host0, const Tizen::Base::String & host1)
581 result r = E_SUCCESS;
585 r = hostUri0.SetUri(host0);
586 r = TransExceptionsExclusive(r, E_INVALID_ARG, E_OUT_OF_MEMORY);
587 SysTryReturn(NID_NET_HTTP, r == E_SUCCESS, false, r,
588 "[%s] Failed to set uri.", GetErrorMessage(r));
590 r = hostUri1.SetUri(host1);
591 r = TransExceptionsExclusive(r, E_INVALID_ARG, E_OUT_OF_MEMORY);
592 SysTryReturn(NID_NET_HTTP, r == E_SUCCESS, false, r,
593 "[%s] Failed to set uri", GetErrorMessage(r));
595 String scheme0 = hostUri0.GetScheme();
596 String scheme1 = hostUri1.GetScheme();
598 if(!scheme0.Equals(scheme1, false))
600 SetLastResult(E_INVALID_ARG);
604 String hostPart0 = hostUri0.GetHost();
605 String hostPart1 = hostUri1.GetHost();
607 if(!hostPart0.Equals(hostPart1, false))
609 SetLastResult(E_INVALID_ARG);
613 int port0 = hostUri0.GetPort();
614 int port1 = hostUri1.GetPort();
616 port0 = (port0 == -1) ? _HTTP_DEFAULT_PORT : port0;
617 port1 = (port1 == -1) ? _HTTP_DEFAULT_PORT : port1;
621 SetLastResult(E_INVALID_ARG);
629 _HttpUtility::GetCookieFilePath(void)
631 result r = E_SUCCESS;
633 String filePath = Tizen::App::App::GetInstance()->GetAppRootPath();
634 r = filePath.Append(_HTTP_COOKIE_FILE);
635 SysTryReturn(NID_NET_HTTP, r == E_SUCCESS, L"", r,
636 "[%s] Propagating.", GetErrorMessage(r));
638 SysLog(NID_NET_HTTP, "Cookie Path: %ls", filePath.GetPointer());
644 _HttpUtility::GetHttpAuthScheme(bool isProxyAuth, long curlAuthScheme)
646 NetHttpAuthScheme authScheme = NET_HTTP_AUTH_NONE;
649 switch (curlAuthScheme)
651 case _CURL_HTTP_AUTH_NONE:
652 authScheme = NET_HTTP_AUTH_NONE;
654 case _CURL_HTTP_AUTH_BASIC:
655 authScheme = NET_HTTP_AUTH_PROXY_BASIC;
657 case _CURL_HTTP_AUTH_DIGEST:
658 authScheme = NET_HTTP_AUTH_PROXY_MD5;
660 case _CURL_HTTP_AUTH_NTLM:
661 authScheme = NET_HTTP_AUTH_PROXY_NTLM;
664 authScheme = NET_HTTP_AUTH_NONE;
670 switch (curlAuthScheme)
672 case _CURL_HTTP_AUTH_NONE:
673 authScheme = NET_HTTP_AUTH_NONE;
675 case _CURL_HTTP_AUTH_BASIC:
676 authScheme = NET_HTTP_AUTH_WWW_BASIC;
678 case _CURL_HTTP_AUTH_DIGEST:
679 authScheme = NET_HTTP_AUTH_WWW_MD5;
681 case _CURL_HTTP_AUTH_NTLM:
682 authScheme = NET_HTTP_AUTH_WWW_NTLM;
684 case _CURL_HTTP_AUTH_GSSNEGOTIATE:
685 authScheme = NET_HTTP_AUTH_WWW_NEGOTIATE;
688 authScheme = NET_HTTP_AUTH_NONE;
697 _HttpUtility::GetHttpCurlAuthScheme(NetHttpAuthScheme httpAuthScheme)
699 long curlScheme = _CURL_HTTP_AUTH_NONE;
700 switch (httpAuthScheme)
702 case NET_HTTP_AUTH_PROXY_BASIC:
703 case NET_HTTP_AUTH_WWW_BASIC:
704 curlScheme = _CURL_HTTP_AUTH_BASIC;
706 case NET_HTTP_AUTH_PROXY_MD5:
707 case NET_HTTP_AUTH_WWW_MD5:
708 curlScheme = _CURL_HTTP_AUTH_DIGEST;
710 case NET_HTTP_AUTH_PROXY_NTLM:
711 case NET_HTTP_AUTH_WWW_NTLM:
712 curlScheme = _CURL_HTTP_AUTH_NTLM;
714 case NET_HTTP_AUTH_WWW_NEGOTIATE:
715 curlScheme = _CURL_HTTP_AUTH_GSSNEGOTIATE;
718 curlScheme = _CURL_HTTP_AUTH_NONE;
725 static const char* NetHttpAuthSchemeTypesToString[] =
727 "NET_HTTP_AUTH_NONE", "NET_HTTP_AUTH_PROXY_BASIC",
728 "NET_HTTP_AUTH_PROXY_MD5", "NET_HTTP_AUTH_WWW_BASIC",
729 "NET_HTTP_AUTH_WWW_MD5", "NET_HTTP_AUTH_PROXY_NTLM",
730 "", "NET_HTTP_AUTH_WWW_NTLM",
731 "NET_HTTP_AUTH_WWW_NEGOTIATE"
735 _HttpUtility::GetHttpAuthSchemeByString(NetHttpAuthScheme type)
737 return NetHttpAuthSchemeTypesToString[type];
740 _HttpSslInfo::_HttpSslInfo(int socketFd, int depth, const String & serverCert, const String & errorMessage)
742 __socketFd = socketFd;
744 __serverCert = serverCert;
745 __errorMessage = errorMessage;
746 __pHttpTransactionEvent = null;
747 __flag = HTTP_CV_FLAG_AUTOMATIC;
750 _HttpSslInfo::_HttpSslInfo(int socketFd, _HttpTransactionEvent* pHttpTransactionEvent)
752 __socketFd = socketFd;
754 __pHttpTransactionEvent = pHttpTransactionEvent;
755 __flag = HTTP_CV_FLAG_MANUAL;
758 _HttpSslInfo::~_HttpSslInfo()
763 _HttpSslInfo::GetDepth() const
769 _HttpSslInfo::GetErrorMessage() const
771 return __errorMessage;
775 _HttpSslInfo::GetServerCert() const
781 _HttpSslInfo::GetSocketFd() const
786 _HttpTransactionEvent*
787 _HttpSslInfo::GetHttpTransactionEvent(void) const
789 return __pHttpTransactionEvent;
792 NetHttpCertificateVerificationFlag
793 _HttpSslInfo::GetCertificateVerificationFlag(void) const
798 } } } // Tizen::Net::Http