net: Move protocol list code to net_structrw.c.
This is slightly out of place because these functions aren't for writing "structs" as such. But they still fit in better here than in net_common.c since they aren't really just part of the common connection code, and will be needed to include protocol list inside query response packets.
This commit is contained in:
parent
308905898e
commit
6b1d0a8102
4 changed files with 123 additions and 119 deletions
113
src/net_common.c
113
src/net_common.c
|
|
@ -36,16 +36,6 @@
|
|||
|
||||
#define KEEPALIVE_PERIOD 1
|
||||
|
||||
// String names for the enum values in net_protocol_t, which are what is
|
||||
// sent over the wire. Every enum value must have an entry in this list.
|
||||
static struct
|
||||
{
|
||||
net_protocol_t protocol;
|
||||
const char *name;
|
||||
} protocol_names[] = {
|
||||
{NET_PROTOCOL_CHOCOLATE_DOOM_0, "CHOCOLATE_DOOM_0"},
|
||||
};
|
||||
|
||||
// reliable packet that is guaranteed to reach its destination
|
||||
|
||||
struct net_reliable_packet_s
|
||||
|
|
@ -483,106 +473,3 @@ boolean NET_ValidGameSettings(GameMode_t mode, GameMission_t mission,
|
|||
return true;
|
||||
}
|
||||
|
||||
static net_protocol_t ParseProtocolName(const char *name)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < arrlen(protocol_names); ++i)
|
||||
{
|
||||
if (!strcmp(protocol_names[i].name, name))
|
||||
{
|
||||
return protocol_names[i].protocol;
|
||||
}
|
||||
}
|
||||
|
||||
return NET_PROTOCOL_UNKNOWN;
|
||||
}
|
||||
|
||||
// NET_ReadProtocol reads a single string-format protocol name from the given
|
||||
// packet, returning NET_PROTOCOL_UNKNOWN if the string describes an unknown
|
||||
// protocol.
|
||||
net_protocol_t NET_ReadProtocol(net_packet_t *packet)
|
||||
{
|
||||
const char *name;
|
||||
|
||||
name = NET_ReadString(packet);
|
||||
if (name == NULL)
|
||||
{
|
||||
return NET_PROTOCOL_UNKNOWN;
|
||||
}
|
||||
|
||||
return ParseProtocolName(name);
|
||||
}
|
||||
|
||||
// NET_WriteProtocol writes a single string-format protocol name to a packet.
|
||||
void NET_WriteProtocol(net_packet_t *packet, net_protocol_t protocol)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < arrlen(protocol_names); ++i)
|
||||
{
|
||||
if (protocol_names[i].protocol == protocol)
|
||||
{
|
||||
NET_WriteString(packet, protocol_names[i].name);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// If you add an entry to the net_protocol_t enum, a corresponding entry
|
||||
// must be added to the protocol_names list.
|
||||
I_Error("NET_WriteProtocol: protocol %d missing from protocol_names "
|
||||
"list; please add it.", protocol);
|
||||
}
|
||||
|
||||
// NET_ReadProtocolList reads a list of string-format protocol names from
|
||||
// the given packet, returning a single protocol number. The protocol that is
|
||||
// returned is the last protocol in the list that is a supported protocol. If
|
||||
// no recognized protocols are read, NET_PROTOCOL_UNKNOWN is returned.
|
||||
net_protocol_t NET_ReadProtocolList(net_packet_t *packet)
|
||||
{
|
||||
net_protocol_t result;
|
||||
unsigned int num_protocols;
|
||||
int i;
|
||||
|
||||
if (!NET_ReadInt8(packet, &num_protocols))
|
||||
{
|
||||
return NET_PROTOCOL_UNKNOWN;
|
||||
}
|
||||
|
||||
result = NET_PROTOCOL_UNKNOWN;
|
||||
|
||||
for (i = 0; i < num_protocols; ++i)
|
||||
{
|
||||
net_protocol_t p;
|
||||
const char *name;
|
||||
|
||||
name = NET_ReadString(packet);
|
||||
if (name == NULL)
|
||||
{
|
||||
return NET_PROTOCOL_UNKNOWN;
|
||||
}
|
||||
|
||||
p = ParseProtocolName(name);
|
||||
if (p != NET_PROTOCOL_UNKNOWN)
|
||||
{
|
||||
result = p;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// NET_WriteProtocolList writes a list of string-format protocol names into
|
||||
// the given packet, all the supported protocols in the net_protocol_t enum.
|
||||
void NET_WriteProtocolList(net_packet_t *packet)
|
||||
{
|
||||
int i;
|
||||
|
||||
NET_WriteInt8(packet, NET_NUM_PROTOCOLS);
|
||||
|
||||
for (i = 0; i < NET_NUM_PROTOCOLS; ++i)
|
||||
{
|
||||
NET_WriteProtocol(packet, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -93,12 +93,6 @@ void NET_Conn_Disconnect(net_connection_t *conn);
|
|||
void NET_Conn_Run(net_connection_t *conn);
|
||||
net_packet_t *NET_Conn_NewReliable(net_connection_t *conn, int packet_type);
|
||||
|
||||
// Protocol list exchange.
|
||||
net_protocol_t NET_ReadProtocol(net_packet_t *packet);
|
||||
void NET_WriteProtocol(net_packet_t *packet, net_protocol_t protocol);
|
||||
net_protocol_t NET_ReadProtocolList(net_packet_t *packet);
|
||||
void NET_WriteProtocolList(net_packet_t *packet);
|
||||
|
||||
// Other miscellaneous common functions
|
||||
unsigned int NET_ExpandTicNum(unsigned int relative, unsigned int b);
|
||||
boolean NET_ValidGameSettings(GameMode_t mode, GameMission_t mission,
|
||||
|
|
|
|||
|
|
@ -19,10 +19,21 @@
|
|||
#include <string.h>
|
||||
|
||||
#include "doomtype.h"
|
||||
#include "i_system.h"
|
||||
#include "m_misc.h"
|
||||
#include "net_packet.h"
|
||||
#include "net_structrw.h"
|
||||
|
||||
// String names for the enum values in net_protocol_t, which are what is
|
||||
// sent over the wire. Every enum value must have an entry in this list.
|
||||
static struct
|
||||
{
|
||||
net_protocol_t protocol;
|
||||
const char *name;
|
||||
} protocol_names[] = {
|
||||
{NET_PROTOCOL_CHOCOLATE_DOOM_0, "CHOCOLATE_DOOM_0"},
|
||||
};
|
||||
|
||||
void NET_WriteConnectData(net_packet_t *packet, net_connect_data_t *data)
|
||||
{
|
||||
NET_WriteInt8(packet, data->gamemode);
|
||||
|
|
@ -550,3 +561,109 @@ void NET_WritePRNGSeed(net_packet_t *packet, prng_seed_t seed)
|
|||
NET_WriteBlob(packet, seed, sizeof(prng_seed_t));
|
||||
}
|
||||
|
||||
static net_protocol_t ParseProtocolName(const char *name)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < arrlen(protocol_names); ++i)
|
||||
{
|
||||
if (!strcmp(protocol_names[i].name, name))
|
||||
{
|
||||
return protocol_names[i].protocol;
|
||||
}
|
||||
}
|
||||
|
||||
return NET_PROTOCOL_UNKNOWN;
|
||||
}
|
||||
|
||||
// NET_ReadProtocol reads a single string-format protocol name from the given
|
||||
// packet, returning NET_PROTOCOL_UNKNOWN if the string describes an unknown
|
||||
// protocol.
|
||||
net_protocol_t NET_ReadProtocol(net_packet_t *packet)
|
||||
{
|
||||
const char *name;
|
||||
|
||||
name = NET_ReadString(packet);
|
||||
if (name == NULL)
|
||||
{
|
||||
return NET_PROTOCOL_UNKNOWN;
|
||||
}
|
||||
|
||||
return ParseProtocolName(name);
|
||||
}
|
||||
|
||||
// NET_WriteProtocol writes a single string-format protocol name to a packet.
|
||||
void NET_WriteProtocol(net_packet_t *packet, net_protocol_t protocol)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < arrlen(protocol_names); ++i)
|
||||
{
|
||||
if (protocol_names[i].protocol == protocol)
|
||||
{
|
||||
NET_WriteString(packet, protocol_names[i].name);
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// If you add an entry to the net_protocol_t enum, a corresponding entry
|
||||
// must be added to the protocol_names list.
|
||||
I_Error("NET_WriteProtocol: protocol %d missing from protocol_names "
|
||||
"list; please add it.", protocol);
|
||||
}
|
||||
|
||||
// NET_ReadProtocolList reads a list of string-format protocol names from
|
||||
// the given packet, returning a single protocol number. The protocol that is
|
||||
// returned is the last protocol in the list that is a supported protocol. If
|
||||
// no recognized protocols are read, NET_PROTOCOL_UNKNOWN is returned.
|
||||
net_protocol_t NET_ReadProtocolList(net_packet_t *packet)
|
||||
{
|
||||
net_protocol_t result;
|
||||
unsigned int num_protocols;
|
||||
int i;
|
||||
|
||||
if (!NET_ReadInt8(packet, &num_protocols))
|
||||
{
|
||||
return NET_PROTOCOL_UNKNOWN;
|
||||
}
|
||||
|
||||
result = NET_PROTOCOL_UNKNOWN;
|
||||
|
||||
for (i = 0; i < num_protocols; ++i)
|
||||
{
|
||||
net_protocol_t p;
|
||||
const char *name;
|
||||
|
||||
name = NET_ReadString(packet);
|
||||
if (name == NULL)
|
||||
{
|
||||
return NET_PROTOCOL_UNKNOWN;
|
||||
}
|
||||
|
||||
p = ParseProtocolName(name);
|
||||
if (p != NET_PROTOCOL_UNKNOWN)
|
||||
{
|
||||
result = p;
|
||||
}
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
// NET_WriteProtocolList writes a list of string-format protocol names into
|
||||
// the given packet, all the supported protocols in the net_protocol_t enum.
|
||||
// This is slightly different to other functions in this file, in that there
|
||||
// is nothing the caller can "choose" to write; the built-in list of all
|
||||
// protocols is always sent.
|
||||
void NET_WriteProtocolList(net_packet_t *packet)
|
||||
{
|
||||
int i;
|
||||
|
||||
NET_WriteInt8(packet, NET_NUM_PROTOCOLS);
|
||||
|
||||
for (i = 0; i < NET_NUM_PROTOCOLS; ++i)
|
||||
{
|
||||
NET_WriteProtocol(packet, i);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,4 +46,10 @@ boolean NET_ReadWaitData(net_packet_t *packet, net_waitdata_t *data);
|
|||
boolean NET_ReadPRNGSeed(net_packet_t *packet, prng_seed_t seed);
|
||||
void NET_WritePRNGSeed(net_packet_t *packet, prng_seed_t seed);
|
||||
|
||||
// Protocol list exchange.
|
||||
net_protocol_t NET_ReadProtocol(net_packet_t *packet);
|
||||
void NET_WriteProtocol(net_packet_t *packet, net_protocol_t protocol);
|
||||
net_protocol_t NET_ReadProtocolList(net_packet_t *packet);
|
||||
void NET_WriteProtocolList(net_packet_t *packet);
|
||||
|
||||
#endif /* #ifndef NET_STRUCTRW_H */
|
||||
|
|
|
|||
Loading…
Reference in a new issue