Document the datagram net driver interface.

This commit is contained in:
Bill Currie 2011-08-02 15:22:33 +09:00
parent e89532cb9f
commit e5876752f3
3 changed files with 99 additions and 10 deletions

View file

@ -32,17 +32,98 @@
*/ */
//@{ //@{
/** Initialize the Datagram net driver.
Also initializes the underlying lan drivers.
\return 0 if successful, otherwise -1.
*/
int Datagram_Init (void); int Datagram_Init (void);
/** Control the listen status of the underlying lan drivers.
\param state True to enable, false to disable.
*/
void Datagram_Listen (qboolean state); void Datagram_Listen (qboolean state);
/** Search for hosts (servers) on the local network.
If \p xmit is true, broadcast a CCREQ_SERVER_INFO packet via all
underlying lan drivers using their control ports.
Check for any CCREP_SERVER_INFO responses. Ignore all other packets.
\param xmit True to send the broadcast, falst to only listen.
*/
void Datagram_SearchForHosts (qboolean xmit); void Datagram_SearchForHosts (qboolean xmit);
/** Connect to the specified host.
\param host The host to which the connection will be made.
\return A pointer to the socket representing the connection, or
null if unsuccessful.
*/
qsocket_t *Datagram_Connect (const char *host); qsocket_t *Datagram_Connect (const char *host);
/** Check for a new incoming connection.
\return A pointer to the socekt representing the new connection,
or null if none found.
*/
qsocket_t *Datagram_CheckNewConnections (void); qsocket_t *Datagram_CheckNewConnections (void);
/** Check for and process an incoming packet on the socket.
\param sock The socket to check.
\return -1 if there is an error
\return 0 if the packet is stale
\return 1 if the packet is reliable
\return 2 if the packet is unreliable
*/
int Datagram_GetMessage (qsocket_t *sock); int Datagram_GetMessage (qsocket_t *sock);
/** Send a reliable packet to the socket.
\param sock The socket to which the packet will be sent.
\param data The packet to be sent.
\return -1 If there is an error
\return 1 if everything is ok.
*/
int Datagram_SendMessage (qsocket_t *sock, sizebuf_t *data); int Datagram_SendMessage (qsocket_t *sock, sizebuf_t *data);
/** Send an unreliable packet to the socket.
\param sock The socket to which the packet will be sent.
\param data The packet to be sent.
\return -1 If there is an error
\return 1 if everything is ok.
*/
int Datagram_SendUnreliableMessage (qsocket_t *sock, sizebuf_t *data); int Datagram_SendUnreliableMessage (qsocket_t *sock, sizebuf_t *data);
/** Check if a reliable message can be sent to the socket.
\param sock The socket to check.
\return True if the packet can be sent.
*/
qboolean Datagram_CanSendMessage (qsocket_t *sock); qboolean Datagram_CanSendMessage (qsocket_t *sock);
/** Check if an unreliable message can be sent to the socket.
Always true.
\param sock The socket to check.
\return True if the packet can be sent.
*/
qboolean Datagram_CanSendUnreliableMessage (qsocket_t *sock); qboolean Datagram_CanSendUnreliableMessage (qsocket_t *sock);
/** Close the socket.
\param sock The socket to close.
*/
void Datagram_Close (qsocket_t *sock); void Datagram_Close (qsocket_t *sock);
/** Shutdown the Datagram net driver.
*/
void Datagram_Shutdown (void); void Datagram_Shutdown (void);
//@} //@}

View file

@ -52,6 +52,7 @@ void UDP_Shutdown (void);
/** Open or close the accept socket. /** Open or close the accept socket.
Sets net_acceptsocket to the socket number or -1. Sets net_acceptsocket to the socket number or -1.
The accept socket is stored in net_hostport.
\param state True to open the socket, false to close it. \param state True to open the socket, false to close it.
*/ */
@ -169,7 +170,10 @@ int UDP_GetAddrFromName (const char *name, struct qsockaddr *addr);
\param addr1 The first address to compare. \param addr1 The first address to compare.
\param addr2 The second address to compare. \param addr2 The second address to compare.
\return True of the addresses match, otherwise false. \return -1 if the family or address are different.
\return 1 if the family and address are the same, but the port
is different.
\return 0 if everything is the same.
*/ */
int UDP_AddrCompare (struct qsockaddr *addr1, struct qsockaddr *addr2); int UDP_AddrCompare (struct qsockaddr *addr1, struct qsockaddr *addr2);

View file

@ -157,7 +157,7 @@ NET_Ban_f (void)
int int
Datagram_SendMessage (qsocket_t * sock, sizebuf_t *data) Datagram_SendMessage (qsocket_t *sock, sizebuf_t *data)
{ {
unsigned int packetLen; unsigned int packetLen;
unsigned int dataLen; unsigned int dataLen;
@ -193,7 +193,7 @@ Datagram_SendMessage (qsocket_t * sock, sizebuf_t *data)
static int static int
SendMessageNext (qsocket_t * sock) SendMessageNext (qsocket_t *sock)
{ {
unsigned int packetLen; unsigned int packetLen;
unsigned int dataLen; unsigned int dataLen;
@ -225,7 +225,7 @@ SendMessageNext (qsocket_t * sock)
static int static int
ReSendMessage (qsocket_t * sock) ReSendMessage (qsocket_t *sock)
{ {
unsigned int packetLen; unsigned int packetLen;
unsigned int dataLen; unsigned int dataLen;
@ -257,7 +257,7 @@ ReSendMessage (qsocket_t * sock)
qboolean qboolean
Datagram_CanSendMessage (qsocket_t * sock) Datagram_CanSendMessage (qsocket_t *sock)
{ {
if (sock->sendNext) if (sock->sendNext)
SendMessageNext (sock); SendMessageNext (sock);
@ -267,14 +267,14 @@ Datagram_CanSendMessage (qsocket_t * sock)
qboolean qboolean
Datagram_CanSendUnreliableMessage (qsocket_t * sock) Datagram_CanSendUnreliableMessage (qsocket_t *sock)
{ {
return true; return true;
} }
int int
Datagram_SendUnreliableMessage (qsocket_t * sock, sizebuf_t *data) Datagram_SendUnreliableMessage (qsocket_t *sock, sizebuf_t *data)
{ {
int packetLen; int packetLen;
@ -294,7 +294,7 @@ Datagram_SendUnreliableMessage (qsocket_t * sock, sizebuf_t *data)
int int
Datagram_GetMessage (qsocket_t * sock) Datagram_GetMessage (qsocket_t *sock)
{ {
unsigned int length; unsigned int length;
unsigned int flags; unsigned int flags;
@ -303,6 +303,8 @@ Datagram_GetMessage (qsocket_t * sock)
unsigned int sequence; unsigned int sequence;
unsigned int count; unsigned int count;
/// If there is an outstanding reliable packet and more than 1 second has
/// passed, resend the packet.
if (!sock->canSend) if (!sock->canSend)
if ((net_time - sock->lastSendTime) > 1.0) if ((net_time - sock->lastSendTime) > 1.0)
ReSendMessage (sock); ReSendMessage (sock);
@ -357,6 +359,7 @@ Datagram_GetMessage (qsocket_t * sock)
length -= NET_HEADERSIZE; length -= NET_HEADERSIZE;
/// Copy unreliable data to net_message
SZ_Clear (net_message->message); SZ_Clear (net_message->message);
SZ_Write (net_message->message, packetBuffer.data, length); SZ_Write (net_message->message, packetBuffer.data, length);
@ -414,6 +417,7 @@ Datagram_GetMessage (qsocket_t * sock)
break; break;
} }
/// Append reliable data to sock->receiveMessage.
memcpy (sock->receiveMessage + sock->receiveMessageLength, memcpy (sock->receiveMessage + sock->receiveMessageLength,
packetBuffer.data, length); packetBuffer.data, length);
sock->receiveMessageLength += length; sock->receiveMessageLength += length;
@ -429,7 +433,7 @@ Datagram_GetMessage (qsocket_t * sock)
static void static void
PrintStats (qsocket_t * s) PrintStats (qsocket_t *s)
{ {
Sys_Printf ("canSend = %4u \n", s->canSend); Sys_Printf ("canSend = %4u \n", s->canSend);
Sys_Printf ("sendSeq = %4u ", s->sendSequence); Sys_Printf ("sendSeq = %4u ", s->sendSequence);
@ -790,7 +794,7 @@ Datagram_Shutdown (void)
void void
Datagram_Close (qsocket_t * sock) Datagram_Close (qsocket_t *sock)
{ {
sfunc.CloseSocket (sock->socket); sfunc.CloseSocket (sock->socket);
} }