324 lines
11 KiB
OpenEdge ABL
324 lines
11 KiB
OpenEdge ABL
|
/********************************************************************/
|
||
|
/** Microsoft LAN Manager **/
|
||
|
/** Copyright (c) Microsoft Corporation. All rights reserved. **/
|
||
|
/********************************************************************/
|
||
|
/* :ts=4 */
|
||
|
|
||
|
//** TCPINFO.H - TDI Query/SetInfo and Action definitons.
|
||
|
//
|
||
|
// This file contains definitions for information returned from TCP/UDP.
|
||
|
//
|
||
|
|
||
|
#pragma once
|
||
|
#ifndef TCP_INFO_INCLUDED
|
||
|
#define TCP_INFO_INCLUDED
|
||
|
|
||
|
#include "ipinfo.h"
|
||
|
|
||
|
#ifndef CTE_TYPEDEFS_DEFINED
|
||
|
#define CTE_TYPEDEFS_DEFINED
|
||
|
typedef unsigned long ulong;
|
||
|
typedef unsigned short ushort;
|
||
|
typedef unsigned char uchar;
|
||
|
typedef unsigned int uint;
|
||
|
#endif // CTE_TYPEDEFS_DEFINED
|
||
|
|
||
|
typedef struct TCPStats {
|
||
|
ulong ts_rtoalgorithm;
|
||
|
ulong ts_rtomin;
|
||
|
ulong ts_rtomax;
|
||
|
ulong ts_maxconn;
|
||
|
ulong ts_activeopens;
|
||
|
ulong ts_passiveopens;
|
||
|
ulong ts_attemptfails;
|
||
|
ulong ts_estabresets;
|
||
|
ulong ts_currestab;
|
||
|
ulong ts_insegs;
|
||
|
ulong ts_outsegs;
|
||
|
ulong ts_retranssegs;
|
||
|
ulong ts_inerrs;
|
||
|
ulong ts_outrsts;
|
||
|
ulong ts_numconns;
|
||
|
} TCPStats;
|
||
|
|
||
|
#define TCP_RTO_OTHER 1
|
||
|
#define TCP_RTO_CONSTANT 2
|
||
|
#define TCP_RTO_RSRE 3
|
||
|
#define TCP_RTO_VANJ 4
|
||
|
|
||
|
#define TCP_MAXCONN_DYNAMIC -1
|
||
|
|
||
|
typedef struct UDPStats {
|
||
|
ulong us_indatagrams;
|
||
|
ulong us_noports;
|
||
|
ulong us_inerrors;
|
||
|
ulong us_outdatagrams;
|
||
|
ulong us_numaddrs;
|
||
|
} UDPStats;
|
||
|
|
||
|
typedef struct TCPConnTableEntry {
|
||
|
ulong tct_state;
|
||
|
ulong tct_localaddr;
|
||
|
ulong tct_localport;
|
||
|
ulong tct_remoteaddr;
|
||
|
ulong tct_remoteport;
|
||
|
} TCPConnTableEntry;
|
||
|
|
||
|
typedef struct TCP6ConnTableEntry {
|
||
|
struct in6_addr tct_localaddr;
|
||
|
ulong tct_localscopeid;
|
||
|
ulong tct_localport;
|
||
|
struct in6_addr tct_remoteaddr;
|
||
|
ulong tct_remotescopeid;
|
||
|
ulong tct_remoteport;
|
||
|
ulong tct_state;
|
||
|
ulong tct_owningpid;
|
||
|
} TCP6ConnTableEntry, *PTCP6ConnTableEntry;
|
||
|
|
||
|
//* Definitions for the tct_state variable.
|
||
|
#define TCP_CONN_CLOSED 1 // Closed.
|
||
|
#define TCP_CONN_LISTEN 2 // Listening.
|
||
|
#define TCP_CONN_SYN_SENT 3 // SYN Sent.
|
||
|
#define TCP_CONN_SYN_RCVD 4 // SYN received.
|
||
|
#define TCP_CONN_ESTAB 5 // Established.
|
||
|
#define TCP_CONN_FIN_WAIT1 6 // FIN-WAIT-1
|
||
|
#define TCP_CONN_FIN_WAIT2 7 // FIN-WAIT-2
|
||
|
#define TCP_CONN_CLOSE_WAIT 8 // Close waiting.
|
||
|
#define TCP_CONN_CLOSING 9 // Closing state.
|
||
|
#define TCP_CONN_LAST_ACK 10 // Last ack state.
|
||
|
#define TCP_CONN_TIME_WAIT 11 // Time wait state.
|
||
|
#define TCP_DELETE_TCB 12 // Set to delete this TCB.
|
||
|
|
||
|
|
||
|
typedef struct TCPConnTableEntryEx {
|
||
|
TCPConnTableEntry tcte_basic;
|
||
|
ulong tcte_owningpid;
|
||
|
} TCPConnTableEntryEx;
|
||
|
|
||
|
typedef struct _TCP_EX_TABLE
|
||
|
{
|
||
|
ulong dwNumEntries;
|
||
|
TCPConnTableEntryEx table[1];
|
||
|
} TCP_EX_TABLE;
|
||
|
|
||
|
typedef struct _TCP6_EX_TABLE
|
||
|
{
|
||
|
ulong dwNumEntries;
|
||
|
TCP6ConnTableEntry table[1];
|
||
|
} TCP6_EX_TABLE, *PTCP6_EX_TABLE;
|
||
|
|
||
|
|
||
|
typedef struct UDPEntry {
|
||
|
ulong ue_localaddr;
|
||
|
ulong ue_localport;
|
||
|
} UDPEntry;
|
||
|
|
||
|
typedef struct UDPEntryEx {
|
||
|
UDPEntry uee_basic;
|
||
|
ulong uee_owningpid;
|
||
|
} UDPEntryEx;
|
||
|
|
||
|
typedef struct _UDP_EX_TABLE
|
||
|
{
|
||
|
ulong dwNumEntries;
|
||
|
UDPEntryEx table[1];
|
||
|
} UDP_EX_TABLE;
|
||
|
|
||
|
typedef struct UDP6ListenerEntry {
|
||
|
struct in6_addr ule_localaddr;
|
||
|
ulong ule_localscopeid;
|
||
|
ulong ule_localport;
|
||
|
ulong ule_owningpid;
|
||
|
} UDP6ListenerEntry, *PUDP6ListenerEntry;
|
||
|
|
||
|
typedef struct _UDP6_LISTENER_TABLE
|
||
|
{
|
||
|
ulong dwNumEntries;
|
||
|
UDP6ListenerEntry table[1];
|
||
|
} UDP6_LISTENER_TABLE, *PUDP6_LISTENER_TABLE;
|
||
|
|
||
|
|
||
|
#define TCP_MIB_STAT_ID 1
|
||
|
#define UDP_MIB_STAT_ID 1
|
||
|
#define TCP_MIB_TABLE_ID 0x101
|
||
|
#define UDP_MIB_TABLE_ID 0x101
|
||
|
#define TCP_EX_TABLE_ID 0x102
|
||
|
#define UDP_EX_TABLE_ID 0x102
|
||
|
|
||
|
// Sockets based identifiers for connections.
|
||
|
|
||
|
typedef struct TCPSocketOption {
|
||
|
ulong tso_value;
|
||
|
} TCPSocketOption;
|
||
|
|
||
|
typedef struct TCPKeepalive {
|
||
|
ulong onoff;
|
||
|
ulong keepalivetime;
|
||
|
ulong keepaliveinterval;
|
||
|
} TCPKeepalive;
|
||
|
|
||
|
//* Structure passed in/returned from the SOCKET_ATMARK call. The tsa_offset
|
||
|
// field indicate how far back or forward in the data stream urgent data
|
||
|
// was or will be returned. A negative value means inline urgent data has
|
||
|
// already been given to the client, -tsa_offset bytes ago. A positive value
|
||
|
// means that inline urgent data is available tsa_offset bytes down the
|
||
|
// data stream. The tsa_size field is the size in bytes of the urgent data.
|
||
|
// This call when always return a 0 size and offset if the connection is not
|
||
|
// in the urgent inline mode.
|
||
|
|
||
|
typedef struct TCPSocketAMInfo {
|
||
|
ulong tsa_size; // Size of urgent data returned.
|
||
|
long tsa_offset; // Offset of urgent data returned.
|
||
|
} TCPSocketAMInfo;
|
||
|
|
||
|
#define TCP_SOCKET_NODELAY 1
|
||
|
#define TCP_SOCKET_KEEPALIVE 2
|
||
|
#define TCP_SOCKET_OOBINLINE 3
|
||
|
#define TCP_SOCKET_BSDURGENT 4
|
||
|
#define TCP_SOCKET_ATMARK 5
|
||
|
#define TCP_SOCKET_WINDOW 6
|
||
|
#define TCP_SOCKET_KEEPALIVE_VALS 7
|
||
|
#define TCP_SOCKET_TOS 8
|
||
|
#define TCP_SOCKET_SCALE_CWIN 9
|
||
|
|
||
|
|
||
|
// Address object identifies. All but AO_OPTION_MCASTIF take single boolean
|
||
|
// character value. That one expects a pointer to an IP address.
|
||
|
|
||
|
#define AO_OPTION_TTL 1
|
||
|
#define AO_OPTION_MCASTTTL 2
|
||
|
#define AO_OPTION_MCASTIF 3
|
||
|
#define AO_OPTION_XSUM 4
|
||
|
#define AO_OPTION_IPOPTIONS 5
|
||
|
#define AO_OPTION_ADD_MCAST 6
|
||
|
#define AO_OPTION_DEL_MCAST 7
|
||
|
#define AO_OPTION_TOS 8
|
||
|
#define AO_OPTION_IP_DONTFRAGMENT 9
|
||
|
#define AO_OPTION_MCASTLOOP 10
|
||
|
#define AO_OPTION_BROADCAST 11
|
||
|
#define AO_OPTION_IP_HDRINCL 12
|
||
|
#define AO_OPTION_RCVALL 13
|
||
|
#define AO_OPTION_RCVALL_MCAST 14
|
||
|
#define AO_OPTION_RCVALL_IGMPMCAST 15
|
||
|
#define AO_OPTION_UNNUMBEREDIF 16
|
||
|
#define AO_OPTION_IP_UCASTIF 17
|
||
|
#define AO_OPTION_ABSORB_RTRALERT 18
|
||
|
#define AO_OPTION_LIMIT_BCASTS 19
|
||
|
#define AO_OPTION_INDEX_BIND 20
|
||
|
#define AO_OPTION_INDEX_MCASTIF 21
|
||
|
#define AO_OPTION_INDEX_ADD_MCAST 22
|
||
|
#define AO_OPTION_INDEX_DEL_MCAST 23
|
||
|
#define AO_OPTION_IFLIST 24
|
||
|
#define AO_OPTION_ADD_IFLIST 25
|
||
|
#define AO_OPTION_DEL_IFLIST 26
|
||
|
#define AO_OPTION_IP_PKTINFO 27
|
||
|
#define AO_OPTION_ADD_MCAST_SRC 28
|
||
|
#define AO_OPTION_DEL_MCAST_SRC 29
|
||
|
#define AO_OPTION_MCAST_FILTER 30
|
||
|
#define AO_OPTION_BLOCK_MCAST_SRC 31
|
||
|
#define AO_OPTION_UNBLOCK_MCAST_SRC 32
|
||
|
#define AO_OPTION_UDP_CKSUM_COVER 33
|
||
|
#define AO_OPTION_WINDOW 34
|
||
|
#define AO_OPTION_SCALE_CWIN 35
|
||
|
#define AO_OPTION_RCV_HOPLIMIT 36
|
||
|
#define AO_OPTION_UNBIND 37
|
||
|
#define AO_OPTION_PROTECT 38
|
||
|
|
||
|
// Values used with AO_OPTION_RCVALL*
|
||
|
// These must match the values defined in mstcpip.h
|
||
|
#define RCVALL_OFF 0
|
||
|
#define RCVALL_ON 1
|
||
|
#define RCVALL_SOCKETLEVELONLY 2
|
||
|
|
||
|
// Values used with AO_OPTION_PROTECT
|
||
|
// These must match the values defined in ws2tcpip.h
|
||
|
#define PROTECTION_LEVEL_UNRESTRICTED 10 // For peer-to-peer apps.
|
||
|
#define PROTECTION_LEVEL_DEFAULT 20 // Default level.
|
||
|
#define PROTECTION_LEVEL_RESTRICTED 30 // For Intranet apps.
|
||
|
|
||
|
//* Information relating to setting/deleting IP multicast addresses.
|
||
|
typedef struct UDPMCastReq {
|
||
|
ulong umr_addr; // MCast address to add/delete.
|
||
|
ulong umr_if; // I/F on which to join.
|
||
|
} UDPMCastReq;
|
||
|
|
||
|
//* Information relating to setting/deleting IP multicast source/group
|
||
|
// addresses. This must match ip_mreq_source.
|
||
|
typedef struct UDPMCastSrcReq {
|
||
|
ulong umr_addr; // MCast address to add/delete.
|
||
|
ulong umr_src; // Source address to add/delete.
|
||
|
ulong umr_if; // I/F on which to join.
|
||
|
} UDPMCastSrcReq;
|
||
|
|
||
|
//* Information relating to setting/deleting IP multicast source filters.
|
||
|
// This must match ip_msfilter.
|
||
|
typedef struct UDPMCastFilter {
|
||
|
ulong umf_addr; // MCast address to apply source to.
|
||
|
ulong umf_if; // I/F on which to join.
|
||
|
ulong umf_fmode; // Filter mode (TRUE=exclude)
|
||
|
ulong umf_numsrc; // Number of sources.
|
||
|
ulong umf_srclist[1]; // Source array.
|
||
|
} UDPMCastFilter;
|
||
|
|
||
|
#define UDPMCAST_FILTER_SIZE(numsrc) \
|
||
|
((ulong)FIELD_OFFSET (UDPMCastFilter, umf_srclist[numsrc]))
|
||
|
|
||
|
//* Structure defining what is passed in to AO_OPTION_MCASTIF request.
|
||
|
typedef struct UDPMCastIFReq {
|
||
|
IPAddr umi_addr;
|
||
|
} UDPMCastIFReq;
|
||
|
|
||
|
|
||
|
//* Structures used in security filter enumeration.
|
||
|
// All values are in HOST byte order!!!
|
||
|
typedef struct TCPSecurityFilterEntry {
|
||
|
ulong tsf_address; // IP interface address
|
||
|
ulong tsf_protocol; // Transport protocol number
|
||
|
ulong tsf_value; // Transport filter value (e.g. TCP port)
|
||
|
} TCPSecurityFilterEntry;
|
||
|
|
||
|
typedef struct TCPSecurityFilterEnum {
|
||
|
ULONG tfe_entries_returned; // The number of TCPSecurityFilterEntry structs
|
||
|
// returned in the subsequent array.
|
||
|
|
||
|
ULONG tfe_entries_available; // The number of TCPSecurityFilterEntry structs
|
||
|
// currently available from the transport.
|
||
|
} TCPSecurityFilterEnum;
|
||
|
|
||
|
//* Structures used in connection list enumeration.
|
||
|
// All values are in HOST byte order!!!
|
||
|
typedef struct TCPConnectionListEntry {
|
||
|
IPAddr tcf_address; // IP address
|
||
|
uint tcf_ticks; // Tick Count remaining
|
||
|
} TCPConnectionListEntry;
|
||
|
|
||
|
typedef struct TCPConnectionListEnum {
|
||
|
ULONG tce_entries_returned; // The number of TCPConnectionListEntry structs
|
||
|
// returned in the subsequent array.
|
||
|
|
||
|
ULONG tce_entries_available; // The number of TCPConnectionListEntry structs
|
||
|
// currently available from the transport.
|
||
|
} TCPConnectionListEnum;
|
||
|
|
||
|
|
||
|
//* Connection Callback object for TCP.
|
||
|
#define TCP_CCB_NAME L"\\Callback\\TcpConnectionCallback"
|
||
|
|
||
|
//* Address information for TCP connections.
|
||
|
typedef struct TCPAddrInfo {
|
||
|
ulong tai_daddr; // Destination IP address.
|
||
|
ulong tai_saddr; // Source IP address.
|
||
|
ushort tai_dport; // Destination port.
|
||
|
ushort tai_sport; // Source port.
|
||
|
} TCPAddrInfo;
|
||
|
|
||
|
//* Connection callback information for TCP connections.
|
||
|
typedef struct TCPCcbInfo {
|
||
|
ulong tci_prevstate; // Previous state.
|
||
|
ulong tci_currstate; // Current state.
|
||
|
ulong tci_incomingif; // Incoming interface id.
|
||
|
TCPAddrInfo *tci_connaddr; // Connection addres pointer.
|
||
|
} TCPCcbInfo;
|
||
|
|
||
|
#endif // TCP_INFO_INCLUDED
|