* harbour/src/vm/task.c
! fixed casting for C++ builds
* harbour/src/lang/msges.c
! added hack for Solaris builds where ES is macro
TODDO: sync names of lang and corresponding code modules.
* harbour/src/vm/dynlibhb.c
* pacified warning
* harbour/contrib/xpp/xppextrn.ch
* harbour/contrib/xpp/dbcmdx.c
* harbour/include/hbextern.ch
* harbour/src/rdd/dbcmd53.c
! moved ordWildSeek() from XPP to HBRDD library.
I have no idea if XPP has such function or if it's or not
compatible with ORDWILDSEEK() functions I created for [x]Harbour
* disable ordCount() and ordWildSeek() functions when HB_CLP_STRICT
macro is set
* harbour/include/hbsocket.ch
+ added macro values interface info flags: HB_SOCKET_IFF_*
+ added macro values for interface info array indexes: HB_SOCKET_IFINFO_*
* harbour/include/hbsocket.h
* harbour/src/rtl/hbsocket.c
+ added new C function:
PHB_ITEM hb_socketGetIFaces( int af, HB_BOOL fNoAliases );
it returns array with existing interfaces description.
This code was added for non MS-Windows based platforms only.
Support for MS-Windows has to be added yet.
Some platforms may not fill all fields in the returned array.
When some fields are not supported by platform or interface then
they can contain NIL value.
On some platforms this code can effectively work only with IP4
interfaces and IP6 ones will need different implementation.
TODO: add support for alternative long interface introduced in some
new systems using 'struct lifreq' with SIOCGLIF* ioctls instead
of 'struct ifreq' and SIOCGIF*
TODO: add support for extracting hardware addreses (i.e. ethernet
macaddresses) for systems which do not support SIOCGIFHWADDR.
Please test this code with OS2 using OpenWatcom and GCC (old and
new socket API). I enabled HB_HAS_SOCKADDR_SA_LEN in OS2 builds.
OpenWatocm OS2 header files have such fields but I do know if it's
also present in GCC socket API.
* harbour/include/hbextern.ch
* harbour/src/rtl/hbinet.c
+ added new PRG function:
hb_inetIfInfo( [<lNoAliases>] [, <nAddrFamily>] ) -> <aInfo>
<lNoAliases> is .F. by default so aliases are included
<nAddrFamily> is HB_SOCKET_AF_INET by default
<aInfo> is an array in which each entry is also array with the
following fields:
HB_SOCKET_IFINFO_FAMILY 1 // adress family
HB_SOCKET_IFINFO_NAME 2 // interface name
HB_SOCKET_IFINFO_FLAGS 3 // flags HB_SOCKET_IFF_*
HB_SOCKET_IFINFO_ADDR 4 // interface address
HB_SOCKET_IFINFO_NETMASK 5 // subnetmask
HB_SOCKET_IFINFO_BROADCAST 6 // broadcast address
HB_SOCKET_IFINFO_P2PADDR 7 // point-to-point address
HB_SOCKET_IFINFO_HWADDR 8 // hardware address
Please use this code on different non MS-Windows platforms:
proc main( noAlias )
local iface
? os(), version()
? "interfaces:"
for each iface in hb_inetIfInfo( !empty( noAlias ), 0 )
? hb_valToExp( iface )
next
?
return
and check if it returns correct information about available
interfaces.
208 lines
9.8 KiB
Plaintext
208 lines
9.8 KiB
Plaintext
/*
|
|
* $Id$
|
|
*/
|
|
|
|
/*
|
|
* Harbour Project source code:
|
|
* socket related constant values
|
|
*
|
|
* Copyright 2009 Przemyslaw Czerpak <druzus / at / priv.onet.pl>
|
|
* www - http://www.harbour-project.org
|
|
*
|
|
* This program is free software; you can redistribute it and/or modify
|
|
* it under the terms of the GNU General Public License as published by
|
|
* the Free Software Foundation; either version 2, or (at your option)
|
|
* any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this software; see the file COPYING. If not, write to
|
|
* the Free Software Foundation, Inc., 59 Temple Place, Suite 330,
|
|
* Boston, MA 02111-1307 USA (or visit the web site http://www.gnu.org/).
|
|
*
|
|
* As a special exception, the Harbour Project gives permission for
|
|
* additional uses of the text contained in its release of Harbour.
|
|
*
|
|
* The exception is that, if you link the Harbour libraries with other
|
|
* files to produce an executable, this does not by itself cause the
|
|
* resulting executable to be covered by the GNU General Public License.
|
|
* Your use of that executable is in no way restricted on account of
|
|
* linking the Harbour library code into it.
|
|
*
|
|
* This exception does not however invalidate any other reasons why
|
|
* the executable file might be covered by the GNU General Public License.
|
|
*
|
|
* This exception applies only to the code released by the Harbour
|
|
* Project under the name Harbour. If you copy code from other
|
|
* Harbour Project or Free Software Foundation releases into a copy of
|
|
* Harbour, as the General Public License permits, the exception does
|
|
* not apply to the code that you add in this way. To avoid misleading
|
|
* anyone as to the status of such modified files, you must delete
|
|
* this exception notice from them.
|
|
*
|
|
* If you write modifications of your own for Harbour, it is your choice
|
|
* whether to permit this exception to apply to your modifications.
|
|
* If you do not wish that, delete this exception notice.
|
|
*
|
|
*/
|
|
|
|
#ifndef HB_SOCKET_CH_
|
|
#define HB_SOCKET_CH_
|
|
|
|
/* Harbour socket error codes */
|
|
#define HB_SOCKET_ERR_PIPE 1
|
|
#define HB_SOCKET_ERR_TIMEOUT 2
|
|
#define HB_SOCKET_ERR_WRONGADDR 3
|
|
#define HB_SOCKET_ERR_AFNOSUPPORT 4
|
|
#define HB_SOCKET_ERR_PFNOSUPPORT 5
|
|
#define HB_SOCKET_ERR_PROTONOSUPPORT 6
|
|
#define HB_SOCKET_ERR_PARAMVALUE 7
|
|
#define HB_SOCKET_ERR_NOSUPPORT 8
|
|
#define HB_SOCKET_ERR_NORESOURCE 9
|
|
#define HB_SOCKET_ERR_ACCESS 10
|
|
#define HB_SOCKET_ERR_ADDRINUSE 11
|
|
#define HB_SOCKET_ERR_INTERRUPT 12
|
|
#define HB_SOCKET_ERR_ALREADYCONNECTED 13
|
|
#define HB_SOCKET_ERR_CONNREFUSED 14
|
|
#define HB_SOCKET_ERR_CONNABORTED 15
|
|
#define HB_SOCKET_ERR_CONNRESET 16
|
|
#define HB_SOCKET_ERR_NETUNREACH 17
|
|
#define HB_SOCKET_ERR_NETDOWN 18
|
|
#define HB_SOCKET_ERR_NETRESET 19
|
|
#define HB_SOCKET_ERR_INPROGRESS 20
|
|
#define HB_SOCKET_ERR_ALREADY 21
|
|
#define HB_SOCKET_ERR_ADDRNOTAVAIL 22
|
|
#define HB_SOCKET_ERR_READONLY 23
|
|
#define HB_SOCKET_ERR_AGAIN 24
|
|
#define HB_SOCKET_ERR_INVALIDHANDLE 25
|
|
#define HB_SOCKET_ERR_INVAL 26
|
|
#define HB_SOCKET_ERR_PROTO 27
|
|
#define HB_SOCKET_ERR_PROTOTYPE 28
|
|
#define HB_SOCKET_ERR_NOFILE 29
|
|
#define HB_SOCKET_ERR_NOBUFS 30
|
|
#define HB_SOCKET_ERR_NOMEM 31
|
|
#define HB_SOCKET_ERR_FAULT 32
|
|
#define HB_SOCKET_ERR_NAMETOOLONG 33
|
|
#define HB_SOCKET_ERR_NOENT 34
|
|
#define HB_SOCKET_ERR_NOTDIR 35
|
|
#define HB_SOCKET_ERR_LOOP 36
|
|
#define HB_SOCKET_ERR_MSGSIZE 37
|
|
#define HB_SOCKET_ERR_DESTADDRREQ 38
|
|
#define HB_SOCKET_ERR_NOPROTOOPT 39
|
|
#define HB_SOCKET_ERR_NOTCONN 40
|
|
#define HB_SOCKET_ERR_SHUTDOWN 41
|
|
#define HB_SOCKET_ERR_TOOMANYREFS 42
|
|
#define HB_SOCKET_ERR_RESTARTSYS 43
|
|
#define HB_SOCKET_ERR_NOSR 44
|
|
#define HB_SOCKET_ERR_HOSTDOWN 45
|
|
#define HB_SOCKET_ERR_HOSTUNREACH 46
|
|
#define HB_SOCKET_ERR_NOTEMPTY 47
|
|
#define HB_SOCKET_ERR_USERS 48
|
|
#define HB_SOCKET_ERR_DQUOT 49
|
|
#define HB_SOCKET_ERR_STALE 50
|
|
#define HB_SOCKET_ERR_REMOTE 51
|
|
#define HB_SOCKET_ERR_PROCLIM 52
|
|
#define HB_SOCKET_ERR_DISCON 53
|
|
#define HB_SOCKET_ERR_NOMORE 54
|
|
#define HB_SOCKET_ERR_CANCELLED 55
|
|
#define HB_SOCKET_ERR_INVALIDPROCTABLE 56
|
|
#define HB_SOCKET_ERR_INVALIDPROVIDER 57
|
|
#define HB_SOCKET_ERR_PROVIDERFAILEDINIT 58
|
|
#define HB_SOCKET_ERR_REFUSED 59
|
|
#define HB_SOCKET_ERR_SYSNOTREADY 60
|
|
#define HB_SOCKET_ERR_VERNOTSUPPORTED 61
|
|
#define HB_SOCKET_ERR_NOTINITIALISED 62
|
|
#define HB_SOCKET_ERR_TRYAGAIN 63
|
|
#define HB_SOCKET_ERR_HOSTNOTFOUND 64
|
|
#define HB_SOCKET_ERR_NORECOVERY 65
|
|
#define HB_SOCKET_ERR_NODATA 66
|
|
#define HB_SOCKET_ERR_SYSCALLFAILURE 67
|
|
#define HB_SOCKET_ERR_SERVICENOTFOUND 68
|
|
#define HB_SOCKET_ERR_TYPENOTFOUND 69
|
|
#define HB_SOCKET_ERR_OTHER 70
|
|
|
|
/* protocol family */
|
|
#define HB_SOCKET_PF_LOCAL 1
|
|
#define HB_SOCKET_PF_INET 2
|
|
#define HB_SOCKET_PF_IPX 4
|
|
#define HB_SOCKET_PF_INET6 10
|
|
#define HB_SOCKET_PF_PACKET 17
|
|
|
|
/* address familly */
|
|
#define HB_SOCKET_AF_LOCAL HB_SOCKET_PF_LOCAL
|
|
#define HB_SOCKET_AF_INET HB_SOCKET_PF_INET
|
|
#define HB_SOCKET_AF_IPX HB_SOCKET_PF_IPX
|
|
#define HB_SOCKET_AF_INET6 HB_SOCKET_PF_INET6
|
|
#define HB_SOCKET_AF_PACKET HB_SOCKET_PF_PACKET
|
|
|
|
/* protocol type */
|
|
#define HB_SOCKET_PT_STREAM 1
|
|
#define HB_SOCKET_PT_DGRAM 2
|
|
#define HB_SOCKET_PT_RAW 3
|
|
#define HB_SOCKET_PT_RDM 4
|
|
#define HB_SOCKET_PT_SEQPACKET 5
|
|
|
|
/* IP protocols */
|
|
#define HB_SOCKET_IPPROTO_IP 0 /* Dummy protocol for TCP */
|
|
#define HB_SOCKET_IPPROTO_ICMP 1 /* Internet Control Message Protocol */
|
|
#define HB_SOCKET_IPPROTO_IGMP 2 /* Internet Group Management Protocol */
|
|
#define HB_SOCKET_IPPROTO_IPIP 4 /* IPIP tunnels (older KA9Q tunnels use 94) */
|
|
#define HB_SOCKET_IPPROTO_TCP 6 /* Transmission Control Protocol */
|
|
#define HB_SOCKET_IPPROTO_EGP 8 /* Exterior Gateway Protocol */
|
|
#define HB_SOCKET_IPPROTO_PUP 12 /* PUP protocol */
|
|
#define HB_SOCKET_IPPROTO_UDP 17 /* User Datagram Protocol */
|
|
#define HB_SOCKET_IPPROTO_IDP 22 /* XNS IDP protocol */
|
|
#define HB_SOCKET_IPPROTO_DCCP 23 /* DCCP protocol */
|
|
#define HB_SOCKET_IPPROTO_RDP 29 /* RDP */
|
|
#define HB_SOCKET_IPPROTO_TP 29 /* SO Transport Protocol Class 4 */
|
|
#define HB_SOCKET_IPPROTO_IPV6 41 /* IPv6 header */
|
|
#define HB_SOCKET_IPPROTO_ROUTING 43 /* IPv6 routing header */
|
|
#define HB_SOCKET_IPPROTO_FRAGMENT 44 /* IPv6 fragmentation header */
|
|
#define HB_SOCKET_IPPROTO_RSVP 46 /* Reservation Protocol */
|
|
#define HB_SOCKET_IPPROTO_GRE 47 /* General Routing Encapsulation */
|
|
#define HB_SOCKET_IPPROTO_ESP 50 /* Encapsulating security payload */
|
|
#define HB_SOCKET_IPPROTO_AH 51 /* Authentication header */
|
|
#define HB_SOCKET_IPPROTO_ICMPV6 58 /* ICMP v6 */
|
|
#define HB_SOCKET_IPPROTO_NONE 59 /* IPv6 no next header */
|
|
#define HB_SOCKET_IPPROTO_DSTOPTS 60 /* IPv6 destination options */
|
|
#define HB_SOCKET_IPPROTO_ND 77 /* ND */
|
|
#define HB_SOCKET_IPPROTO_ICLFXBM 78 /* ICLFXBM */
|
|
#define HB_SOCKET_IPPROTO_EON 80 /* EON */
|
|
#define HB_SOCKET_IPPROTO_MTP 92 /* Multicast Transport Protocol */
|
|
#define HB_SOCKET_IPPROTO_ENCAP 98 /* Encapsulation Header */
|
|
#define HB_SOCKET_IPPROTO_PIM 103 /* Protocol Independent Multicast */
|
|
#define HB_SOCKET_IPPROTO_COMP 108 /* Compression Header Protocol */
|
|
#define HB_SOCKET_IPPROTO_PGM 113 /* PGM */
|
|
#define HB_SOCKET_IPPROTO_L2TP 115 /* L2TP */
|
|
#define HB_SOCKET_IPPROTO_SCTP 132 /* Stream Control Transmission Protocol */
|
|
#define HB_SOCKET_IPPROTO_RAW 255 /* Raw IP packets */
|
|
|
|
/* shutdown actions */
|
|
#define HB_SOCKET_SHUT_RD 0
|
|
#define HB_SOCKET_SHUT_WR 1
|
|
#define HB_SOCKET_SHUT_RDWR 2
|
|
|
|
/* interface information flags */
|
|
#define HB_SOCKET_IFF_UP 0x0001 /* Interface is up */
|
|
#define HB_SOCKET_IFF_BROADCAST 0x0002 /* Broadcast address valid */
|
|
#define HB_SOCKET_IFF_LOOPBACK 0x0004 /* Is a loopback net */
|
|
#define HB_SOCKET_IFF_POINTOPOINT 0x0008 /* Interface is point-to-point link */
|
|
#define HB_SOCKET_IFF_MULTICAST 0x0010 /* Supports multicast */
|
|
|
|
/* Harbour interface information indexes */
|
|
#define HB_SOCKET_IFINFO_FAMILY 1 /* adress family */
|
|
#define HB_SOCKET_IFINFO_NAME 2 /* interface name */
|
|
#define HB_SOCKET_IFINFO_FLAGS 3 /* flags HB_SOCKET_IFF_* */
|
|
#define HB_SOCKET_IFINFO_ADDR 4 /* interface address */
|
|
#define HB_SOCKET_IFINFO_NETMASK 5 /* subnetmask */
|
|
#define HB_SOCKET_IFINFO_BROADCAST 6 /* broadcast address */
|
|
#define HB_SOCKET_IFINFO_P2PADDR 7 /* point-to-point address */
|
|
#define HB_SOCKET_IFINFO_HWADDR 8 /* hardware address */
|
|
#define HB_SOCKET_IFINFO_LEN 8
|
|
|
|
#endif /* HB_SOCKET_CH_ */
|