Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
W
wine-winehq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Registry
Registry
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
wine
wine-winehq
Commits
c952e81a
Commit
c952e81a
authored
Dec 03, 2009
by
Jacek Caban
Committed by
Alexandre Julliard
Dec 03, 2009
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
wininet: Directly return error from HTTP_HttpSendRequest.
parent
903d9c46
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
34 additions
and
42 deletions
+34
-42
http.c
dlls/wininet/http.c
+33
-40
http.c
dlls/wininet/tests/http.c
+1
-2
No files found.
dlls/wininet/http.c
View file @
c952e81a
...
...
@@ -3397,12 +3397,12 @@ static void HTTP_InsertCookies(http_request_t *lpwhr)
* FALSE on failure
*
*/
BOOL
HTTP_HttpSendRequestW
(
http_request_t
*
lpwhr
,
LPCWSTR
lpszHeaders
,
static
DWORD
HTTP_HttpSendRequestW
(
http_request_t
*
lpwhr
,
LPCWSTR
lpszHeaders
,
DWORD
dwHeaderLength
,
LPVOID
lpOptional
,
DWORD
dwOptionalLength
,
DWORD
dwContentLength
,
BOOL
bEndRequest
)
{
INT
cnt
;
BOOL
bSuccess
=
FALSE
,
redirected
=
FALSE
;
BOOL
redirected
=
FALSE
;
LPWSTR
requestString
=
NULL
;
INT
responseLen
;
BOOL
loop_next
;
...
...
@@ -3501,10 +3501,8 @@ BOOL HTTP_HttpSendRequestW(http_request_t *lpwhr, LPCWSTR lpszHeaders,
TRACE
(
"Request header -> %s
\n
"
,
debugstr_w
(
requestString
)
);
/* Send the request and store the results */
if
((
res
=
HTTP_OpenConnection
(
lpwhr
))
!=
ERROR_SUCCESS
)
{
INTERNET_SetLastError
(
res
);
if
((
res
=
HTTP_OpenConnection
(
lpwhr
))
!=
ERROR_SUCCESS
)
goto
lend
;
}
/* send the request as ASCII, tack on the optional data */
if
(
!
lpOptional
||
redirected
)
...
...
@@ -3523,7 +3521,7 @@ BOOL HTTP_HttpSendRequestW(http_request_t *lpwhr, LPCWSTR lpszHeaders,
INTERNET_SendCallback
(
&
lpwhr
->
hdr
,
lpwhr
->
hdr
.
dwContext
,
INTERNET_STATUS_SENDING_REQUEST
,
NULL
,
0
);
NETCON_send
(
&
lpwhr
->
netConnection
,
ascii_req
,
len
,
0
,
&
cnt
);
res
=
NETCON_send
(
&
lpwhr
->
netConnection
,
ascii_req
,
len
,
0
,
&
cnt
);
HeapFree
(
GetProcessHeap
(),
0
,
ascii_req
);
lpwhr
->
dwBytesWritten
=
dwOptionalLength
;
...
...
@@ -3540,12 +3538,10 @@ BOOL HTTP_HttpSendRequestW(http_request_t *lpwhr, LPCWSTR lpszHeaders,
INTERNET_SendCallback
(
&
lpwhr
->
hdr
,
lpwhr
->
hdr
.
dwContext
,
INTERNET_STATUS_RECEIVING_RESPONSE
,
NULL
,
0
);
if
(
cnt
<
0
)
if
(
res
!=
ERROR_SUCCESS
)
goto
lend
;
responseLen
=
HTTP_GetResponseHeaders
(
lpwhr
,
TRUE
);
if
(
responseLen
)
bSuccess
=
TRUE
;
INTERNET_SendCallback
(
&
lpwhr
->
hdr
,
lpwhr
->
hdr
.
dwContext
,
INTERNET_STATUS_RESPONSE_RECEIVED
,
&
responseLen
,
...
...
@@ -3560,7 +3556,7 @@ BOOL HTTP_HttpSendRequestW(http_request_t *lpwhr, LPCWSTR lpszHeaders,
&
dwStatusCode
,
&
dwBufferSize
,
NULL
))
dwStatusCode
=
0
;
if
(
!
(
lpwhr
->
hdr
.
dwFlags
&
INTERNET_FLAG_NO_AUTO_REDIRECT
)
&&
bSuccess
)
if
(
!
(
lpwhr
->
hdr
.
dwFlags
&
INTERNET_FLAG_NO_AUTO_REDIRECT
)
&&
responseLen
)
{
WCHAR
*
new_url
,
szNewLocation
[
INTERNET_MAX_URL_LENGTH
];
dwBufferSize
=
sizeof
(
szNewLocation
);
...
...
@@ -3575,6 +3571,7 @@ BOOL HTTP_HttpSendRequestW(http_request_t *lpwhr, LPCWSTR lpszHeaders,
HTTP_DrainContent
(
lpwhr
);
if
((
new_url
=
HTTP_GetRedirectURL
(
lpwhr
,
szNewLocation
)))
{
BOOL
bSuccess
;
INTERNET_SendCallback
(
&
lpwhr
->
hdr
,
lpwhr
->
hdr
.
dwContext
,
INTERNET_STATUS_REDIRECT
,
new_url
,
(
strlenW
(
new_url
)
+
1
)
*
sizeof
(
WCHAR
));
bSuccess
=
HTTP_HandleRedirect
(
lpwhr
,
new_url
);
...
...
@@ -3582,13 +3579,15 @@ BOOL HTTP_HttpSendRequestW(http_request_t *lpwhr, LPCWSTR lpszHeaders,
{
HeapFree
(
GetProcessHeap
(),
0
,
requestString
);
loop_next
=
TRUE
;
}
else
{
res
=
INTERNET_GetLastError
();
}
HeapFree
(
GetProcessHeap
(),
0
,
new_url
);
}
redirected
=
TRUE
;
}
}
if
(
!
(
lpwhr
->
hdr
.
dwFlags
&
INTERNET_FLAG_NO_AUTH
)
&&
bSuccess
)
if
(
!
(
lpwhr
->
hdr
.
dwFlags
&
INTERNET_FLAG_NO_AUTH
)
&&
res
==
ERROR_SUCCESS
)
{
WCHAR
szAuthValue
[
2048
];
dwBufferSize
=
2048
;
...
...
@@ -3628,11 +3627,11 @@ BOOL HTTP_HttpSendRequestW(http_request_t *lpwhr, LPCWSTR lpszHeaders,
}
}
else
bSuccess
=
TRUE
;
res
=
ERROR_SUCCESS
;
}
while
(
loop_next
);
if
(
bSuccess
)
{
if
(
res
==
ERROR_SUCCESS
)
{
WCHAR
url
[
INTERNET_MAX_URL_LENGTH
];
WCHAR
cacheFileName
[
MAX_PATH
+
1
];
BOOL
b
;
...
...
@@ -3665,23 +3664,12 @@ lend:
if
(
lpwhr
->
lpHttpSession
->
lpAppInfo
->
hdr
.
dwFlags
&
INTERNET_FLAG_ASYNC
)
{
if
(
bSuccess
)
{
if
(
lpwhr
->
dwBytesWritten
==
lpwhr
->
dwBytesToWrite
)
HTTP_ReceiveRequestData
(
lpwhr
,
TRUE
);
else
{
iar
.
dwResult
=
(
DWORD_PTR
)
lpwhr
->
hdr
.
hInternet
;
iar
.
dwError
=
0
;
INTERNET_SendCallback
(
&
lpwhr
->
hdr
,
lpwhr
->
hdr
.
dwContext
,
INTERNET_STATUS_REQUEST_COMPLETE
,
&
iar
,
sizeof
(
INTERNET_ASYNC_RESULT
));
}
}
if
(
res
==
ERROR_SUCCESS
&&
lpwhr
->
dwBytesWritten
==
lpwhr
->
dwBytesToWrite
)
HTTP_ReceiveRequestData
(
lpwhr
,
TRUE
);
else
{
iar
.
dwResult
=
(
DWORD_PTR
)
lpwhr
->
hdr
.
hInternet
;
iar
.
dwError
=
INTERNET_GetLastError
()
;
iar
.
dwError
=
res
;
INTERNET_SendCallback
(
&
lpwhr
->
hdr
,
lpwhr
->
hdr
.
dwContext
,
INTERNET_STATUS_REQUEST_COMPLETE
,
&
iar
,
...
...
@@ -3690,8 +3678,7 @@ lend:
}
TRACE
(
"<--
\n
"
);
if
(
bSuccess
)
INTERNET_SetLastError
(
ERROR_SUCCESS
);
return
bSuccess
;
return
res
;
}
/***********************************************************************
...
...
@@ -3720,6 +3707,7 @@ static BOOL HTTP_HttpEndRequestW(http_request_t *lpwhr, DWORD dwFlags, DWORD_PTR
INT
responseLen
;
DWORD
dwBufferSize
;
INTERNET_ASYNC_RESULT
iar
;
DWORD
res
;
INTERNET_SendCallback
(
&
lpwhr
->
hdr
,
lpwhr
->
hdr
.
dwContext
,
INTERNET_STATUS_RECEIVING_RESPONSE
,
NULL
,
0
);
...
...
@@ -3757,8 +3745,13 @@ static BOOL HTTP_HttpEndRequestW(http_request_t *lpwhr, DWORD dwFlags, DWORD_PTR
INTERNET_SendCallback
(
&
lpwhr
->
hdr
,
lpwhr
->
hdr
.
dwContext
,
INTERNET_STATUS_REDIRECT
,
new_url
,
(
strlenW
(
new_url
)
+
1
)
*
sizeof
(
WCHAR
));
rc
=
HTTP_HandleRedirect
(
lpwhr
,
new_url
);
if
(
rc
)
rc
=
HTTP_HttpSendRequestW
(
lpwhr
,
NULL
,
0
,
NULL
,
0
,
0
,
TRUE
);
if
(
rc
)
{
res
=
HTTP_HttpSendRequestW
(
lpwhr
,
NULL
,
0
,
NULL
,
0
,
0
,
TRUE
);
if
(
res
!=
ERROR_SUCCESS
)
{
rc
=
FALSE
;
INTERNET_SetLastError
(
res
);
}
}
HeapFree
(
GetProcessHeap
(),
0
,
new_url
);
}
}
...
...
@@ -3937,10 +3930,10 @@ BOOL WINAPI HttpSendRequestExW(HINTERNET hRequest,
LPINTERNET_BUFFERSW
lpBuffersOut
,
DWORD
dwFlags
,
DWORD_PTR
dwContext
)
{
BOOL
ret
=
FALSE
;
http_request_t
*
lpwhr
;
http_session_t
*
lpwhs
;
appinfo_t
*
hIC
;
DWORD
res
;
TRACE
(
"(%p, %p, %p, %08x, %08lx)
\n
"
,
hRequest
,
lpBuffersIn
,
lpBuffersOut
,
dwFlags
,
dwContext
);
...
...
@@ -3949,7 +3942,7 @@ BOOL WINAPI HttpSendRequestExW(HINTERNET hRequest,
if
(
NULL
==
lpwhr
||
lpwhr
->
hdr
.
htype
!=
WH_HHTTPREQ
)
{
INTERNET_SetLastError
(
ERROR_INTERNET_INCORRECT_HANDLE_TYPE
)
;
res
=
ERROR_INTERNET_INCORRECT_HANDLE_TYPE
;
goto
lend
;
}
...
...
@@ -4002,16 +3995,16 @@ BOOL WINAPI HttpSendRequestExW(HINTERNET hRequest,
/*
* This is from windows.
*/
INTERNET_SetLastError
(
ERROR_IO_PENDING
)
;
res
=
ERROR_IO_PENDING
;
}
else
{
if
(
lpBuffersIn
)
re
t
=
HTTP_HttpSendRequestW
(
lpwhr
,
lpBuffersIn
->
lpcszHeader
,
lpBuffersIn
->
dwHeadersLength
,
re
s
=
HTTP_HttpSendRequestW
(
lpwhr
,
lpBuffersIn
->
lpcszHeader
,
lpBuffersIn
->
dwHeadersLength
,
lpBuffersIn
->
lpvBuffer
,
lpBuffersIn
->
dwBufferLength
,
lpBuffersIn
->
dwBufferTotal
,
FALSE
);
else
re
t
=
HTTP_HttpSendRequestW
(
lpwhr
,
NULL
,
0
,
NULL
,
0
,
0
,
FALSE
);
re
s
=
HTTP_HttpSendRequestW
(
lpwhr
,
NULL
,
0
,
NULL
,
0
,
0
,
FALSE
);
}
lend:
...
...
@@ -4019,7 +4012,9 @@ lend:
WININET_Release
(
&
lpwhr
->
hdr
);
TRACE
(
"<---
\n
"
);
return
ret
;
if
(
res
!=
ERROR_SUCCESS
)
SetLastError
(
res
);
return
res
==
ERROR_SUCCESS
;
}
/***********************************************************************
...
...
@@ -4098,11 +4093,9 @@ BOOL WINAPI HttpSendRequestW(HINTERNET hHttpRequest, LPCWSTR lpszHeaders,
}
else
{
BOOL
r
=
HTTP_HttpSendRequestW
(
lpwhr
,
lpszHeaders
,
res
=
HTTP_HttpSendRequestW
(
lpwhr
,
lpszHeaders
,
dwHeaderLength
,
lpOptional
,
dwOptionalLength
,
dwOptionalLength
,
TRUE
);
if
(
!
r
)
res
=
INTERNET_GetLastError
();
}
lend:
if
(
lpwhr
)
...
...
dlls/wininet/tests/http.c
View file @
c952e81a
...
...
@@ -2056,7 +2056,6 @@ static void test_http1_1(int port)
ok
(
req
!=
NULL
,
"HttpOpenRequest failed
\n
"
);
ret
=
HttpSendRequest
(
req
,
NULL
,
0
,
NULL
,
0
);
todo_wine
ok
(
ret
,
"HttpSendRequest failed
\n
"
);
}
...
...
@@ -2242,7 +2241,7 @@ static void test_response_without_headers(int port)
SetLastError
(
0xdeadbeef
);
r
=
HttpSendRequest
(
hr
,
NULL
,
0
,
NULL
,
0
);
todo_wine
ok
(
r
,
"HttpSendRequest failed %u
\n
"
,
GetLastError
());
ok
(
r
,
"HttpSendRequest failed %u
\n
"
,
GetLastError
());
count
=
0
;
memset
(
buffer
,
0
,
sizeof
buffer
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment