2017-03-26 23:03:02 +00:00
# ifndef NETINC_INCLUDED
# define NETINC_INCLUDED
2005-11-29 13:12:45 +00:00
2014-03-30 08:55:06 +00:00
# ifndef HAVE_PACKET
2012-04-09 19:12:12 +00:00
2017-03-27 21:45:45 +00:00
# ifndef _XBOX
2012-04-09 19:12:12 +00:00
struct sockaddr
{
short sa_family ;
} ;
2017-03-27 21:45:45 +00:00
# define ntohs BigShort
# define htons BigShort
# define htonl BigLong
# define ntohl BigLong
# endif
2012-04-09 19:12:12 +00:00
/* struct sockaddr_in
{
short sin_family ;
unsigned short sin_port ;
in_addr sin_addr ;
} ; */
# define AF_UNSPEC 0
// #define AF_INET 1
/*NaCl engines cannot host servers. Regular FTE servers can use the same listening tcpconnect socket to host a websocket connection*/
# define AF_WEBSOCK 342
struct sockaddr_websocket
{
short sws_family ;
char url [ 64 ] ;
} ;
2017-03-27 21:45:45 +00:00
2014-03-30 08:55:06 +00:00
2012-04-09 19:12:12 +00:00
# elif defined(_WIN32)
2017-03-26 23:03:02 +00:00
# ifdef _XBOX
# include <xtl.h>
# include <WinSockX.h>
# else
# ifdef _MSC_VER
# define USEIPX
# endif
# define WIN32_LEAN_AND_MEAN
# include <windows.h>
# include <winsock2.h>
# ifdef USEIPX
# include "wsipx.h"
# endif
# include <ws2tcpip.h>
2005-11-30 01:20:53 +00:00
# endif
2010-12-18 21:30:16 +00:00
# include <errno.h>
2017-03-26 23:03:02 +00:00
# if !defined(IPPROTO_IPV6) && !defined(_XBOX)
2010-11-10 02:02:56 +00:00
/*for msvc6*/
2012-09-30 05:52:03 +00:00
# define IPPROTO_IPV6 41
2010-11-11 09:06:36 +00:00
# ifndef EAI_NONAME
# define EAI_NONAME 8
# endif
2008-05-25 01:11:20 +00:00
struct ip6_scope_id
{
union
{
struct
{
u_long Zone : 28 ;
u_long Level : 4 ;
} ;
u_long Value ;
} ;
} ;
2010-11-11 09:06:36 +00:00
2013-11-21 23:02:28 +00:00
# if !defined(in_addr6)
2017-03-26 23:03:02 +00:00
struct in6_addr
2008-05-25 01:11:20 +00:00
{
2017-03-26 23:03:02 +00:00
u_char s6_addr [ 16 ] ; /* IPv6 address */
} ;
# define sockaddr_in6 sockaddr_in6_fixed /*earlier versions of msvc have a sockaddr_in6 which does _not_ match windows, so this *must* be redefined for any non-final msvc releases or it won't work at all*/
typedef struct sockaddr_in6
{
short sin6_family ;
u_short sin6_port ;
u_long sin6_flowinfo ;
struct in6_addr sin6_addr ;
union
{
u_long sin6_scope_id ;
struct ip6_scope_id sin6_scope_struct ;
} ;
} ;
struct addrinfo
{
int ai_flags ;
int ai_family ;
int ai_socktype ;
int ai_protocol ;
size_t ai_addrlen ;
char * ai_canonname ;
struct sockaddr * ai_addr ;
struct addrinfo * ai_next ;
2008-05-25 01:11:20 +00:00
} ;
2010-11-11 09:06:36 +00:00
# endif
2005-11-30 01:20:53 +00:00
# endif
2011-12-05 15:23:40 +00:00
# ifndef IPV6_V6ONLY
# define IPV6_V6ONLY 27
# endif
2017-03-26 23:03:02 +00:00
# define HAVE_IPV4
# ifdef IPPROTO_IPV6
# define HAVE_IPV6
# endif
2005-11-29 13:12:45 +00:00
# else
2013-07-15 09:55:27 +00:00
# include <sys/time.h>
2005-11-30 01:20:53 +00:00
# include <sys/types.h>
# include <sys/socket.h>
# include <netinet/in.h>
2005-12-02 01:14:20 +00:00
# include <netinet/tcp.h>
2005-11-30 01:20:53 +00:00
# include <netdb.h>
# include <sys/ioctl.h>
# include <sys/uio.h>
# include <arpa/inet.h>
# include <errno.h>
2005-11-29 13:12:45 +00:00
2005-11-30 01:20:53 +00:00
# include <unistd.h>
2005-11-29 13:12:45 +00:00
2005-11-30 01:20:53 +00:00
# ifdef sun
# include <sys/filio.h>
# endif
# ifdef NeXT
# include <libc.h>
# endif
# if defined(__MORPHOS__) && !defined(ixemul)
# define closesocket CloseSocket
# define ioctlsocket IoctlSocket
# else
# define closesocket close
# define ioctlsocket ioctl
# endif
2005-11-29 13:12:45 +00:00
2012-02-29 20:54:22 +00:00
# if defined(AF_INET6) && !defined(IPPROTO_IPV6)
2017-03-26 23:03:02 +00:00
# define IPPROTO_IPV6 IPPROTO_IPV6 //fte often just checks to see if IPPROTO_IPV6 is defined or not, which doesn't work if its an enum value or somesuch...
# endif
# if defined(AF_INET)
# define HAVE_IPV4
# endif
# ifdef IPPROTO_IPV6
# define HAVE_IPV6
2012-02-29 20:54:22 +00:00
# endif
2010-03-19 03:45:11 +00:00
# define SOCKET int
2005-11-29 13:12:45 +00:00
# endif
# if defined(_WIN32)
2014-02-07 08:38:40 +00:00
# define neterrno() WSAGetLastError()
//this madness is because winsock defines its own errors instead of using system error codes.
//*AND* microsoft then went and defined names for all the unix ones too... with different values! oh the insanity of it all!
# define NET_EWOULDBLOCK WSAEWOULDBLOCK
# define NET_EINPROGRESS WSAEINPROGRESS
# define NET_EMSGSIZE WSAEMSGSIZE
# define NET_ECONNRESET WSAECONNRESET
# define NET_ECONNABORTED WSAECONNABORTED
# define NET_ECONNREFUSED WSAECONNREFUSED
2016-07-12 00:40:13 +00:00
# define NET_ETIMEDOUT WSAETIMEDOUT
2014-02-07 08:38:40 +00:00
# define NET_ENOTCONN WSAENOTCONN
# define NET_EACCES WSAEACCES
# define NET_EADDRNOTAVAIL WSAEADDRNOTAVAIL
2018-03-07 20:31:09 +00:00
# define NET_ENETUNREACH WSAENETUNREACH
2014-02-07 08:38:40 +00:00
# define NET_EAFNOSUPPORT WSAEAFNOSUPPORT
2005-11-29 13:12:45 +00:00
# elif defined(__MORPHOS__) && !defined(ixemul)
2014-02-07 08:38:40 +00:00
# define neterrno() Errno()
2005-11-29 13:12:45 +00:00
# else
2014-02-07 08:38:40 +00:00
# define neterrno() errno
# endif
# ifndef NET_EWOULDBLOCK
//assume unix codes instead, so our prefix still works.
# define NET_EWOULDBLOCK EWOULDBLOCK
# define NET_EINPROGRESS EINPROGRESS
# define NET_EMSGSIZE EMSGSIZE
# define NET_ECONNRESET ECONNRESET
# define NET_ECONNABORTED ECONNABORTED
# define NET_ECONNREFUSED ECONNREFUSED
2014-05-16 17:45:37 +00:00
# define NET_ETIMEDOUT ETIMEDOUT
2014-02-07 08:38:40 +00:00
# define NET_ENOTCONN ENOTCONN
# define NET_EACCES EACCES
# define NET_EADDRNOTAVAIL EADDRNOTAVAIL
2018-03-07 20:31:09 +00:00
# define NET_ENETUNREACH ENETUNREACH
2014-02-07 08:38:40 +00:00
# define NET_EAFNOSUPPORT EAFNOSUPPORT
2005-11-29 13:12:45 +00:00
# endif
# ifndef INVALID_SOCKET
2005-11-30 01:20:53 +00:00
# define INVALID_SOCKET -1
2005-11-29 13:12:45 +00:00
# endif
2005-12-31 13:33:10 +00:00
# ifndef INADDR_LOOPBACK
# define INADDR_LOOPBACK 0x7f000001
# endif
2013-04-02 05:18:17 +00:00
# if defined(FTE_TARGET_WEB)
# undef IPPROTO_IPV6
# endif
2013-06-23 02:17:02 +00:00
# if 1 //def SUPPORT_ICE
2013-06-29 16:01:07 +00:00
struct icecandinfo_s
2013-06-23 02:17:02 +00:00
{
2013-06-29 16:01:07 +00:00
char candidateid [ 64 ] ;
char addr [ 64 ] ; //v4/v6/fqdn. fqdn should prefer ipv6
2013-06-23 02:17:02 +00:00
int port ;
int transport ; //0=udp. other values not supported
int foundation ; //to figure out...
int component ; //1-based. allows rtp+rtcp in a single ICE... we only support one.
int priority ; //some random value...
enum
{
ICE_HOST = 0 ,
2013-11-21 23:02:28 +00:00
ICE_SRFLX = 1 , //Server Reflexive (from stun, etc)
ICE_PRFLX = 2 , //Peer Reflexive
2013-06-23 02:17:02 +00:00
ICE_RELAY = 3 ,
} type ; //says what sort of proxy is used.
2013-06-29 16:01:07 +00:00
char reladdr [ 64 ] ; //when proxied, this is our local info
2013-06-23 02:17:02 +00:00
int relport ;
int generation ; //for ice restarts. starts at 0.
int network ; //which network device this comes from.
} ;
2013-06-29 16:01:07 +00:00
enum iceproto_e
2013-06-23 02:17:02 +00:00
{
2013-06-29 16:01:07 +00:00
ICEP_INVALID , //not allowed..
ICEP_QWSERVER , //we're server side
ICEP_QWCLIENT , //we're client side
2013-11-21 23:02:28 +00:00
ICEP_VOICE , //speex. requires client.
ICEP_VIDEO //err... REALLY?!?!?
2013-06-29 16:01:07 +00:00
} ;
enum icemode_e
{
ICEM_RAW , //not actually interactive beyond a simple handshake.
ICEM_ICE //rfc5245. meant to be able to holepunch, but not implemented properly yet.
} ;
enum icestate_e
{
ICE_INACTIVE , //idle.
ICE_FAILED ,
ICE_CONNECTING , //exchanging pings.
ICE_CONNECTED //media is flowing, supposedly. sending keepalives.
2013-06-23 02:17:02 +00:00
} ;
2013-06-29 16:01:07 +00:00
struct icestate_s ;
# define ICE_API_CURRENT "Internet Connectivity Establishment 0.0"
typedef struct
{
2016-07-12 00:40:13 +00:00
struct icestate_s * ( QDECL * ICE_Create ) ( void * module , const char * conname , const char * peername , enum icemode_e mode , enum iceproto_e proto ) ; //doesn't start pinging anything.
2016-02-15 06:01:17 +00:00
qboolean ( QDECL * ICE_Set ) ( struct icestate_s * con , const char * prop , const char * value ) ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
qboolean ( QDECL * ICE_Get ) ( struct icestate_s * con , const char * prop , char * value , size_t valuesize ) ;
2013-06-29 16:01:07 +00:00
struct icecandinfo_s * ( QDECL * ICE_GetLCandidateInfo ) ( struct icestate_s * con ) ; //retrieves candidates that need reporting to the peer.
void ( QDECL * ICE_AddRCandidateInfo ) ( struct icestate_s * con , struct icecandinfo_s * cand ) ; //stuff that came from the peer.
void ( QDECL * ICE_Close ) ( struct icestate_s * con ) ; //bye then.
void ( QDECL * ICE_CloseModule ) ( void * module ) ; //closes all unclosed connections, with warning.
2016-07-12 00:40:13 +00:00
// struct icestate_s *(QDECL *ICE_Find)(void *module, const char *conname);
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
qboolean ( QDECL * ICE_GetLCandidateSDP ) ( struct icestate_s * con , char * out , size_t valuesize ) ; //retrieves candidates that need reporting to the peer.
2013-06-29 16:01:07 +00:00
} icefuncs_t ;
extern icefuncs_t iceapi ;
2013-07-31 00:20:16 +00:00
# endif
2013-11-21 23:02:28 +00:00
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
//address flags
2014-02-07 08:38:40 +00:00
# define ADDR_NATPMP (1u<<0)
# define ADDR_UPNPIGP (1u<<1)
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
# define ADDR_REFLEX (1u<<2) //as reported by some external server.
2013-11-21 23:02:28 +00:00
# define FTENET_ADDRTYPES 2
typedef struct ftenet_generic_connection_s {
char name [ MAX_QPATH ] ;
2014-02-07 08:38:40 +00:00
int ( * GetLocalAddresses ) ( struct ftenet_generic_connection_s * con , unsigned int * adrflags , netadr_t * addresses , int maxaddresses ) ;
2015-12-12 19:25:15 +00:00
qboolean ( * ChangeLocalAddress ) ( struct ftenet_generic_connection_s * con , netadr_t * newadr ) ;
2013-11-21 23:02:28 +00:00
qboolean ( * GetPacket ) ( struct ftenet_generic_connection_s * con ) ;
2016-07-12 00:40:13 +00:00
neterr_t ( * SendPacket ) ( struct ftenet_generic_connection_s * con , int length , const void * data , netadr_t * to ) ;
2013-11-21 23:02:28 +00:00
void ( * Close ) ( struct ftenet_generic_connection_s * con ) ;
# ifdef HAVE_PACKET
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
int ( * SetFDSets ) ( struct ftenet_generic_connection_s * con , fd_set * readfdset , fd_set * writefdset ) ; /*set for connections which have multiple sockets (ie: listening tcp connections)*/
2013-11-21 23:02:28 +00:00
# endif
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
void ( * PrintStatus ) ( struct ftenet_generic_connection_s * con ) ;
2013-11-21 23:02:28 +00:00
netadrtype_t addrtype [ FTENET_ADDRTYPES ] ;
qboolean islisten ;
# ifdef HAVE_PACKET
SOCKET thesocket ;
# else
int thesocket ;
# endif
} ftenet_generic_connection_t ;
2017-05-18 10:24:09 +00:00
# ifdef HAVE_DTLS
2017-06-21 01:24:25 +00:00
typedef struct dtlsfuncs_s
{
void * ( * CreateContext ) ( const char * remotehost , void * cbctx , neterr_t ( * push ) ( void * cbctx , const qbyte * data , size_t datasize ) , qboolean isserver ) ; //if remotehost is null then their certificate will not be validated.
void ( * DestroyContext ) ( void * ctx ) ;
neterr_t ( * Transmit ) ( void * ctx , const qbyte * data , size_t datasize ) ;
neterr_t ( * Received ) ( void * ctx , qbyte * data , size_t datasize ) ;
neterr_t ( * Timeouts ) ( void * ctx ) ;
} dtlsfuncs_t ;
const dtlsfuncs_t * DTLS_InitServer ( void ) ;
const dtlsfuncs_t * DTLS_InitClient ( void ) ;
# ifdef HAVE_WINSSPI
const dtlsfuncs_t * SSPI_DTLS_InitServer ( void ) ; //returns NULL if there's no cert available.
const dtlsfuncs_t * SSPI_DTLS_InitClient ( void ) ; //should always return something, if implemented.
# endif
# ifdef HAVE_GNUTLS
const dtlsfuncs_t * GNUDTLS_InitServer ( void ) ; //returns NULL if there's no cert available.
const dtlsfuncs_t * GNUDTLS_InitClient ( void ) ; //should always return something, if implemented.
# endif
2017-05-18 10:24:09 +00:00
# endif
2013-11-21 23:02:28 +00:00
# define MAX_CONNECTIONS 8
typedef struct ftenet_connections_s
{
qboolean islisten ;
2014-07-02 03:20:40 +00:00
unsigned int packetsin ;
unsigned int packetsout ;
unsigned int bytesin ;
unsigned int bytesout ;
unsigned int timemark ;
float packetsinrate ;
float packetsoutrate ;
float bytesinrate ;
float bytesoutrate ;
2013-11-21 23:02:28 +00:00
ftenet_generic_connection_t * conn [ MAX_CONNECTIONS ] ;
2017-05-18 10:24:09 +00:00
# ifdef HAVE_DTLS
struct dtlspeer_s * dtls ; //linked list. linked lists are shit, but at least it keeps pointers valid when things are resized.
2017-06-21 01:24:25 +00:00
const dtlsfuncs_t * dtlsfuncs ;
2017-05-18 10:24:09 +00:00
# endif
2017-11-15 12:38:20 +00:00
struct ftenet_delayed_packet_s
{
unsigned int sendtime ; //in terms of Sys_Milliseconds()
struct ftenet_delayed_packet_s * next ;
netadr_t dest ;
size_t cursize ;
qbyte data [ 1 ] ;
} * delayed_packets ;
2013-11-21 23:02:28 +00:00
} ftenet_connections_t ;
void ICE_Tick ( void ) ;
qboolean ICE_WasStun ( netsrc_t netsrc ) ;
void QDECL ICE_AddLCandidateConn ( ftenet_connections_t * col , netadr_t * addr , int type ) ;
void QDECL ICE_AddLCandidateInfo ( struct icestate_s * con , netadr_t * adr , int adrno , int type ) ;
ftenet_connections_t * FTENET_CreateCollection ( qboolean listen ) ;
void FTENET_CloseCollection ( ftenet_connections_t * col ) ;
2017-06-21 01:24:25 +00:00
qboolean FTENET_AddToCollection ( struct ftenet_connections_s * col , const char * name , const char * address , netadrtype_t addrtype , netproto_t addrprot ) ;
playdemo accepts https urls now. will start playing before the file has finished downloading, to avoid unnecessary delays.
reworked network addresses to separate address family and connection type. this should make banning people more reliable, as well as simplifying a whole load of logic (no need to check for ipv4 AND ipv6).
tcpconnect will keep trying to connect even if the connection wasn't instant, instead of giving up instantly.
rewrote tcp connections quite a bit. sv_port_tcp now handles qtv+qizmo+http+ws+rtcbroker+tls equivalents.
qtv_streamport is now a legacy cvar and now acts equivalently to sv_port_tcp (but still separate).
rewrote screenshot and video capture code to use strides. this solves image-is-upside down issues with vulkan.
ignore alt key in browser port. oh no! no more red text! oh no! no more alt-being-wrongly-down-and-being-unable-to-type-anything-without-forcing-alt-released!
reworked audio decoder interface. now has clearly defined success/unavailable/end-of-file results. this should solve a whole load of issues with audio streaming.
fixed various openal audio streaming issues too. openal also got some workarounds for emscripten's poor emulation.
fixed ogg decoder to retain sync properly if seeked.
updated menu_media a bit. now reads vorbis comments/id3v1 tags to get proper track names. also saves the playlist so you don't have to manually repopulate the list so it might actually be usable now (after how many years?)
r_stains now defaults to 0, and is no longer enabled by presets. use decals if you want that sort of thing.
added fs_noreexec cvar, so configs will not be reexeced on gamedir change. this also means defaults won't be reapplied, etc.
added 'nvvk' renderer on windows, using nvidia's vulkan-inside-opengl gl extension. mostly just to see how much slower it is.
fixed up the ftp server quite a lot. more complete, more compliant, and should do ipv6 properly to-boot. file transfers also threaded.
fixed potential crash inside runclientphys.
experimental sv_antilag=3 setting. totally untested. the aim is to avoid missing due to lagged knockbacks. may be expensive for the server.
browser port's websockets support fixed. experimental support for webrtc ('works for me', requires a broker server).
updated avplug(renamed to ffmpeg so people know what it is) to use ffmpeg 3.2.4 properly, with its new encoder api. should be much more robust... also added experimental audio decoder for game music etc (currently doesn't resample, so playback rates are screwed, disabled by cvar).
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@5097 fc73d0e0-1445-4013-8a0c-d673dee63da5
2017-05-10 02:08:58 +00:00
int NET_EnumerateAddresses ( ftenet_connections_t * collection , struct ftenet_generic_connection_s * * con , unsigned int * adrflags , netadr_t * addresses , int maxaddresses ) ;
2014-02-07 08:38:40 +00:00
2017-05-18 10:24:09 +00:00
vfsfile_t * FS_OpenSSL ( const char * hostname , vfsfile_t * source , qboolean server ) ;
2017-09-20 11:27:13 +00:00
int TLS_GetChannelBinding ( vfsfile_t * stream , qbyte * data , size_t * datasize ) ; //datasize should be preinitialised to the max length allowed. -1 for not implemented. 0 for peer problems. 1 for success
2014-03-30 08:55:06 +00:00
# ifdef HAVE_PACKET
vfsfile_t * FS_OpenTCPSocket ( SOCKET socket , qboolean conpending , const char * peername ) ; //conpending allows us to reject any writes until the connection has succeeded
# endif
vfsfile_t * FS_OpenTCP ( const char * name , int defaultport ) ;
2016-07-12 00:40:13 +00:00
# ifndef SOCK_CLOEXEC
# define SOCK_CLOEXEC 0
# endif
2017-03-26 23:03:02 +00:00
# endif //NETINC_INCLUDED