Fixed a couple of rerouting issues,
Warning: RAW mode is not requested, this will break compatability with the origional qtv protocol, including with mvdsv. git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2435 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
b26e4c51f7
commit
bce372f236
2 changed files with 41 additions and 4 deletions
|
@ -266,6 +266,9 @@ void Net_SendConnectionMVD(sv_t *qtv, oproxy_t *prox)
|
||||||
netmsg_t msg;
|
netmsg_t msg;
|
||||||
int prespawn;
|
int prespawn;
|
||||||
|
|
||||||
|
if (!*qtv->mapname)
|
||||||
|
return;
|
||||||
|
|
||||||
InitNetMsg(&msg, buffer, sizeof(buffer));
|
InitNetMsg(&msg, buffer, sizeof(buffer));
|
||||||
|
|
||||||
prox->flushing = false;
|
prox->flushing = false;
|
||||||
|
@ -1068,6 +1071,10 @@ qboolean SV_ReadPendingProxy(cluster_t *cluster, oproxy_t *pend)
|
||||||
Net_ProxySend(cluster, pend, s, strlen(s));
|
Net_ProxySend(cluster, pend, s, strlen(s));
|
||||||
pend->flushing = true;
|
pend->flushing = true;
|
||||||
}
|
}
|
||||||
|
else if (!strcmp(s, "AUTH"))
|
||||||
|
{ //lists the demos available on this proxy
|
||||||
|
//part of the connection process, can be ignored if there's no password
|
||||||
|
}
|
||||||
else
|
else
|
||||||
printf("Unrecognised token in QTV connection request (%s)\n", s);
|
printf("Unrecognised token in QTV connection request (%s)\n", s);
|
||||||
}
|
}
|
||||||
|
|
|
@ -247,19 +247,41 @@ SOCKET Net_MVDListen(int port)
|
||||||
return sock;
|
return sock;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
char *strchrrev(char *str, char chr)
|
||||||
|
{
|
||||||
|
char *firstchar = str;
|
||||||
|
for (str = str + strlen(str)-1; str>=firstchar; str--)
|
||||||
|
if (*str == chr)
|
||||||
|
return str;
|
||||||
|
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
void Net_SendQTVConnectionRequest(sv_t *qtv, char *authmethod, char *challenge)
|
void Net_SendQTVConnectionRequest(sv_t *qtv, char *authmethod, char *challenge)
|
||||||
{
|
{
|
||||||
|
char *at;
|
||||||
char *str;
|
char *str;
|
||||||
char hash[512];
|
char hash[512];
|
||||||
|
|
||||||
//due to mvdsv sucking and stuff, we try using raw connections where possibleso that we don't end up expecting a header.
|
//due to mvdsv sucking and stuff, we try using raw connections where possibleso that we don't end up expecting a header.
|
||||||
//at some point, this will be forced to 1
|
//at some point, this will be forced to 1
|
||||||
qtv->parsingqtvheader = !!*qtv->connectpassword;
|
qtv->parsingqtvheader = true;//!!*qtv->connectpassword;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
str = "QTV\n"; Net_QueueUpstream(qtv, strlen(str), str);
|
str = "QTV\n"; Net_QueueUpstream(qtv, strlen(str), str);
|
||||||
str = "VERSION: 1\n"; Net_QueueUpstream(qtv, strlen(str), str);
|
str = "VERSION: 1\n"; Net_QueueUpstream(qtv, strlen(str), str);
|
||||||
|
|
||||||
|
at = strchrrev(qtv->server, '@');
|
||||||
|
if (at)
|
||||||
|
{
|
||||||
|
*at = '\0';
|
||||||
|
str = "SOURCE: "; Net_QueueUpstream(qtv, strlen(str), str);
|
||||||
|
str = qtv->server; Net_QueueUpstream(qtv, strlen(str), str);
|
||||||
|
str = "\n"; Net_QueueUpstream(qtv, strlen(str), str);
|
||||||
|
*at = '@';
|
||||||
|
}
|
||||||
|
|
||||||
if (!qtv->parsingqtvheader)
|
if (!qtv->parsingqtvheader)
|
||||||
{
|
{
|
||||||
str = "RAW: 1\n"; Net_QueueUpstream(qtv, strlen(str), str);
|
str = "RAW: 1\n"; Net_QueueUpstream(qtv, strlen(str), str);
|
||||||
|
@ -408,6 +430,9 @@ qboolean Net_ConnectToUDPServer(sv_t *qtv, char *ip)
|
||||||
|
|
||||||
qboolean Net_ConnectToServer(sv_t *qtv, char *ip)
|
qboolean Net_ConnectToServer(sv_t *qtv, char *ip)
|
||||||
{
|
{
|
||||||
|
char *at;
|
||||||
|
qboolean status;
|
||||||
|
|
||||||
qtv->usequkeworldprotocols = false;
|
qtv->usequkeworldprotocols = false;
|
||||||
|
|
||||||
if (!strncmp(ip, "file:", 5) || !strncmp(ip, "demo:", 5))
|
if (!strncmp(ip, "file:", 5) || !strncmp(ip, "demo:", 5))
|
||||||
|
@ -427,18 +452,23 @@ qboolean Net_ConnectToServer(sv_t *qtv, char *ip)
|
||||||
|
|
||||||
qtv->nextconnectattempt = qtv->curtime + RECONNECT_TIME; //wait half a minuite before trying to reconnect
|
qtv->nextconnectattempt = qtv->curtime + RECONNECT_TIME; //wait half a minuite before trying to reconnect
|
||||||
|
|
||||||
|
at = strchrrev(ip, '@');
|
||||||
|
if (at)
|
||||||
|
ip = at+1;
|
||||||
|
|
||||||
if (!strncmp(ip, "udp:", 4))
|
if (!strncmp(ip, "udp:", 4))
|
||||||
{
|
{
|
||||||
qtv->usequkeworldprotocols = true;
|
qtv->usequkeworldprotocols = true;
|
||||||
return Net_ConnectToUDPServer(qtv, ip);
|
status = Net_ConnectToUDPServer(qtv, ip);
|
||||||
}
|
}
|
||||||
else if (!strncmp(ip, "tcp:", 4))
|
else if (!strncmp(ip, "tcp:", 4))
|
||||||
return Net_ConnectToTCPServer(qtv, ip);
|
status = Net_ConnectToTCPServer(qtv, ip);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
Sys_Printf(qtv->cluster, "Unknown source type %s\n", ip);
|
Sys_Printf(qtv->cluster, "Unknown source type %s\n", ip);
|
||||||
return false;
|
status = false;
|
||||||
}
|
}
|
||||||
|
return status;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Net_QueueUpstream(sv_t *qtv, int size, char *buffer)
|
void Net_QueueUpstream(sv_t *qtv, int size, char *buffer)
|
||||||
|
|
Loading…
Reference in a new issue