diff options
| author | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2009-08-08 12:22:23 +0000 |
|---|---|---|
| committer | marco <marco@3ad0048d-3df7-0310-abae-a5850022a9f2> | 2009-08-08 12:22:23 +0000 |
| commit | cc4ce4d1feee5df365364d07d569303aa198094d (patch) | |
| tree | 7bc63ac5e951974a47d786fe762140b5a0b50c97 /packages/fcl-net | |
| parent | 6ad92feeb58c63cb76237c4375e230dfa29aef71 (diff) | |
| download | fpc-cc4ce4d1feee5df365364d07d569303aa198094d.tar.gz | |
* Initial version of "C" netdb header. FreeBSD version.
git-svn-id: http://svn.freepascal.org/svn/fpc/trunk@13497 3ad0048d-3df7-0310-abae-a5850022a9f2
Diffstat (limited to 'packages/fcl-net')
| -rw-r--r-- | packages/fcl-net/src/cnetdb.pp | 267 |
1 files changed, 267 insertions, 0 deletions
diff --git a/packages/fcl-net/src/cnetdb.pp b/packages/fcl-net/src/cnetdb.pp new file mode 100644 index 0000000000..b754d6cac4 --- /dev/null +++ b/packages/fcl-net/src/cnetdb.pp @@ -0,0 +1,267 @@ +unit cNetDB; + +{*- + * Copyright (c) 1980, 1983, 1988, 1993 + * The Regents of the University of California. All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * 3. All advertising materials mentioning features or use of this software + * must display the following acknowledgement: + * This product includes software developed by the University of + * California, Berkeley and its contributors. + * 4. Neither the name of the University nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS + * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) + * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT + * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY + * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF + * SUCH DAMAGE. + * + * - + * Portions Copyright (c) 1993 by Digital Equipment Corporation. + * + * Permission to use, copy, modify, and distribute this software for any + * purpose with or without fee is hereby granted, provided that the above + * copyright notice and this permission notice appear in all copies, and that + * the name of Digital Equipment Corporation not be used in advertising or + * publicity pertaining to distribution of the document or software without + * specific, written prior permission. + * + * THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL + * WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES + * OF MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL DIGITAL EQUIPMENT + * CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL + * DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR + * PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS + * ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS + * SOFTWARE. + * - + * --Copyright-- + *} + +{* + * @(#)netdb.h 8.1 (Berkeley) 6/2/93 + * From: Id: netdb.h,v 8.9 1996/11/19 08:39:29 vixie Exp $ + * $FreeBSD: src/include/netdb.h,v 1.38.2.1 2005/07/22 20:17:30 ume Exp $ + *} + +{$mode objfpc}{$H+} + +interface + +uses + BaseUnix, Sockets,initc; + +const + LIB_C = clib; // use initc's idea of what libc is called. In the future overrides might be necessary here. + // (older BSD convention is to have a separate libresolve that contains these functions) + +// Error return codes from gethostbyname() and gethostbyaddr() +// (left in h_errno). + +const + NETDB_INTERNAL = -(1); { see errno } + NETDB_SUCCESS = 0; { no problem } + HOST_NOT_FOUND = 1; { Authoritative Answer Host not found } + TRY_AGAIN = 2; { Non-Authoritative Host not found, or SERVERFAIL } + NO_RECOVERY = 3; { Non recoverable errors, FORMERR, REFUSED, NOTIMP } + NO_DATA = 4; { Valid name, no data record of requested type } + NO_ADDRESS = NO_DATA; { no address, look for MX record } +{ + return codes from getaddrinfo() +} + + EAI_AGAIN = 2; { address family for hostname not supported } + EAI_BADFLAGS = 3; { invalid value for ai_flags } + EAI_FAIL = 4; { non-recoverable failure in name resolution } + EAI_FAMILY = 5; { ai_family not supported } + EAI_MEMORY = 6; { memory allocation failure } + EAI_NONAME = 8; { hostname nor servname provided, or not known } + EAI_SERVICE = 9; { servname not supported for ai_socktype } + EAI_SOCKTYPE = 10; { ai_socktype not supported } + EAI_SYSTEM = 11; { system error returned in errno } + EAI_BADHINTS = 12; + EAI_PROTOCOL = 13; + EAI_MAX = 14; +{ + * Flag values for getaddrinfo() + } +{ get address to use bind() } + AI_PASSIVE = $00000001; +{ fill ai_canonname } + AI_CANONNAME = $00000002; +{ prevent host name resolution } + AI_NUMERICHOST = $00000004; +{ prevent service name resolution } + AI_NUMERICSERV = $00000008; +{ IPv6 and IPv4-mapped (with AI_V4MAPPED) } + AI_ALL = $00000100; +{ accept IPv4-mapped if kernel supports } + AI_V4MAPPED_CFG = $00000200; +{ only if any address is assigned } + AI_ADDRCONFIG = $00000400; +{ accept IPv4-mapped IPv6 address } + AI_V4MAPPED = $00000800; +{ special recommended flags for getipnodebyname } + AI_DEFAULT = AI_V4MAPPED_CFG or AI_ADDRCONFIG; +{ valid flags for addrinfo (not a standard def, apps should not use it) } + AI_MASK = AI_PASSIVE or AI_CANONNAME or AI_NUMERICHOST or AI_NUMERICSERV or AI_ADDRCONFIG; + +{ + * Constants for getnameinfo() + } + NI_MAXHOST = 1025; + NI_MAXSERV = 32; +{ + * Flag values for getnameinfo() + } + NI_NOFQDN = $00000001; + NI_NUMERICHOST = $00000002; + NI_NAMEREQD = $00000004; + NI_NUMERICSERV = $00000008; + NI_DGRAM = $00000010; +{ + * Scope delimit character + } + +const + SCOPE_DELIMITER = '%'; + +//#define h_addr h_addr_list[0] /* address, for backward compatibility */ + +type +{* + * Structures returned by network data base library. All addresses are + * supplied in host order, and returned in network order (suitable for + * use in system calls). + *} + hostent = record + h_name: PChar; {/* official name of host *} + h_aliases: PPChar; {* alias list *} + h_addrtype: cInt; {* host address type *} + h_length: cInt; {* length of address *} + h_addr_list: PPChar;{* list of addresses from name server *} + end; + THostEnt = hostent; + PHostEnt = ^THostEnt; + PPHostEnt = ^PHostEnt; + + netent = record + n_name: PChar; {* official name of net *} + n_aliases: PPChar; {* alias list *} + n_addrtype: cInt; {* net address type *} + n_net: cuInt32; {* network # *} + end; + TNetEnt = netent; + PNetEnt = ^TNetEnt; + PPNetEnt = ^PNetEnt; + + servent = record + s_name: PChar; {* official service name *} + s_aliases: PPChar;{* alias list *} + s_port: cInt; {* port # *} + s_proto: PChar; {* protocol to use *} + end; + TServEnt = servent; + PServEnt = ^TServEnt; + PPServEnt = ^PServEnt; + + protoent = record + p_name: PChar; {* official protocol name *} + p_aliases: PPChar; {* alias list *} + p_proto: cInt; {* protocol # *} + end; + TProtoEnt = protoent; + PProtoEnt = ^TProtoEnt; + PPProtoEnt = ^PProtoEnt; + + PAddrInfo = ^addrinfo; + addrinfo = record + ai_flags: cInt; {* AI_PASSIVE, AI_CANONNAME, AI_NUMERICHOST *} + ai_family: cInt; {* PF_xxx *} + ai_socktype: cInt; {* SOCK_xxx *} + ai_protocol: cInt; {* 0 or IPPROTO_xxx for IPv4 and IPv6 *} + ai_addrlen: TSocklen; {* length of ai_addr *} + ai_canonname: PChar; {* canonical name for hostname *} + ai_addr: psockaddr; {* binary address *} + ai_next: PAddrInfo; {* next structure in linked list *} + end; + TAddrInfo = addrinfo; + PPAddrInfo = ^PAddrInfo; + + +procedure endhostent; cdecl; external LIB_C name 'endhostent'; +procedure endnetent; cdecl; external LIB_C name 'endnetent'; +procedure endnetgrent; cdecl; external LIB_C name 'endnetgrent'; +procedure endprotoent; cdecl; external LIB_C name 'endprotoent'; +procedure endservent; cdecl; external LIB_C name 'endservent'; +procedure freehostent(ptr: PHostEnt); cdecl; external LIB_C name 'freehostent'; +function gethostbyaddr(addr: PChar; len, typ: cInt): PHostEnt; cdecl; external LIB_C name 'gethostbyaddr'; + +function gethostbyname(name: PChar): PHostEnt; cdecl; external LIB_C name 'gethostbyname'; + +function gethostbyname2(name: PChar; af: cInt): PHostEnt; cdecl; external LIB_C name 'gethostbyname2'; + +function gethostent: PHostEnt; cdecl; external LIB_C name 'gethostent'; + +function getipnodebyaddr(src: Pointer; len: size_t; af: cInt; error_num: PcInt): PHostEnt; cdecl; external LIB_C name 'getipnodebyaddr'; + +function getipnodebyname(name: PChar; af, flags: cInt; error_num: PcInt): PHostEnt; cdecl; external LIB_C name 'getipnodebyname'; + +function getnetbyaddr(net: cint32; typ: cInt): PNetEnt; cdecl; external LIB_C name 'getnetbyaddr'; + +function getnetbyname(name: PChar): PNetEnt; cdecl; external LIB_C name 'getnetbyname'; + +function getnetent: PNetEnt; cdecl; external LIB_C name 'getnetent'; + +function getnetgrent(host, user, domain: PPChar): cInt; cdecl; external LIB_C name 'getnetgrent'; + +function getprotobyname(name: PChar): PProtoEnt; cdecl; external LIB_C name 'getprotobyname'; + +function getprotobynumber(proto: cInt): PProtoEnt; cdecl; external LIB_C name 'getprotobynumber'; + +function getprotoent: PProtoEnt; cdecl; external LIB_C name 'getprotoent'; + +function getservbyname(name, proto: PChar): PServEnt; cdecl; external LIB_C name 'getservbyname'; + +function getservbyport(port: cInt; proto: PChar): PServEnt; cdecl; external LIB_C name 'getservbyport'; + +function getservent: PServEnt; cdecl; external LIB_C name 'getservent'; +procedure herror(erstring: PChar); cdecl; external LIB_C name 'herror'; +function hstrerror(err: cInt): PChar; cdecl; external LIB_C name 'hstrerror'; +function innetgr(netgroup, host, user, domain: PChar): cInt; cdecl; external LIB_C name 'innetgr'; +procedure sethostent(i: cInt); cdecl; external LIB_C name 'sethostent'; + +{* void sethostfile(const char *); *} + +procedure setnetent(stayopen: cInt); cdecl; external LIB_C name 'setnetent'; +procedure setprotoent(stayopen: cInt); cdecl; external LIB_C name 'setprotoent'; +function getaddrinfo(hostname, servname: PChar; + hints: PAddrInfo; res: PPAddrInfo): cInt; cdecl; external LIB_C name 'getaddrinfo'; +function getnameinfo(sa: PSockAddr; salen: TSockLen; host: PChar; hostlen: TSize; + serv: PChar; servlen: TSize; flags: cInt): cInt; cdecl; external LIB_C name 'getnameinfo'; +procedure freeaddrinfo(ai: PAddrInfo); cdecl; external LIB_C name 'freeaddrinfo'; +function gai_strerror(ecode: cInt): PChar; cdecl; external LIB_C name 'gai_strerror'; +procedure setnetgrent(netgroup: PChar); cdecl; external LIB_C name 'setnetgrent'; +procedure setservent(stayopen: cInt); cdecl; external LIB_C name 'setservent'; + + +implementation + +end. + |
