socket/tcp/udp errors more verbose (strerror)
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3872 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
7fa677ccf5
commit
4943723a8b
3 changed files with 86 additions and 83 deletions
|
@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
|
||||||
#include "qtv.h"
|
#include "qtv.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#define curtime Sys_Milliseconds()
|
#define curtime Sys_Milliseconds()
|
||||||
|
|
||||||
|
@ -43,7 +44,7 @@ void NET_SendPacket(cluster_t *cluster, SOCKET sock, int length, void *data, net
|
||||||
if (er == EWOULDBLOCK || er == EAGAIN)
|
if (er == EWOULDBLOCK || er == EAGAIN)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
Sys_Printf(cluster, "udp send error %i\n", er);
|
Sys_Printf(cluster, "udp send error %i (%s)\n", er, strerror(er));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -160,7 +161,7 @@ void Netchan_OutOfBand (cluster_t *cluster, SOCKET sock, netadr_t adr, int lengt
|
||||||
|
|
||||||
// write the packet header
|
// write the packet header
|
||||||
InitNetMsg (&send, send_buf, sizeof(send_buf));
|
InitNetMsg (&send, send_buf, sizeof(send_buf));
|
||||||
|
|
||||||
WriteLong (&send, -1); // -1 sequence means out of band
|
WriteLong (&send, -1); // -1 sequence means out of band
|
||||||
WriteData (&send, data, length);
|
WriteData (&send, data, length);
|
||||||
|
|
||||||
|
@ -180,7 +181,7 @@ void Netchan_OutOfBandPrint (cluster_t *cluster, SOCKET sock[], netadr_t adr, ch
|
||||||
{
|
{
|
||||||
va_list argptr;
|
va_list argptr;
|
||||||
char string[8192];
|
char string[8192];
|
||||||
|
|
||||||
va_start (argptr, format);
|
va_start (argptr, format);
|
||||||
#ifdef _WIN32
|
#ifdef _WIN32
|
||||||
_vsnprintf (string, sizeof(string) - 1, format, argptr);
|
_vsnprintf (string, sizeof(string) - 1, format, argptr);
|
||||||
|
@ -215,7 +216,7 @@ called to open a channel to a remote system
|
||||||
void Netchan_Setup (SOCKET sock, netchan_t *chan, netadr_t adr, int qport, qboolean isclient)
|
void Netchan_Setup (SOCKET sock, netchan_t *chan, netadr_t adr, int qport, qboolean isclient)
|
||||||
{
|
{
|
||||||
memset (chan, 0, sizeof(*chan));
|
memset (chan, 0, sizeof(*chan));
|
||||||
|
|
||||||
chan->sock = sock;
|
chan->sock = sock;
|
||||||
memcpy(&chan->remote_address, &adr, sizeof(netadr_t));
|
memcpy(&chan->remote_address, &adr, sizeof(netadr_t));
|
||||||
chan->qport = qport;
|
chan->qport = qport;
|
||||||
|
@ -226,7 +227,7 @@ void Netchan_Setup (SOCKET sock, netchan_t *chan, netadr_t adr, int qport, qbool
|
||||||
InitNetMsg(&chan->message, chan->message_buf, sizeof(chan->message_buf));
|
InitNetMsg(&chan->message, chan->message_buf, sizeof(chan->message_buf));
|
||||||
|
|
||||||
chan->message.allowoverflow = true;
|
chan->message.allowoverflow = true;
|
||||||
|
|
||||||
chan->rate = 1000.0f/2500;
|
chan->rate = 1000.0f/2500;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -256,7 +257,7 @@ qboolean Netchan_CanPacket (netchan_t *chan)
|
||||||
===============
|
===============
|
||||||
Netchan_CanReliable
|
Netchan_CanReliable
|
||||||
|
|
||||||
Returns true if the bandwidth choke isn't
|
Returns true if the bandwidth choke isn't
|
||||||
================
|
================
|
||||||
*/
|
*/
|
||||||
qboolean Netchan_CanReliable (netchan_t *chan)
|
qboolean Netchan_CanReliable (netchan_t *chan)
|
||||||
|
@ -404,7 +405,7 @@ void Netchan_Transmit (cluster_t *cluster, netchan_t *chan, int length, const vo
|
||||||
WriteData (&send, chan->reliable_buf, chan->reliable_length);
|
WriteData (&send, chan->reliable_buf, chan->reliable_length);
|
||||||
chan->last_reliable_sequence = chan->outgoing_sequence;
|
chan->last_reliable_sequence = chan->outgoing_sequence;
|
||||||
}
|
}
|
||||||
|
|
||||||
// add the unreliable part if space is available
|
// add the unreliable part if space is available
|
||||||
if (send.maxsize - send.cursize >= length)
|
if (send.maxsize - send.cursize >= length)
|
||||||
WriteData (&send, data, length);
|
WriteData (&send, data, length);
|
||||||
|
@ -553,7 +554,7 @@ qboolean Netchan_Process (netchan_t *chan, netmsg_t *msg)
|
||||||
unsigned sequence, sequence_ack;
|
unsigned sequence, sequence_ack;
|
||||||
unsigned reliable_ack, reliable_message;
|
unsigned reliable_ack, reliable_message;
|
||||||
|
|
||||||
// get sequence numbers
|
// get sequence numbers
|
||||||
msg->readpos = 0;
|
msg->readpos = 0;
|
||||||
sequence = ReadLong (msg);
|
sequence = ReadLong (msg);
|
||||||
sequence_ack = ReadLong (msg);
|
sequence_ack = ReadLong (msg);
|
||||||
|
@ -565,8 +566,8 @@ qboolean Netchan_Process (netchan_t *chan, netmsg_t *msg)
|
||||||
reliable_message = sequence >> 31;
|
reliable_message = sequence >> 31;
|
||||||
reliable_ack = sequence_ack >> 31;
|
reliable_ack = sequence_ack >> 31;
|
||||||
|
|
||||||
sequence &= ~(1<<31);
|
sequence &= ~(1<<31);
|
||||||
sequence_ack &= ~(1<<31);
|
sequence_ack &= ~(1<<31);
|
||||||
|
|
||||||
/* if (showpackets.value)
|
/* if (showpackets.value)
|
||||||
Com_Printf ("<-- s=%i(%i) a=%i(%i) %i\n"
|
Com_Printf ("<-- s=%i(%i) a=%i(%i) %i\n"
|
||||||
|
@ -614,9 +615,9 @@ qboolean Netchan_Process (netchan_t *chan, netmsg_t *msg)
|
||||||
//
|
//
|
||||||
if (reliable_ack == (unsigned)chan->reliable_sequence)
|
if (reliable_ack == (unsigned)chan->reliable_sequence)
|
||||||
chan->reliable_length = 0; // it has been received
|
chan->reliable_length = 0; // it has been received
|
||||||
|
|
||||||
//
|
//
|
||||||
// if this message contains a reliable message, bump incoming_reliable_sequence
|
// if this message contains a reliable message, bump incoming_reliable_sequence
|
||||||
//
|
//
|
||||||
chan->incoming_sequence = sequence;
|
chan->incoming_sequence = sequence;
|
||||||
chan->incoming_acknowledged = sequence_ack;
|
chan->incoming_acknowledged = sequence_ack;
|
||||||
|
@ -631,7 +632,7 @@ qboolean Netchan_Process (netchan_t *chan, netmsg_t *msg)
|
||||||
// chan->frame_latency = chan->frame_latency*OLD_AVG
|
// chan->frame_latency = chan->frame_latency*OLD_AVG
|
||||||
// + (chan->outgoing_sequence-sequence_ack)*(1.0-OLD_AVG);
|
// + (chan->outgoing_sequence-sequence_ack)*(1.0-OLD_AVG);
|
||||||
// chan->frame_rate = chan->frame_rate*OLD_AVG
|
// chan->frame_rate = chan->frame_rate*OLD_AVG
|
||||||
// + (curtime - chan->last_received)*(1.0-OLD_AVG);
|
// + (curtime - chan->last_received)*(1.0-OLD_AVG);
|
||||||
// chan->good_count += 1;
|
// chan->good_count += 1;
|
||||||
|
|
||||||
chan->last_received = curtime;
|
chan->last_received = curtime;
|
||||||
|
|
111
fteqtv/qw.c
111
fteqtv/qw.c
|
@ -19,6 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
|
||||||
#include "qtv.h"
|
#include "qtv.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "bsd_string.h"
|
#include "bsd_string.h"
|
||||||
|
|
||||||
|
@ -200,7 +201,7 @@ SOCKET QW_InitUDPSocket(int port, qboolean ipv6)
|
||||||
|
|
||||||
if( bind (sock, (void *)address, addrlen) == -1)
|
if( bind (sock, (void *)address, addrlen) == -1)
|
||||||
{
|
{
|
||||||
printf("socket bind error %i\n", qerrno);
|
printf("socket bind error %i (%s)\n", qerrno, strerror(qerrno));
|
||||||
closesocket(sock);
|
closesocket(sock);
|
||||||
return INVALID_SOCKET;
|
return INVALID_SOCKET;
|
||||||
}
|
}
|
||||||
|
@ -439,7 +440,7 @@ void SendNQSpawnInfoToViewer(cluster_t *cluster, viewer_t *viewer, netmsg_t *msg
|
||||||
int SendCurrentUserinfos(sv_t *tv, int cursize, netmsg_t *msg, int i, int thisplayer)
|
int SendCurrentUserinfos(sv_t *tv, int cursize, netmsg_t *msg, int i, int thisplayer)
|
||||||
{
|
{
|
||||||
char name[MAX_QPATH];
|
char name[MAX_QPATH];
|
||||||
|
|
||||||
if (i < 0)
|
if (i < 0)
|
||||||
return i;
|
return i;
|
||||||
if (i >= MAX_CLIENTS)
|
if (i >= MAX_CLIENTS)
|
||||||
|
@ -677,7 +678,7 @@ void QW_StreamStuffcmd(cluster_t *cluster, sv_t *server, char *fmt, ...)
|
||||||
InitNetMsg(&msg, buf, sizeof(buf));
|
InitNetMsg(&msg, buf, sizeof(buf));
|
||||||
WriteByte(&msg, svc_stufftext);
|
WriteByte(&msg, svc_stufftext);
|
||||||
WriteString(&msg, cmd);
|
WriteString(&msg, cmd);
|
||||||
|
|
||||||
|
|
||||||
for (v = cluster->viewers; v; v = v->next)
|
for (v = cluster->viewers; v; v = v->next)
|
||||||
{
|
{
|
||||||
|
@ -798,14 +799,14 @@ void ParseUserInfo(cluster_t *cluster, viewer_t *viewer)
|
||||||
{
|
{
|
||||||
if (*viewer->name)
|
if (*viewer->name)
|
||||||
{
|
{
|
||||||
snprintf(buf, sizeof(buf), "%cQTV%c%s changed name to %cQTV%c%s\n",
|
snprintf(buf, sizeof(buf), "%cQTV%c%s changed name to %cQTV%c%s\n",
|
||||||
91+128, 93+128, viewer->name,
|
91+128, 93+128, viewer->name,
|
||||||
91+128, 93+128, temp
|
91+128, 93+128, temp
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
snprintf(buf, sizeof(buf), "%cQTV%c%s joins the stream\n",
|
snprintf(buf, sizeof(buf), "%cQTV%c%s joins the stream\n",
|
||||||
91+128, 93+128, temp
|
91+128, 93+128, temp
|
||||||
);
|
);
|
||||||
|
|
||||||
|
@ -1161,7 +1162,7 @@ void QTV_Status(cluster_t *cluster, netadr_t *from)
|
||||||
// sprintf(elem, " (%s)", sv->serveraddress);
|
// sprintf(elem, " (%s)", sv->serveraddress);
|
||||||
// WriteString2(&msg, elem);
|
// WriteString2(&msg, elem);
|
||||||
}
|
}
|
||||||
|
|
||||||
WriteString2(&msg, "\n");
|
WriteString2(&msg, "\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1176,7 +1177,7 @@ void QTV_StatusResponse(cluster_t *cluster, char *msg, netadr_t *from)
|
||||||
sv_t *sv;
|
sv_t *sv;
|
||||||
|
|
||||||
char *eol;
|
char *eol;
|
||||||
|
|
||||||
for (sv = cluster->servers; sv; sv = sv->next)
|
for (sv = cluster->servers; sv; sv = sv->next)
|
||||||
{
|
{
|
||||||
/*ignore connected streams*/
|
/*ignore connected streams*/
|
||||||
|
@ -1606,21 +1607,21 @@ void SendNQClientData(sv_t *tv, viewer_t *v, netmsg_t *msg)
|
||||||
pl = &tv->map.players[v->trackplayer];
|
pl = &tv->map.players[v->trackplayer];
|
||||||
|
|
||||||
bits = 0;
|
bits = 0;
|
||||||
|
|
||||||
if (!pl->dead)
|
if (!pl->dead)
|
||||||
bits |= SU_VIEWHEIGHT;
|
bits |= SU_VIEWHEIGHT;
|
||||||
|
|
||||||
if (0)
|
if (0)
|
||||||
bits |= SU_IDEALPITCH;
|
bits |= SU_IDEALPITCH;
|
||||||
|
|
||||||
bits |= SU_ITEMS;
|
bits |= SU_ITEMS;
|
||||||
|
|
||||||
if ( 0)
|
if ( 0)
|
||||||
bits |= SU_ONGROUND;
|
bits |= SU_ONGROUND;
|
||||||
|
|
||||||
if ( 0 )
|
if ( 0 )
|
||||||
bits |= SU_INWATER;
|
bits |= SU_INWATER;
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
for (i=0 ; i<3 ; i++)
|
||||||
{
|
{
|
||||||
if (0)
|
if (0)
|
||||||
|
@ -1628,7 +1629,7 @@ void SendNQClientData(sv_t *tv, viewer_t *v, netmsg_t *msg)
|
||||||
if (0)
|
if (0)
|
||||||
bits |= (SU_VELOCITY1<<i);
|
bits |= (SU_VELOCITY1<<i);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (pl->current.weaponframe)
|
if (pl->current.weaponframe)
|
||||||
bits |= SU_WEAPONFRAME;
|
bits |= SU_WEAPONFRAME;
|
||||||
|
|
||||||
|
@ -1666,7 +1667,7 @@ void SendNQClientData(sv_t *tv, viewer_t *v, netmsg_t *msg)
|
||||||
WriteByte (msg, pl->stats[STAT_ARMOR]);
|
WriteByte (msg, pl->stats[STAT_ARMOR]);
|
||||||
if (bits & SU_WEAPON)
|
if (bits & SU_WEAPON)
|
||||||
WriteByte (msg, pl->stats[STAT_WEAPON]);
|
WriteByte (msg, pl->stats[STAT_WEAPON]);
|
||||||
|
|
||||||
WriteShort (msg, pl->stats[STAT_HEALTH]);
|
WriteShort (msg, pl->stats[STAT_HEALTH]);
|
||||||
WriteByte (msg, pl->stats[STAT_AMMO]);
|
WriteByte (msg, pl->stats[STAT_AMMO]);
|
||||||
WriteByte (msg, pl->stats[STAT_SHELLS]);
|
WriteByte (msg, pl->stats[STAT_SHELLS]);
|
||||||
|
@ -1718,7 +1719,7 @@ void SendNQPlayerStates(cluster_t *cluster, sv_t *tv, viewer_t *v, netmsg_t *msg
|
||||||
|
|
||||||
if (tv)
|
if (tv)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (v->trackplayer >= 0)
|
if (v->trackplayer >= 0)
|
||||||
{
|
{
|
||||||
WriteByte(msg, svc_nqsetview);
|
WriteByte(msg, svc_nqsetview);
|
||||||
|
@ -1748,7 +1749,7 @@ void SendNQPlayerStates(cluster_t *cluster, sv_t *tv, viewer_t *v, netmsg_t *msg
|
||||||
|
|
||||||
if (e+1 >= 256)
|
if (e+1 >= 256)
|
||||||
bits |= UNQ_LONGENTITY;
|
bits |= UNQ_LONGENTITY;
|
||||||
|
|
||||||
if (bits >= 256)
|
if (bits >= 256)
|
||||||
bits |= UNQ_MOREBITS;
|
bits |= UNQ_MOREBITS;
|
||||||
WriteByte (msg,bits | UNQ_SIGNAL);
|
WriteByte (msg,bits | UNQ_SIGNAL);
|
||||||
|
@ -1770,7 +1771,7 @@ void SendNQPlayerStates(cluster_t *cluster, sv_t *tv, viewer_t *v, netmsg_t *msg
|
||||||
if (bits & UNQ_EFFECTS)
|
if (bits & UNQ_EFFECTS)
|
||||||
WriteByte (msg, 0);
|
WriteByte (msg, 0);
|
||||||
if (bits & UNQ_ORIGIN1)
|
if (bits & UNQ_ORIGIN1)
|
||||||
WriteShort (msg, v->origin[0]*8);
|
WriteShort (msg, v->origin[0]*8);
|
||||||
if (bits & UNQ_ANGLE1)
|
if (bits & UNQ_ANGLE1)
|
||||||
WriteByte(msg, -(v->ucmds[2].angles[0]>>8));
|
WriteByte(msg, -(v->ucmds[2].angles[0]>>8));
|
||||||
if (bits & UNQ_ORIGIN2)
|
if (bits & UNQ_ORIGIN2)
|
||||||
|
@ -1791,10 +1792,10 @@ void SendNQPlayerStates(cluster_t *cluster, sv_t *tv, viewer_t *v, netmsg_t *msg
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
pl->current.modelindex = 8;
|
pl->current.modelindex = 8;
|
||||||
|
|
||||||
// send an update
|
// send an update
|
||||||
bits = 0;
|
bits = 0;
|
||||||
|
|
||||||
for (i=0 ; i<3 ; i++)
|
for (i=0 ; i<3 ; i++)
|
||||||
{
|
{
|
||||||
org[i] = (lerp)*pl->current.origin[i] + (1-lerp)*pl->old.origin[i];
|
org[i] = (lerp)*pl->current.origin[i] + (1-lerp)*pl->old.origin[i];
|
||||||
|
@ -1803,34 +1804,34 @@ void SendNQPlayerStates(cluster_t *cluster, sv_t *tv, viewer_t *v, netmsg_t *msg
|
||||||
|
|
||||||
if ( pl->current.angles[0]>>8 != ent->baseline.angles[0] )
|
if ( pl->current.angles[0]>>8 != ent->baseline.angles[0] )
|
||||||
bits |= UNQ_ANGLE1;
|
bits |= UNQ_ANGLE1;
|
||||||
|
|
||||||
if ( pl->current.angles[1]>>8 != ent->baseline.angles[1] )
|
if ( pl->current.angles[1]>>8 != ent->baseline.angles[1] )
|
||||||
bits |= UNQ_ANGLE2;
|
bits |= UNQ_ANGLE2;
|
||||||
|
|
||||||
if ( pl->current.angles[2]>>8 != ent->baseline.angles[2] )
|
if ( pl->current.angles[2]>>8 != ent->baseline.angles[2] )
|
||||||
bits |= UNQ_ANGLE3;
|
bits |= UNQ_ANGLE3;
|
||||||
|
|
||||||
// if (pl->v.movetype == MOVETYPE_STEP)
|
// if (pl->v.movetype == MOVETYPE_STEP)
|
||||||
// bits |= UNQ_NOLERP; // don't mess up the step animation
|
// bits |= UNQ_NOLERP; // don't mess up the step animation
|
||||||
|
|
||||||
if (ent->baseline.colormap != e+1 || ent->baseline.colormap > 15)
|
if (ent->baseline.colormap != e+1 || ent->baseline.colormap > 15)
|
||||||
bits |= UNQ_COLORMAP;
|
bits |= UNQ_COLORMAP;
|
||||||
|
|
||||||
if (ent->baseline.skinnum != pl->current.skinnum)
|
if (ent->baseline.skinnum != pl->current.skinnum)
|
||||||
bits |= UNQ_SKIN;
|
bits |= UNQ_SKIN;
|
||||||
|
|
||||||
if (ent->baseline.frame != pl->current.frame)
|
if (ent->baseline.frame != pl->current.frame)
|
||||||
bits |= UNQ_FRAME;
|
bits |= UNQ_FRAME;
|
||||||
|
|
||||||
if (ent->baseline.effects != pl->current.effects)
|
if (ent->baseline.effects != pl->current.effects)
|
||||||
bits |= UNQ_EFFECTS;
|
bits |= UNQ_EFFECTS;
|
||||||
|
|
||||||
if (ent->baseline.modelindex != pl->current.modelindex)
|
if (ent->baseline.modelindex != pl->current.modelindex)
|
||||||
bits |= UNQ_MODEL;
|
bits |= UNQ_MODEL;
|
||||||
|
|
||||||
if (e+1 >= 256)
|
if (e+1 >= 256)
|
||||||
bits |= UNQ_LONGENTITY;
|
bits |= UNQ_LONGENTITY;
|
||||||
|
|
||||||
if (bits >= 256)
|
if (bits >= 256)
|
||||||
bits |= UNQ_MOREBITS;
|
bits |= UNQ_MOREBITS;
|
||||||
|
|
||||||
|
@ -1838,7 +1839,7 @@ void SendNQPlayerStates(cluster_t *cluster, sv_t *tv, viewer_t *v, netmsg_t *msg
|
||||||
// write the message
|
// write the message
|
||||||
//
|
//
|
||||||
WriteByte (msg,bits | UNQ_SIGNAL);
|
WriteByte (msg,bits | UNQ_SIGNAL);
|
||||||
|
|
||||||
if (bits & UNQ_MOREBITS)
|
if (bits & UNQ_MOREBITS)
|
||||||
WriteByte (msg, bits>>8);
|
WriteByte (msg, bits>>8);
|
||||||
if (bits & UNQ_LONGENTITY)
|
if (bits & UNQ_LONGENTITY)
|
||||||
|
@ -1857,7 +1858,7 @@ void SendNQPlayerStates(cluster_t *cluster, sv_t *tv, viewer_t *v, netmsg_t *msg
|
||||||
if (bits & UNQ_EFFECTS)
|
if (bits & UNQ_EFFECTS)
|
||||||
WriteByte (msg, pl->current.effects);
|
WriteByte (msg, pl->current.effects);
|
||||||
if (bits & UNQ_ORIGIN1)
|
if (bits & UNQ_ORIGIN1)
|
||||||
WriteShort (msg, org[0]);
|
WriteShort (msg, org[0]);
|
||||||
if (bits & UNQ_ANGLE1)
|
if (bits & UNQ_ANGLE1)
|
||||||
WriteByte(msg, -(pl->current.angles[0]>>8));
|
WriteByte(msg, -(pl->current.angles[0]>>8));
|
||||||
if (bits & UNQ_ORIGIN2)
|
if (bits & UNQ_ORIGIN2)
|
||||||
|
@ -1870,7 +1871,7 @@ void SendNQPlayerStates(cluster_t *cluster, sv_t *tv, viewer_t *v, netmsg_t *msg
|
||||||
WriteByte(msg, pl->current.angles[2]>>8);
|
WriteByte(msg, pl->current.angles[2]>>8);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
{
|
{
|
||||||
int newindex = 0;
|
int newindex = 0;
|
||||||
entity_state_t *newstate;
|
entity_state_t *newstate;
|
||||||
|
@ -1908,34 +1909,34 @@ void SendNQPlayerStates(cluster_t *cluster, sv_t *tv, viewer_t *v, netmsg_t *msg
|
||||||
|
|
||||||
if (newstate->angles[0] != ent->baseline.angles[0])
|
if (newstate->angles[0] != ent->baseline.angles[0])
|
||||||
bits |= UNQ_ANGLE1;
|
bits |= UNQ_ANGLE1;
|
||||||
|
|
||||||
if (newstate->angles[1] != ent->baseline.angles[1])
|
if (newstate->angles[1] != ent->baseline.angles[1])
|
||||||
bits |= UNQ_ANGLE2;
|
bits |= UNQ_ANGLE2;
|
||||||
|
|
||||||
if (newstate->angles[2] != ent->baseline.angles[2])
|
if (newstate->angles[2] != ent->baseline.angles[2])
|
||||||
bits |= UNQ_ANGLE3;
|
bits |= UNQ_ANGLE3;
|
||||||
|
|
||||||
// if (ent->v.movetype == MOVETYPE_STEP)
|
// if (ent->v.movetype == MOVETYPE_STEP)
|
||||||
// bits |= UNQ_NOLERP; // don't mess up the step animation
|
// bits |= UNQ_NOLERP; // don't mess up the step animation
|
||||||
|
|
||||||
if (newstate->colormap != ent->baseline.colormap || ent->baseline.colormap > 15)
|
if (newstate->colormap != ent->baseline.colormap || ent->baseline.colormap > 15)
|
||||||
bits |= UNQ_COLORMAP;
|
bits |= UNQ_COLORMAP;
|
||||||
|
|
||||||
if (newstate->skinnum != ent->baseline.skinnum)
|
if (newstate->skinnum != ent->baseline.skinnum)
|
||||||
bits |= UNQ_SKIN;
|
bits |= UNQ_SKIN;
|
||||||
|
|
||||||
if (newstate->frame != ent->baseline.frame)
|
if (newstate->frame != ent->baseline.frame)
|
||||||
bits |= UNQ_FRAME;
|
bits |= UNQ_FRAME;
|
||||||
|
|
||||||
if (newstate->effects != ent->baseline.effects)
|
if (newstate->effects != ent->baseline.effects)
|
||||||
bits |= UNQ_EFFECTS;
|
bits |= UNQ_EFFECTS;
|
||||||
|
|
||||||
if (newstate->modelindex != ent->baseline.modelindex)
|
if (newstate->modelindex != ent->baseline.modelindex)
|
||||||
bits |= UNQ_MODEL;
|
bits |= UNQ_MODEL;
|
||||||
|
|
||||||
if (newnum >= 256)
|
if (newnum >= 256)
|
||||||
bits |= UNQ_LONGENTITY;
|
bits |= UNQ_LONGENTITY;
|
||||||
|
|
||||||
if (bits >= 256)
|
if (bits >= 256)
|
||||||
bits |= UNQ_MOREBITS;
|
bits |= UNQ_MOREBITS;
|
||||||
|
|
||||||
|
@ -1943,7 +1944,7 @@ void SendNQPlayerStates(cluster_t *cluster, sv_t *tv, viewer_t *v, netmsg_t *msg
|
||||||
// write the message
|
// write the message
|
||||||
//
|
//
|
||||||
WriteByte (msg,bits | UNQ_SIGNAL);
|
WriteByte (msg,bits | UNQ_SIGNAL);
|
||||||
|
|
||||||
if (bits & UNQ_MOREBITS)
|
if (bits & UNQ_MOREBITS)
|
||||||
WriteByte (msg, bits>>8);
|
WriteByte (msg, bits>>8);
|
||||||
if (bits & UNQ_LONGENTITY)
|
if (bits & UNQ_LONGENTITY)
|
||||||
|
@ -1962,7 +1963,7 @@ void SendNQPlayerStates(cluster_t *cluster, sv_t *tv, viewer_t *v, netmsg_t *msg
|
||||||
if (bits & UNQ_EFFECTS)
|
if (bits & UNQ_EFFECTS)
|
||||||
WriteByte (msg, newstate->effects);
|
WriteByte (msg, newstate->effects);
|
||||||
if (bits & UNQ_ORIGIN1)
|
if (bits & UNQ_ORIGIN1)
|
||||||
WriteShort (msg, newstate->origin[0]);
|
WriteShort (msg, newstate->origin[0]);
|
||||||
if (bits & UNQ_ANGLE1)
|
if (bits & UNQ_ANGLE1)
|
||||||
WriteByte(msg, newstate->angles[0]);
|
WriteByte(msg, newstate->angles[0]);
|
||||||
if (bits & UNQ_ORIGIN2)
|
if (bits & UNQ_ORIGIN2)
|
||||||
|
@ -2224,7 +2225,7 @@ void SendPlayerStates(sv_t *tv, viewer_t *v, netmsg_t *msg)
|
||||||
if (oldindex < frompacket->numents)
|
if (oldindex < frompacket->numents)
|
||||||
{
|
{
|
||||||
oldnum = frompacket->entnums[oldindex];
|
oldnum = frompacket->entnums[oldindex];
|
||||||
|
|
||||||
while(oldnum < newnum)
|
while(oldnum < newnum)
|
||||||
{
|
{
|
||||||
oldindex++;
|
oldindex++;
|
||||||
|
@ -2609,7 +2610,7 @@ guimenu:
|
||||||
|
|
||||||
shownheader = false;
|
shownheader = false;
|
||||||
|
|
||||||
QW_StuffcmdToViewer(v,
|
QW_StuffcmdToViewer(v,
|
||||||
|
|
||||||
"alias menucallback\n"
|
"alias menucallback\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
|
@ -2670,7 +2671,7 @@ guimenu:
|
||||||
}
|
}
|
||||||
if (!shownheader)
|
if (!shownheader)
|
||||||
QW_StuffcmdToViewer(v, "menutext 72 %i \"There are no active games\"\n", y);
|
QW_StuffcmdToViewer(v, "menutext 72 %i \"There are no active games\"\n", y);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (!strcmp(command, "demos"))
|
else if (!strcmp(command, "demos"))
|
||||||
|
@ -2696,7 +2697,7 @@ guidemos:
|
||||||
start = atoi(args); //FIXME
|
start = atoi(args); //FIXME
|
||||||
QW_SetMenu(v, MENU_NONE);
|
QW_SetMenu(v, MENU_NONE);
|
||||||
|
|
||||||
QW_StuffcmdToViewer(v,
|
QW_StuffcmdToViewer(v,
|
||||||
|
|
||||||
"alias menucallback\n"
|
"alias menucallback\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
|
@ -2765,7 +2766,7 @@ tuidemos:
|
||||||
guiadmin:
|
guiadmin:
|
||||||
if (!*cluster->adminpassword)
|
if (!*cluster->adminpassword)
|
||||||
{
|
{
|
||||||
QW_StuffcmdToViewer(v,
|
QW_StuffcmdToViewer(v,
|
||||||
|
|
||||||
"alias menucallback\n"
|
"alias menucallback\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
|
@ -2785,7 +2786,7 @@ guiadmin:
|
||||||
QW_SetMenu(v, MENU_ADMIN);
|
QW_SetMenu(v, MENU_ADMIN);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
QW_StuffcmdToViewer(v,
|
QW_StuffcmdToViewer(v,
|
||||||
|
|
||||||
"alias menucallback\n"
|
"alias menucallback\n"
|
||||||
"{\n"
|
"{\n"
|
||||||
|
@ -2845,7 +2846,7 @@ tuiadmin:
|
||||||
|
|
||||||
if (!strcmp(command, "join") || !strcmp(command, "connect"))
|
if (!strcmp(command, "join") || !strcmp(command, "connect"))
|
||||||
isjoin = true;
|
isjoin = true;
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "udp:%s", args);
|
snprintf(buf, sizeof(buf), "udp:%s", args);
|
||||||
qtv = QTV_NewServerConnection(cluster, 0, buf, "", false, AD_WHENEMPTY, !isjoin, false);
|
qtv = QTV_NewServerConnection(cluster, 0, buf, "", false, AD_WHENEMPTY, !isjoin, false);
|
||||||
if (qtv)
|
if (qtv)
|
||||||
|
@ -2881,7 +2882,7 @@ tuiadmin:
|
||||||
else if (!strcmp(command, "qtvinfo"))
|
else if (!strcmp(command, "qtvinfo"))
|
||||||
{
|
{
|
||||||
char buf[256];
|
char buf[256];
|
||||||
|
|
||||||
snprintf(buf, sizeof(buf), "[QuakeTV] %s\n", qtv->serveraddress);
|
snprintf(buf, sizeof(buf), "[QuakeTV] %s\n", qtv->serveraddress);
|
||||||
// Print a short line with info about the server
|
// Print a short line with info about the server
|
||||||
QW_PrintfToViewer(v, buf);
|
QW_PrintfToViewer(v, buf);
|
||||||
|
@ -3129,7 +3130,7 @@ void QTV_Say(cluster_t *cluster, sv_t *qtv, viewer_t *v, char *message, qboolean
|
||||||
QW_PrintfToViewer(v, "Opened demo file \"%s\".\n", message);
|
QW_PrintfToViewer(v, "Opened demo file \"%s\".\n", message);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
else if (!strcmp(v->expectcommand, "adddemo"))
|
else if (!strcmp(v->expectcommand, "adddemo"))
|
||||||
{
|
{
|
||||||
snprintf(buf, sizeof(buf), "file:%s", message);
|
snprintf(buf, sizeof(buf), "file:%s", message);
|
||||||
|
@ -3149,7 +3150,7 @@ void QTV_Say(cluster_t *cluster, sv_t *qtv, viewer_t *v, char *message, qboolean
|
||||||
|
|
||||||
newp = atoi(message);
|
newp = atoi(message);
|
||||||
|
|
||||||
|
|
||||||
if (newp)
|
if (newp)
|
||||||
{
|
{
|
||||||
news = Net_TCPListen(newp, true);
|
news = Net_TCPListen(newp, true);
|
||||||
|
@ -3547,7 +3548,7 @@ void ParseNQC(cluster_t *cluster, sv_t *qtv, viewer_t *v, netmsg_t *m)
|
||||||
if(v->server)
|
if(v->server)
|
||||||
{
|
{
|
||||||
int t;
|
int t;
|
||||||
|
|
||||||
for (t = v->trackplayer+1; t < MAX_CLIENTS; t++)
|
for (t = v->trackplayer+1; t < MAX_CLIENTS; t++)
|
||||||
{
|
{
|
||||||
if (v->server->map.players[t].active)
|
if (v->server->map.players[t].active)
|
||||||
|
@ -3581,7 +3582,7 @@ void ParseNQC(cluster_t *cluster, sv_t *qtv, viewer_t *v, netmsg_t *m)
|
||||||
{
|
{
|
||||||
if (!v->server && !v->menunum)
|
if (!v->server && !v->menunum)
|
||||||
QW_SetMenu(v, MENU_DEFAULT);
|
QW_SetMenu(v, MENU_DEFAULT);
|
||||||
|
|
||||||
if(v->server)
|
if(v->server)
|
||||||
{
|
{
|
||||||
int t;
|
int t;
|
||||||
|
@ -3821,7 +3822,7 @@ void ParseQWC(cluster_t *cluster, sv_t *qtv, viewer_t *v, netmsg_t *m)
|
||||||
oldmenu = v->menunum;
|
oldmenu = v->menunum;
|
||||||
QW_SetMenu(v, MENU_NONE);
|
QW_SetMenu(v, MENU_NONE);
|
||||||
QW_SetMenu(v, oldmenu);
|
QW_SetMenu(v, oldmenu);
|
||||||
|
|
||||||
|
|
||||||
com = v->commentator;
|
com = v->commentator;
|
||||||
v->commentator = NULL;
|
v->commentator = NULL;
|
||||||
|
|
|
@ -53,6 +53,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
|
|
||||||
#include "qtv.h"
|
#include "qtv.h"
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
#include "bsd_string.h"
|
#include "bsd_string.h"
|
||||||
|
|
||||||
|
@ -260,7 +261,7 @@ SOCKET Net_TCPListen(int port, qboolean ipv6)
|
||||||
|
|
||||||
if( bind (sock, address, addrsize) == -1)
|
if( bind (sock, address, addrsize) == -1)
|
||||||
{
|
{
|
||||||
printf("socket bind error %i\n", qerrno);
|
printf("socket bind error %i (%s)\n", qerrno, strerror(qerrno));
|
||||||
closesocket(sock);
|
closesocket(sock);
|
||||||
return INVALID_SOCKET;
|
return INVALID_SOCKET;
|
||||||
}
|
}
|
||||||
|
@ -648,10 +649,10 @@ qboolean Net_ConnectToServer(sv_t *qtv)
|
||||||
case SRC_UDP:
|
case SRC_UDP:
|
||||||
qtv->usequakeworldprotocols = true;
|
qtv->usequakeworldprotocols = true;
|
||||||
return Net_ConnectToUDPServer(qtv, ip);
|
return Net_ConnectToUDPServer(qtv, ip);
|
||||||
|
|
||||||
case SRC_TCP:
|
case SRC_TCP:
|
||||||
return Net_ConnectToTCPServer(qtv, ip);
|
return Net_ConnectToTCPServer(qtv, ip);
|
||||||
|
|
||||||
default:
|
default:
|
||||||
Sys_Printf(qtv->cluster, "Unknown source type %s\n", ip);
|
Sys_Printf(qtv->cluster, "Unknown source type %s\n", ip);
|
||||||
return false;
|
return false;
|
||||||
|
@ -692,7 +693,7 @@ qboolean Net_WriteUpstream(sv_t *qtv)
|
||||||
err = qerrno;
|
err = qerrno;
|
||||||
if (qerrno)
|
if (qerrno)
|
||||||
{
|
{
|
||||||
Sys_Printf(qtv->cluster, "Stream %i: Error: source socket error %i\n", qtv->streamid, qerrno);
|
Sys_Printf(qtv->cluster, "Stream %i: Error: source socket error %i (%s)\n", qtv->streamid, qerrno, strerror(qerrno));
|
||||||
strcpy(qtv->status, "Network error\n");
|
strcpy(qtv->status, "Network error\n");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -731,7 +732,7 @@ int SV_SayToUpstream(sv_t *qtv, char *message)
|
||||||
#ifndef _MSC_VER
|
#ifndef _MSC_VER
|
||||||
#warning This is incomplete!
|
#warning This is incomplete!
|
||||||
#endif
|
#endif
|
||||||
//Sys_Printf(qtv->cluster, "not forwarding say\n");
|
//Sys_Printf(qtv->cluster, "not forwarding say\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -802,7 +803,7 @@ int SV_EarlyParse(sv_t *qtv, unsigned char *buffer, int remaining)
|
||||||
{
|
{
|
||||||
ParseMessage(qtv, buffer+lengthofs+4, length - (lengthofs+4), buffer[1], 0xffffffff);
|
ParseMessage(qtv, buffer+lengthofs+4, length - (lengthofs+4), buffer[1], 0xffffffff);
|
||||||
}
|
}
|
||||||
|
|
||||||
remaining -= length;
|
remaining -= length;
|
||||||
available += length;
|
available += length;
|
||||||
buffer += length;
|
buffer += length;
|
||||||
|
@ -879,7 +880,7 @@ qboolean Net_ReadStream(sv_t *qtv)
|
||||||
if (qtv->sourcefile)
|
if (qtv->sourcefile)
|
||||||
Sys_Printf(qtv->cluster, "Stream %i: Error: End of file\n", qtv->streamid);
|
Sys_Printf(qtv->cluster, "Stream %i: Error: End of file\n", qtv->streamid);
|
||||||
else if (read)
|
else if (read)
|
||||||
Sys_Printf(qtv->cluster, "Stream %i: Error: source socket error %i\n", qtv->streamid, qerrno);
|
Sys_Printf(qtv->cluster, "Stream %i: Error: source socket error %i (%s)\n", qtv->streamid, qerrno, strerror(qerrno));
|
||||||
else
|
else
|
||||||
Sys_Printf(qtv->cluster, "Stream %i: Error: server %s disconnected\n", qtv->streamid, qtv->server);
|
Sys_Printf(qtv->cluster, "Stream %i: Error: server %s disconnected\n", qtv->streamid, qtv->server);
|
||||||
if (qtv->sourcesock != INVALID_SOCKET)
|
if (qtv->sourcesock != INVALID_SOCKET)
|
||||||
|
@ -1168,7 +1169,7 @@ void QTV_Cleanup(sv_t *qtv, qboolean leaveadmins)
|
||||||
oproxy_t *old;
|
oproxy_t *old;
|
||||||
|
|
||||||
cluster = qtv->cluster;
|
cluster = qtv->cluster;
|
||||||
|
|
||||||
//set connected viewers to a different stream
|
//set connected viewers to a different stream
|
||||||
if (cluster->viewserver == qtv)
|
if (cluster->viewserver == qtv)
|
||||||
cluster->viewserver = NULL;
|
cluster->viewserver = NULL;
|
||||||
|
@ -1455,7 +1456,7 @@ void QTV_ParseQWStream(sv_t *qtv)
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef COMMENTARY
|
#ifdef COMMENTARY
|
||||||
#include <speex/speex.h>
|
#include <speex/speex.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
void QTV_CollectCommentry(sv_t *qtv)
|
void QTV_CollectCommentry(sv_t *qtv)
|
||||||
|
@ -1492,8 +1493,8 @@ void QTV_CollectCommentry(sv_t *qtv)
|
||||||
/* if (usespeex)
|
/* if (usespeex)
|
||||||
{
|
{
|
||||||
|
|
||||||
SpeexBits bits;
|
SpeexBits bits;
|
||||||
void *enc_state;
|
void *enc_state;
|
||||||
|
|
||||||
int frame_size;
|
int frame_size;
|
||||||
|
|
||||||
|
@ -1504,22 +1505,22 @@ void QTV_CollectCommentry(sv_t *qtv)
|
||||||
|
|
||||||
speex_bits_init(&bits);
|
speex_bits_init(&bits);
|
||||||
|
|
||||||
enc_state = speex_encoder_init(&speex_nb_mode);
|
enc_state = speex_encoder_init(&speex_nb_mode);
|
||||||
|
|
||||||
|
|
||||||
speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size);
|
speex_encoder_ctl(enc_state,SPEEX_GET_FRAME_SIZE,&frame_size);
|
||||||
|
|
||||||
|
|
||||||
speex_bits_reset(&bits);
|
speex_bits_reset(&bits);
|
||||||
|
|
||||||
speex_encode_int(enc_state, (spx_int16_t*)pcmdata, &bits);
|
speex_encode_int(enc_state, (spx_int16_t*)pcmdata, &bits);
|
||||||
|
|
||||||
samps = speex_bits_write(&bits, buffer+6, sizeof(buffer)-6);
|
samps = speex_bits_write(&bits, buffer+6, sizeof(buffer)-6);
|
||||||
|
|
||||||
|
|
||||||
speex_bits_destroy(&bits);
|
speex_bits_destroy(&bits);
|
||||||
|
|
||||||
speex_encoder_destroy(enc_state);
|
speex_encoder_destroy(enc_state);
|
||||||
|
|
||||||
}
|
}
|
||||||
else*/
|
else*/
|
||||||
|
|
Loading…
Reference in a new issue