It breaks internet connections.
svn path=/trunk/; revision=64628
return NO_ERROR;
}
-static
-void
-GetTdiTypeId(
- _In_ INT Level,
- _In_ INT OptionName,
- _Out_ PULONG TdiType,
- _Out_ PULONG TdiId)
+UINT
+GetAddressOption(INT Level, INT OptionName)
{
switch (Level)
{
case SOL_SOCKET:
- *TdiType = INFO_TYPE_ADDRESS_OBJECT;
switch (OptionName)
{
case SO_KEEPALIVE:
break;
case IPPROTO_IP:
- *TdiType = INFO_TYPE_ADDRESS_OBJECT;
switch (OptionName)
{
case IP_TTL:
- *TdiId = AO_OPTION_TTL;
- return;
+ return AO_OPTION_TTL;
case IP_DONTFRAGMENT:
- *TdiId = AO_OPTION_IP_DONTFRAGMENT;
- return;
+ return AO_OPTION_IP_DONTFRAGMENT;
#if 0
case IP_RECEIVE_BROADCAST:
- *TdiId = AO_OPTION_BROADCAST;
- return;
+ return AO_OPTION_BROADCAST;
#endif
case IP_HDRINCL:
- *TdiId = AO_OPTION_IP_HDRINCL;
- return;
+ return AO_OPTION_IP_HDRINCL;
default:
break;
case IPPROTO_TCP:
switch (OptionName)
{
- *TdiType = INFO_TYPE_CONNECTION;
case TCP_NODELAY:
- *TdiId = TCP_SOCKET_NODELAY;
- return;
+ /* FIXME: Return proper option */
+ ASSERT(FALSE);
+ break;
default:
break;
}
}
DPRINT1("Unknown level/option name: %d %d\n", Level, OptionName);
- *TdiType = 0;
- *TdiId = 0;
+ return 0;
}
INT
IN INT OptionLength)
{
PSOCKET_CONTEXT Context = HelperDllSocketContext;
- ULONG TdiType, TdiId;
+ UINT RealOptionName;
INT Status;
PTCP_REQUEST_SET_INFORMATION_EX Info;
PQUEUED_REQUEST Queued, NextQueued;
switch (OptionName)
{
case TCP_NODELAY:
- if (OptionLength < sizeof(CHAR))
- {
- return WSAEFAULT;
- }
- break;
+ /* FIXME -- Send this to TCPIP */
+ DPRINT1("Set: TCP_NODELAY not yet supported\n");
+ return 0;
default:
/* Invalid option */
}
/* If we get here, GetAddressOption must return something valid */
- GetTdiTypeId(Level, OptionName, &TdiId, &TdiType);
- ASSERT((TdiId != 0) && (TdiType != 0));
+ RealOptionName = GetAddressOption(Level, OptionName);
+ ASSERT(RealOptionName != 0);
Info = HeapAlloc(GetProcessHeap(), 0, sizeof(*Info) + OptionLength);
if (!Info)
Info->ID.toi_entity.tei_entity = Context->AddrFileEntityType;
Info->ID.toi_entity.tei_instance = Context->AddrFileInstance;
Info->ID.toi_class = INFO_CLASS_PROTOCOL;
- Info->ID.toi_type = TdiType;
- Info->ID.toi_id = TdiId;
+ Info->ID.toi_type = INFO_TYPE_ADDRESS_OBJECT;
+ Info->ID.toi_id = RealOptionName;
Info->BufferSize = OptionLength;
memcpy(Info->Buffer, OptionValue, OptionLength);
datalink/lan.c
tcpip/ainfo.c
tcpip/buffer.c
- tcpip/cinfo.c
tcpip/dispatch.c
tcpip/fileobjs.c
tcpip/iinfo.c
PVOID Buffer,
PUINT BufferSize);
-TDI_STATUS SetConnectionInfo(TDIObjectID *ID,
- PCONNECTION_ENDPOINT Connection,
- PVOID Buffer,
- UINT BufferSize);
-
/* Insert and remove entities */
VOID InsertTDIInterfaceEntity( PIP_INTERFACE Interface );
BOOLEAN TCPRemoveIRP( PCONNECTION_ENDPOINT Connection, PIRP Irp );
-NTSTATUS TCPSetNoDelay(PCONNECTION_ENDPOINT Connection, BOOLEAN Set);
-
VOID
TCPUpdateInterfaceLinkStatus(PIP_INTERFACE IF);
+++ /dev/null
-/*
- * COPYRIGHT: See COPYING in the top level directory
- * PROJECT: ReactOS TCP/IP protocol driver
- * FILE: tcpip/cinfo.c
- * PURPOSE: Per-socket connection information.
- * PROGRAMMER: Jérôme Gardou
- */
-
-#include "precomp.h"
-
-TDI_STATUS SetConnectionInfo(TDIObjectID *ID,
- PCONNECTION_ENDPOINT Connection,
- PVOID Buffer,
- UINT BufferSize)
-{
- ASSERT(ID->toi_type == INFO_TYPE_CONNECTION);
- switch (ID->toi_id)
- {
- case TCP_SOCKET_NODELAY:
- {
- BOOLEAN Set;
- if (BufferSize < sizeof(BOOLEAN))
- return TDI_INVALID_PARAMETER;
- Set = *(BOOLEAN*)Buffer;
- return TCPSetNoDelay(Connection, Set);
- }
- default:
- DbgPrint("TCPIP: Unknown connection info ID: %u.\n", ID->toi_id);
- }
-
- return TDI_INVALID_PARAMETER;
-}
switch (ID->toi_class)
{
case INFO_CLASS_PROTOCOL:
- switch (ID->toi_type)
+ if (ID->toi_type == INFO_TYPE_ADDRESS_OBJECT)
{
- case INFO_TYPE_ADDRESS_OBJECT:
- {
- if ((EntityListContext = GetContext(ID->toi_entity)))
- return SetAddressFileInfo(ID, EntityListContext, Buffer, BufferSize);
- else
- return TDI_INVALID_PARAMETER;
- }
- case INFO_TYPE_CONNECTION:
- {
- PADDRESS_FILE AddressFile = GetContext(ID->toi_entity);
- if (AddressFile == NULL)
- return TDI_INVALID_PARAMETER;
- return SetConnectionInfo(ID, AddressFile->Connection, Buffer, BufferSize);
- }
- default:
- DbgPrint("TCPIP: IOCTL_TCP_SET_INFORMATION_EX - Unrecognized information type for INFO_CLASS_PROTOCOL: 0x%#x.\n", ID->toi_type);
- return TDI_INVALID_PARAMETER;
+ if ((EntityListContext = GetContext(ID->toi_entity)))
+ return SetAddressFileInfo(ID, EntityListContext, Buffer, BufferSize);
+ else
+ return TDI_INVALID_PARAMETER;
}
switch (ID->toi_id)
#define AO_OPTION_UNBIND 37
#define AO_OPTION_PROTECT 38
-/* TCP connection options */
-#define TCP_SOCKET_NODELAY 1
-
typedef struct IFEntry
{
ULONG if_index;
return Found;
}
-NTSTATUS
-TCPSetNoDelay(
- PCONNECTION_ENDPOINT Connection,
- BOOLEAN Set)
-{
- if (Connection->SocketContext == NULL)
- return STATUS_UNSUCCESSFUL;
- LibTCPSetNoDelay(Connection->SocketContext, Set);
- return STATUS_SUCCESS;
-}
-
-
/* EOF */
err_t LibTCPGetPeerName(PTCP_PCB pcb, struct ip_addr *const ipaddr, u16_t *const port);
err_t LibTCPGetHostName(PTCP_PCB pcb, struct ip_addr *const ipaddr, u16_t *const port);
void LibTCPAccept(PTCP_PCB pcb, struct tcp_pcb *listen_pcb, void *arg);
-void LibTCPSetNoDelay(PTCP_PCB pcb, BOOLEAN Set);
/* IP functions */
void LibIPInsertPacket(void *ifarg, const void *const data, const u32_t size);
void LibIPInitialize(void);
void LibIPShutdown(void);
-#endif
+#endif
\ No newline at end of file
return ERR_OK;
}
-
-void
-LibTCPSetNoDelay(
- PTCP_PCB pcb,
- BOOLEAN Set)
-{
- if (Set)
- pcb->flags |= TF_NODELAY;
- else
- pcb->flags &= ~TF_NODELAY;
-}