mirror of
https://github.com/reactos/reactos.git
synced 2025-07-23 13:03:47 +00:00
[MSAFD]
- Add more option support to WSPGetSockOpt and WSPSetSockOpt - Return the correct error code for an unsupported option in WSPGetSockOpt - Hack a SO_ERROR get handler together for apps that need it - Add better unsupported protoopts debugging (particularly for getsockopt) - SMPlayer can now stream media from the Internet :) svn path=/trunk/; revision=57094
This commit is contained in:
parent
8b45c713bf
commit
f2112ca452
1 changed files with 78 additions and 20 deletions
|
@ -2052,6 +2052,7 @@ WSPGetSockOpt(IN SOCKET Handle,
|
|||
PVOID Buffer;
|
||||
INT BufferSize;
|
||||
BOOL BoolBuffer;
|
||||
INT IntBuffer;
|
||||
|
||||
/* Get the Socket Structure associate to this Socket*/
|
||||
Socket = GetSocketStructure(Handle);
|
||||
|
@ -2112,21 +2113,46 @@ WSPGetSockOpt(IN SOCKET Handle,
|
|||
BufferSize = sizeof(struct linger);
|
||||
break;
|
||||
|
||||
/* case SO_CONDITIONAL_ACCEPT: */
|
||||
case SO_OOBINLINE:
|
||||
BoolBuffer = (Socket->SharedData.OobInline != 0);
|
||||
Buffer = &BoolBuffer;
|
||||
BufferSize = sizeof(BOOL);
|
||||
break;
|
||||
|
||||
case SO_KEEPALIVE:
|
||||
case SO_DONTROUTE:
|
||||
/* These guys go directly to the helper */
|
||||
goto SendToHelper;
|
||||
|
||||
case SO_CONDITIONAL_ACCEPT:
|
||||
BoolBuffer = (Socket->SharedData.UseDelayedAcceptance != 0);
|
||||
Buffer = &BoolBuffer;
|
||||
BufferSize = sizeof(BOOL);
|
||||
break;
|
||||
|
||||
case SO_REUSEADDR:
|
||||
BoolBuffer = (Socket->SharedData.ReuseAddresses != 0);
|
||||
Buffer = &BoolBuffer;
|
||||
BufferSize = sizeof(BOOL);
|
||||
break;
|
||||
|
||||
case SO_ERROR:
|
||||
/* HACK: This needs to be properly tracked */
|
||||
IntBuffer = 0;
|
||||
DbgPrint("MSAFD: Hacked SO_ERROR returning error %d\n", IntBuffer);
|
||||
|
||||
Buffer = &IntBuffer;
|
||||
BufferSize = sizeof(INT);
|
||||
break;
|
||||
|
||||
case SO_GROUP_ID:
|
||||
case SO_GROUP_PRIORITY:
|
||||
case SO_KEEPALIVE:
|
||||
case SO_MAX_MSG_SIZE:
|
||||
case SO_OOBINLINE:
|
||||
case SO_PROTOCOL_INFO:
|
||||
case SO_REUSEADDR:
|
||||
AFD_DbgPrint(MID_TRACE, ("Unimplemented option (%x)\n",
|
||||
OptionName));
|
||||
|
||||
default:
|
||||
*lpErrno = WSAEINVAL;
|
||||
DbgPrint("MSAFD: Get unknown optname %x\n", OptionName);
|
||||
*lpErrno = WSAENOPROTOOPT;
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
|
||||
|
@ -2140,18 +2166,20 @@ WSPGetSockOpt(IN SOCKET Handle,
|
|||
|
||||
return 0;
|
||||
|
||||
case IPPROTO_TCP: /* FIXME */
|
||||
default:
|
||||
*lpErrno = Socket->HelperData->WSHGetSocketInformation(Socket->HelperContext,
|
||||
Handle,
|
||||
Socket->TdiAddressHandle,
|
||||
Socket->TdiConnectionHandle,
|
||||
Level,
|
||||
OptionName,
|
||||
OptionValue,
|
||||
(LPINT)OptionLength);
|
||||
return (*lpErrno == 0) ? 0 : SOCKET_ERROR;
|
||||
break;
|
||||
}
|
||||
|
||||
SendToHelper:
|
||||
*lpErrno = Socket->HelperData->WSHGetSocketInformation(Socket->HelperContext,
|
||||
Handle,
|
||||
Socket->TdiAddressHandle,
|
||||
Socket->TdiConnectionHandle,
|
||||
Level,
|
||||
OptionName,
|
||||
OptionValue,
|
||||
(LPINT)OptionLength);
|
||||
return (*lpErrno == 0) ? 0 : SOCKET_ERROR;
|
||||
}
|
||||
|
||||
INT
|
||||
|
@ -2220,13 +2248,43 @@ WSPSetSockOpt(
|
|||
AFD_DbgPrint(MIN_TRACE,("Setting send buf to %x is not implemented yet\n", optval));
|
||||
return 0;
|
||||
|
||||
case SO_SNDTIMEO:
|
||||
if (optlen < sizeof(DWORD))
|
||||
{
|
||||
*lpErrno = WSAEFAULT;
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
|
||||
RtlCopyMemory(&Socket->SharedData.SendTimeout,
|
||||
optval,
|
||||
sizeof(DWORD));
|
||||
return 0;
|
||||
|
||||
case SO_RCVTIMEO:
|
||||
if (optlen < sizeof(DWORD))
|
||||
{
|
||||
*lpErrno = WSAEFAULT;
|
||||
return SOCKET_ERROR;
|
||||
}
|
||||
|
||||
RtlCopyMemory(&Socket->SharedData.RecvTimeout,
|
||||
optval,
|
||||
sizeof(DWORD));
|
||||
return 0;
|
||||
|
||||
case SO_KEEPALIVE:
|
||||
case SO_DONTROUTE:
|
||||
/* These go directly to the helper dll */
|
||||
goto SendToHelper;
|
||||
|
||||
default:
|
||||
AFD_DbgPrint(MIN_TRACE,("Unknown optname %x\n", optname));
|
||||
break;
|
||||
/* Obviously this is a hack */
|
||||
DbgPrint("MSAFD: Set unknown optname %x\n", optname);
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
SendToHelper:
|
||||
*lpErrno = Socket->HelperData->WSHSetSocketInformation(Socket->HelperContext,
|
||||
s,
|
||||
Socket->TdiAddressHandle,
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue