From 26964b268740150ee4aa77e6b3ddf695cbb4aaaa Mon Sep 17 00:00:00 2001 From: Pavel Krymets Date: Tue, 21 Aug 2018 14:11:34 -0700 Subject: [PATCH] Macrosify out-of-proc (#1268) --- .../AspNetCore/aspnetcore_shim_config.cpp | 2 +- src/AspNetCoreModuleV2/CommonLib/exceptions.h | 2 + .../OutOfProcessRequestHandler.vcxproj | 1 - .../OutOfProcessRequestHandler/dllmain.cpp | 77 +++----- .../forwarderconnection.cpp | 32 +--- .../forwardinghandler.cpp | 131 +++++++------- .../outprocessapplication.cpp | 33 +--- .../processmanager.cpp | 166 ++++-------------- .../protocolconfig.cpp | 26 +-- .../responseheaderhash.cpp | 18 +- .../serverprocess.cpp | 107 +++++------ .../url_utility.cpp | 45 ++--- .../websockethandler.cpp | 75 ++++---- .../winhttphelper.cpp | 46 +---- 14 files changed, 263 insertions(+), 498 deletions(-) diff --git a/src/AspNetCoreModuleV2/AspNetCore/aspnetcore_shim_config.cpp b/src/AspNetCoreModuleV2/AspNetCore/aspnetcore_shim_config.cpp index bdd76953ac..bf62cd9e87 100644 --- a/src/AspNetCoreModuleV2/AspNetCore/aspnetcore_shim_config.cpp +++ b/src/AspNetCoreModuleV2/AspNetCore/aspnetcore_shim_config.cpp @@ -50,7 +50,7 @@ ASPNETCORE_SHIM_CONFIG::Populate( ASPNETCORE_EVENT_UNKNOWN_HOSTING_MODEL_ERROR, ASPNETCORE_EVENT_UNKNOWN_HOSTING_MODEL_ERROR_MSG, strHostingModel.QueryStr()); - RETURN_IF_FAILED(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED)); + RETURN_HR(HRESULT_FROM_WIN32(ERROR_NOT_SUPPORTED)); } RETURN_IF_FAILED(GetElementStringProperty(pAspNetCoreElement, diff --git a/src/AspNetCoreModuleV2/CommonLib/exceptions.h b/src/AspNetCoreModuleV2/CommonLib/exceptions.h index ac05f910c1..bd6f30af33 100644 --- a/src/AspNetCoreModuleV2/CommonLib/exceptions.h +++ b/src/AspNetCoreModuleV2/CommonLib/exceptions.h @@ -26,6 +26,8 @@ #endif #define OBSERVE_CAUGHT_EXCEPTION() CaughtExceptionHResult(LOCATION_INFO); +#define RETURN_HR(hr) do { HRESULT __hrRet = hr; if (FAILED(__hrRet)) { LogHResultFailed(LOCATION_INFO, __hrRet); } return __hrRet; } while (0, 0) +#define RETURN_LAST_ERROR() do { return LogLastError(LOCATION_INFO); } while (0, 0) #define RETURN_IF_FAILED(hr) do { HRESULT __hrRet = hr; if (FAILED(__hrRet)) { LogHResultFailed(LOCATION_INFO, __hrRet); return __hrRet; }} while (0, 0) #define RETURN_CAUGHT_EXCEPTION() return CaughtExceptionHResult(LOCATION_INFO); #define RETURN_LAST_ERROR_IF(condition) do { if (condition) { return LogLastError(LOCATION_INFO); }} while (0, 0) diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRequestHandler.vcxproj b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRequestHandler.vcxproj index 2da0550413..df9c00ebb1 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRequestHandler.vcxproj +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/OutOfProcessRequestHandler.vcxproj @@ -224,7 +224,6 @@ - diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/dllmain.cpp b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/dllmain.cpp index d77c5c47d8..25e8054318 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/dllmain.cpp +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/dllmain.cpp @@ -121,28 +121,29 @@ EnsureOutOfProcessInitializtion() DBG_ASSERT(g_pHttpServer); HRESULT hr = S_OK; - BOOL fLocked = FALSE; if (g_fOutOfProcessInitializeError) { - hr = E_NOT_VALID_STATE; - goto Finished; + FINISHED(E_NOT_VALID_STATE); } - if (!g_fOutOfProcessInitialize) + if (g_fOutOfProcessInitialize) { - AcquireSRWLockExclusive(&g_srwLockRH); - fLocked = TRUE; + FINISHED(S_OK); + } + + { + auto lock = SRWExclusiveLock(g_srwLockRH); + if (g_fOutOfProcessInitializeError) { - hr = E_NOT_VALID_STATE; - goto Finished; + FINISHED(E_NOT_VALID_STATE); } if (g_fOutOfProcessInitialize) { // Done by another thread - goto Finished; + FINISHED(S_OK); } g_hWinHttpModule = GetModuleHandle(TEXT("winhttp.dll")); @@ -150,7 +151,7 @@ EnsureOutOfProcessInitializtion() g_hAspNetCoreModule = GetModuleHandle(TEXT("aspnetcorev2.dll")); hr = WINHTTP_HELPER::StaticInitialize(); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { if (hr == HRESULT_FROM_WIN32(ERROR_PROC_NOT_FOUND)) { @@ -158,7 +159,7 @@ EnsureOutOfProcessInitializtion() } else { - goto Finished; + FINISHED(hr); } } @@ -167,11 +168,7 @@ EnsureOutOfProcessInitializtion() WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, WINHTTP_FLAG_ASYNC); - if (g_hWinhttpSession == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } + FINISHED_LAST_ERROR_IF(g_hWinhttpSession == NULL); // // Don't set non-blocking callbacks WINHTTP_OPTION_ASSURED_NON_BLOCKING_CALLBACKS, @@ -182,65 +179,33 @@ EnsureOutOfProcessInitializtion() // // Setup the callback function // - if (WinHttpSetStatusCallback(g_hWinhttpSession, + FINISHED_LAST_ERROR_IF(WinHttpSetStatusCallback(g_hWinhttpSession, FORWARDING_HANDLER::OnWinHttpCompletion, (WINHTTP_CALLBACK_FLAG_ALL_COMPLETIONS | WINHTTP_CALLBACK_STATUS_SENDING_REQUEST), - NULL) == WINHTTP_INVALID_STATUS_CALLBACK) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } + NULL) == WINHTTP_INVALID_STATUS_CALLBACK); // // Make sure we see the redirects (rather than winhttp doing it // automatically) // DWORD dwRedirectOption = WINHTTP_OPTION_REDIRECT_POLICY_NEVER; - if (!WinHttpSetOption(g_hWinhttpSession, + FINISHED_LAST_ERROR_IF(!WinHttpSetOption(g_hWinhttpSession, WINHTTP_OPTION_REDIRECT_POLICY, &dwRedirectOption, - sizeof(dwRedirectOption))) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } + sizeof(dwRedirectOption))); g_dwTlsIndex = TlsAlloc(); - if (g_dwTlsIndex == TLS_OUT_OF_INDEXES) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - - hr = ALLOC_CACHE_HANDLER::StaticInitialize(); - if (FAILED(hr)) - { - goto Finished; - } - - hr = FORWARDING_HANDLER::StaticInitialize(g_fEnableReferenceCountTracing); - if (FAILED(hr)) - { - goto Finished; - } - - hr = WEBSOCKET_HANDLER::StaticInitialize(g_fEnableReferenceCountTracing); - if (FAILED(hr)) - { - goto Finished; - } + FINISHED_LAST_ERROR_IF(g_dwTlsIndex == TLS_OUT_OF_INDEXES); + FINISHED_IF_FAILED(ALLOC_CACHE_HANDLER::StaticInitialize()); + FINISHED_IF_FAILED(FORWARDING_HANDLER::StaticInitialize(g_fEnableReferenceCountTracing)); + FINISHED_IF_FAILED(WEBSOCKET_HANDLER::StaticInitialize(g_fEnableReferenceCountTracing)); } - Finished: if (FAILED(hr)) { g_fOutOfProcessInitializeError = TRUE; } - if (fLocked) - { - ReleaseSRWLockExclusive(&g_srwLockRH); - } return hr; } diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwarderconnection.cpp b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwarderconnection.cpp index 0369edcce9..ee49e99242 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwarderconnection.cpp +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwarderconnection.cpp @@ -2,12 +2,13 @@ // Licensed under the MIT License. See License.txt in the project root for license information. #include "forwarderconnection.h" +#include "exceptions.h" FORWARDER_CONNECTION::FORWARDER_CONNECTION( VOID ) : m_cRefs (1), m_hConnection (NULL) -{ +{ } HRESULT @@ -15,38 +16,19 @@ FORWARDER_CONNECTION::Initialize( DWORD dwPort ) { - HRESULT hr = S_OK; - - hr = m_ConnectionKey.Initialize( dwPort ); - if ( FAILED( hr ) ) - { - goto Finished; - } - + RETURN_IF_FAILED(m_ConnectionKey.Initialize( dwPort )); m_hConnection = WinHttpConnect(g_hWinhttpSession, L"127.0.0.1", (USHORT) dwPort, 0); - if (m_hConnection == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - + RETURN_LAST_ERROR_IF_NULL(m_hConnection); // // Since WinHttp will not emit WINHTTP_CALLBACK_STATUS_HANDLE_CLOSING // when closing WebSocket handle on Win8. Register callback at Connect level as a workaround // - if (WinHttpSetStatusCallback(m_hConnection, + RETURN_LAST_ERROR_IF (WinHttpSetStatusCallback(m_hConnection, FORWARDING_HANDLER::OnWinHttpCompletion, WINHTTP_CALLBACK_FLAG_HANDLES, - NULL) == WINHTTP_INVALID_STATUS_CALLBACK) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } - -Finished: - - return hr; + NULL) == WINHTTP_INVALID_STATUS_CALLBACK); + return S_OK; } diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.cpp b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.cpp index f1bcb7a2cc..e06b15f805 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.cpp +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/forwardinghandler.cpp @@ -3,6 +3,7 @@ #include "forwardinghandler.h" #include "url_utility.h" +#include "exceptions.h" // Just to be aware of the FORWARDING_HANDLER object size. C_ASSERT(sizeof(FORWARDING_HANDLER) <= 632); @@ -140,7 +141,7 @@ FORWARDING_HANDLER::OnExecuteRequestHandler() } hr = pApplication->GetProcess(&pServerProcess); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { fFailedToStartKestrel = TRUE; goto Failure; @@ -165,7 +166,7 @@ FORWARDING_HANDLER::OnExecuteRequestHandler() // // parse original url // - if (FAILED(hr = URL_UTILITY::SplitUrl(pRequest->GetRawHttpRequest()->CookedUrl.pFullUrl, + if (FAILED_LOG(hr = URL_UTILITY::SplitUrl(pRequest->GetRawHttpRequest()->CookedUrl.pFullUrl, &fSecure, &strDestination, &strUrl))) @@ -173,7 +174,7 @@ FORWARDING_HANDLER::OnExecuteRequestHandler() goto Failure; } - if (FAILED(hr = URL_UTILITY::EscapeAbsPath(pRequest, &struEscapedUrl))) + if (FAILED_LOG(hr = URL_UTILITY::EscapeAbsPath(pRequest, &struEscapedUrl))) { goto Failure; } @@ -200,7 +201,7 @@ FORWARDING_HANDLER::OnExecuteRequestHandler() hConnect, &struEscapedUrl, pServerProcess); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Failure; } @@ -222,7 +223,7 @@ FORWARDING_HANDLER::OnExecuteRequestHandler() SetConnectionModuleContext(m_pDisconnect, m_pModuleId); DBG_ASSERT(hr != HRESULT_FROM_WIN32(ERROR_ALREADY_ASSIGNED)); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Failure; } @@ -477,7 +478,7 @@ REQUEST_NOTIFICATION_STATUS InterlockedIncrement(&m_dwHandlers); } - if (FAILED(hr)) + if (FAILED_LOG(hr)) { // This failure could happen when client disconnect happens or backend server fails // after websocket upgrade @@ -514,7 +515,7 @@ REQUEST_NOTIFICATION_STATUS // failure, if there is more data available from WinHTTP, read it // or else ask if there is more. // - if (FAILED(hrCompletionStatus)) + if (FAILED_LOG(hrCompletionStatus)) { hr = hrCompletionStatus; fClientError = TRUE; @@ -522,7 +523,7 @@ REQUEST_NOTIFICATION_STATUS } hr = OnReceivingResponse(); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Failure; } @@ -533,7 +534,7 @@ REQUEST_NOTIFICATION_STATUS hr = OnSendingRequest(cbCompletion, hrCompletionStatus, &fClientError); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Failure; } @@ -730,7 +731,7 @@ HRESULT hr = sm_pAlloc->Initialize(sizeof(FORWARDING_HANDLER), 64); // nThreshold - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -743,14 +744,14 @@ HRESULT } hr = sm_pResponseHeaderHash->Initialize(); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } // Initialize PROTOCOL_CONFIG hr = sm_ProtocolConfig.Initialize(); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -786,7 +787,7 @@ HRESULT "); Finished: - if (FAILED(hr)) + if (FAILED_LOG(hr)) { StaticTerminate(); } @@ -871,12 +872,12 @@ FORWARDING_HANDLER::GetHeaders( // if (!pProtocol->QueryPreserveHostHeader()) { - if (FAILED(hr = URL_UTILITY::SplitUrl(pRequest->GetRawHttpRequest()->CookedUrl.pFullUrl, + if (FAILED_LOG(hr = URL_UTILITY::SplitUrl(pRequest->GetRawHttpRequest()->CookedUrl.pFullUrl, &fSecure, &struDestination, &struUrl)) || - FAILED(hr = strTemp.CopyW(struDestination.QueryStr())) || - FAILED(hr = pRequest->SetHeader(HttpHeaderHost, + FAILED_LOG(hr = strTemp.CopyW(struDestination.QueryStr())) || + FAILED_LOG(hr = pRequest->SetHeader(HttpHeaderHost, strTemp.QueryStr(), static_cast(strTemp.QueryCCH()), TRUE))) // fReplace @@ -917,7 +918,7 @@ FORWARDING_HANDLER::GetHeaders( pServerProcess->QueryGuid(), (USHORT)strlen(pServerProcess->QueryGuid()), TRUE); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { return hr; } @@ -933,7 +934,7 @@ FORWARDING_HANDLER::GetHeaders( HANDLE hTargetTokenHandle = NULL; hr = pServerProcess->SetWindowsAuthToken(m_pW3Context->GetUser()->GetPrimaryToken(), &hTargetTokenHandle); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { return hr; } @@ -952,7 +953,7 @@ FORWARDING_HANDLER::GetHeaders( pszHandleStr, (USHORT)strlen(pszHandleStr), TRUE); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { return hr; } @@ -966,14 +967,14 @@ FORWARDING_HANDLER::GetHeaders( pszCurrentHeader = pRequest->GetHeader(pProtocol->QueryXForwardedForName()->QueryStr(), &cchCurrentHeader); if (pszCurrentHeader != NULL) { - if (FAILED(hr = strTemp.Copy(pszCurrentHeader, cchCurrentHeader)) || - FAILED(hr = strTemp.Append(", ", 2))) + if (FAILED_LOG(hr = strTemp.Copy(pszCurrentHeader, cchCurrentHeader)) || + FAILED_LOG(hr = strTemp.Append(", ", 2))) { return hr; } } - if (FAILED(hr = m_pW3Context->GetServerVariable("REMOTE_ADDR", + if (FAILED_LOG(hr = m_pW3Context->GetServerVariable("REMOTE_ADDR", &pszFinalHeader, &cchFinalHeader))) { @@ -982,16 +983,16 @@ FORWARDING_HANDLER::GetHeaders( if (pRequest->GetRawHttpRequest()->Address.pRemoteAddress->sa_family == AF_INET6) { - if (FAILED(hr = strTemp.Append("[", 1)) || - FAILED(hr = strTemp.Append(pszFinalHeader, cchFinalHeader)) || - FAILED(hr = strTemp.Append("]", 1))) + if (FAILED_LOG(hr = strTemp.Append("[", 1)) || + FAILED_LOG(hr = strTemp.Append(pszFinalHeader, cchFinalHeader)) || + FAILED_LOG(hr = strTemp.Append("]", 1))) { return hr; } } else { - if (FAILED(hr = strTemp.Append(pszFinalHeader, cchFinalHeader))) + if (FAILED_LOG(hr = strTemp.Append(pszFinalHeader, cchFinalHeader))) { return hr; } @@ -999,21 +1000,21 @@ FORWARDING_HANDLER::GetHeaders( if (pProtocol->QueryIncludePortInXForwardedFor()) { - if (FAILED(hr = m_pW3Context->GetServerVariable("REMOTE_PORT", + if (FAILED_LOG(hr = m_pW3Context->GetServerVariable("REMOTE_PORT", &pszFinalHeader, &cchFinalHeader))) { return hr; } - if (FAILED(hr = strTemp.Append(":", 1)) || - FAILED(hr = strTemp.Append(pszFinalHeader, cchFinalHeader))) + if (FAILED_LOG(hr = strTemp.Append(":", 1)) || + FAILED_LOG(hr = strTemp.Append(pszFinalHeader, cchFinalHeader))) { return hr; } } - if (FAILED(hr = pRequest->SetHeader(pProtocol->QueryXForwardedForName()->QueryStr(), + if (FAILED_LOG(hr = pRequest->SetHeader(pProtocol->QueryXForwardedForName()->QueryStr(), strTemp.QueryStr(), static_cast(strTemp.QueryCCH()), TRUE))) // fReplace @@ -1036,19 +1037,19 @@ FORWARDING_HANDLER::GetHeaders( pszCurrentHeader = pRequest->GetHeader(pProtocol->QuerySslHeaderName()->QueryStr(), &cchCurrentHeader); if (pszCurrentHeader != NULL) { - if (FAILED(hr = strTemp.Copy(pszCurrentHeader, cchCurrentHeader)) || - FAILED(hr = strTemp.Append(", ", 2))) + if (FAILED_LOG(hr = strTemp.Copy(pszCurrentHeader, cchCurrentHeader)) || + FAILED_LOG(hr = strTemp.Append(", ", 2))) { return hr; } } - if (FAILED(hr = strTemp.Append(pszScheme))) + if (FAILED_LOG(hr = strTemp.Append(pszScheme))) { return hr; } - if (FAILED(pRequest->SetHeader(pProtocol->QuerySslHeaderName()->QueryStr(), + if (FAILED_LOG(pRequest->SetHeader(pProtocol->QuerySslHeaderName()->QueryStr(), strTemp.QueryStr(), (USHORT)strTemp.QueryCCH(), TRUE))) @@ -1067,7 +1068,7 @@ FORWARDING_HANDLER::GetHeaders( else { // Resize the buffer large enough to hold the encoded certificate info - if (FAILED(hr = strTemp.Resize( + if (FAILED_LOG(hr = strTemp.Resize( 1 + (pRequest->GetRawHttpRequest()->pSslInfo->pClientCertInfo->CertEncodedSize + 2) / 3 * 4))) { return hr; @@ -1081,7 +1082,7 @@ FORWARDING_HANDLER::GetHeaders( NULL); strTemp.SyncWithBuffer(); - if (FAILED(hr = pRequest->SetHeader( + if (FAILED_LOG(hr = pRequest->SetHeader( pProtocol->QueryClientCertName()->QueryStr(), strTemp.QueryStr(), static_cast(strTemp.QueryCCH()), @@ -1106,7 +1107,7 @@ FORWARDING_HANDLER::GetHeaders( hr = m_pW3Context->GetServerVariable("ALL_RAW", ppszHeaders, pcchHeaders); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { return hr; } @@ -1134,7 +1135,7 @@ FORWARDING_HANDLER::CreateWinHttpRequest( // we will fill them when sending the request) // pszVerb = pRequest->GetHttpMethod(); - if (FAILED(hr = strVerb.CopyA(pszVerb))) + if (FAILED_LOG(hr = strVerb.CopyA(pszVerb))) { goto Finished; } @@ -1147,7 +1148,7 @@ FORWARDING_HANDLER::CreateWinHttpRequest( "HTTP_VERSION", &pszVersion, &cchUnused); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -1235,7 +1236,7 @@ FORWARDING_HANDLER::CreateWinHttpRequest( pServerProcess, &m_pszHeaders, &m_cchHeaders); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -1514,7 +1515,7 @@ None // // Handle failure code for switch statement above. // - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Failure; } @@ -1762,7 +1763,7 @@ FORWARDING_HANDLER::OnWinHttpCompletionSendRequestOrWriteComplete( goto Finished; } } - else if (FAILED(hr)) + else if (FAILED_LOG(hr)) { *pfClientError = TRUE; goto Finished; @@ -1842,7 +1843,7 @@ FORWARDING_HANDLER::OnWinHttpCompletionStatusHeadersAvailable( } } - if (FAILED(hr = strHeaders.CopyW( + if (FAILED_LOG(hr = strHeaders.CopyW( reinterpret_cast(bufHeaderBuffer.QueryPtr())))) { goto Finished; @@ -1859,13 +1860,13 @@ FORWARDING_HANDLER::OnWinHttpCompletionStatusHeadersAvailable( if (!strHeaders.IsEmpty() && strHeaders.QueryStr()[strHeaders.QueryCCH() - 1] != '\n') { hr = strHeaders.Append("\r\n"); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } } - if (FAILED(hr = SetStatusAndHeaders( + if (FAILED_LOG(hr = SetStatusAndHeaders( strHeaders.QueryStr(), strHeaders.QueryCCH()))) { @@ -1890,7 +1891,7 @@ FORWARDING_HANDLER::OnWinHttpCompletionStatusHeadersAvailable( NULL, NULL); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { *pfAnotherCompletionExpected = FALSE; } @@ -2022,7 +2023,7 @@ FORWARDING_HANDLER::OnWinHttpCompletionStatusReadComplete( Chunk.DataChunkType = HttpDataChunkFromMemory; Chunk.FromMemory.pBuffer = m_pEntityBuffer; Chunk.FromMemory.BufferLength = dwStatusInformationLength; - if (FAILED(hr = pResponse->WriteEntityChunkByReference(&Chunk))) + if (FAILED_LOG(hr = pResponse->WriteEntityChunkByReference(&Chunk))) { goto Finished; } @@ -2036,7 +2037,7 @@ FORWARDING_HANDLER::OnWinHttpCompletionStatusReadComplete( hr = pResponse->Flush(TRUE, // fAsync TRUE, // fMoreData NULL); // pcbSent - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -2357,10 +2358,10 @@ FORWARDING_HANDLER::SetStatusAndHeaders( // // Copy the status description // - if (FAILED(hr = strHeaderValue.Copy( + if (FAILED_LOG(hr = strHeaderValue.Copy( pchStatus, (DWORD)(pchEndofHeaderValue - pchStatus) + 1)) || - FAILED(hr = pResponse->SetStatus(uStatus, + FAILED_LOG(hr = pResponse->SetStatus(uStatus, strHeaderValue.QueryStr(), 0, S_OK, @@ -2422,7 +2423,7 @@ FORWARDING_HANDLER::SetStatusAndHeaders( // // Copy the header name // - if (FAILED(hr = strHeaderName.Copy( + if (FAILED_LOG(hr = strHeaderName.Copy( pszHeaders + index, (DWORD)(pchEndofHeaderName - pszHeaders) - index))) { @@ -2458,7 +2459,7 @@ FORWARDING_HANDLER::SetStatusAndHeaders( { strHeaderValue.Reset(); } - else if (FAILED(hr = strHeaderValue.Copy( + else if (FAILED_LOG(hr = strHeaderValue.Copy( pszHeaders + index, (DWORD)(pchEndofHeaderValue - pszHeaders) - index))) { @@ -2508,7 +2509,7 @@ FORWARDING_HANDLER::SetStatusAndHeaders( static_cast(strHeaderValue.QueryCCH()), TRUE); // fReplace } - if (FAILED(hr)) + if (FAILED_LOG(hr)) { return hr; } @@ -2526,7 +2527,7 @@ FORWARDING_HANDLER::SetStatusAndHeaders( if (m_fDoReverseRewriteHeaders) { hr = DoReverseRewrite(pResponse); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { return hr; } @@ -2573,17 +2574,17 @@ FORWARDING_HANDLER::DoReverseRewrite( pszEndHost = strchr(pszStartHost, '/'); - if (FAILED(hr = strTemp.Copy(fSecure ? "https://" : "http://")) || - FAILED(hr = strTemp.Append(m_pszOriginalHostHeader))) + if (FAILED_LOG(hr = strTemp.Copy(fSecure ? "https://" : "http://")) || + FAILED_LOG(hr = strTemp.Append(m_pszOriginalHostHeader))) { return hr; } if (pszEndHost != NULL && - FAILED(hr = strTemp.Append(pszEndHost))) + FAILED_LOG(hr = strTemp.Append(pszEndHost))) { return hr; } - if (FAILED(hr = pResponse->SetHeader(HttpHeaderContentLocation, + if (FAILED_LOG(hr = pResponse->SetHeader(HttpHeaderContentLocation, strTemp.QueryStr(), static_cast(strTemp.QueryCCH()), TRUE))) @@ -2612,17 +2613,17 @@ Location: pszEndHost = strchr(pszStartHost, '/'); - if (FAILED(hr = strTemp.Copy(fSecure ? "https://" : "http://")) || - FAILED(hr = strTemp.Append(m_pszOriginalHostHeader))) + if (FAILED_LOG(hr = strTemp.Copy(fSecure ? "https://" : "http://")) || + FAILED_LOG(hr = strTemp.Append(m_pszOriginalHostHeader))) { return hr; } if (pszEndHost != NULL && - FAILED(hr = strTemp.Append(pszEndHost))) + FAILED_LOG(hr = strTemp.Append(pszEndHost))) { return hr; } - if (FAILED(hr = pResponse->SetHeader(HttpHeaderLocation, + if (FAILED_LOG(hr = pResponse->SetHeader(HttpHeaderLocation, strTemp.QueryStr(), static_cast(strTemp.QueryCCH()), TRUE))) @@ -2687,9 +2688,9 @@ SetCookie: pszEndHost++; } - if (FAILED(hr = strTemp.Copy(pszHeader, static_cast(pszStartHost - pszHeader))) || - FAILED(hr = strTemp.Append(m_pszOriginalHostHeader)) || - FAILED(hr = strTemp.Append(pszEndHost))) + if (FAILED_LOG(hr = strTemp.Copy(pszHeader, static_cast(pszStartHost - pszHeader))) || + FAILED_LOG(hr = strTemp.Append(m_pszOriginalHostHeader)) || + FAILED_LOG(hr = strTemp.Append(pszEndHost))) { return hr; } diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.cpp b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.cpp index 564adea383..8d3738d82f 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.cpp +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/outprocessapplication.cpp @@ -4,6 +4,7 @@ #include "outprocessapplication.h" #include "SRWExclusiveLock.h" +#include "exceptions.h" OUT_OF_PROCESS_APPLICATION::OUT_OF_PROCESS_APPLICATION( IHttpApplication& pApplication, @@ -30,25 +31,12 @@ HRESULT OUT_OF_PROCESS_APPLICATION::Initialize( ) { - HRESULT hr = S_OK; if (m_pProcessManager == NULL) { - m_pProcessManager = new PROCESS_MANAGER; - if (m_pProcessManager == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - hr = m_pProcessManager->Initialize(); - if (FAILED(hr)) - { - goto Finished; - } + m_pProcessManager = new PROCESS_MANAGER(); + RETURN_IF_FAILED(m_pProcessManager->Initialize()); } - -Finished: - return hr; + return S_OK; } HRESULT @@ -76,7 +64,6 @@ OUT_OF_PROCESS_APPLICATION::CreateHandler( _In_ IHttpContext *pHttpContext, _Out_ IREQUEST_HANDLER **pRequestHandler) { - HRESULT hr = S_OK; IREQUEST_HANDLER* pHandler = NULL; //add websocket check here @@ -86,14 +73,8 @@ OUT_OF_PROCESS_APPLICATION::CreateHandler( } pHandler = new FORWARDING_HANDLER(pHttpContext, this); - - if (pHandler == NULL) - { - hr = HRESULT_FROM_WIN32(ERROR_OUTOFMEMORY); - } - *pRequestHandler = pHandler; - return hr; + return S_OK; } VOID @@ -105,10 +86,8 @@ OUT_OF_PROCESS_APPLICATION::SetWebsocketStatus( // the websocket module may still not be enabled. PCWSTR pszTempWebsocketValue; DWORD cbLength; - HRESULT hr; - hr = pHttpContext->GetServerVariable("WEBSOCKET_VERSION", &pszTempWebsocketValue, &cbLength); - if (FAILED(hr)) + if (FAILED_LOG(pHttpContext->GetServerVariable("WEBSOCKET_VERSION", &pszTempWebsocketValue, &cbLength))) { m_fWebSocketSupported = WEBSOCKET_STATUS::WEBSOCKET_NOT_SUPPORTED; } diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/processmanager.cpp b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/processmanager.cpp index b0dd2991e2..71d106fb77 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/processmanager.cpp +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/processmanager.cpp @@ -3,6 +3,8 @@ #include "processmanager.h" #include "EventLog.h" +#include "exceptions.h" +#include "SRWSharedLock.h" volatile BOOL PROCESS_MANAGER::sm_fWSAStartupDone = FALSE; @@ -11,28 +13,21 @@ PROCESS_MANAGER::Initialize( VOID ) { - HRESULT hr = S_OK; WSADATA wsaData; int result; - BOOL fLocked = FALSE; if( !sm_fWSAStartupDone ) { - AcquireSRWLockExclusive( &m_srwLock ); - fLocked = TRUE; + auto lock = SRWExclusiveLock(m_srwLock); if( !sm_fWSAStartupDone ) { if( (result = WSAStartup(MAKEWORD(2, 2), &wsaData)) != 0 ) { - hr = HRESULT_FROM_WIN32( result ); - goto Finished; + RETURN_HR(HRESULT_FROM_WIN32( result )); } sm_fWSAStartupDone = TRUE; } - - ReleaseSRWLockExclusive( &m_srwLock ); - fLocked = FALSE; } m_dwRapidFailTickStart = GetTickCount(); @@ -51,55 +46,14 @@ PROCESS_MANAGER::Initialize( CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL ); - if( m_hNULHandle == INVALID_HANDLE_VALUE ) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } + RETURN_LAST_ERROR_IF( m_hNULHandle == INVALID_HANDLE_VALUE ); } -Finished: - - if(fLocked) - { - ReleaseSRWLockExclusive( &m_srwLock ); - } - - return hr; + return S_OK; } PROCESS_MANAGER::~PROCESS_MANAGER() { - AcquireSRWLockExclusive(&m_srwLock); - - //if( m_ppServerProcessList != NULL ) - //{ - // for( DWORD i = 0; i < m_dwProcessesPerApplication; ++i ) - // { - // if( m_ppServerProcessList[i] != NULL ) - // { - // m_ppServerProcessList[i]->DereferenceServerProcess(); - // m_ppServerProcessList[i] = NULL; - // } - // } - - // delete[] m_ppServerProcessList; - // m_ppServerProcessList = NULL; - //} - - //if( m_hNULHandle != NULL ) - //{ - // CloseHandle( m_hNULHandle ); - // m_hNULHandle = NULL; - //} - - //if( sm_fWSAStartupDone ) - //{ - // WSACleanup(); - // sm_fWSAStartupDone = FALSE; - //} - - ReleaseSRWLockExclusive(&m_srwLock); } HRESULT @@ -109,31 +63,22 @@ PROCESS_MANAGER::GetProcess( _Out_ SERVER_PROCESS **ppServerProcess ) { - HRESULT hr = S_OK; - BOOL fSharedLock = FALSE; - BOOL fExclusiveLock = FALSE; DWORD dwProcessIndex = 0; - SERVER_PROCESS *pSelectedServerProcess = NULL; + std::unique_ptr pSelectedServerProcess; if (InterlockedCompareExchange(&m_lStopping, 1L, 1L) == 1L) { - return hr = E_APPLICATION_EXITING; + RETURN_IF_FAILED(E_APPLICATION_EXITING); } if (!m_fServerProcessListReady) { - AcquireSRWLockExclusive(&m_srwLock); - fExclusiveLock = TRUE; + auto lock = SRWExclusiveLock(m_srwLock); if (!m_fServerProcessListReady) { m_dwProcessesPerApplication = pConfig->QueryProcessesPerApplication(); m_ppServerProcessList = new SERVER_PROCESS*[m_dwProcessesPerApplication]; - if (m_ppServerProcessList == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } for (DWORD i = 0; i < m_dwProcessesPerApplication; ++i) { @@ -141,35 +86,30 @@ PROCESS_MANAGER::GetProcess( } } m_fServerProcessListReady = TRUE; - ReleaseSRWLockExclusive(&m_srwLock); - fExclusiveLock = FALSE; } - AcquireSRWLockShared(&m_srwLock); - fSharedLock = TRUE; - - // - // round robin through to the next available process. - // - dwProcessIndex = (DWORD)InterlockedIncrement64((LONGLONG*)&m_dwRouteToProcessIndex); - dwProcessIndex = dwProcessIndex % m_dwProcessesPerApplication; - - if (m_ppServerProcessList[dwProcessIndex] != NULL && - m_ppServerProcessList[dwProcessIndex]->IsReady()) { - *ppServerProcess = m_ppServerProcessList[dwProcessIndex]; - goto Finished; - } + auto lock = SRWSharedLock(m_srwLock); - ReleaseSRWLockShared(&m_srwLock); - fSharedLock = FALSE; + // + // round robin through to the next available process. + // + dwProcessIndex = (DWORD)InterlockedIncrement64((LONGLONG*)&m_dwRouteToProcessIndex); + dwProcessIndex = dwProcessIndex % m_dwProcessesPerApplication; + + if (m_ppServerProcessList[dwProcessIndex] != NULL && + m_ppServerProcessList[dwProcessIndex]->IsReady()) + { + *ppServerProcess = m_ppServerProcessList[dwProcessIndex]; + return S_OK; + } + } // should make the lock per process so that we can start processes simultaneously ? if (m_ppServerProcessList[dwProcessIndex] == NULL || !m_ppServerProcessList[dwProcessIndex]->IsReady()) { - AcquireSRWLockExclusive(&m_srwLock); - fExclusiveLock = TRUE; + auto lock = SRWExclusiveLock(m_srwLock); if (m_ppServerProcessList[dwProcessIndex] != NULL) { @@ -186,7 +126,7 @@ PROCESS_MANAGER::GetProcess( // server is already up and ready to serve requests. //m_ppServerProcessList[dwProcessIndex]->ReferenceServerProcess(); *ppServerProcess = m_ppServerProcessList[dwProcessIndex]; - goto Finished; + return S_OK; } } @@ -200,22 +140,14 @@ PROCESS_MANAGER::GetProcess( ASPNETCORE_EVENT_RAPID_FAIL_COUNT_EXCEEDED_MSG, pConfig->QueryRapidFailsPerMinute()); - hr = HRESULT_FROM_WIN32(ERROR_SERVER_DISABLED); - goto Finished; + RETURN_HR(HRESULT_FROM_WIN32(ERROR_SERVER_DISABLED)); } if (m_ppServerProcessList[dwProcessIndex] == NULL) { - pSelectedServerProcess = new SERVER_PROCESS(); - if (pSelectedServerProcess == NULL) - { - hr = E_OUTOFMEMORY; - goto Finished; - } - - - hr = pSelectedServerProcess->Initialize( + pSelectedServerProcess = std::make_unique(); + RETURN_IF_FAILED(pSelectedServerProcess->Initialize( this, //ProcessManager pConfig->QueryProcessPath(), // pConfig->QueryArguments(), // @@ -231,50 +163,18 @@ PROCESS_MANAGER::GetProcess( pConfig->QueryApplicationPhysicalPath(), // physical path pConfig->QueryApplicationPath(), // app path pConfig->QueryApplicationVirtualPath() // App relative virtual path - ); - if (FAILED(hr)) - { - goto Finished; - } - - hr = pSelectedServerProcess->StartProcess(); - if (FAILED(hr)) - { - goto Finished; - } + )); + RETURN_IF_FAILED(pSelectedServerProcess->StartProcess()); } if (!pSelectedServerProcess->IsReady()) { - hr = HRESULT_FROM_WIN32(ERROR_CREATE_FAILED); - goto Finished; + RETURN_HR(HRESULT_FROM_WIN32(ERROR_CREATE_FAILED)); } - m_ppServerProcessList[dwProcessIndex] = pSelectedServerProcess; - pSelectedServerProcess = NULL; - + m_ppServerProcessList[dwProcessIndex] = pSelectedServerProcess.release(); } *ppServerProcess = m_ppServerProcessList[dwProcessIndex]; -Finished: - - if (fSharedLock) - { - ReleaseSRWLockShared(&m_srwLock); - fSharedLock = FALSE; - } - - if (fExclusiveLock) - { - ReleaseSRWLockExclusive(&m_srwLock); - fExclusiveLock = FALSE; - } - - if (pSelectedServerProcess != NULL) - { - delete pSelectedServerProcess; - pSelectedServerProcess = NULL; - } - - return hr; + return S_OK; } diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/protocolconfig.cpp b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/protocolconfig.cpp index 0f75a9d072..d0e44b5bd3 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/protocolconfig.cpp +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/protocolconfig.cpp @@ -2,41 +2,25 @@ // Licensed under the MIT License. See License.txt in the project root for license information. #include "protocolconfig.h" +#include "exceptions.h" HRESULT PROTOCOL_CONFIG::Initialize() { - HRESULT hr; - STRU strTemp; - m_fKeepAlive = TRUE; m_msTimeout = 120000; m_fPreserveHostHeader = TRUE; m_fReverseRewriteHeaders = FALSE; - if (FAILED(hr = m_strXForwardedForName.CopyW(L"X-Forwarded-For"))) - { - goto Finished; - } - - if (FAILED(hr = m_strSslHeaderName.CopyW(L"X-Forwarded-Proto"))) - { - goto Finished; - } - - if (FAILED(hr = m_strClientCertName.CopyW(L"MS-ASPNETCORE-CLIENTCERT"))) - { - goto Finished; - } + RETURN_IF_FAILED(m_strXForwardedForName.CopyW(L"X-Forwarded-For")); + RETURN_IF_FAILED(m_strSslHeaderName.CopyW(L"X-Forwarded-Proto")); + RETURN_IF_FAILED(m_strClientCertName.CopyW(L"MS-ASPNETCORE-CLIENTCERT")); m_fIncludePortInXForwardedFor = TRUE; m_dwMinResponseBuffer = 0; // no response buffering m_dwResponseBufferLimit = 4096*1024; m_dwMaxResponseHeaderSize = 65536; - -Finished: - - return hr; + return S_OK; } VOID diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/responseheaderhash.cpp b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/responseheaderhash.cpp index d8c77eccb0..55dcc2fbd4 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/responseheaderhash.cpp +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/responseheaderhash.cpp @@ -2,8 +2,9 @@ // Licensed under the MIT License. See License.txt in the project root for license information. #include "responseheaderhash.h" +#include "exceptions.h" -HEADER_RECORD RESPONSE_HEADER_HASH::sm_rgHeaders[] = +HEADER_RECORD RESPONSE_HEADER_HASH::sm_rgHeaders[] = { { "Cache-Control", HttpHeaderCacheControl }, { "Connection", HttpHeaderConnection }, @@ -65,8 +66,6 @@ Return Value: --*/ { - HRESULT hr; - // // 31 response headers. // Make sure to update the number of buckets it new headers @@ -79,20 +78,13 @@ Return Value: // Known collisions are "Age" colliding with "Expire" and "Location" // colliding with both "Expire" and "Age". // - hr = HASH_TABLE::Initialize(79); - if (FAILED(hr)) - { - return hr; - } + RETURN_IF_FAILED(HASH_TABLE::Initialize(79)); for ( DWORD Index = 0; Index < _countof(sm_rgHeaders); ++Index ) { - if (FAILED(hr = InsertRecord(&sm_rgHeaders[Index]))) - { - return hr; - } + RETURN_IF_FAILED(InsertRecord(&sm_rgHeaders[Index])); } - + return S_OK; } diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/serverprocess.cpp b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/serverprocess.cpp index 890ef01f97..494911472a 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/serverprocess.cpp +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/serverprocess.cpp @@ -6,6 +6,7 @@ #include #include "EventLog.h" #include "file_utility.h" +#include "exceptions.h" //#include //extern BOOL g_fNsiApiNotSupported; @@ -45,13 +46,13 @@ SERVER_PROCESS::Initialize( m_pProcessManager->ReferenceProcessManager(); m_fDebuggerAttached = FALSE; - if (FAILED(hr = m_ProcessPath.Copy(*pszProcessExePath)) || - FAILED(hr = m_struLogFile.Copy(*pstruStdoutLogFile))|| - FAILED(hr = m_struPhysicalPath.Copy(*pszAppPhysicalPath))|| - FAILED(hr = m_struAppFullPath.Copy(*pszAppPath))|| - FAILED(hr = m_struAppVirtualPath.Copy(*pszAppVirtualPath))|| - FAILED(hr = m_Arguments.Copy(*pszArguments)) || - FAILED(hr = SetupJobObject())) + if (FAILED_LOG(hr = m_ProcessPath.Copy(*pszProcessExePath)) || + FAILED_LOG(hr = m_struLogFile.Copy(*pstruStdoutLogFile))|| + FAILED_LOG(hr = m_struPhysicalPath.Copy(*pszAppPhysicalPath))|| + FAILED_LOG(hr = m_struAppFullPath.Copy(*pszAppPath))|| + FAILED_LOG(hr = m_struAppVirtualPath.Copy(*pszAppVirtualPath))|| + FAILED_LOG(hr = m_Arguments.Copy(*pszArguments)) || + FAILED_LOG(hr = SetupJobObject())) { goto Finished; } @@ -180,7 +181,7 @@ SERVER_PROCESS::SetupListenPort( } WCHAR buffer[15]; - if (FAILED(hr = GetRandomPort(&m_dwPort))) + if (FAILED_LOG(hr = GetRandomPort(&m_dwPort))) { goto Finished; } @@ -198,9 +199,9 @@ SERVER_PROCESS::SetupListenPort( goto Finished; } - if (FAILED(hr = pEntry->Initialize(ASPNETCORE_PORT_ENV_STR, buffer)) || - FAILED(hr = pEnvironmentVarTable->InsertRecord(pEntry)) || - FAILED(hr = m_struPort.Copy(buffer))) + if (FAILED_LOG(hr = pEntry->Initialize(ASPNETCORE_PORT_ENV_STR, buffer)) || + FAILED_LOG(hr = pEnvironmentVarTable->InsertRecord(pEntry)) || + FAILED_LOG(hr = m_struPort.Copy(buffer))) { goto Finished; } @@ -212,7 +213,7 @@ Finished: pEntry = NULL; } - if (FAILED(hr)) + if (FAILED_LOG(hr)) { EventLog::Error( ASPNETCORE_EVENT_PROCESS_START_SUCCESS, @@ -252,8 +253,8 @@ SERVER_PROCESS::SetupAppPath( goto Finished; } - if (FAILED(hr = pEntry->Initialize(ASPNETCORE_APP_PATH_ENV_STR, m_struAppVirtualPath.QueryStr())) || - FAILED(hr = pEnvironmentVarTable->InsertRecord(pEntry))) + if (FAILED_LOG(hr = pEntry->Initialize(ASPNETCORE_APP_PATH_ENV_STR, m_struAppVirtualPath.QueryStr())) || + FAILED_LOG(hr = pEnvironmentVarTable->InsertRecord(pEntry))) { goto Finished; } @@ -311,7 +312,7 @@ SERVER_PROCESS::SetupAppToken( fRpcStringAllocd = TRUE; - if (FAILED(hr = m_straGuid.Copy(pszLogUuid))) + if (FAILED_LOG(hr = m_straGuid.Copy(pszLogUuid))) { goto Finished; } @@ -324,9 +325,9 @@ SERVER_PROCESS::SetupAppToken( goto Finished; } - if (FAILED(strAppToken.CopyA(m_straGuid.QueryStr())) || - FAILED(hr = pEntry->Initialize(ASPNETCORE_APP_TOKEN_ENV_STR, strAppToken.QueryStr())) || - FAILED(hr = pEnvironmentVarTable->InsertRecord(pEntry))) + if (FAILED_LOG(strAppToken.CopyA(m_straGuid.QueryStr())) || + FAILED_LOG(hr = pEntry->Initialize(ASPNETCORE_APP_TOKEN_ENV_STR, strAppToken.QueryStr())) || + FAILED_LOG(hr = pEnvironmentVarTable->InsertRecord(pEntry))) { goto Finished; } @@ -382,7 +383,7 @@ SERVER_PROCESS::OutputEnvironmentVariables pszEqualChar = wcschr(pszCurrentVariable, L'='); if (pszEqualChar != NULL) { - if (FAILED(hr = strEnvVar.Copy(pszCurrentVariable, (DWORD)(pszEqualChar - pszCurrentVariable) + 1))) + if (FAILED_LOG(hr = strEnvVar.Copy(pszCurrentVariable, (DWORD)(pszEqualChar - pszCurrentVariable) + 1))) { goto Finished; } @@ -390,7 +391,7 @@ SERVER_PROCESS::OutputEnvironmentVariables if (pEntry != NULL) { // same env variable is defined in configuration, use it - if (FAILED(hr = strEnvVar.Append(pEntry->QueryValue()))) + if (FAILED_LOG(hr = strEnvVar.Append(pEntry->QueryValue()))) { goto Finished; } @@ -453,9 +454,9 @@ SERVER_PROCESS::SetupCommandLine( if ((wcsstr(pszPath, L":") == NULL) && (wcsstr(pszPath, L"%") == NULL)) { // let's check whether it is a relative path - if (FAILED(hr = strRelativePath.Copy(m_struPhysicalPath.QueryStr())) || - FAILED(hr = strRelativePath.Append(L"\\")) || - FAILED(hr = strRelativePath.Append(pszPath))) + if (FAILED_LOG(hr = strRelativePath.Copy(m_struPhysicalPath.QueryStr())) || + FAILED_LOG(hr = strRelativePath.Append(L"\\")) || + FAILED_LOG(hr = strRelativePath.Append(pszPath))) { goto Finished; } @@ -482,9 +483,9 @@ SERVER_PROCESS::SetupCommandLine( pszPath = pszFullPath; } } - if (FAILED(hr = pstrCommandLine->Copy(pszPath)) || - FAILED(hr = pstrCommandLine->Append(L" ")) || - FAILED(hr = pstrCommandLine->Append(m_Arguments.QueryStr()))) + if (FAILED_LOG(hr = pstrCommandLine->Copy(pszPath)) || + FAILED_LOG(hr = pstrCommandLine->Append(L" ")) || + FAILED_LOG(hr = pstrCommandLine->Append(m_Arguments.QueryStr()))) { goto Finished; } @@ -566,7 +567,7 @@ SERVER_PROCESS::PostStartCheck( } // register call back with the created process - if (FAILED(hr = RegisterProcessWait(&m_hProcessWaitHandle, m_hProcessHandle))) + if (FAILED_LOG(hr = RegisterProcessWait(&m_hProcessWaitHandle, m_hProcessHandle))) { goto Finished; } @@ -595,7 +596,7 @@ SERVER_PROCESS::PostStartCheck( if (!fProcessMatch) { // could be the scenario that backend creates child process - if (FAILED(hr = GetChildProcessHandles())) + if (FAILED_LOG(hr = GetChildProcessHandles())) { goto Finished; } @@ -617,7 +618,7 @@ SERVER_PROCESS::PostStartCheck( fDebuggerAttached = FALSE; } - if (FAILED(hr = RegisterProcessWait(&m_hChildProcessWaitHandles[i], + if (FAILED_LOG(hr = RegisterProcessWait(&m_hChildProcessWaitHandles[i], m_hChildProcessHandles[i]))) { goto Finished; @@ -678,7 +679,7 @@ SERVER_PROCESS::PostStartCheck( hr = CheckIfServerIsUp(m_dwPort, &dwActualProcessId, &fReady); - if ((FAILED(hr) || fReady == FALSE)) + if ((FAILED_LOG(hr) || fReady == FALSE)) { strEventMsg.SafeSnwprintf( ASPNETCORE_EVENT_PROCESS_START_NOTREADY_ERROR_MSG, @@ -705,7 +706,7 @@ SERVER_PROCESS::PostStartCheck( } hr = m_pForwarderConnection->Initialize(m_dwPort); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -726,7 +727,7 @@ SERVER_PROCESS::PostStartCheck( Finished: m_fDebuggerAttached = fDebuggerAttached; - if (FAILED(hr)) + if (FAILED_LOG(hr)) { if (m_pForwarderConnection != NULL) { @@ -773,13 +774,13 @@ SERVER_PROCESS::StartProcess( // // generate process command line. // - if (FAILED(hr = SetupCommandLine(&m_struCommandLine))) + if (FAILED_LOG(hr = SetupCommandLine(&m_struCommandLine))) { pStrStage = L"SetupCommandLine"; goto Failure; } - if (FAILED(hr = ENVIRONMENT_VAR_HELPERS::InitEnvironmentVariablesTable( + if (FAILED_LOG(hr = ENVIRONMENT_VAR_HELPERS::InitEnvironmentVariablesTable( m_pEnvironmentVarTable, m_fWindowsAuthEnabled, m_fBasicAuthEnabled, @@ -790,7 +791,7 @@ SERVER_PROCESS::StartProcess( goto Failure; } - if (FAILED(hr = ENVIRONMENT_VAR_HELPERS::AddWebsocketEnabledToEnvironmentVariables( + if (FAILED_LOG(hr = ENVIRONMENT_VAR_HELPERS::AddWebsocketEnabledToEnvironmentVariables( pHashTable, m_fWebSocketSupported ))) @@ -803,7 +804,7 @@ SERVER_PROCESS::StartProcess( // // setup the the port that the backend process will listen on // - if (FAILED(hr = SetupListenPort(pHashTable, &fCriticalError))) + if (FAILED_LOG(hr = SetupListenPort(pHashTable, &fCriticalError))) { pStrStage = L"SetupListenPort"; goto Failure; @@ -812,7 +813,7 @@ SERVER_PROCESS::StartProcess( // // get app path // - if (FAILED(hr = SetupAppPath(pHashTable))) + if (FAILED_LOG(hr = SetupAppPath(pHashTable))) { pStrStage = L"SetupAppPath"; goto Failure; @@ -821,7 +822,7 @@ SERVER_PROCESS::StartProcess( // // generate new guid for each process // - if (FAILED(hr = SetupAppToken(pHashTable))) + if (FAILED_LOG(hr = SetupAppToken(pHashTable))) { pStrStage = L"SetupAppToken"; goto Failure; @@ -830,7 +831,7 @@ SERVER_PROCESS::StartProcess( // // setup environment variables for new process // - if (FAILED(hr = OutputEnvironmentVariables(&mszNewEnvironment, pHashTable))) + if (FAILED_LOG(hr = OutputEnvironmentVariables(&mszNewEnvironment, pHashTable))) { pStrStage = L"OutputEnvironmentVariables"; goto Failure; @@ -861,7 +862,7 @@ SERVER_PROCESS::StartProcess( m_hProcessHandle = processInformation.hProcess; m_dwProcessId = processInformation.dwProcessId; - if (FAILED(hr = SetupJobObject())) + if (FAILED_LOG(hr = SetupJobObject())) { pStrStage = L"SetupJobObject"; goto Failure; @@ -890,7 +891,7 @@ SERVER_PROCESS::StartProcess( // // need to make sure the server is up and listening on the port specified. // - if (FAILED(hr = PostStartCheck())) + if (FAILED_LOG(hr = PostStartCheck())) { pStrStage = L"PostStartCheck"; goto Failure; @@ -944,7 +945,7 @@ SERVER_PROCESS::StartProcess( } Finished: - if (FAILED(hr) || m_fReady == FALSE) + if (FAILED_LOG(hr) || m_fReady == FALSE) { if (m_hStdoutHandle != NULL) { @@ -1034,7 +1035,7 @@ SERVER_PROCESS::SetupStdHandles( m_struLogFile.QueryStr(), m_struPhysicalPath.QueryStr(), &struPath); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -1049,13 +1050,13 @@ SERVER_PROCESS::SetupStdHandles( systemTime.wMinute, systemTime.wSecond, GetCurrentProcessId()); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } hr = FILE_UTILITY::EnsureDirectoryPathExist(struPath.QueryStr()); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -1086,7 +1087,7 @@ SERVER_PROCESS::SetupStdHandles( m_Timer.InitializeTimer(STTIMER::TimerCallback, &m_struFullLogFile, 3000, 3000); Finished: - if (FAILED(hr)) + if (FAILED_LOG(hr)) { pStartupInfo->dwFlags = STARTF_USESTDHANDLES; pStartupInfo->hStdInput = INVALID_HANDLE_VALUE; @@ -1305,7 +1306,7 @@ Finished: hThread = NULL; } - if (FAILED(hr)) + if (FAILED_LOG(hr)) { TerminateBackendProcess(); } @@ -1874,7 +1875,7 @@ SERVER_PROCESS::RegisterProcessWait( Finished: - if (FAILED(hr)) + if (FAILED_LOG(hr)) { *phWaitHandle = NULL; DereferenceServerProcess(); @@ -1981,10 +1982,10 @@ SERVER_PROCESS::SendShutdownHttpMessage( VOID ) } // set up the shutdown headers - if (FAILED(hr = strHeaders.Append(L"MS-ASPNETCORE-EVENT:shutdown \r\n")) || - FAILED(hr = strAppToken.Append(L"MS-ASPNETCORE-TOKEN:")) || - FAILED(hr = strAppToken.AppendA(m_straGuid.QueryStr())) || - FAILED(hr = strHeaders.Append(strAppToken.QueryStr()))) + if (FAILED_LOG(hr = strHeaders.Append(L"MS-ASPNETCORE-EVENT:shutdown \r\n")) || + FAILED_LOG(hr = strAppToken.Append(L"MS-ASPNETCORE-TOKEN:")) || + FAILED_LOG(hr = strAppToken.AppendA(m_straGuid.QueryStr())) || + FAILED_LOG(hr = strHeaders.Append(strAppToken.QueryStr()))) { goto Finished; } @@ -2072,7 +2073,7 @@ SERVER_PROCESS::SendShutDownSignalInternal( { ReferenceServerProcess(); - if (FAILED(SendShutdownHttpMessage())) + if (FAILED_LOG(SendShutdownHttpMessage())) { // // failed to send shutdown http message diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/url_utility.cpp b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/url_utility.cpp index c5b3a06e86..64118b61b6 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/url_utility.cpp +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/url_utility.cpp @@ -5,6 +5,7 @@ #include #include "debugutil.h" +#include "exceptions.h" // static HRESULT @@ -38,8 +39,6 @@ Return Value: --*/ { - HRESULT hr; - // // First determine if the target is secure // @@ -55,12 +54,12 @@ Return Value: } else { - return HRESULT_FROM_WIN32(ERROR_INVALID_DATA); + RETURN_HR(HRESULT_FROM_WIN32(ERROR_INVALID_DATA)); } if (*pszDestinationUrl == L'\0') { - return HRESULT_FROM_WIN32(ERROR_INVALID_DATA); + RETURN_HR(HRESULT_FROM_WIN32(ERROR_INVALID_DATA)); } // @@ -69,20 +68,14 @@ Return Value: LPCWSTR pszSlash = wcschr(pszDestinationUrl, L'/'); if (pszSlash == NULL) { - if (FAILED(hr = pstrUrl->Copy(L"/", 1)) || - FAILED(hr = pstrDestination->Copy(pszDestinationUrl))) - { - return hr; - } + RETURN_IF_FAILED(pstrUrl->Copy(L"/", 1)); + RETURN_IF_FAILED(pstrDestination->Copy(pszDestinationUrl)); } else { - if (FAILED(hr = pstrUrl->Copy(pszSlash)) || - FAILED(hr = pstrDestination->Copy(pszDestinationUrl, - (DWORD)(pszSlash - pszDestinationUrl)))) - { - return hr; - } + RETURN_IF_FAILED(pstrUrl->Copy(pszSlash)); + RETURN_IF_FAILED(pstrDestination->Copy(pszDestinationUrl, + (DWORD)(pszSlash - pszDestinationUrl))); } return S_OK; @@ -102,34 +95,28 @@ URL_UTILITY::EscapeAbsPath( STRU * strEscapedUrl ) { - HRESULT hr = S_OK; STRU strAbsPath; LPCWSTR pszAbsPath = NULL; LPCWSTR pszFindStr = NULL; - hr = strAbsPath.Copy( pRequest->GetRawHttpRequest()->CookedUrl.pAbsPath, - pRequest->GetRawHttpRequest()->CookedUrl.AbsPathLength / sizeof(WCHAR) ); - if(FAILED(hr)) - { - goto Finished; - } + RETURN_IF_FAILED(strAbsPath.Copy( pRequest->GetRawHttpRequest()->CookedUrl.pAbsPath, + pRequest->GetRawHttpRequest()->CookedUrl.AbsPathLength / sizeof(WCHAR) )); pszAbsPath = strAbsPath.QueryStr(); pszFindStr = wcschr(pszAbsPath, L'?'); while(pszFindStr != NULL) { - strEscapedUrl->Append( pszAbsPath, pszFindStr - pszAbsPath); - strEscapedUrl->Append(L"%3F"); + RETURN_IF_FAILED(strEscapedUrl->Append( pszAbsPath, pszFindStr - pszAbsPath)); + RETURN_IF_FAILED(strEscapedUrl->Append(L"%3F")); pszAbsPath = pszFindStr + 1; pszFindStr = wcschr(pszAbsPath, L'?'); } - strEscapedUrl->Append(pszAbsPath); - strEscapedUrl->Append(pRequest->GetRawHttpRequest()->CookedUrl.pQueryString, - pRequest->GetRawHttpRequest()->CookedUrl.QueryStringLength / sizeof(WCHAR)); + RETURN_IF_FAILED(strEscapedUrl->Append(pszAbsPath)); + RETURN_IF_FAILED(strEscapedUrl->Append(pRequest->GetRawHttpRequest()->CookedUrl.pQueryString, + pRequest->GetRawHttpRequest()->CookedUrl.QueryStringLength / sizeof(WCHAR))); -Finished: - return hr; + return S_OK; } diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/websockethandler.cpp b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/websockethandler.cpp index f58d599f98..5eac6001e9 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/websockethandler.cpp +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/websockethandler.cpp @@ -28,6 +28,7 @@ This prevents the need for data buffering at the Asp.Net Core Module level. --*/ #include "websockethandler.h" +#include "exceptions.h" SRWLOCK WEBSOCKET_HANDLER::sm_RequestsListLock; @@ -86,7 +87,7 @@ HRESULT WEBSOCKET_HANDLER::StaticInitialize( BOOL fEnableReferenceCountTracing ) -/*++ +/*++ Routine Description: @@ -145,7 +146,7 @@ WEBSOCKET_HANDLER::InsertRequest( } } -//static +//static VOID WEBSOCKET_HANDLER::RemoveRequest( VOID @@ -244,11 +245,11 @@ WEBSOCKET_HANDLER::ProcessRequest( Routine Description: Entry point to WebSocket Handler: - + This routine is called after the 101 response was successfully sent to - the client. - This routine get's a websocket handle to winhttp, - websocket handle to IIS's websocket context, and initiates IO + the client. + This routine get's a websocket handle to winhttp, + websocket handle to IIS's websocket context, and initiates IO in these two endpoints. @@ -267,10 +268,10 @@ Routine Description: // // Cache the points to IHttpContext3 // - hr = HttpGetExtendedInterface(g_pHttpServer, - pHttpContext, + hr = HttpGetExtendedInterface(g_pHttpServer, + pHttpContext, &_pHttpContext); - if (FAILED (hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -338,7 +339,7 @@ Routine Description: // Initiate Read on IIS // hr = DoIisWebSocketReceive(); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -348,7 +349,7 @@ Routine Description: // hr = DoWinHttpWebSocketReceive(); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -356,7 +357,7 @@ Routine Description: Finished: LeaveCriticalSection(&_RequestLock); - if (FAILED (hr)) + if (FAILED_LOG(hr)) { DebugPrintf (ASPNETCORE_DEBUG_FLAG_ERROR, "Process Request Failed with HR=%08x", hr); @@ -399,7 +400,7 @@ Routine Description: OnReadIoCompletion, this, NULL); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { DecrementOutstandingIo(); DebugPrintf(ASPNETCORE_DEBUG_FLAG_ERROR, @@ -498,7 +499,7 @@ Routine Description: // hr = strCloseReason.CopyA((PCSTR)&_WinHttpReceiveBuffer, dwReceived); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -549,13 +550,13 @@ Routine Description: NULL); } - if (FAILED(hr)) + if (FAILED_LOG(hr)) { DecrementOutstandingIo(); } Finished: - if (FAILED(hr)) + if (FAILED_LOG(hr)) { DebugPrintf(ASPNETCORE_DEBUG_FLAG_ERROR, "WEBSOCKET_HANDLER::DoIisWebSocketSend failed with %08x", hr); @@ -592,10 +593,10 @@ Routine Description: // // Get Close status from IIS. // - hr = _pWebSocketContext->GetCloseStatus(&uStatus, + hr = _pWebSocketContext->GetCloseStatus(&uStatus, &pszReason); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -604,7 +605,7 @@ Routine Description: // Convert status to UTF8 // hr = strCloseReason.CopyWToUTF8Unescaped(pszReason); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } @@ -663,7 +664,7 @@ Routine Description: } Finished: - if (FAILED(hr)) + if (FAILED_LOG(hr)) { DebugPrintf(ASPNETCORE_DEBUG_FLAG_ERROR, "WEBSOCKET_HANDLER::DoWinHttpWebSocketSend failed with %08x", hr); @@ -691,7 +692,7 @@ WEBSOCKET_HANDLER::OnReadIoCompletion( --*/ { - WEBSOCKET_HANDLER * pHandler = (WEBSOCKET_HANDLER *) + WEBSOCKET_HANDLER * pHandler = (WEBSOCKET_HANDLER *) pvCompletionContext; pHandler->OnIisReceiveComplete( @@ -721,7 +722,7 @@ WEBSOCKET_HANDLER::OnWriteIoCompletion( --*/ { - WEBSOCKET_HANDLER * pHandler = (WEBSOCKET_HANDLER *) + WEBSOCKET_HANDLER * pHandler = (WEBSOCKET_HANDLER *) pvCompletionContext; UNREFERENCED_PARAMETER(fUTF8Encoded); @@ -776,18 +777,18 @@ Routine Description: // hr = DoIisWebSocketReceive(); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { goto Finished; } Finished: - if (fLocked) + if (fLocked) { LeaveCriticalSection(&_RequestLock); } - if (FAILED (hr)) + if (FAILED_LOG(hr)) { Cleanup (cleanupReason); @@ -848,7 +849,7 @@ Routine Description: Issue send on the Client(IIS) if the receive was successful. - If the receive completed with zero bytes, that + If the receive completed with zero bytes, that indicates that the server has disconnected the connection. Issue cleanup for the websocket handler. --*/ @@ -877,18 +878,18 @@ Routine Description: pCompletionStatus->eBufferType ); - if (FAILED (hr)) + if (FAILED_LOG(hr)) { cleanupReason = ClientDisconnect; goto Finished; } Finished: - if (fLocked) + if (fLocked) { LeaveCriticalSection(&_RequestLock); } - if (FAILED (hr)) + if (FAILED_LOG(hr)) { Cleanup (cleanupReason); @@ -917,7 +918,7 @@ Routine Description: Completion callback executed when a send completes from the client. - If send was successful,issue read on the + If send was successful,issue read on the server endpoint, to continue the readloop. --*/ @@ -930,7 +931,7 @@ Routine Description: DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, "WEBSOCKET_HANDLER::OnIisSendComplete"); - if (FAILED(hrCompletion)) + if (FAILED_LOG(hrCompletion)) { hr = hrCompletion; cleanupReason = ClientDisconnect; @@ -957,7 +958,7 @@ Routine Description: // Write Completed, initiate next read from backend server. // hr = DoWinHttpWebSocketReceive(); - if (FAILED(hr)) + if (FAILED_LOG(hr)) { cleanupReason = ServerDisconnect; goto Finished; @@ -969,7 +970,7 @@ Finished: { LeaveCriticalSection(&_RequestLock); } - if (FAILED (hr)) + if (FAILED_LOG(hr)) { Cleanup (cleanupReason); @@ -1016,7 +1017,7 @@ Routine Description: DebugPrintf(ASPNETCORE_DEBUG_FLAG_INFO, "WEBSOCKET_HANDLER::OnIisReceiveComplete"); - if (FAILED(hrCompletion)) + if (FAILED_LOG(hrCompletion)) { cleanupReason = ClientDisconnect; hr = hrCompletion; @@ -1029,7 +1030,7 @@ Routine Description: } EnterCriticalSection(&_RequestLock); - + fLocked = TRUE; if (_fCleanupInProgress) { @@ -1049,7 +1050,7 @@ Routine Description: // hr = DoWinHttpWebSocketSend(cbIO, BufferType); - if (FAILED (hr)) + if (FAILED_LOG(hr)) { cleanupReason = ServerDisconnect; goto Finished; @@ -1060,7 +1061,7 @@ Finished: { LeaveCriticalSection(&_RequestLock); } - if (FAILED (hr)) + if (FAILED_LOG(hr)) { Cleanup (cleanupReason); diff --git a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/winhttphelper.cpp b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/winhttphelper.cpp index 8d14ffc417..8f6c5d3720 100644 --- a/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/winhttphelper.cpp +++ b/src/AspNetCoreModuleV2/OutOfProcessRequestHandler/winhttphelper.cpp @@ -2,6 +2,7 @@ // Licensed under the MIT License. See License.txt in the project root for license information. #include "winhttphelper.h" +#include "exceptions.h" PFN_WINHTTP_WEBSOCKET_COMPLETE_UPGRADE WINHTTP_HELPER::sm_pfnWinHttpWebSocketCompleteUpgrade; @@ -24,8 +25,6 @@ WINHTTP_HELPER::StaticInitialize( VOID ) { - HRESULT hr = S_OK; - // // Initialize the function pointers for WinHttp Websocket API's. // @@ -35,54 +34,29 @@ WINHTTP_HELPER::StaticInitialize( } HMODULE hWinHttp = GetModuleHandleA("winhttp.dll"); - if (hWinHttp == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } + RETURN_LAST_ERROR_IF (hWinHttp == NULL); - sm_pfnWinHttpWebSocketCompleteUpgrade = (PFN_WINHTTP_WEBSOCKET_COMPLETE_UPGRADE) + sm_pfnWinHttpWebSocketCompleteUpgrade = (PFN_WINHTTP_WEBSOCKET_COMPLETE_UPGRADE) GetProcAddress(hWinHttp, "WinHttpWebSocketCompleteUpgrade"); - if (sm_pfnWinHttpWebSocketCompleteUpgrade == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } + RETURN_LAST_ERROR_IF (sm_pfnWinHttpWebSocketCompleteUpgrade == NULL); sm_pfnWinHttpWebSocketQueryCloseStatus = (PFN_WINHTTP_WEBSOCKET_QUERY_CLOSE_STATUS) GetProcAddress(hWinHttp, "WinHttpWebSocketQueryCloseStatus"); - if (sm_pfnWinHttpWebSocketQueryCloseStatus == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } + RETURN_LAST_ERROR_IF (sm_pfnWinHttpWebSocketQueryCloseStatus == NULL); sm_pfnWinHttpWebSocketReceive = (PFN_WINHTTP_WEBSOCKET_RECEIVE) GetProcAddress(hWinHttp, "WinHttpWebSocketReceive"); - if (sm_pfnWinHttpWebSocketReceive == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } + RETURN_LAST_ERROR_IF (sm_pfnWinHttpWebSocketReceive == NULL); sm_pfnWinHttpWebSocketSend = (PFN_WINHTTP_WEBSOCKET_SEND) GetProcAddress(hWinHttp, "WinHttpWebSocketSend"); - if (sm_pfnWinHttpWebSocketSend == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } + RETURN_LAST_ERROR_IF (sm_pfnWinHttpWebSocketSend == NULL); sm_pfnWinHttpWebSocketShutdown = (PFN_WINHTTP_WEBSOCKET_SHUTDOWN) GetProcAddress(hWinHttp, "WinHttpWebSocketShutdown"); - if (sm_pfnWinHttpWebSocketShutdown == NULL) - { - hr = HRESULT_FROM_WIN32(GetLastError()); - goto Finished; - } + RETURN_LAST_ERROR_IF (sm_pfnWinHttpWebSocketShutdown == NULL); -Finished: - return hr; + return S_OK; } @@ -170,6 +144,4 @@ WINHTTP_HELPER::GetBufferTypeFromFlags( *pBufferType = WINHTTP_WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE; } } - - return; }