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:
Spoike 2006-10-27 13:41:27 +00:00
parent b26e4c51f7
commit bce372f236
2 changed files with 41 additions and 4 deletions

View File

@ -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);
} }

View File

@ -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)