aboutsummaryrefslogtreecommitdiff
path: root/SrcShared/Palm/Platform/Incs/Core/System/NetMgr.h
diff options
context:
space:
mode:
Diffstat (limited to 'SrcShared/Palm/Platform/Incs/Core/System/NetMgr.h')
-rw-r--r--SrcShared/Palm/Platform/Incs/Core/System/NetMgr.h1515
1 files changed, 1515 insertions, 0 deletions
diff --git a/SrcShared/Palm/Platform/Incs/Core/System/NetMgr.h b/SrcShared/Palm/Platform/Incs/Core/System/NetMgr.h
new file mode 100644
index 0000000..ba0064e
--- /dev/null
+++ b/SrcShared/Palm/Platform/Incs/Core/System/NetMgr.h
@@ -0,0 +1,1515 @@
+/******************************************************************************
+ *
+ * Copyright (c) 1996-1999 Palm Computing, Inc. or its subsidiaries.
+ * All rights reserved.
+ *
+ * File: NetMgr.h
+ *
+ * Description:
+ * This module contains the interface definition for the TCP/IP
+ * library on Pilot.
+ *
+ * History:
+ * 2/14/96 Created by Ron Marianetti
+ * Name Date Description
+ * ---- ---- -----------
+ * jrb 3/13/98 Removed NetIFSettings that are Mobitex specific.
+ * Added RadioStateEnum for the setting.
+ * Added NetIFSettingSpecificMobitex
+ * Added what are considered "generic" wirless settings.
+ * jaq 10/1/98 added netMaxIPAddrStrLen constant
+ * scl 3/ 5/99 integrated Eleven's changes into Main
+ *
+ *****************************************************************************/
+
+#ifndef __NETMGR_H__
+#define __NETMGR_H__
+
+#include <PalmTypes.h>
+#include <LibTraps.h>
+#include <SysEvent.h>
+
+// Get rid of warnings about unused pragmas when compiling with
+// Visual C
+#ifdef _MSC_VER
+#pragma warning( disable : 4068)
+#endif
+
+/********************************************************************
+ * Type and creator of Net Library database
+ ********************************************************************/
+
+// Creator. Used for both the database that contains the Net Library and
+// it's preferences database.
+#define netCreator 'netl' // Our Net Library creator
+
+// Feature Creators and numbers, for use with the FtrGet() call. This
+// feature can be obtained to get the current version of the Net Library
+#define netFtrCreator netCreator
+#define netFtrNumVersion 0 // get version of Net Library
+ // 0xMMmfsbbb, where MM is major version, m is minor version
+ // f is bug fix, s is stage: 3-release,2-beta,1-alpha,0-development,
+ // bbb is build number for non-releases
+ // V1.12b3 would be: 0x01122003
+ // V2.00a2 would be: 0x02001002
+ // V1.01 would be: 0x01013000
+
+
+// Types. Used to identify the Net Library from it's prefs.
+#define netLibType 'libr' // Our Net Code Resources Database type
+#define netPrefsType 'rsrc' // Our Net Preferences Database type
+
+
+// All Network interface's have the following type:
+#define netIFFileType 'neti' // The filetype of all Network Interfaces
+
+// Each Network interface has a unique creator:
+#define netIFCreatorLoop 'loop' // Loopback network interface creator.
+#define netIFCreatorSLIP 'slip' // SLIP network interface creator.
+#define netIFCreatorPPP 'ppp_' // PPP network interface creator.
+//<chg 1-28-98 RM>
+#define netIFCreatorRAM 'ram_' // Mobitex network interface creator
+
+
+// Special value for configIndex parameter to NetLibOpenConfig that tells it
+// to use the current settings - even if they are not the defined default settings
+// This is provided for testing purposes
+#define netConfigIndexCurSettings 0xFFFF
+
+// <SCL 3/5/99> Commented out netMaxNetIFs since Tim says it should NOT be here!!
+// Still need to fix (Eleven) code that currently depends on it...
+// Max # of interfaces that can be installed
+//#define netMaxNetIFs 4
+
+
+//-----------------------------------------------------------------------------
+// Misc. constants
+//-----------------------------------------------------------------------------
+#define netDrvrTypeNameLen 8 // Maximum driver type length
+#define netDrvrHWNameLen 16 // Maximum driver hardware name length
+#define netIFNameLen 10 // Maximum interface name (driver type + instance num)
+#define netIFMaxHWAddrLen 14 // Maximum size of a hardware address
+#define netMaxIPAddrStrLen 16 // Max length of an IP address string with null terminator (255.255.255.255)
+
+
+
+//-----------------------------------------------------------------------------
+// Names of built-in configuration aliases available through the
+// NetLibConfigXXX calls
+//-----------------------------------------------------------------------------
+#define netCfgNameDefault ".Default" // The default configuration
+#define netCfgNameDefWireline ".DefWireline" // The default wireline configuration
+#define netCfgNameDefWireless ".DefWireless" // The default wireless configuration
+#define netCfgNameCTPWireline ".CTPWireline" // Wireline through the Jerry Proxy
+#define netCfgNameCTPWireless ".CTPWireless" // Wireless through the Jerry Proxy
+
+
+//-----------------------------------------------------------------------------
+//Flags for the NetUWirelessAppHandleEvent() utility routine
+//-----------------------------------------------------------------------------
+#define netWLAppEventFlagCTPOnly 0x00000001 // using wireless radio for CTP protocol only
+#define netWLAppEventFlagDisplayErrs 0x00000002 // Show error alerts for any errors
+
+//-----------------------------------------------------------------------------
+// Option constants that can be passed to NetSocketOptionSet and NetSocketOptionGet
+// When an option is set or retrieved, both the level of the option and the
+// option number must be specified. The level refers to which layer the option
+// refers to, like the uppermost socket layer, for example.
+//-----------------------------------------------------------------------------
+
+// Socket level options
+typedef enum {
+ // IP Level options
+ netSocketOptIPOptions = 1, // options in IP header (IP_OPTIONS)
+
+ // TCP Level options
+ netSocketOptTCPNoDelay = 1, // don't delay send to coalesce packets
+ netSocketOptTCPMaxSeg = 2, // TCP maximum segment size (TCP_MAXSEG)
+
+ // Socket level options
+ netSocketOptSockDebug = 0x0001, // turn on debugging info recording
+ netSocketOptSockAcceptConn = 0x0002, // socket has had listen
+ netSocketOptSockReuseAddr = 0x0004, // allow local address reuse
+ netSocketOptSockKeepAlive = 0x0008, // keep connections alive
+ netSocketOptSockDontRoute = 0x0010, // just use interface addresses
+ netSocketOptSockBroadcast = 0x0020, // permit sending of broadcast msgs
+ netSocketOptSockUseLoopback = 0x0040, // bypass hardware when possible
+ netSocketOptSockLinger = 0x0080, // linger on close if data present
+ netSocketOptSockOOBInLine = 0x0100, // leave received OutOfBand data in line
+
+ netSocketOptSockSndBufSize = 0x1001, // send buffer size
+ netSocketOptSockRcvBufSize = 0x1002, // receive buffer size
+ netSocketOptSockSndLowWater = 0x1003, // send low-water mark
+ netSocketOptSockRcvLowWater = 0x1004, // receive low-water mark
+ netSocketOptSockSndTimeout = 0x1005, // send timeout
+ netSocketOptSockRcvTimeout = 0x1006, // receive timeout
+ netSocketOptSockErrorStatus= 0x1007, // get error status and clear
+ netSocketOptSockSocketType = 0x1008, // get socket type
+
+ // The following are Pilot specific options
+ netSocketOptSockNonBlocking = 0x2000, // set non-blocking mode on or off
+ netSocketOptSockRequireErrClear = 0x2001, // return error from all further calls to socket
+ // unless netSocketOptSockErrorStatus is cleared.
+ netSocketOptSockMultiPktAddr = 0x2002 // for SOCK_RDM (RMP) sockets. This is the
+ // fixed IP addr (i.e. Mobitex MAN #) to use
+ // for multiple packet requests.
+ } NetSocketOptEnum;
+
+
+
+
+// Option levels for SocketOptionSet and SocketOptionGet
+typedef enum {
+ netSocketOptLevelIP = 0, // IP level options (IPPROTO_IP)
+ netSocketOptLevelTCP = 6, // TCP level options (IPPROTO_TCP)
+ netSocketOptLevelSocket = 0xFFFF // Socket level options (SOL_SOCKET)
+ } NetSocketOptLevelEnum;
+
+
+// Structure used for manipulating the linger option
+typedef struct {
+ Int16 onOff; // option on/off
+ Int16 time; // linger time in seconds
+ } NetSocketLingerType;
+
+//-----------------------------------------------------------------------------
+// Enumeration of Socket domains and types passed to NetSocketOpen
+//-----------------------------------------------------------------------------
+typedef enum {
+ netSocketAddrRaw=0, // (AF_UNSPEC, AF_RAW)
+ netSocketAddrINET=2 // (AF_INET)
+ } NetSocketAddrEnum;
+
+typedef enum {
+ netSocketTypeStream=1, // (SOCK_STREAM)
+ netSocketTypeDatagram=2, // (SOCK_DGRAM)
+ netSocketTypeRaw=3, // (SOCK_RAW)
+ netSocketTypeReliableMsg=4, // (SOCK_RDM)
+ netSocketTypeLicensee=8 // Socket entry reserved for licensees.
+ } NetSocketTypeEnum;
+
+// Protocols, passed in the protocol parameter to NetLibSocketOpen
+#define netSocketProtoIPICMP 1 // IPPROTO_ICMP
+#define netSocketProtoIPTCP 6 // IPPROTO_TCP
+#define netSocketProtoIPUDP 17 // IPPROTO_UDP
+#define netSocketProtoIPRAW 255 // IPPROTO_RAW
+
+
+//-----------------------------------------------------------------------------
+// Enumeration of Socket direction, passed to NetSocketShutdown
+//-----------------------------------------------------------------------------
+typedef enum {
+ netSocketDirInput=0,
+ netSocketDirOutput=1,
+ netSocketDirBoth=2
+ } NetSocketDirEnum;
+
+
+//-----------------------------------------------------------------------------
+// Basic Types
+//-----------------------------------------------------------------------------
+// Socket refnum
+typedef Int16 NetSocketRef;
+
+// Type used to hold internet addresses
+typedef UInt32 NetIPAddr; // a 32-bit IP address.
+
+
+
+//-----------------------------------------------------------------------------
+// Structure used to hold an internet socket address. This includes the internet
+// address and the port number. This structure directly maps to the BSD unix
+// struct sockaddr_in.
+//-----------------------------------------------------------------------------
+typedef struct NetSocketAddrINType {
+ Int16 family; // Address family in HBO (Host UInt8 Order)
+ UInt16 port; // the UDP port in NBO (Network UInt8 Order)
+ NetIPAddr addr; // IP address in NBO (Network UInt8 Order)
+ } NetSocketAddrINType;
+
+// Constant that means "use the local machine's IP address"
+#define netIPAddrLocal 0 // Can be used in NetSockAddrINType.addr
+
+
+// Structure used to hold a generic socket address. This is a generic struct
+// designed to hold any type of address including internet addresses. This
+// structure directly maps to the BSD unix struct sockaddr.
+typedef struct NetSocketAddrType {
+ Int16 family; // Address family
+ UInt8 data[14]; // 14 bytes of address
+ } NetSocketAddrType;
+
+
+// Structure used to hold a raw socket address. When using the netSocketAddrRaw
+// protocol family, the caller must bind() the socket to an interface and
+// specifies the interface using this structure. IMPORTANT: NUMEROUS
+// ROUTINES IN NETLIB RELY ON THE FACT THAT THIS STRUCTURE IS THE SAME
+// SIZE AS A NetSocketAddrINType STRUCTURE.
+typedef struct NetSocketAddrRawType {
+ Int16 family; // Address family in HBO (Host UInt8 Order)
+ UInt16 ifInstance; // the interface instance number
+ UInt32 ifCreator; // the interface creator
+ } NetSocketAddrRawType;
+
+
+
+//-----------------------------------------------------------------------------
+// Structure used to hold information about data to be sent. This structure
+// is passed to NetLibSendMsg and contains the optional address to send to,
+// a scatter-write array of data to be sent, and optional access rights
+//-----------------------------------------------------------------------------
+
+// Scatter/Gather array type. A pointer to an array of these structs is
+// passed to the NetLibSendPB and NetLibRecvPB calls. It specifies where
+// data should go to or come from as a list of buffer addresses and sizes.
+typedef struct NetIOVecType {
+ UInt8 * bufP; // buffer address
+ UInt16 bufLen; // buffer length
+ } NetIOVecType, *NetIOVecPtr;
+
+#define netIOVecMaxLen 16 // max# of NetIOVecTypes in an array
+
+// Read/Write ParamBlock type. Passed directly to the SendPB and RecvPB calls.
+typedef struct {
+ UInt8 * addrP; // address - or 0 for default
+ UInt16 addrLen; // length of address
+ NetIOVecPtr iov; // scatter/gather array
+ UInt16 iovLen; // length of above array
+ UInt8 * accessRights; // access rights
+ UInt16 accessRightsLen; // length of accessrights
+ } NetIOParamType, *NetIOParamPtr;
+
+// Flags values for the NetLibSend, NetLibReceive calls
+#define netIOFlagOutOfBand 0x01 // process out-of-band data
+#define netIOFlagPeek 0x02 // peek at incoming message
+#define netIOFlagDontRoute 0x04 // send without using routing
+
+
+
+//-----------------------------------------------------------------------------
+// Structures used for looking up a host by name or address (NetLibGetHostByName)
+//-----------------------------------------------------------------------------
+
+// Equates for DNS names, from RFC-1035
+#define netDNSMaxDomainName 255
+#define netDNSMaxDomainLabel 63
+
+#define netDNSMaxAliases 1 // max # of aliases for a host
+#define netDNSMaxAddresses 4 // max # of addresses for a host
+
+
+// The actual results of NetLibGetHostByName() are returned in this structure.
+// This structure is designed to match the "struct hostent" structure in Unix.
+typedef struct {
+ Char * nameP; // official name of host
+ Char ** nameAliasesP; // array of alias's for the name
+ UInt16 addrType; // address type of return addresses
+ UInt16 addrLen; // the length, in bytes, of the addresses
+ UInt8 ** addrListP; // array of ptrs to addresses in HBO
+ } NetHostInfoType, *NetHostInfoPtr;
+
+
+// "Buffer" passed to call as a place to store the results
+typedef struct {
+ NetHostInfoType hostInfo; // high level results of call are here
+
+ // The following fields contain the variable length data that
+ // hostInfo points to
+ Char name[netDNSMaxDomainName+1]; // hostInfo->name
+
+ Char *aliasList[netDNSMaxAliases+1]; // +1 for 0 termination.
+ Char aliases[netDNSMaxAliases][netDNSMaxDomainName+1];
+
+ NetIPAddr* addressList[netDNSMaxAddresses];
+ NetIPAddr address[netDNSMaxAddresses];
+
+ } NetHostInfoBufType, *NetHostInfoBufPtr;
+
+
+//-----------------------------------------------------------------------------
+// Structures used for looking up a service (NetLibGetServByName)
+//-----------------------------------------------------------------------------
+
+// Equates for service names
+#define netServMaxName 15 // max # characters in service name
+#define netProtoMaxName 15 // max # characters in protocol name
+#define netServMaxAliases 1 // max # of aliases for a service
+
+
+// The actual results of NetLibGetServByName() are returned in this structure.
+// This structure is designed to match the "struct servent" structure in Unix.
+typedef struct {
+ Char * nameP; // official name of service
+ Char ** nameAliasesP; // array of alias's for the name
+ UInt16 port; // port number for this service
+ Char * protoP; // name of protocol to use
+ } NetServInfoType, *NetServInfoPtr;
+
+// "Buffer" passed to call as a place to store the results
+typedef struct {
+ NetServInfoType servInfo; // high level results of call are here
+
+ // The following fields contain the variable length data that
+ // servInfo points to
+ Char name[netServMaxName+1]; // hostInfo->name
+
+ Char * aliasList[netServMaxAliases+1]; // +1 for 0 termination.
+ Char aliases[netServMaxAliases][netServMaxName];
+ Char protoName[netProtoMaxName+1];
+
+ UInt8 reserved;
+ } NetServInfoBufType, *NetServInfoBufPtr;
+
+
+
+//--------------------------------------------------------------------
+// Structure of a configuration name. Used by NetLibConfigXXX calls
+// <chg 1-28-98 RM> added for the new Config calls.
+//---------------------------------------------------------------------
+#define netConfigNameSize 32
+typedef struct {
+ Char name[netConfigNameSize]; // name of configuration
+ } NetConfigNameType, *NetConfigNamePtr;
+
+
+
+/********************************************************************
+ * Tracing Flags. These flags are ORed together and passed as a UInt32
+ * in the netSettingTraceFlags setting and netIFSettingTraceFlags to
+ * enable/disable various trace options.
+ ********************************************************************/
+#define netTracingErrors 0x00000001 // record errors
+#define netTracingMsgs 0x00000002 // record messages
+#define netTracingPktIP 0x00000004 // record packets sent/received
+ // to/from interfaces at the IP layer
+ // NOTE: netTracingPktData40 & netTracingPktData
+ // will control how much data of each packet is
+ // recorded.
+#define netTracingFuncs 0x00000008 // record function flow
+#define netTracingAppMsgs 0x00000010 // record application messages
+ // (NetLibTracePrintF, NetLibTracePutS)
+#define netTracingPktData40 0x00000020 // record first 40 bytes of packets
+ // when netTracingPktsXX is also on.
+ // NOTE: Mutually exclusive with
+ // netTracingPktData and only applicable if
+ // one of the netTracingPktsXX bits is also set
+#define netTracingPktData 0x00000040 // record all bytes of IP packets
+ // sent/received to/from interfaces
+ // NOTE: Mutually exclusive with
+ // netTracingPkts & netTracingPktData64
+#define netTracingPktIFHi 0x00000080 // record packets sent/received at highest layer
+ // of interface (just below IP layer).
+ // NOTE: netTracingPktData40 & netTracingPktData
+ // will control how much data of each packet is
+ // recorded.
+#define netTracingPktIFMid 0x00000100 // record packets sent/received at mid layer
+ // of interface (just below IFHi layer).
+ // NOTE: netTracingPktData40 & netTracingPktData
+ // will control how much data of each packet is
+ // recorded.
+#define netTracingPktIFLow 0x00000200 // record packets sent/received at low layer
+ // of interface (just below IFMid layer).
+ // NOTE: netTracingPktData40 & netTracingPktData
+ // will control how much data of each packet is
+ // recorded.
+
+
+// OBSOLETE tracing bit, still used by Network Panel
+#define netTracingPkts netTracingPktIP
+
+
+/********************************************************************
+ * Command numbers and parameter blocks for the NetLibMaster() call.
+ * This call is used to put the Net library into certain debugging modes
+ * or for obtaining statistics from the Net Library.
+ *
+ ********************************************************************/
+#pragma mark Master
+typedef enum {
+ // These calls return info
+ netMasterInterfaceInfo,
+ netMasterInterfaceStats,
+ netMasterIPStats,
+ netMasterICMPStats,
+ netMasterUDPStats,
+ netMasterTCPStats,
+
+ // This call used to read the trace buffer.
+ netMasterTraceEventGet // get trace event by index
+
+ } NetMasterEnum;
+
+
+typedef struct NetMasterPBType {
+
+ // These fields are specific to each command
+ union {
+
+ //.............................................................
+ // InterfaceInfo command
+ //.............................................................
+ struct {
+ UInt16 index; // -> index of interface
+ UInt32 creator; // <- creator
+ UInt16 instance; // <- instance
+ void * netIFP; // <- net_if pointer
+
+ // driver level info
+ Char drvrName[netDrvrTypeNameLen]; // <- type of driver (SLIP,PPP, etc)
+ Char hwName[netDrvrHWNameLen]; // <- hardware name (Serial Library, etc)
+ UInt8 localNetHdrLen; // <- local net header length
+ UInt8 localNetTrailerLen; // <- local net trailer length
+ UInt16 localNetMaxFrame; // <- local net maximum frame size
+
+ // media layer info
+ Char ifName[netIFNameLen];// <- interface name w/instance
+ Boolean driverUp; // <- true if interface driver up
+ Boolean ifUp; // <- true if interface is up
+ UInt16 hwAddrLen; // <- length of hardware address
+ UInt8 hwAddr[netIFMaxHWAddrLen]; // <- hardware address
+ UInt16 mtu; // <- maximum transfer unit of interface
+ UInt32 speed; // <- speed in bits/sec.
+ UInt32 lastStateChange; // <- time in milliseconds of last state change
+
+ // Address info
+ NetIPAddr ipAddr; // Address of this interface
+ NetIPAddr subnetMask; // subnet mask of local network
+ NetIPAddr broadcast; // broadcast address of local network
+ } interfaceInfo;
+
+ //.............................................................
+ // InterfaceStats command
+ //.............................................................
+ struct {
+ UInt16 index; // -> index of interface
+ UInt32 inOctets; // <- ....
+ UInt32 inUcastPkts;
+ UInt32 inNUcastPkts;
+ UInt32 inDiscards;
+ UInt32 inErrors;
+ UInt32 inUnknownProtos;
+ UInt32 outOctets;
+ UInt32 outUcastPkts;
+ UInt32 outNUcastPkts;
+ UInt32 outDiscards;
+ UInt32 outErrors;
+ } interfaceStats;
+
+ //.............................................................
+ // IPStats command
+ //.............................................................
+ struct {
+ UInt32 ipInReceives;
+ UInt32 ipInHdrErrors;
+ UInt32 ipInAddrErrors;
+ UInt32 ipForwDatagrams;
+ UInt32 ipInUnknownProtos;
+ UInt32 ipInDiscards;
+ UInt32 ipInDelivers;
+ UInt32 ipOutRequests;
+ UInt32 ipOutDiscards;
+ UInt32 ipOutNoRoutes;
+ UInt32 ipReasmReqds;
+ UInt32 ipReasmOKs;
+ UInt32 ipReasmFails;
+ UInt32 ipFragOKs;
+ UInt32 ipFragFails;
+ UInt32 ipFragCreates;
+ UInt32 ipRoutingDiscards;
+ UInt32 ipDefaultTTL;
+ UInt32 ipReasmTimeout;
+ } ipStats;
+
+ //.............................................................
+ // ICMPStats command
+ //.............................................................
+ struct {
+ UInt32 icmpInMsgs;
+ UInt32 icmpInErrors;
+ UInt32 icmpInDestUnreachs;
+ UInt32 icmpInTimeExcds;
+ UInt32 icmpInParmProbs;
+ UInt32 icmpInSrcQuenchs;
+ UInt32 icmpInRedirects;
+ UInt32 icmpInEchos;
+ UInt32 icmpInEchoReps;
+ UInt32 icmpInTimestamps;
+ UInt32 icmpInTimestampReps;
+ UInt32 icmpInAddrMasks;
+ UInt32 icmpInAddrMaskReps;
+ UInt32 icmpOutMsgs;
+ UInt32 icmpOutErrors;
+ UInt32 icmpOutDestUnreachs;
+ UInt32 icmpOutTimeExcds;
+ UInt32 icmpOutParmProbs;
+ UInt32 icmpOutSrcQuenchs;
+ UInt32 icmpOutRedirects;
+ UInt32 icmpOutEchos;
+ UInt32 icmpOutEchoReps;
+ UInt32 icmpOutTimestamps;
+ UInt32 icmpOutTimestampReps;
+ UInt32 icmpOutAddrMasks;
+ UInt32 icmpOutAddrMaskReps;
+ } icmpStats;
+
+ //.............................................................
+ // UDPStats command
+ //.............................................................
+ struct {
+ UInt32 udpInDatagrams;
+ UInt32 udpNoPorts;
+ UInt32 udpInErrors;
+ UInt32 udpOutDatagrams;
+ } udpStats;
+
+ //.............................................................
+ // TCPStats command
+ //.............................................................
+ struct {
+ UInt32 tcpRtoAlgorithm;
+ UInt32 tcpRtoMin;
+ UInt32 tcpRtoMax;
+ UInt32 tcpMaxConn;
+ UInt32 tcpActiveOpens;
+ UInt32 tcpPassiveOpens;
+ UInt32 tcpAttemptFails;
+ UInt32 tcpEstabResets;
+ UInt32 tcpCurrEstab;
+ UInt32 tcpInSegs;
+ UInt32 tcpOutSegs;
+ UInt32 tcpRetransSegs;
+ UInt32 tcpInErrs;
+ UInt32 tcpOutRsts;
+ } tcpStats;
+
+ //.............................................................
+ // TraceEventGet command
+ //.............................................................
+ struct {
+ UInt16 index; // which event
+ Char * textP; // ptr to text string to return it in
+ } traceEventGet;
+
+ } param;
+
+ } NetMasterPBType, *NetMasterPBPtr;
+
+
+
+
+
+//-----------------------------------------------------------------------------
+// Enumeration of Net settings as passed to NetLibSettingGet/Set.
+//-----------------------------------------------------------------------------
+#pragma mark Settings
+//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+// Global environment settings common to all attached network interfaces,
+// passed to NetLibSettingGet/Set
+//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+typedef enum {
+ netSettingResetAll, // void, NetLibSettingSet only, resets all settings
+ // to their defaults.
+
+ netSettingPrimaryDNS, // UInt32, IP address of Primary DN Server
+ netSettingSecondaryDNS, // UInt32, IP address of Secondary DN Server
+ netSettingDefaultRouter, // UInt32, IP address of Default router
+ netSettingDefaultIFCreator, // UInt32, Creator type of default interface
+ netSettingDefaultIFInstance, // UInt16, Instance# of default interface
+ netSettingHostName, // Char[64], name of host (not including domain)
+ netSettingDomainName, // Char[256], domain name of hosts's domain
+ netSettingHostTbl, // Char[], host table
+ netSettingCloseWaitTime, // UInt32, time in milliseconds to stay in close-wait state
+ netSettingInitialTCPResendTime, // UInt32, time in milliseconds before TCP resends a packet.
+ // This is just the initial value, the timeout is adjusted
+ // from this initial value depending on history of ACK times.
+ // This is sometimes referred to as the RTO (Roundtrip Time Out)
+ // See RFC-1122 for additional information.
+
+
+ // The following settings are not used for configuration, but rather put the
+ // stack into various modes for debugging, etc.
+ netSettingTraceBits = 0x1000, // UInt32, enable/disable various trace flags (netTraceBitXXXX)
+ netSettingTraceSize, // UInt32, max trace buffer size in bytes. Default 0x800.
+ // Setting this will also clear the trace buffer.
+ netSettingTraceStart, // UInt32, for internal use ONLY!!
+ netSettingTraceRoll, // UInt8, if true, trace buffer will rollover after it fills.
+ // Default is true.
+
+ netSettingRTPrimaryDNS, // used internally by Network interfaces
+ // that dynamically obtain the DNS address
+ netSettingRTSecondaryDNS, // used internally by Network interfaces
+ // that dynamically obtain the DNS address
+
+ netSettingConfigTable // used internally by NetLib - NOT FOR USE BY
+ // APPLICATIONS!!
+
+ } NetSettingEnum;
+
+
+//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+// Settings for each Network Interface, passed to NetLibIFSettingGet/Set
+//::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+typedef enum {
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ // Reset all settings to defaults
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ netIFSettingResetAll, // void, NetLibIFSettingSet only, resets all settings
+ // to their defaults.
+
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ // Status - read only
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ netIFSettingUp, // UInt8, true if interface is UP.
+ netIFSettingName, // Char[32], name of interface
+
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ // Addressing
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ netIFSettingReqIPAddr, // UInt32, requested IP address of this interface
+ netIFSettingSubnetMask, // UInt32, subnet mask of this interface
+ netIFSettingBroadcast, // UInt32, broadcast address for this interface
+
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ // User Info
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ netIFSettingUsername, // Char[], login script user name
+ // If 0 length, then user will be prompted for it
+ netIFSettingPassword, // Char[], login script user password
+ // If 0 length, then user will be prompted for it
+ netIFSettingDialbackUsername, // Char[], login script dialback user name.
+ // If 0 length, then netIFSettingUsername is used
+ netIFSettingDialbackPassword, // Char[], login script dialback user password.
+ // If 0 length, then user will be prompted for it
+ netIFSettingAuthUsername, // Char[], PAP/CHAP name.
+ // If 0 length, then netIFSettingUsername is used
+ netIFSettingAuthPassword, // Char[], PAP/CHAP password.
+ // If "$", then user will be prompted for it
+ // else If 0 length, then netIFSettingPassword or result
+ // of it's prompt (if it was empty) will be used
+ // else it is used as-is.
+
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ // Connect Settings
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ netIFSettingServiceName, // Char[], name of service
+ netIFSettingLoginScript, // Char[], login script
+ netIFSettingConnectLog, // Char[], connect log
+ netIFSettingInactivityTimeout, // UInt16, # of seconds of inactivity allowed before
+ // interface is brought down. If 0 then
+ // no inactivity timeout enforced.
+ netIFSettingEstablishmentTimeout, // UInt16, max delay in seconds between connection
+ // establishment stages
+
+ // Serial based protocol options
+ netIFSettingDynamicIP, // UInt8, if true, get IP address from server
+ // N/A for SLIP
+ netIFSettingVJCompEnable, // UInt8, if true enable VJ Header compression
+ // Default is on for PPP, off for SLIP
+ netIFSettingVJCompSlots, // UInt8, # of slots to use for VJ compression.
+ // Default is 4 for PPP, 16 for SLIP
+ // (each slot uses 256 bytes of RAM).
+ netIFSettingMTU, // UInt16, maximum transmission unit in bytes
+ // ignored in current PPP and SLIP interfaces
+ netIFSettingAsyncCtlMap, // UInt32, bitmask of characters to escape
+ // ignored in current PPP interfaces
+
+ // Serial settings, used by serial based network interfaces
+ netIFSettingPortNum, // UInt16, port number to use
+ netIFSettingBaudRate, // UInt32, baud rate in bits/sec.
+ netIFSettingFlowControl, // UInt8, flow control setting bits. Set to 0x01 for
+ // hardware flow control, else set to 0x00.
+ netIFSettingStopBits, // UInt8, # of stop bits
+ netIFSettingParityOn, // UInt8, true if parity on
+ netIFSettingParityEven, // UInt8, true if parity even
+
+ // Modem settings, optionally used by serial based network interfaces
+ netIFSettingUseModem, // UInt8, if true dial-up through modem
+ netIFSettingPulseDial, // UInt8, if true use pulse dial, else tone
+ netIFSettingModemInit, // Char[], modem initialization string
+ netIFSettingModemPhone, // Char[], modem phone number string
+ netIFSettingRedialCount, // UInt16, # of times to redial
+
+
+ //---------------------------------------------------------------------------------
+ // New Settings as of PalmOS 3.0
+ // Power control, usually only implemented by wireless interfaces
+ //---------------------------------------------------------------------------------
+ netIFSettingPowerUp, // UInt8, true if this interface is powered up
+ // false if this interface is in power-down mode
+ // interfaces that don't support power modes should
+ // quietly ignore this setting.
+
+ // Wireless or Wireline, read-only, returns true for wireless interfaces. this
+ // setting is used by application level functions to determine which interface(s)
+ // to attach/detach given user preference and/or state of the antenna.
+ netIFSettingWireless, // UInt8, true if this interface is wireless
+
+
+
+ // Option to query server for address of DNS servers
+ netIFSettingDNSQuery, // UInt8, if true PPP queries for DNS address. Default true
+
+
+ //---------------------------------------------------------------------------------
+ // New Settings as of PalmOS 3.2
+ // Power control, usually only implemented by wireless interfaces
+ //---------------------------------------------------------------------------------
+
+ netIFSettingQuitOnTxFail, // BYTE W-only. Power down RF on tx fail
+ netIFSettingQueueSize, // UInt8 R-only. The size of the Tx queue in the RF interface
+ netIFSettingTxInQueue, // BYTE R-only. Packets remaining to be sent
+ netIFSettingTxSent, // BYTE R-only. Packets sent since SocketOpen
+ netIFSettingTxDiscard, // BYTE R-only. Packets discarded on SocketClose
+ netIFSettingRssi, // char R-only. signed value in dBm.
+ netIFSettingRssiAsPercent, // char R-only. signed value in percent, with 0 being no coverage and 100 being excellent.
+ netIFSettingRadioState, // enum R-only. current state of the radio
+ netIFSettingBase, // UInt32 R-only. Interface specific
+ netIFSettingRadioID, // UInt32[2] R-only, two 32-bit. interface specific
+ netIFSettingBattery, // UInt8, R-only. percentage of battery left
+ netIFSettingNetworkLoad, // UInt8, R-only. percent estimate of network loading
+
+ //---------------------------------------------------------------------------------
+ // New Settings as of PalmOS 3.3
+ //---------------------------------------------------------------------------------
+
+ netIFSettingConnectionName, // Char [] Connection Profile Name
+
+
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ // The following settings are not used for configuration, but rather put the
+ // stack into various modes for debugging, etc.
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ netIFSettingTraceBits = 0x1000, // UInt32, enable/disable various trace flags (netTraceBitXXXX)
+ netIFSettingGlobalsPtr, // UInt32, (Read-Only) sinterface's globals ptr
+ netIFSettingActualIPAddr, // UInt32, (Read-Only) the actual IP address that the interface
+ // ends up using. The login script executor stores
+ // the result of the "g" script command here as does
+ // the PPP negotiations.
+ netIFSettingServerIPAddr, // UInt32, (Read-Only) the IP address of the PPP server
+ // we're connected to
+
+
+ // The following setting should be true if this network interface should be
+ // brought down when the Pilot is turned off.
+ netIFSettingBringDownOnPowerDown, // UInt8, if true interface will be brought down when
+ // Pilot is turned off.
+
+ // The following setting is used by the TCP/IP stack ONLY!! It tells the interface
+ // to pass all received packets as-is to the NetIFCallbacksPtr->raw_rcv() routine.
+ // This setting gets setup when an application creates a raw socket in the raw domain
+ netIFSettingRawMode, // UInt32, parameter to pass to raw_rcv() along with
+ // packet pointer.
+
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ // 3rd party settings start here...
+ //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::
+ netIFSettingCustom = 0x8000
+
+ } NetIFSettingEnum;
+
+
+
+//=========================================================================================
+// Enums for the netIFSettingRadioState setting
+//
+// JB added for the radio state setting.
+// <chg 3-17-98 RM> fixed naming conventions.
+//=========================================================================================
+typedef enum {
+ netRadioStateOffNotConnected=0,
+ netRadioStateOnNotConnected, // scanning
+ netRadioStateOnConnected, // have channel
+ netRadioStateOffConnected
+ } NetRadioStateEnum;
+
+
+
+/************************************************************
+ * Net Library Macros
+ *************************************************************/
+// Return current time in milliseconds.
+#define NetNow() (TimGetTicks() * 1000L/sysTicksPerSecond)
+
+
+// File Descriptor macros used for the NetLibSelect() call
+typedef UInt32 NetFDSetType;
+#define netFDSetSize 32
+
+#define netFDSet(n,p) ((*p) |= (1L << n))
+#define netFDClr(n,p) ((*p) &= ~(1L << n))
+#define netFDIsSet(n,p) ((*p) & (1L << n))
+#define netFDZero(p) ((*p) = 0)
+
+
+
+//-----------------------------------------------------------------------------
+// Net error codes
+//-----------------------------------------------------------------------------
+#pragma mark ErrorCodes
+#define netErrAlreadyOpen (netErrorClass | 1)
+#define netErrNotOpen (netErrorClass | 2)
+#define netErrStillOpen (netErrorClass | 3)
+#define netErrParamErr (netErrorClass | 4)
+#define netErrNoMoreSockets (netErrorClass | 5)
+#define netErrOutOfResources (netErrorClass | 6)
+#define netErrOutOfMemory (netErrorClass | 7)
+#define netErrSocketNotOpen (netErrorClass | 8)
+#define netErrSocketBusy (netErrorClass | 9) //EINPROGRESS
+#define netErrMessageTooBig (netErrorClass | 10)
+#define netErrSocketNotConnected (netErrorClass | 11)
+#define netErrNoInterfaces (netErrorClass | 12) //ENETUNREACH
+#define netErrBufTooSmall (netErrorClass | 13)
+#define netErrUnimplemented (netErrorClass | 14)
+#define netErrPortInUse (netErrorClass | 15) //EADDRINUSE
+#define netErrQuietTimeNotElapsed (netErrorClass | 16) //EADDRINUSE
+#define netErrInternal (netErrorClass | 17)
+#define netErrTimeout (netErrorClass | 18) //ETIMEDOUT
+#define netErrSocketAlreadyConnected (netErrorClass | 19) //EISCONN
+#define netErrSocketClosedByRemote (netErrorClass | 20)
+#define netErrOutOfCmdBlocks (netErrorClass | 21)
+#define netErrWrongSocketType (netErrorClass | 22)
+#define netErrSocketNotListening (netErrorClass | 23)
+#define netErrUnknownSetting (netErrorClass | 24)
+#define netErrInvalidSettingSize (netErrorClass | 25)
+#define netErrPrefNotFound (netErrorClass | 26)
+#define netErrInvalidInterface (netErrorClass | 27)
+#define netErrInterfaceNotFound (netErrorClass | 28)
+#define netErrTooManyInterfaces (netErrorClass | 29)
+#define netErrBufWrongSize (netErrorClass | 30)
+#define netErrUserCancel (netErrorClass | 31)
+#define netErrBadScript (netErrorClass | 32)
+#define netErrNoSocket (netErrorClass | 33)
+#define netErrSocketRcvBufFull (netErrorClass | 34)
+#define netErrNoPendingConnect (netErrorClass | 35)
+#define netErrUnexpectedCmd (netErrorClass | 36)
+#define netErrNoTCB (netErrorClass | 37)
+#define netErrNilRemoteWindowSize (netErrorClass | 38)
+#define netErrNoTimerProc (netErrorClass | 39)
+#define netErrSocketInputShutdown (netErrorClass | 40) // EOF to sockets API
+#define netErrCmdBlockNotCheckedOut (netErrorClass | 41)
+#define netErrCmdNotDone (netErrorClass | 42)
+#define netErrUnknownProtocol (netErrorClass | 43)
+#define netErrUnknownService (netErrorClass | 44)
+#define netErrUnreachableDest (netErrorClass | 45)
+#define netErrReadOnlySetting (netErrorClass | 46)
+#define netErrWouldBlock (netErrorClass | 47) //EWOULDBLOCK
+#define netErrAlreadyInProgress (netErrorClass | 48) //EALREADY
+#define netErrPPPTimeout (netErrorClass | 49)
+#define netErrPPPBroughtDown (netErrorClass | 50)
+#define netErrAuthFailure (netErrorClass | 51)
+#define netErrPPPAddressRefused (netErrorClass | 52)
+// The following map into the Epilogue DNS errors declared in DNS.ep.h:
+// and MUST be kept in this order!!
+#define netErrDNSNameTooLong (netErrorClass | 53)
+#define netErrDNSBadName (netErrorClass | 54)
+#define netErrDNSBadArgs (netErrorClass | 55)
+#define netErrDNSLabelTooLong (netErrorClass | 56)
+#define netErrDNSAllocationFailure (netErrorClass | 57)
+#define netErrDNSTimeout (netErrorClass | 58)
+#define netErrDNSUnreachable (netErrorClass | 59)
+#define netErrDNSFormat (netErrorClass | 60)
+#define netErrDNSServerFailure (netErrorClass | 61)
+#define netErrDNSNonexistantName (netErrorClass | 62)
+#define netErrDNSNIY (netErrorClass | 63)
+#define netErrDNSRefused (netErrorClass | 64)
+#define netErrDNSImpossible (netErrorClass | 65)
+#define netErrDNSNoRRS (netErrorClass | 66)
+#define netErrDNSAborted (netErrorClass | 67)
+#define netErrDNSBadProtocol (netErrorClass | 68)
+#define netErrDNSTruncated (netErrorClass | 69)
+#define netErrDNSNoRecursion (netErrorClass | 70)
+#define netErrDNSIrrelevant (netErrorClass | 71)
+#define netErrDNSNotInLocalCache (netErrorClass | 72)
+#define netErrDNSNoPort (netErrorClass | 73)
+// The following map into the Epilogue IP errors declared in IP.ep.h:
+// and MUST be kept in this order!!
+#define netErrIPCantFragment (netErrorClass | 74)
+#define netErrIPNoRoute (netErrorClass | 75)
+#define netErrIPNoSrc (netErrorClass | 76)
+#define netErrIPNoDst (netErrorClass | 77)
+#define netErrIPktOverflow (netErrorClass | 78)
+// End of Epilogue IP errors
+#define netErrTooManyTCPConnections (netErrorClass | 79)
+#define netErrNoDNSServers (netErrorClass | 80)
+#define netErrInterfaceDown (netErrorClass | 81)
+
+// Mobitex network radio interface error code returns
+#define netErrNoChannel (netErrorClass | 82) // The datalink layer cannot acquire a channel
+#define netErrDieState (netErrorClass | 83) // Mobitex network has issued a DIE command.
+#define netErrReturnedInMail (netErrorClass | 84) // The addressed of the transmitted packet was not available, and the message was placed in the network's mailbox.
+#define netErrReturnedNoTransfer (netErrorClass | 85) // This message cannot be transferred or put in the network mailbox.
+#define netErrReturnedIllegal (netErrorClass | 86) // The message could not be switched to the network
+#define netErrReturnedCongest (netErrorClass | 87) // Line, radio channels, or network nodes are congested.
+#define netErrReturnedError (netErrorClass | 88) // Technical error in the network.
+#define netErrReturnedBusy (netErrorClass | 89) // The B-party is busy.
+#define netErrGMANState (netErrorClass | 90) // The modem has not registered with the network.
+#define netErrQuitOnTxFail (netErrorClass | 91) // Couldn't get packet through, shutdown.
+#define netErrFlexListFull (netErrorClass | 92) // raw IF error message: see Mobitex spec.
+#define netErrSenderMAN (netErrorClass | 93) // ditto
+#define netErrIllegalType (netErrorClass | 94) // ditto
+#define netErrIllegalState (netErrorClass | 95) // ditto
+#define netErrIllegalFlags (netErrorClass | 96) // ditto
+#define netErrIllegalSendlist (netErrorClass | 97) // ditto
+#define netErrIllegalMPAKLength (netErrorClass | 98) // ditto
+#define netErrIllegalAddressee (netErrorClass | 99) // ditto
+#define netErrIllegalPacketClass (netErrorClass | 100) // ditto
+#define netErrBufferLength (netErrorClass | 101) // any
+#define netErrNiCdLowBattery (netErrorClass | 102) // any
+#define netErrRFinterfaceFatal (netErrorClass | 103) // any
+#define netErrIllegalLogout (netErrorClass | 104) // raw IF error message
+#define netErrAAARadioLoad (netErrorClass | 105) // 7/20/98 JB. If there is insufficient AAA
+#define netErrAntennaDown (netErrorClass | 106)
+#define netErrNiCdCharging (netErrorClass | 107) // just for charging
+#define netErrAntennaWentDown (netErrorClass | 108)
+#define netErrNotActivated (netErrorClass | 109) // The unit has not been FULLY activated. George and Morty completed.
+#define netErrRadioTemp (netErrorClass | 110) // Radio's temp is too high for FCC compliant TX
+#define netErrNiCdChargeError (netErrorClass | 111) // Charging stopped due to NiCd charging characteristic
+#define netErrNiCdSag (netErrorClass | 112) // the computed sag or actual sag indicates a NiCd with diminished capacity.
+#define netErrNiCdChargeSuspend (netErrorClass | 113) // Charging has been suspended due to low AAA batteries.
+// Left room for more Mobitex errors
+
+// Configuration errors
+#define netErrConfigNotFound (netErrorClass | 115)
+#define netErrConfigCantDelete (netErrorClass | 116)
+#define netErrConfigTooMany (netErrorClass | 117)
+#define netErrConfigBadName (netErrorClass | 118)
+#define netErrConfigNotAlias (netErrorClass | 119)
+#define netErrConfigCantPointToAlias (netErrorClass | 120)
+#define netErrConfigEmpty (netErrorClass | 121)
+#define netErrAlreadyOpenWithOtherConfig (netErrorClass | 122)
+#define netErrConfigAliasErr (netErrorClass | 123)
+#define netErrNoMultiPktAddr (netErrorClass | 124)
+#define netErrOutOfPackets (netErrorClass | 125)
+#define netErrMultiPktAddrReset (netErrorClass | 126)
+#define netErrStaleMultiPktAddr (netErrorClass | 127)
+
+// Login scripting plugin errors
+#define netErrScptPluginMissing (netErrorClass | 128)
+#define netErrScptPluginLaunchFail (netErrorClass | 129)
+#define netErrScptPluginCmdFail (netErrorClass | 130)
+#define netErrScptPluginInvalidCmd (netErrorClass | 131)
+
+#define netErrMobitexStart netErrNoChannel
+#define netErrMobitexEnd netErrNiCdChargeSuspend
+
+//-----------------------------------------------------------------------------
+// Net library call ID's. Each library call gets the trap number:
+// netTrapXXXX which serves as an index into the library's dispatch table.
+// The constant sysLibTrapCustom is the first available trap number after
+// the system predefined library traps Open,Close,Sleep & Wake.
+//
+// WARNING!!! This order of these traps MUST match the order of the dispatch
+// table in NetDispatch.c!!!
+//-----------------------------------------------------------------------------
+#pragma mark Traps
+typedef enum {
+ netLibTrapAddrINToA = sysLibTrapCustom,
+ netLibTrapAddrAToIN,
+
+ netLibTrapSocketOpen,
+ netLibTrapSocketClose,
+ netLibTrapSocketOptionSet,
+ netLibTrapSocketOptionGet,
+ netLibTrapSocketBind,
+ netLibTrapSocketConnect,
+ netLibTrapSocketListen,
+ netLibTrapSocketAccept,
+ netLibTrapSocketShutdown,
+
+ netLibTrapSendPB,
+ netLibTrapSend,
+ netLibTrapReceivePB,
+ netLibTrapReceive,
+ netLibTrapDmReceive,
+ netLibTrapSelect,
+
+ netLibTrapPrefsGet,
+ netLibTrapPrefsSet,
+
+ // The following traps are for internal and Network interface
+ // use only.
+ netLibTrapDrvrWake,
+ netLibTrapInterfacePtr,
+ netLibTrapMaster,
+
+ // New Traps
+ netLibTrapGetHostByName,
+ netLibTrapSettingGet,
+ netLibTrapSettingSet,
+ netLibTrapIFAttach,
+ netLibTrapIFDetach,
+ netLibTrapIFGet,
+ netLibTrapIFSettingGet,
+ netLibTrapIFSettingSet,
+ netLibTrapIFUp,
+ netLibTrapIFDown,
+ netLibTrapIFMediaUp,
+ netLibTrapScriptExecuteV32,
+ netLibTrapGetHostByAddr,
+ netLibTrapGetServByName,
+ netLibTrapSocketAddr,
+ netLibTrapFinishCloseWait,
+ netLibTrapGetMailExchangeByName,
+ netLibTrapPrefsAppend,
+ netLibTrapIFMediaDown,
+ netLibTrapOpenCount,
+
+ netLibTrapTracePrintF,
+ netLibTrapTracePutS,
+
+ netLibTrapOpenIfCloseWait,
+ netLibTrapHandlePowerOff,
+
+ netLibTrapConnectionRefresh,
+
+ // Traps added after 1.0 release of NetLib
+ netLibTrapBitMove,
+ netLibTrapBitPutFixed,
+ netLibTrapBitGetFixed,
+ netLibTrapBitPutUIntV,
+ netLibTrapBitGetUIntV,
+ netLibTrapBitPutIntV,
+ netLibTrapBitGetIntV,
+
+ // Traps added after 2.0 release of NetLib
+ netLibOpenConfig,
+ netLibConfigMakeActive,
+ netLibConfigList,
+ netLibConfigIndexFromName,
+ netLibConfigDelete,
+ netLibConfigSaveAs,
+ netLibConfigRename,
+ netLibConfigAliasSet,
+ netLibConfigAliasGet,
+
+ // Traps added after 3.2 release of NetLib
+ netLibTrapScriptExecute,
+
+ netLibTrapLast
+ } NetLibTrapNumberEnum;
+
+
+
+/************************************************************
+ * Net Library procedures.
+ *************************************************************/
+#pragma mark Functions
+#ifdef REMOVE_FOR_EMULATOR
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+//--------------------------------------------------
+// Library initialization, shutdown, sleep and wake
+//--------------------------------------------------
+Err NetLibOpen (UInt16 libRefnum, UInt16 *netIFErrsP)
+ SYS_TRAP(sysLibTrapOpen);
+
+Err NetLibClose (UInt16 libRefnum, UInt16 immediate)
+ SYS_TRAP(sysLibTrapClose);
+
+Err NetLibSleep (UInt16 libRefnum)
+ SYS_TRAP(sysLibTrapSleep);
+
+Err NetLibWake (UInt16 libRefnum)
+ SYS_TRAP(sysLibTrapWake);
+
+
+// This call forces the library to complete a close if it's
+// currently in the close-wait state. Returns 0 if library is closed,
+// Returns netErrFullyOpen if library is still open by some other task.
+Err NetLibFinishCloseWait(UInt16 libRefnum)
+ SYS_TRAP(netLibTrapFinishCloseWait);
+
+// This call is for use by the Network preference panel only. It
+// causes the NetLib to fully open if it's currently in the close-wait
+// state. If it's not in the close wait state, it returns an error code
+Err NetLibOpenIfCloseWait(UInt16 libRefnum)
+ SYS_TRAP(netLibTrapOpenIfCloseWait);
+
+// Get the open Count of the NetLib
+Err NetLibOpenCount (UInt16 refNum, UInt16 *countP)
+ SYS_TRAP(netLibTrapOpenCount);
+
+// Give NetLib a chance to close the connection down in response
+// to a power off event. Returns non-zero if power should not be
+// turned off. EventP points to the event that initiated the power off
+// which is either a keyDownEvent of the hardPowerChr or the autoOffChr.
+// Don't include unless building for Viewer
+#ifdef __SYSEVENT_H__
+Err NetLibHandlePowerOff (UInt16 refNum, SysEventType *eventP)
+ SYS_TRAP(netLibTrapHandlePowerOff);
+#endif
+
+
+// Check status or try and reconnect any interfaces which have come down.
+// This call can be made by applications when they suspect that an interface
+// has come down (like PPP or SLIP). NOTE: This call can display UI
+// (if 'refresh' is true) so it MUST be called from the UI task.
+Err NetLibConnectionRefresh(UInt16 refNum, Boolean refresh,
+ UInt8 *allInterfacesUpP, UInt16 *netIFErrP)
+ SYS_TRAP(netLibTrapConnectionRefresh);
+
+
+
+//--------------------------------------------------
+// Net address translation and conversion routines.
+//--------------------------------------------------
+
+// convert host Int16 to network Int16
+#define NetHToNS(x) (x)
+
+// convert host long to network long
+#define NetHToNL(x) (x)
+
+// convert network Int16 to host Int16
+#define NetNToHS(x) (x)
+
+// convert network long to host long
+#define NetNToHL(x) (x)
+
+// Convert 32-bit IP address to ascii dotted decimal form. The Sockets glue
+// macro inet_ntoa will pass the address of an application global string in
+// spaceP.
+Char * NetLibAddrINToA(UInt16 libRefnum, NetIPAddr inet, Char *spaceP)
+ SYS_TRAP(netLibTrapAddrINToA);
+
+// Convert a dotted decimal ascii string format of an IP address into
+// a 32-bit value.
+NetIPAddr NetLibAddrAToIN(UInt16 libRefnum, Char *a)
+ SYS_TRAP(netLibTrapAddrAToIN);
+
+
+
+//--------------------------------------------------
+// Socket creation and option setting
+//--------------------------------------------------
+
+// Create a socket and return a refnum to it. Protocol is normally 0.
+// Returns 0 on success, -1 on error. If error, *errP gets filled in with error code.
+NetSocketRef NetLibSocketOpen(UInt16 libRefnum, NetSocketAddrEnum domain,
+ NetSocketTypeEnum type, Int16 protocol, Int32 timeout,
+ Err *errP)
+ SYS_TRAP(netLibTrapSocketOpen);
+
+// Close a socket.
+// Returns 0 on success, -1 on error. If error, *errP gets filled in with error code.
+Int16 NetLibSocketClose(UInt16 libRefnum, NetSocketRef socket, Int32 timeout,
+ Err *errP)
+ SYS_TRAP(netLibTrapSocketClose);
+
+// Set a socket option. Level is usually netSocketOptLevelSocket. Option is one of
+// netSocketOptXXXXX. OptValueP is a pointer to the new value and optValueLen is
+// the length of the option value.
+// Returns 0 on success, -1 on error. If error, *errP gets filled in with error code.
+Int16 NetLibSocketOptionSet(UInt16 libRefnum, NetSocketRef socket,
+ UInt16 /*NetSocketOptLevelEnum*/ level, UInt16 /*NetSocketOptEnum*/ option,
+ void *optValueP, UInt16 optValueLen,
+ Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapSocketOptionSet);
+
+// Get a socket option.
+// Returns 0 on success, -1 on error. If error, *errP gets filled in with error code.
+Int16 NetLibSocketOptionGet(UInt16 libRefnum, NetSocketRef socket,
+ UInt16 /*NetSocketOptLevelEnum*/ level, UInt16 /*NetSocketOptEnum*/ option,
+ void *optValueP, UInt16 *optValueLenP,
+ Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapSocketOptionGet);
+
+
+//--------------------------------------------------
+// Socket Control
+//--------------------------------------------------
+
+// Bind a source address and port number to a socket. This makes the
+// socket accept incoming packets destined for the given socket address.
+// Returns 0 on success, -1 on error. If error, *errP gets filled in with error code.
+Int16 NetLibSocketBind(UInt16 libRefnum, NetSocketRef socket,
+ NetSocketAddrType *sockAddrP, Int16 addrLen, Int32 timeout,
+ Err *errP)
+ SYS_TRAP(netLibTrapSocketBind);
+
+
+// Connect to a remote socket. For a stream based socket (i.e. TCP), this initiates
+// a 3-way handshake with the remote machine to establish a connection. For
+// non-stream based socket, this merely specifies a destination address and port
+// number for future outgoing packets from this socket.
+// Returns 0 on success, -1 on error. If error, *errP gets filled in with error code.
+Int16 NetLibSocketConnect(UInt16 libRefnum, NetSocketRef socket,
+ NetSocketAddrType *sockAddrP, Int16 addrLen, Int32 timeout,
+ Err *errP)
+ SYS_TRAP(netLibTrapSocketConnect);
+
+
+// Makes a socket ready to accept incoming connection requests. The queueLen
+// specifies the max number of pending connection requests that will be enqueued
+// while the server is busy handling other requests.
+// Only applies to stream based (i.e. TCP) sockets.
+// Returns 0 on success, -1 on error. If error, *errP gets filled in with error code.
+Int16 NetLibSocketListen(UInt16 libRefnum, NetSocketRef socket,
+ UInt16 queueLen, Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapSocketListen);
+
+
+// Blocks the current process waiting for an incoming connection request. The socket
+// must have previously be put into listen mode through the NetLibSocketListen call.
+// On return, *sockAddrP will have the remote machines address and port number.
+// Only applies to stream based (i.e. TCP) sockets.
+// Returns 0 on success, -1 on error. If error, *errP gets filled in with error code.
+Int16 NetLibSocketAccept(UInt16 libRefnum, NetSocketRef socket,
+ NetSocketAddrType *sockAddrP, Int16 *addrLenP, Int32 timeout,
+ Err *errP)
+ SYS_TRAP(netLibTrapSocketAccept);
+
+
+// Shutdown a connection in one or both directions.
+// Only applies to stream based (i.e. TCP) sockets.
+// Returns 0 on success, -1 on error. If error, *errP gets filled in with error code.
+Int16 NetLibSocketShutdown(UInt16 libRefnum, NetSocketRef socket,
+ Int16 /*NetSocketDirEnum*/ direction, Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapSocketShutdown);
+
+
+
+// Gets the local and remote addresses of a socket. Useful for TCP sockets that
+// get dynamically bound at connect time.
+// Returns 0 on success, -1 on error. If error, *errP gets filled in with error code.
+Int16 NetLibSocketAddr(UInt16 libRefnum, NetSocketRef socketRef,
+ NetSocketAddrType *locAddrP, Int16 *locAddrLenP,
+ NetSocketAddrType *remAddrP, Int16 *remAddrLenP,
+ Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapSocketAddr);
+
+
+
+//--------------------------------------------------
+// Sending and Receiving
+//--------------------------------------------------
+// Send data through a socket. The data is specified through the NetIOParamType
+// structure.
+// Flags is one or more of netMsgFlagXXX.
+// Returns # of bytes sent on success, or -1 on error. If error, *errP gets filled
+// in with error code.
+Int16 NetLibSendPB(UInt16 libRefNum, NetSocketRef socket,
+ NetIOParamType *pbP, UInt16 flags, Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapSendPB);
+
+// Send data through a socket. The data to send is passed in a single buffer,
+// unlike NetLibSendPB. If toAddrP is not nil, the data will be sent to
+// address *toAddrP.
+// Flags is one or more of netMsgFlagXXX.
+// Returns # of bytes sent on success, or -1 on error. If error, *errP gets filled
+// in with error code.
+Int16 NetLibSend(UInt16 libRefNum, NetSocketRef socket,
+ void *bufP, UInt16 bufLen, UInt16 flags,
+ void *toAddrP, UInt16 toLen, Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapSend);
+
+// Receive data from a socket. The data is gatthered into buffers specified in the
+// NetIOParamType structure.
+// Flags is one or more of netMsgFlagXXX.
+// Timeout is max # of ticks to wait, or -1 for infinite, or 0 for none.
+// Returns # of bytes received, or -1 on error. If error, *errP gets filled in
+// with error code.
+Int16 NetLibReceivePB(UInt16 libRefNum, NetSocketRef socket,
+ NetIOParamType *pbP, UInt16 flags, Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapReceivePB);
+
+// Receive data from a socket. The data is read into a single buffer, unlike
+// NetLibReceivePB. If fromAddrP is not nil, *fromLenP must be initialized to
+// the size of the buffer that fromAddrP points to and on exit *fromAddrP will
+// have the address of the sender in it.
+// Flags is one or more of netMsgFlagXXX.
+// Timeout is max # of ticks to wait, or -1 for infinite, or 0 for none.
+// Returns # of bytes received, or -1 on error. If error, *errP gets filled in
+// with error code.
+Int16 NetLibReceive(UInt16 libRefNum, NetSocketRef socket,
+ void *bufP, UInt16 bufLen, UInt16 flags,
+ void *fromAddrP, UInt16 *fromLenP, Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapReceive);
+
+
+// Receive data from a socket directly into a (write-protected) Data Manager
+// record.
+// If fromAddrP is not nil, *fromLenP must be initialized to
+// the size of the buffer that fromAddrP points to and on exit *fromAddrP will
+// have the address of the sender in it.
+// Flags is one or more of netMsgFlagXXX.
+// Timeout is max # of ticks to wait, or -1 for infinite, or 0 for none.
+// Returns # of bytes received, or -1 on error. If error, *errP gets filled in
+// with error code.
+Int16 NetLibDmReceive(UInt16 libRefNum, NetSocketRef socket,
+ void *recordP, UInt32 recordOffset, UInt16 rcvLen, UInt16 flags,
+ void *fromAddrP, UInt16 *fromLenP, Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapDmReceive);
+
+
+//--------------------------------------------------
+// Name Lookups
+//--------------------------------------------------
+NetHostInfoPtr NetLibGetHostByName(UInt16 libRefNum, Char *nameP,
+ NetHostInfoBufPtr bufP, Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapGetHostByName);
+
+
+NetHostInfoPtr NetLibGetHostByAddr(UInt16 libRefNum, UInt8 *addrP, UInt16 len, UInt16 type,
+ NetHostInfoBufPtr bufP, Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapGetHostByAddr);
+
+
+NetServInfoPtr NetLibGetServByName(UInt16 libRefNum, const Char *servNameP,
+ const Char *protoNameP, NetServInfoBufPtr bufP,
+ Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapGetServByName);
+
+// Looks up a mail exchange name and returns a list of hostnames for it. Caller
+// must pass space for list of return names (hostNames), space for
+// list of priorities for those hosts (priorities) and max # of names to
+// return (maxEntries).
+// Returns # of entries found, or -1 on error. If error, *errP gets filled in
+// with error code.
+Int16 NetLibGetMailExchangeByName(UInt16 libRefNum, Char *mailNameP,
+ UInt16 maxEntries,
+ Char hostNames[][netDNSMaxDomainName+1], UInt16 priorities[],
+ Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapGetMailExchangeByName);
+
+
+//--------------------------------------------------
+// Interface setup
+//--------------------------------------------------
+Err NetLibIFGet(UInt16 libRefNum, UInt16 index, UInt32 *ifCreatorP,
+ UInt16 *ifInstanceP)
+ SYS_TRAP(netLibTrapIFGet);
+
+Err NetLibIFAttach(UInt16 libRefNum, UInt32 ifCreator, UInt16 ifInstance,
+ Int32 timeout)
+ SYS_TRAP(netLibTrapIFAttach);
+
+Err NetLibIFDetach(UInt16 libRefNum, UInt32 ifCreator, UInt16 ifInstance,
+ Int32 timeout)
+ SYS_TRAP(netLibTrapIFDetach);
+
+Err NetLibIFUp(UInt16 libRefNum, UInt32 ifCreator, UInt16 ifInstance)
+ SYS_TRAP(netLibTrapIFUp);
+
+Err NetLibIFDown(UInt16 libRefNum, UInt32 ifCreator, UInt16 ifInstance,
+ Int32 timeout)
+ SYS_TRAP(netLibTrapIFDown);
+
+
+
+
+//--------------------------------------------------
+// Settings
+//--------------------------------------------------
+// General settings
+Err NetLibSettingGet(UInt16 libRefNum,
+ UInt16 /*NetSettingEnum*/ setting, void *valueP, UInt16 *valueLenP)
+ SYS_TRAP(netLibTrapSettingGet);
+
+Err NetLibSettingSet(UInt16 libRefNum,
+ UInt16 /*NetSettingEnum*/ setting, void *valueP, UInt16 valueLen)
+ SYS_TRAP(netLibTrapSettingSet);
+
+// Network interface specific settings.
+Err NetLibIFSettingGet(UInt16 libRefNum, UInt32 ifCreator, UInt16 ifInstance,
+ UInt16 /*NetIFSettingEnum*/ setting, void *valueP, UInt16 *valueLenP)
+ SYS_TRAP(netLibTrapIFSettingGet);
+
+Err NetLibIFSettingSet(UInt16 libRefNum, UInt32 ifCreator, UInt16 ifInstance,
+ UInt16 /*NetIFSettingEnum*/ setting, void *valueP, UInt16 valueLen)
+ SYS_TRAP(netLibTrapIFSettingSet);
+
+
+
+//--------------------------------------------------
+// System level
+//--------------------------------------------------
+Int16 NetLibSelect(UInt16 libRefNum, UInt16 width, NetFDSetType *readFDs,
+ NetFDSetType *writeFDs, NetFDSetType *exceptFDs,
+ Int32 timeout, Err *errP)
+ SYS_TRAP(netLibTrapSelect);
+
+
+
+//--------------------------------------------------
+// Debugging support
+//--------------------------------------------------
+Err NetLibMaster(UInt16 libRefNum, UInt16 cmd, NetMasterPBPtr pbP,
+ Int32 timeout)
+ SYS_TRAP(netLibTrapMaster);
+
+Err NetLibTracePrintF(UInt16 libRefNum, Char *formatStr, ...)
+ SYS_TRAP(netLibTrapTracePrintF);
+
+Err NetLibTracePutS(UInt16 libRefNum, Char *strP)
+ SYS_TRAP(netLibTrapTracePutS);
+
+
+
+
+
+//--------------------------------------------------
+// Configuration Calls
+//--------------------------------------------------
+Err NetLibOpenConfig( UInt16 refNum, UInt16 configIndex, UInt32 openFlags,
+ UInt16 *netIFErrP)
+ SYS_TRAP(netLibOpenConfig);
+
+Err NetLibConfigMakeActive( UInt16 refNum, UInt16 configIndex)
+ SYS_TRAP(netLibConfigMakeActive);
+
+Err NetLibConfigList( UInt16 refNum, NetConfigNameType nameArray[],
+ UInt16 *arrayEntriesP)
+ SYS_TRAP(netLibConfigList);
+
+Err NetLibConfigIndexFromName( UInt16 refNum, NetConfigNamePtr nameP,
+ UInt16 *indexP)
+ SYS_TRAP(netLibConfigIndexFromName);
+
+Err NetLibConfigDelete( UInt16 refNum, UInt16 index)
+ SYS_TRAP(netLibConfigDelete);
+
+Err NetLibConfigSaveAs( UInt16 refNum, NetConfigNamePtr nameP)
+ SYS_TRAP(netLibConfigSaveAs);
+
+Err NetLibConfigRename( UInt16 refNum, UInt16 index,
+ NetConfigNamePtr newNameP)
+ SYS_TRAP(netLibConfigRename);
+
+Err NetLibConfigAliasSet( UInt16 refNum, UInt16 configIndex,
+ UInt16 aliasToIndex)
+ SYS_TRAP(netLibConfigAliasSet);
+
+Err NetLibConfigAliasGet( UInt16 refNum, UInt16 aliasIndex,
+ UInt16 *indexP, Boolean *isAnotherAliasP)
+ SYS_TRAP(netLibConfigAliasGet);
+
+
+#ifndef PUBLIC_STUFF_STRIPPED
+//--------------------------------------------------
+// Routines that must be linked in from the :Libraries:PalmOS:Src:NetSocket.c
+// source module.
+//
+// These are general convenience routines for applications that use the
+// NetLib. They are not part of the NetLib itself because they generally
+// need to keep track of state within the application and require the use
+// of application globals that are declared in NetSocket.c
+//--------------------------------------------------
+#ifdef __SYSEVENT_H__
+Boolean NetUWirelessAppHandleEvent(SysEventType *eventP, UInt32 flags, Err *errP);
+#endif
+#endif // PUBLIC_STUFF_STRIPPED
+
+
+#ifdef __cplusplus
+}
+#endif
+#endif
+
+
+// Include the NetMgr Bit Utils
+#include <NetBitUtils.h>
+
+#endif // __NETMGR_H__