src/network.h

Sun, 23 Aug 2026 12:19:05 +0200

author
Mike Becker <universe@uap-core.de>
date
Sun, 23 Aug 2026 12:19:05 +0200
changeset 184
93c81539b702
parent 183
39aa77b7188b
permissions
-rw-r--r--

fix byte-order problem in GameInfo and change decline reason to one byte

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
43
12141136a0da changed netcode numbers
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
46 #define NETCODE_CHECK 0x22
179
5ef724e21702 implement draw due to insufficient material
Mike Becker <universe@uap-core.de>
parents: 176
diff changeset
47 #define NETCODE_CHECKMATE 0x23
43
12141136a0da changed netcode numbers
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
48 #define NETCODE_STALEMATE 0x28
179
5ef724e21702 implement draw due to insufficient material
Mike Becker <universe@uap-core.de>
parents: 176
diff changeset
49 #define NETCODE_NOMATERIAL 0x29
131
c33567d61ba7 prepare netcode for claiming threefold repetition
Mike Becker <universe@uap-core.de>
parents: 130
diff changeset
50 #define NETCODE_THREEFOLD 0x30
44
1891d88cbd10 surrender is now resign
Mike Becker <universe@uap-core.de>
parents: 43
diff changeset
51 #define NETCODE_RESIGN 0x41
43
12141136a0da changed netcode numbers
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
52 #define NETCODE_REMIS 0x42
114
12df1b7c792f implement "taunt" command for the waiting player
Mike Becker <universe@uap-core.de>
parents: 113
diff changeset
53 #define NETCODE_TAUNT 0x43
43
12141136a0da changed netcode numbers
Mike Becker <universe@uap-core.de>
parents: 41
diff changeset
54 #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
55 #define NETCODE_AGAIN 0x70
46
4dcfb4c58b6d netcode is now aware of connection losses
Mike Becker <universe@uap-core.de>
parents: 45
diff changeset
56 #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
57 #define NETCODE_ERROR 0xFF
25
3ab0c2e1a4e2 implemented king
Mike Becker <universe@uap-core.de>
parents: 22
diff changeset
58
181
8bda076d0a16 simplify how the elapsed move time is recorded
Mike Becker <universe@uap-core.de>
parents: 179
diff changeset
59 #define NETCODE_VERSION 24
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
60
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
61 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
62 int fd; /* -1, if we are the client */
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
63 struct sockaddr address;
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
64 socklen_t address_len;
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
65 } Client;
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
66
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
67 typedef struct {
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
68 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
69 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
70 Client *client;
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
71 } Server;
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
72
182
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
73 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
74 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
75 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
76 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
77 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
78 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
79 } 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
80
93c81539b702 fix byte-order problem in GameInfo and change decline reason to one byte
Mike Becker <universe@uap-core.de>
parents: 183
diff changeset
81 typedef struct {
182
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
82 uint32_t mtime_sec;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
83 uint32_t mtime_usec;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
84 uint8_t piece;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
85 uint8_t fromfile;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
86 uint8_t fromrow;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
87 uint8_t tofile;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
88 uint8_t torow;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
89 uint8_t promotion;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
90 } NetMove;
04c65336777f start fixing the network protocol
Mike Becker <universe@uap-core.de>
parents: 181
diff changeset
91
94
864f59271974 implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents: 92
diff changeset
92 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
93 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
94
864f59271974 implement option to play via Unix domain socket
Mike Becker <universe@uap-core.de>
parents: 92
diff changeset
95 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
96 int net_find_sock(Server *server, char* path);
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
97
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
98 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
99 void net_destroy(Server *server);
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
100 int net_connect(Server *server);
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
101
22
41bbfd4d17a3 improved network performance
Mike Becker <universe@uap-core.de>
parents: 18
diff changeset
102 void net_send_code(int socket, uint8_t code);
41bbfd4d17a3 improved network performance
Mike Becker <universe@uap-core.de>
parents: 18
diff changeset
103 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
104 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
105 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
106 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
107
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
108
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 /* 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
110 * 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
111 *
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 * 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
113 * 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
114 * 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
115 */
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 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
118 #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
119 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
120 #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
121 #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
122 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
123 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
124 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
125 }
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 #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
127 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
128 #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
129 }
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 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
132 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
133 }
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 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
136 #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
137 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
138 #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
139 #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
140 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
141 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
142 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
143 }
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 #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
145 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
146 | ((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
147 | ((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
148 | ((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
149 #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
150 }
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 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
153 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
154 }
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
1
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
156 #ifdef __cplusplus
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
157 }
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
158 #endif
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
159
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
160 #endif /* TCHESS_NETWORK_H */
e5fbb8f9edbe added (single) client / server architecture
Mike Becker <universe@uap-core.de>
parents:
diff changeset
161

mercurial