src/network.h

Mon, 24 Aug 2026 14:31:37 +0200

author
Mike Becker <universe@uap-core.de>
date
Mon, 24 Aug 2026 14:31:37 +0200
changeset 188
bb967c8e51e9
parent 186
8230904458a7
child 189
444dfdf790b8
permissions
-rw-r--r--

change how a game is ended in multiplayer

relates to #976

1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
1 /*
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
2 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
3 *
55
54ea19938d57 updated copyright and version info
Mike Becker <universe@uap-core.de>
parents: 51
diff changeset
4 * Copyright 2016 Mike Becker. All rights reserved.
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
5 *
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
6 * Redistribution and use in source and binary forms, with or without
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
7 * modification, are permitted provided that the following conditions are met:
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
8 *
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
9 * 1. Redistributions of source code must retain the above copyright
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
10 * notice, this list of conditions and the following disclaimer.
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
11 *
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
12 * 2. Redistributions in binary form must reproduce the above copyright
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
13 * notice, this list of conditions and the following disclaimer in the
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
14 * documentation and/or other materials provided with the distribution.
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
15 *
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
16 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
17 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
18 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
19 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
20 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
21 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
22 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
23 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
24 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
25 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
26 * POSSIBILITY OF SUCH DAMAGE.
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
27 *
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
28 */
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
29
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
30 #ifndef TCHESS_NETWORK_H
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
31 #define TCHESS_NETWORK_H
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
32
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
33 #include <sys/socket.h>
183
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
34 #include <stdint.h>
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
35
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
36 #ifdef __cplusplus
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
37 extern "C" {
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
38 #endif
2
0a08f79c320d fixed network code + added game info and transmission of game info
Mike Becker <universe@uap-core.de>
parents: 1
diff changeset
39
43
12141136a0da changed netcode numbers
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
40 #define NETCODE_ACCEPT 0x02
12141136a0da changed netcode numbers
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
41 #define NETCODE_DECLINE 0x04
176
ef8c39362342 split DECLINE message into DECLINE and DECLINE_MOVE
Mike Becker <universe@uap-core.de>
parents: 163
diff changeset
42 #define NETCODE_DECLINE_MOVE 0x05
3
3693fd2eb0e9 changed UI to ncurses session + added network handshake
Mike Becker <universe@uap-core.de>
parents: 2
diff changeset
43 #define NETCODE_GAMEINFO 0x10
51
84f2e380a434 added support for game continuation over network + fixed major bug in checkmate anticipation when the king is attacked diagonally
Mike Becker <universe@uap-core.de>
parents: 49
diff changeset
44 #define NETCODE_PGNDATA 0x11
7
41468077b5bb implemented chess board and remis/surrender messages
Mike Becker <universe@uap-core.de>
parents: 3
diff changeset
45 #define NETCODE_MOVE 0x20
179
5ef724e21702 implement draw due to insufficient material
Mike Becker <universe@uap-core.de>
parents: 176
diff changeset
46 #define NETCODE_CHECKMATE 0x23
43
12141136a0da changed netcode numbers
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
47 #define NETCODE_STALEMATE 0x28
179
5ef724e21702 implement draw due to insufficient material
Mike Becker <universe@uap-core.de>
parents: 176
diff changeset
48 #define NETCODE_NOMATERIAL 0x29
131
c33567d61ba7 prepare netcode for claiming threefold repetition
Mike Becker <universe@uap-core.de>
parents: 130
diff changeset
49 #define NETCODE_THREEFOLD 0x30
44
1891d88cbd10 surrender is now resign
Mike Becker <universe@uap-core.de>
parents: 43
diff changeset
50 #define NETCODE_RESIGN 0x41
43
12141136a0da changed netcode numbers
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
51 #define NETCODE_REMIS 0x42
114
12df1b7c792f implement "taunt" command for the waiting player
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
52 #define NETCODE_TAUNT 0x43
43
12141136a0da changed netcode numbers
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
53 #define NETCODE_TIMEOVER 0x44
113
5f58df30d422 allow the waiting player to perform actions while waiting
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
54 #define NETCODE_AGAIN 0x70
46
4dcfb4c58b6d netcode is now aware of connection losses
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
55 #define NETCODE_CONNLOST 0x80
113
5f58df30d422 allow the waiting player to perform actions while waiting
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
56 #define NETCODE_ERROR 0xFF
25
3ab0c2e1a4e2 implemented king
Mike Becker <universe@uap-core.de>
parents: 22
diff changeset
57
181
8bda076d0a16 simplify how the elapsed move time is recorded
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
58 #define NETCODE_VERSION 24
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
59
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
60 typedef struct {
2
0a08f79c320d fixed network code + added game info and transmission of game info
Mike Becker <universe@uap-core.de>
parents: 1
diff changeset
61 int fd; /* -1, if we are the client */
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
62 struct sockaddr address;
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63 socklen_t address_len;
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
64 } Client;
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
65
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
66 typedef struct {
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
67 int fd;
2
0a08f79c320d fixed network code + added game info and transmission of game info
Mike Becker <universe@uap-core.de>
parents: 1
diff changeset
68 struct addrinfo* info; /* NULL, if we are the server */
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
69 Client *client;
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
70 } Server;
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
71
182
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
72 typedef struct {
184
93c81539b702 fix byte-order problem in GameInfo and change decline reason to one byte
Mike Becker <universe@uap-core.de>
parents: 183
diff changeset
73 uint8_t servercolor;
93c81539b702 fix byte-order problem in GameInfo and change decline reason to one byte
Mike Becker <universe@uap-core.de>
parents: 183
diff changeset
74 uint8_t timecontrol;
93c81539b702 fix byte-order problem in GameInfo and change decline reason to one byte
Mike Becker <universe@uap-core.de>
parents: 183
diff changeset
75 uint16_t time;
93c81539b702 fix byte-order problem in GameInfo and change decline reason to one byte
Mike Becker <universe@uap-core.de>
parents: 183
diff changeset
76 uint16_t addtime;
93c81539b702 fix byte-order problem in GameInfo and change decline reason to one byte
Mike Becker <universe@uap-core.de>
parents: 183
diff changeset
77 uint16_t delay;
93c81539b702 fix byte-order problem in GameInfo and change decline reason to one byte
Mike Becker <universe@uap-core.de>
parents: 183
diff changeset
78 } NetGameInfo;
93c81539b702 fix byte-order problem in GameInfo and change decline reason to one byte
Mike Becker <universe@uap-core.de>
parents: 183
diff changeset
79
93c81539b702 fix byte-order problem in GameInfo and change decline reason to one byte
Mike Becker <universe@uap-core.de>
parents: 183
diff changeset
80 typedef struct {
182
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
81 uint32_t mtime_sec;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
82 uint32_t mtime_usec;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
83 uint8_t piece;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
84 uint8_t fromfile;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
85 uint8_t fromrow;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
86 uint8_t tofile;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
87 uint8_t torow;
186
8230904458a7 fix regression in network play: we have to transmit capture/check(mate) flags
Mike Becker <universe@uap-core.de>
parents: 184
diff changeset
88 uint8_t capture;
8230904458a7 fix regression in network play: we have to transmit capture/check(mate) flags
Mike Becker <universe@uap-core.de>
parents: 184
diff changeset
89 uint8_t check_or_mate;
182
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
90 uint8_t promotion;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
91 } NetMove;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
92
94
864f59271974 implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents: 92
diff changeset
93 int net_create_tcp(Server *server, short port);
864f59271974 implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents: 92
diff changeset
94 int net_find_tcp(Server *server, char* host, short port);
864f59271974 implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents: 92
diff changeset
95
864f59271974 implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents: 92
diff changeset
96 int net_create_sock(Server *server, char *path);
864f59271974 implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents: 92
diff changeset
97 int net_find_sock(Server *server, char* path);
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
98
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
99 int net_listen(Server *server);
94
864f59271974 implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents: 92
diff changeset
100 void net_destroy(Server *server);
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
101 int net_connect(Server *server);
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
102
22
41bbfd4d17a3 improved network performance
Mike Becker <universe@uap-core.de>
parents: 18
diff changeset
103 void net_send_code(int socket, uint8_t code);
41bbfd4d17a3 improved network performance
Mike Becker <universe@uap-core.de>
parents: 18
diff changeset
104 void net_send_data(int socket, uint8_t code, void *data, size_t len);
41bbfd4d17a3 improved network performance
Mike Becker <universe@uap-core.de>
parents: 18
diff changeset
105 uint8_t net_recieve_code(int socket);
113
5f58df30d422 allow the waiting player to perform actions while waiting
Mike Becker <universe@uap-core.de>
parents: 94
diff changeset
106 uint8_t net_recieve_code_async(int socket);
2
0a08f79c320d fixed network code + added game info and transmission of game info
Mike Becker <universe@uap-core.de>
parents: 1
diff changeset
107 void net_recieve_data(int socket, void *data, size_t len);
0a08f79c320d fixed network code + added game info and transmission of game info
Mike Becker <universe@uap-core.de>
parents: 1
diff changeset
108
183
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
109
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
110 /* Functions that convert WORD and DWORD values to terminal-chess
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
111 * network protocol byte order.
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
112 *
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
113 * Note: due to the vast majority of processors using little-endian,
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
114 * the network byte order of terminal-chess is little-endian, too.
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
115 * While the standard network byte order is big-endian for historic reasons.
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
116 */
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
117
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
118 static inline uint16_t net_htons(uint16_t s) {
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
119 #if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
120 return s;
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
121 #else
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
122 #if !defined(__BYTE_ORDER__)
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
123 const uint16_t endian_test = 1;
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
124 if (*(const uint8_t *)&endian_test) {
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
125 return s;
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
126 }
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
127 #endif
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
128 return (uint16_t)((s >> 8) | (s << 8));
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
129 #endif
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
130 }
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
131
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
132 static inline uint16_t net_ntohs(uint16_t s) {
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
133 return net_htons(s);
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
134 }
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
135
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
136 static inline uint32_t net_ntohl(uint32_t l) {
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
137 #if defined(__BYTE_ORDER__) && __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
138 return l;
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
139 #else
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
140 #if !defined(__BYTE_ORDER__)
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
141 const uint16_t endian_test = 1;
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
142 if (*(const uint8_t *)&endian_test) {
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
143 return l;
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
144 }
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
145 #endif
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
146 return ((l & 0x000000FFu) << 24)
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
147 | ((l & 0x0000FF00u) << 8)
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
148 | ((l & 0x00FF0000u) >> 8)
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
149 | ((l & 0xFF000000u) >> 24);
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
150 #endif
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
151 }
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
152
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
153 static inline uint32_t net_htonl(uint32_t l) {
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
154 return net_ntohl(l);
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
155 }
39aa77b7188b fix missing byte-order conversion in ntoh_move() and change protocol byte order to little-endian
Mike Becker <universe@uap-core.de>
parents: 182
diff changeset
156
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
157 #ifdef __cplusplus
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
158 }
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
159 #endif
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
160
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
161 #endif /* TCHESS_NETWORK_H */
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
162

mercurial