AmiTimeKeeper/net.h

142 lines
4.1 KiB
C

/*-
* Copyright (c) 2017-2021 Carsten Sonne Larsen <cs@innolan.net>
* 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.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``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 AUTHOR 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.
*
*/
#ifndef NET_H_INCLUDED
#define NET_H_INCLUDED
#ifndef ENOTSOCK
#define ENOTSOCK 38
#endif
#ifndef EDESTADDRREQ
#define EDESTADDRREQ 39
#endif
#ifndef EMSGSIZE
#define EMSGSIZE 40
#endif
#ifndef EPROTOTYPE
#define EPROTOTYPE 41
#endif
#ifndef ENOPROTOOPT
#define ENOPROTOOPT 42
#endif
#ifndef EPROTONOSUPPORT
#define EPROTONOSUPPORT 43
#endif
#ifndef ESOCKTNOSUPPORT
#define ESOCKTNOSUPPORT 44
#endif
#ifndef EOPNOTSUPP
#define EOPNOTSUPP 45
#endif
#ifndef EPFNOSUPPORT
#define EPFNOSUPPORT 46
#endif
#ifndef EAFNOSUPPORT
#define EAFNOSUPPORT 47
#endif
#ifndef EADDRINUSE
#define EADDRINUSE 48
#endif
#ifndef EADDRNOTAVAIL
#define EADDRNOTAVAIL 49
#endif
#ifndef ENETDOWN
#define ENETDOWN 50
#endif
#ifndef ENETUNREACH
#define ENETUNREACH 51
#endif
#ifndef ENETRESET
#define ENETRESET 52
#endif
#ifndef ECONNABORTED
#define ECONNABORTED 53
#endif
#ifndef ECONNRESET
#define ECONNRESET 54
#endif
#ifndef ENOBUFS
#define ENOBUFS 55
#endif
#ifndef EISCONN
#define EISCONN 56
#endif
#ifndef ENOTCONN
#define ENOTCONN 57
#endif
#ifndef ESHUTDOWN
#define ESHUTDOWN 58
#endif
#ifndef ETOOMANYREFS
#define ETOOMANYREFS 59
#endif
#ifndef ETIMEDOUT
#define ETIMEDOUT 60
#endif
#ifndef ECONNREFUSED
#define ECONNREFUSED 61
#endif
#ifndef EHOSTDOWN
#define EHOSTDOWN 64
#endif
#ifndef EHOSTUNREACH
#define EHOSTUNREACH 65
#endif
int OpenSocketLibrary(void);
void CloseSocketLibrary(void);
const char *GetErrorText(void);
const char *GetHostErrorText(void);
int GetErrorNo(void);
int GetHostErrorNo(void);
extern struct Library *SocketBase;
/*TODO: Use Roadshow getaddrinfo() if available
#define getaddrinfo_roadshow(hostname, servname, hints, res) ({ \
CONST_STRPTR _getaddrinfo_hostname = (hostname); \
CONST_STRPTR _getaddrinfo_servname = (servname); \
const struct addrinfo * _getaddrinfo_hints = (hints); \
struct addrinfo ** _getaddrinfo_res = (res); \
LONG _getaddrinfo__re = \
({ \
register struct Library * const __getaddrinfo__bn __asm("a6") = (struct Library *) (BSDSOCKET_BASE_NAME); register int _d1 __asm("d1"); register int _a0 __asm("a0"); register int _a1 __asm("a1");\
register LONG __getaddrinfo__re __asm("d0"); \
register CONST_STRPTR __getaddrinfo_hostname __asm("a0") = (_getaddrinfo_hostname); \
register CONST_STRPTR __getaddrinfo_servname __asm("a1") = (_getaddrinfo_servname); \
register const struct addrinfo * __getaddrinfo_hints __asm("a2") = (_getaddrinfo_hints); \
register struct addrinfo ** __getaddrinfo_res __asm("a3") = (_getaddrinfo_res); \
__asm volatile ("jsr a6@(-810:W)" \
: "=r" (_d1), "=r" (_a0), "=r" (_a1), "=r"(__getaddrinfo__re) \
: "r"(__getaddrinfo__bn), "r"(__getaddrinfo_hostname), "r"(__getaddrinfo_servname), "r"(__getaddrinfo_hints), "r"(__getaddrinfo_res) \
: "fp0", "fp1", "cc", "memory"); \
__getaddrinfo__re; \
}); \
_getaddrinfo__re; \
})
*/
#endif