Skip to content

Commit

Permalink
Move broker address to a cvar, so users can actually change it.
Browse files Browse the repository at this point in the history
  • Loading branch information
Shpoike committed Apr 17, 2023
1 parent 02a8a4f commit 95d2555
Show file tree
Hide file tree
Showing 9 changed files with 58 additions and 46 deletions.
22 changes: 11 additions & 11 deletions engine/client/net_master.c
Original file line number Diff line number Diff line change
Expand Up @@ -2889,18 +2889,18 @@ void MasterInfo_Refresh(qboolean doreset)
Master_AddMaster("255.255.255.255:"STRINGIFY(PORT_Q3SERVER), MT_BCAST, MP_QUAKE3, "Nearby Quake3 UDP servers.");
#endif

if (!fs_manifest->rtcbroker || !*fs_manifest->rtcbroker)
if (!*net_ice_broker.string)
; //nope, sorry, not configured.
else
{
char *url;
COM_Parse(com_protocolname.string);
if (!strncmp(fs_manifest->rtcbroker, "tls://", 6))
url = va("https://%s/raw/%s", fs_manifest->rtcbroker+6, com_token);
else if (!strncmp(fs_manifest->rtcbroker, "tcp://", 6))
url = va("http://%s/raw/%s", fs_manifest->rtcbroker+6, com_token);
if (!strncmp(net_ice_broker.string, "tls://", 6))
url = va("https://%s/raw/%s", net_ice_broker.string+6, com_token);
else if (!strncmp(net_ice_broker.string, "tcp://", 6))
url = va("http://%s/raw/%s", net_ice_broker.string+6, com_token);
else
url = va("http://%s/raw/%s", fs_manifest->rtcbroker, com_token);
url = va("http://%s/raw/%s", net_ice_broker.string, com_token);
Master_AddMasterHTTP(url, MT_MASTERHTTP, MP_DPMASTER, "Public Servers Potentially Behind A NAT.");
}

Expand Down Expand Up @@ -3786,12 +3786,12 @@ static void NetQ3_GlobalServers_Request(size_t masternum, int protocol, const ch
const char *url;
struct dl_download *dl;
COM_Parse(com_protocolname.string);
if (!strncmp(fs_manifest->rtcbroker, "tls://", 6))
url = va("https://%s/raw/%s", fs_manifest->rtcbroker+6, com_token);
else if (!strncmp(fs_manifest->rtcbroker, "tcp://", 6))
url = va("http://%s/raw/%s", fs_manifest->rtcbroker+6, com_token);
if (!strncmp(net_ice_broker.string, "tls://", 6))
url = va("https://%s/raw/%s", net_ice_broker.string+6, com_token);
else if (!strncmp(net_ice_broker.string, "tcp://", 6))
url = va("http://%s/raw/%s", net_ice_broker.string+6, com_token);
else
url = va("http://%s/raw/%s", fs_manifest->rtcbroker, com_token);
url = va("http://%s/raw/%s", net_ice_broker.string, com_token);

dl = HTTP_CL_Get(url, NULL, MasterInfo_ProcessHTTP);
if (dl)
Expand Down
1 change: 0 additions & 1 deletion engine/common/common.h
Original file line number Diff line number Diff line change
Expand Up @@ -767,7 +767,6 @@ typedef struct
char *defaultexec; //execed after cvars are reset, to give game-specific engine-defaults.
char *defaultoverrides; //execed after default.cfg, to give usable defaults even when the mod the user is running is shit.
char *eula; //when running as an installer, the user will be presented with this as a prompt
char *rtcbroker; //the broker to use for webrtc connections.
char *basedir; //this is where we expect to find the data.
char *iconname; //path we can find the icon (relative to the fmf's location)

Expand Down
12 changes: 3 additions & 9 deletions engine/common/fs.c
Original file line number Diff line number Diff line change
Expand Up @@ -308,7 +308,6 @@ void FS_Manifest_Free(ftemanifest_t *man)
Z_Free(man->eula);
Z_Free(man->defaultexec);
Z_Free(man->defaultoverrides);
Z_Free(man->rtcbroker);
Z_Free(man->basedir);
Z_Free(man->iconname);
for (i = 0; i < sizeof(man->gamepath) / sizeof(man->gamepath[0]); i++)
Expand Down Expand Up @@ -356,8 +355,6 @@ static ftemanifest_t *FS_Manifest_Clone(ftemanifest_t *oldm)
newm->defaultexec = Z_StrDup(oldm->defaultexec);
if (oldm->defaultoverrides)
newm->defaultoverrides = Z_StrDup(oldm->defaultoverrides);
if (oldm->rtcbroker)
newm->rtcbroker = Z_StrDup(oldm->rtcbroker);
if (oldm->iconname)
newm->iconname = Z_StrDup(oldm->iconname);
if (oldm->basedir)
Expand Down Expand Up @@ -460,8 +457,6 @@ static void FS_Manifest_Print(ftemanifest_t *man)
}
//Con_Printf("%s", man->defaultoverrides);
}
if (man->rtcbroker)
Con_Printf("rtcbroker %s\n", COM_QuotedString(man->rtcbroker, buffer, sizeof(buffer), false));
if (man->iconname)
Con_Printf("icon %s\n", COM_QuotedString(man->iconname, buffer, sizeof(buffer), false));
if (man->basedir)
Expand Down Expand Up @@ -554,8 +549,6 @@ static ftemanifest_t *FS_Manifest_Create(const char *syspath, const char *basedi
#else
man->mainconfig = Z_StrDup("fte.cfg");
#endif

man->rtcbroker = Z_StrDup("tls://master.frag-net.com:27950"); //This is eukara's server. fixme: this really ought to be a cvar instead.
return man;
}

Expand Down Expand Up @@ -812,11 +805,12 @@ static qboolean FS_Manifest_ParseTokens(ftemanifest_t *man)
{
Z_StrCat(&man->defaultoverrides, va("%s %s\n", Cmd_Argv(0), Cmd_Args()));
}
#ifdef HAVE_LEGACY
else if (!Q_strcasecmp(cmd, "rtcbroker"))
{
Z_Free(man->rtcbroker);
man->rtcbroker = Z_StrDup(Cmd_Argv(1));
Z_StrCat(&man->defaultexec, va("set %s %s\n", net_ice_broker.name, Cmd_Args()));
}
#endif
else if (!Q_strcasecmp(cmd, "updateurl"))
{
Z_Free(man->updateurl);
Expand Down
8 changes: 4 additions & 4 deletions engine/common/net_ice.c
Original file line number Diff line number Diff line change
Expand Up @@ -5469,12 +5469,12 @@ ftenet_generic_connection_t *FTENET_ICE_EstablishConnection(ftenet_connections_t
address+=6;
else if (!strncmp(address, "ices://", 7)||!strncmp(address, "rtcs://", 7))
address+=7;
if (address == path && *path=='/' && fs_manifest->rtcbroker)
if (address == path && *path=='/')
{
if (!strncmp(fs_manifest->rtcbroker, "tls://", 6) || !strncmp(fs_manifest->rtcbroker, "tcp://", 6))
Q_strncpyz(newcon->brokername, fs_manifest->rtcbroker+6, sizeof(newcon->brokername)); //name is for prints only.
if (!strncmp(net_ice_broker.string, "tls://", 6) || !strncmp(net_ice_broker.string, "tcp://", 6))
Q_strncpyz(newcon->brokername, net_ice_broker.string+6, sizeof(newcon->brokername)); //name is for prints only.
else
Q_strncpyz(newcon->brokername, fs_manifest->rtcbroker, sizeof(newcon->brokername)); //name is for prints only.
Q_strncpyz(newcon->brokername, net_ice_broker.string, sizeof(newcon->brokername)); //name is for prints only.
Q_strncpyz(newcon->gamename, path+1, sizeof(newcon->gamename)); //so we know what to tell the broker.
}
else
Expand Down
18 changes: 11 additions & 7 deletions engine/common/net_wins.c
Original file line number Diff line number Diff line change
Expand Up @@ -118,6 +118,7 @@ int UDP6_OpenSocket (int port);
#ifdef HAVE_IPX
void IPX_CloseSocket (int socket);
#endif
cvar_t net_ice_broker = CVARFD("net_ice_broker", "tls://master.frag-net.com:27950", CVAR_NOTFROMSERVER, "This is the default broker we attempt to connect through when using 'sv_public /foo' or 'connect /foo'.");
cvar_t timeout = CVARD("timeout","65", "Connections will time out if no packets are received for this duration of time."); // seconds without any message
cvar_t net_hybriddualstack = CVARD("net_hybriddualstack", "1", "Uses hybrid ipv4+ipv6 sockets where possible. Not supported on xp or below.");
cvar_t net_fakeloss = CVARFD("net_fakeloss", "0", CVAR_CHEAT, "Simulates packetloss in both receiving and sending, on a scale from 0 to 1.");
Expand Down Expand Up @@ -1654,8 +1655,7 @@ size_t NET_StringToAdr2 (const char *s, int defaultport, netadr_t *a, size_t num
//`connect /GAMENAME` is equivelent to `connect rtc://broker/GAMENAME`
if (*s == '/')
{
char *broker = fs_manifest->rtcbroker;
if (!broker || !*broker)
if (!*net_ice_broker.string)
{ //FIXME: use referrer? or the website's host?
Con_DPrintf("No default rtc broker\n");
return 0; //can't accept it
Expand Down Expand Up @@ -1809,9 +1809,11 @@ size_t NET_StringToAdr2 (const char *s, int defaultport, netadr_t *a, size_t num

path = strchr(s, '/');
#if !defined(HAVE_WEBSOCKCL) && defined(SUPPORT_ICE)
if (path == s && fs_manifest->rtcbroker && *fs_manifest->rtcbroker)
if (path == s)
{
s = fs_manifest->rtcbroker;
if (!*net_ice_broker.string)
return result;
s = net_ice_broker.string;
if (!strncmp(s, "tls://", 6) || !strncmp(s, "wss://", 6))
s+=6, prot=NP_RTC_TLS;
else if (!strncmp(s, "tcp://", 6))
Expand Down Expand Up @@ -2473,6 +2475,7 @@ void *TLS_GetKnownCertificate(const char *certname, size_t *size)
//the xor helps break that shitty recursive loop of mistrust from defects in other people's code.
//at least until there's a sandbox that checks the dns resolutions for our update requests anyway.
//I should probably just copy the downloadables file to sourceforge.
//FIXME: we should be signing the content, not the sender. this SHOULD become redundant.
static struct
{
qbyte *data;
Expand Down Expand Up @@ -7265,7 +7268,7 @@ static int FTENET_WebRTC_Create(qboolean initiator, ftenet_websocket_connection_
}
if (*brokeraddress == '/')
{
brokeraddress = fs_manifest->rtcbroker;
brokeraddress = net_ice_broker.string;
for (i = countof(pre); i --> 0; )
{
if (!strncmp(brokeraddress, pre[i], strlen(pre[i])))
Expand Down Expand Up @@ -7555,7 +7558,7 @@ static int FTENET_WebRTC_Establish(const char *address, const char *type)
{
path = address+1;

address = fs_manifest->rtcbroker;
address = net_ice_broker.string;
for (i = countof(pre); i --> 0; )
{
if (!strncmp(address, pre[i], strlen(pre[i])))
Expand Down Expand Up @@ -7650,7 +7653,7 @@ static ftenet_generic_connection_t *FTENET_WebRTC_EstablishConnection(ftenet_con
if (adr.type == NA_INVALID)
{ //if its using our broker, flip it over to a real address type, if we can.
adr.type = NA_WEBSOCKET;
Q_strncpyz(adr.address.websocketurl, fs_manifest->rtcbroker, sizeof(adr.address.websocketurl));
Q_strncpyz(adr.address.websocketurl, net_ice_broker.string, sizeof(adr.address.websocketurl));
}

brokersocket = FTENET_WebRTC_Establish(address, isserver?"rtc_host":"rtc_client");
Expand Down Expand Up @@ -9059,6 +9062,7 @@ void NET_Init (void)
#endif
}

Cvar_Register(&net_ice_broker, "networking");
Cvar_Register(&timeout, "networking");
Cvar_Register(&net_hybriddualstack, "networking");
Cvar_Register(&net_fakeloss, "networking");
Expand Down
1 change: 1 addition & 0 deletions engine/common/netinc.h
Original file line number Diff line number Diff line change
Expand Up @@ -296,6 +296,7 @@ typedef struct
qboolean (QDECL *GetLCandidateSDP)(struct icestate_s *con, char *out, size_t valuesize); //retrieves candidates that need reporting to the peer.
} icefuncs_t;
extern icefuncs_t iceapi;
extern cvar_t net_ice_broker;
#endif

#ifdef HAVE_EPOLL
Expand Down
5 changes: 1 addition & 4 deletions engine/http/iwebiface.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,10 +265,7 @@ void PrepareStun(int epfd, int reportport)
#if 0
char *stunserver = "localhost";
int stunport = 27500;
#elif 1
char *stunserver = "stun.l.google.com";
int stunport = 19302;
#else
#else //sorry about hardcoding a server, but probably few people are gonna care enough.
char *stunserver = "master.frag-net.com";
int stunport = 27950;
#endif
Expand Down
21 changes: 14 additions & 7 deletions plugins/irc/ircclient.c
Original file line number Diff line number Diff line change
Expand Up @@ -1308,6 +1308,7 @@ static struct ircice_s *IRC_ICE_Create(ircclient_t *irc, const char *sender, enu
{
struct icestate_s *ice;
struct ircice_s *ircice;
char *s, token[MAX_OSPATH];
if (!piceapi)
return NULL;

Expand Down Expand Up @@ -1335,16 +1336,22 @@ static struct ircice_s *IRC_ICE_Create(ircclient_t *irc, const char *sender, enu

//query dns to see if there's a stunserver hosted by the same domain
//nslookup -querytype=SRV _stun._udp.example.com
// Q_snprintf(stunhost, sizeof(stunhost), "_stun._udp.%s", ice->server);
// if (NET_DNSLookup_SRV(stunhost, stunhost, sizeof(stunhost)))
// piceapi->Set(ice, "stunip", stunhost);
// else
// Q_snprintf(stunhost, sizeof(stunhost), "_stun._udp.%s", ice->server);
// if (NET_DNSLookup_SRV(stunhost, stunhost, sizeof(stunhost)))
// piceapi->Set(ice, "server", va("stun:%s" + stunhost));
// else
{
//irc services tend to not provide any stun info, so steal someone's... hopefully they won't mind too much. :(
piceapi->Set(ice, "stunport", "19302");
piceapi->Set(ice, "stunip", "stun.l.google.com");
char *stun = cvarfuncs->GetNVFDG("net_ice_broker", "", 0, NULL, NULL)->string;
s = strstr(stun, "://");
if (s) stun = s+3;
piceapi->Set(ice, "server", va("stun:%s", stun));
}

//sadly we need to add the other ice servers ourselves despite there being a cvar to list them.
s = cvarfuncs->GetNVFDG("net_ice_servers", "", 0, NULL, NULL)->string;
while((s=cmdfuncs->ParseToken(s, token, sizeof(token), NULL)))
piceapi->Set(ice, "server", token);

ircice = malloc(sizeof(*ircice));
memset(ircice, 0, sizeof(*ircice));
ircice->next = irc->ice;
Expand Down
16 changes: 13 additions & 3 deletions plugins/jabber/jingle.c
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,8 @@ static struct c2c_s *JCL_JingleAddContentToSession(jclient_t *jcl, struct c2c_s
char generatedname[64];
char stunhost[256];
int c;
char *s;
char token[MAX_OSPATH];

if (!bres)
return NULL;
Expand Down Expand Up @@ -82,10 +84,18 @@ static struct c2c_s *JCL_JingleAddContentToSession(jclient_t *jcl, struct c2c_s
//google also don't provide stun srv records.
//so we're basically screwed if we want to work with the googletalk xmpp service long term.
//more methods are best, I suppose, but I'm lazy.
//yes, hardcoding means that other services might 'borrow' googles' stun servers.
piceapi->Set(ice, "stunport", "19302");
piceapi->Set(ice, "stunip", "stun.l.google.com");

//try to use our default rtcbroker setting as a stun server, too.
char *stun = cvarfuncs->GetNVFDG("net_ice_broker", "", 0, NULL, NULL)->string;
s = strstr(stun, "://");
if (s) stun = s+3;
piceapi->Set(ice, "server", va("stun:%s", stun));
}

//if the user has manually set up some other stun servers, use them.
s = cvarfuncs->GetNVFDG("net_ice_servers", "", 0, NULL, NULL)->string;
while((s=cmdfuncs->ParseToken(s, token, sizeof(token), NULL)))
piceapi->Set(ice, "server", token);
return c2c;
}
static qboolean JCL_JingleAcceptAck(jclient_t *jcl, xmltree_t *tree, struct iq_s *iq)
Expand Down

0 comments on commit 95d2555

Please sign in to comment.