| 1896 | } |
| 1897 | |
| 1898 | void WebRequestWinHTTP::WriteData() |
| 1899 | { |
| 1900 | if (_dataWritten == _dataSize) { |
| 1901 | if (!CheckResult(CreateResponse())) { |
| 1902 | return; |
| 1903 | } |
| 1904 | |
| 1905 | const Result result = InitializeAuthIfNeeded(); |
| 1906 | switch (result.state) { |
| 1907 | case WebRequest::State::Unauthorized: |
| 1908 | switch (_authChallenge->GetSource()) { |
| 1909 | case WebAuthChallenge::Source::Proxy: { |
| 1910 | if (_tryProxyCredentials) { |
| 1911 | _tryProxyCredentials = false; |
| 1912 | |
| 1913 | _authChallenge->SetCredentials(_sessionImpl.GetProxyCredentials()); |
| 1914 | return; |
| 1915 | } |
| 1916 | break; |
| 1917 | } |
| 1918 | case WebAuthChallenge::Source::Server: { |
| 1919 | if (_tryCredentialsFromURL) { |
| 1920 | _tryCredentialsFromURL = false; |
| 1921 | |
| 1922 | // If the request is redirected, the authentication can be required again |
| 1923 | if (_sessionImpl.HasProxyCredentials()) { |
| 1924 | _tryProxyCredentials = true; |
| 1925 | } |
| 1926 | |
| 1927 | _authChallenge->SetCredentials(_credentialsFromURL); |
| 1928 | return; |
| 1929 | } |
| 1930 | break; |
| 1931 | } |
| 1932 | } |
| 1933 | DEATH_FALLTHROUGH |
| 1934 | |
| 1935 | case WebRequest::State::Failed: |
| 1936 | HandleResult(result); |
| 1937 | return; |
| 1938 | |
| 1939 | case WebRequest::State::Active: |
| 1940 | break; |
| 1941 | |
| 1942 | case WebRequest::State::Idle: |
| 1943 | case WebRequest::State::Completed: |
| 1944 | case WebRequest::State::Cancelled: |
| 1945 | // Unreachable state |
| 1946 | break; |
| 1947 | } |
| 1948 | |
| 1949 | if (!_response->ReadData()) { |
| 1950 | SetFailedWithLastError("Reading data"_s); |
| 1951 | } |
| 1952 | return; |
| 1953 | } |
| 1954 | |
| 1955 | CheckResult(DoWriteData()); |
nothing calls this directly
no test coverage detected