Module: wine Branch: refs/heads/master Commit: 8b1b3818726c967b27cf938aa312cd317578f282 URL: http://source.winehq.org/git/?p=wine.git;a=commit;h=8b1b3818726c967b27cf938a...
Author: Paul Chitescu pchitescu@voip.null.ro Date: Tue Aug 8 23:37:41 2006 +0300
wininet: MSG_WAITALL support in NETCON_recv with SSL.
---
dlls/wininet/netconnection.c | 11 ++++++++++- 1 files changed, 10 insertions(+), 1 deletions(-)
diff --git a/dlls/wininet/netconnection.c b/dlls/wininet/netconnection.c index 42fc9fe..d491724 100644 --- a/dlls/wininet/netconnection.c +++ b/dlls/wininet/netconnection.c @@ -511,7 +511,7 @@ BOOL NETCON_recv(WININET_NETCONNECTION * else { #if defined HAVE_OPENSSL_SSL_H && defined HAVE_OPENSSL_ERR_H - if (flags & (~MSG_PEEK)) + if (flags & ~(MSG_PEEK|MSG_WAITALL)) FIXME("SSL_read does not support the following flag: %08x\n", flags);
/* this ugly hack is all for MSG_PEEK. eww gross */ @@ -538,6 +538,15 @@ #if defined HAVE_OPENSSL_SSL_H && define HeapFree(GetProcessHeap(), 0, connection->peek_msg_mem); connection->peek_msg_mem = NULL; connection->peek_msg = NULL; + /* check if the peek buffer held too few data */ + if ((flags & MSG_WAITALL) && (*recvd < len)) + { + int recv2 = 0; + /* recursive call - but now the peek buffer is empty */ + if (!NETCON_recv(connection, (char*)buf + *recvd, len - *recvd, flags, &recv2)) + return FALSE; + *recvd += recv2; + } } return TRUE; }