* REVISIONS:
* CSH 01/09-2000 Created
*/
-#include <wshtcpip.h>
+#include "wshtcpip.h"
#define NDEBUG
#include <debug.h>
OUT PSOCKADDR Sockaddr,
OUT PINT SockaddrLength)
{
- DWORD Size = 2 * sizeof(UINT);
+ INT Size = 2 * sizeof(UINT);
if (*SockaddrLength < Size)
{
{
switch (Level)
{
+ case SOL_SOCKET:
+ switch (OptionName)
+ {
+ case SO_KEEPALIVE:
+ /* FIXME: Return proper option */
+ ASSERT(FALSE);
+ break;
+ default:
+ break;
+ }
+ break;
+
case IPPROTO_IP:
switch (OptionName)
{
return AO_OPTION_IP_HDRINCL;
default:
- DPRINT1("Unknown option name for IPPROTO_IP: %d\n", OptionName);
- return 0;
+ break;
}
break;
+ case IPPROTO_TCP:
+ switch (OptionName)
+ {
+ case TCP_NODELAY:
+ /* FIXME: Return proper option */
+ ASSERT(FALSE);
+ break;
+ default:
+ break;
+ }
+
default:
- DPRINT1("Unknown level: %d\n", Level);
- return 0;
+ break;
}
+
+ DPRINT1("Unknown level/option name: %d %d\n", Level, OptionName);
+ return 0;
}
INT
{
UNIMPLEMENTED
+ DPRINT1("Get: Unknown level/option name: %d %d\n", Level, OptionName);
+
+ *OptionLength = 0;
+
return NO_ERROR;
}
OUT PSOCKADDR Sockaddr,
OUT PINT SockaddrLength)
{
- DWORD Size = 2 * sizeof(UINT);
+ INT Size = 2 * sizeof(UINT);
if (*SockaddrLength < Size)
{
{
UNIMPLEMENTED
+ DPRINT1("Ioctl: Unknown IOCTL code: %d\n", IoControlCode);
+
return NO_ERROR;
}
}
Context->RequestQueue = NULL;
break;
-
+
default:
DPRINT1("Unwanted notification received! (%d)\n", NotifyEvent);
break;
UNICODE_STRING TcpDeviceName = RTL_CONSTANT_STRING(DD_TCP_DEVICE_NAME);
UNICODE_STRING UdpDeviceName = RTL_CONSTANT_STRING(DD_UDP_DEVICE_NAME);
UNICODE_STRING RawDeviceName = RTL_CONSTANT_STRING(DD_RAW_IP_DEVICE_NAME);
- NTSTATUS Status;
DPRINT("WSHOpenSocket2 called\n");
return WSAENOBUFS;
/* Append the transport device name */
- Status = RtlAppendUnicodeStringToString(TransportDeviceName, &String);
+ RtlAppendUnicodeStringToString(TransportDeviceName, &String);
if (*SocketType == SOCK_RAW) {
/* Append a separator */
String.Length = 0;
String.MaximumLength = TransportDeviceName->MaximumLength - TransportDeviceName->Length;
- Status = RtlIntegerToUnicodeString((ULONG)*Protocol, 10, &String);
+ RtlIntegerToUnicodeString((ULONG)*Protocol, 10, &String);
TransportDeviceName->Length += String.Length;
}
/* FIXME: We only handle address file object here */
- RealOptionName = GetAddressOption(Level, OptionName);
+ switch (Level)
+ {
+ case SOL_SOCKET:
+ switch (OptionName)
+ {
+ case SO_DONTROUTE:
+ if (OptionLength < sizeof(BOOL))
+ {
+ return WSAEFAULT;
+ }
+ Context->DontRoute = *(BOOL*)OptionValue;
+ /* This is silently ignored on Windows */
+ return 0;
+
+ case SO_KEEPALIVE:
+ /* FIXME -- We'll send this to TCPIP */
+ DPRINT1("Set: SO_KEEPALIVE not yet supported\n");
+ return 0;
+
+ default:
+ /* Invalid option */
+ DPRINT1("Set: Received unexpected SOL_SOCKET option %d\n", OptionName);
+ return WSAENOPROTOOPT;
+ }
+ break;
+
+ case IPPROTO_IP:
+ switch (OptionName)
+ {
+ case IP_TTL:
+ case IP_DONTFRAGMENT:
+ case IP_HDRINCL:
+ /* Send these to TCPIP */
+ break;
+
+ default:
+ /* Invalid option -- FIXME */
+ DPRINT1("Set: Received unsupported IPPROTO_IP option %d\n", OptionName);
+ return 0;
+ }
+ break;
+
+ case IPPROTO_TCP:
+ switch (OptionName)
+ {
+ case TCP_NODELAY:
+ /* FIXME -- Send this to TCPIP */
+ DPRINT1("Set: TCP_NODELAY not yet supported\n");
+ return 0;
+
+ default:
+ /* Invalid option */
+ DPRINT1("Set: Received unexpected IPPROTO_TCP option %d\n", OptionName);
+ return 0;
+ }
+ break;
- /* FIXME: Support all options */
- if (!RealOptionName)
- return 0; /* return WSAEINVAL; */
+ default:
+ DPRINT1("Set: Received unexpected %d option %d\n", Level, OptionName);
+ return 0;
+ }
+
+ /* If we get here, GetAddressOption must return something valid */
+ RealOptionName = GetAddressOption(Level, OptionName);
+ ASSERT(RealOptionName != 0);
Info = HeapAlloc(GetProcessHeap(), 0, sizeof(*Info) + OptionLength);
if (!Info)