protocol: use network byte-order
The network code assumes that the client and server have the same endianess. This isn't always the case, so let's change it all to network byte-order. This change is not backwards compatible, so old clients and new editors (or vica verca) will not work together any more.
This commit is contained in:
parent
9d4aea28fb
commit
6693c3f8f4
@ -573,6 +573,9 @@ void processCommand(NetworkSocket &sock)
|
|||||||
// read data
|
// read data
|
||||||
sock.recv((char *)&clientIndex, sizeof(int), 0);
|
sock.recv((char *)&clientIndex, sizeof(int), 0);
|
||||||
sock.recv((char *)&strLen, sizeof(int), 0);
|
sock.recv((char *)&strLen, sizeof(int), 0);
|
||||||
|
clientIndex = ntohl(clientIndex);
|
||||||
|
strLen = ntohl(strLen);
|
||||||
|
|
||||||
trackName.resize(strLen);
|
trackName.resize(strLen);
|
||||||
sock.recv(&trackName[0], strLen, 0);
|
sock.recv(&trackName[0], strLen, 0);
|
||||||
if (!sock.connected())
|
if (!sock.connected())
|
||||||
@ -599,7 +602,7 @@ void processCommand(NetworkSocket &sock)
|
|||||||
|
|
||||||
case SET_ROW:
|
case SET_ROW:
|
||||||
sock.recv((char*)&newRow, sizeof(int), 0);
|
sock.recv((char*)&newRow, sizeof(int), 0);
|
||||||
trackView->setEditRow(newRow);
|
trackView->setEditRow(ntohl(newRow));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -85,19 +85,27 @@ public:
|
|||||||
return index;
|
return index;
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendSetKeyCommand(int track, const struct track_key &key)
|
void sendSetKeyCommand(uint32_t track, const struct track_key &key)
|
||||||
{
|
{
|
||||||
if (!clientSocket.connected()) return;
|
if (!clientSocket.connected()) return;
|
||||||
if (clientRemap.count(track) == 0) return;
|
if (clientRemap.count(track) == 0) return;
|
||||||
track = int(clientRemap[track]);
|
track = htonl(clientRemap[track]);
|
||||||
|
uint32_t row = htonl(key.row);
|
||||||
|
|
||||||
|
union {
|
||||||
|
float f;
|
||||||
|
uint32_t i;
|
||||||
|
} v;
|
||||||
|
v.f = key.value;
|
||||||
|
v.i = htonl(v.i);
|
||||||
|
|
||||||
assert(key.type < KEY_TYPE_COUNT);
|
assert(key.type < KEY_TYPE_COUNT);
|
||||||
|
|
||||||
unsigned char cmd = SET_KEY;
|
unsigned char cmd = SET_KEY;
|
||||||
clientSocket.send((char*)&cmd, 1, 0);
|
clientSocket.send((char*)&cmd, 1, 0);
|
||||||
clientSocket.send((char*)&track, sizeof(int), 0);
|
clientSocket.send((char*)&track, sizeof(track), 0);
|
||||||
clientSocket.send((char*)&key.row, sizeof(int), 0);
|
clientSocket.send((char*)&row, sizeof(row), 0);
|
||||||
clientSocket.send((char*)&key.value, sizeof(float), 0);
|
clientSocket.send((char*)&v.i, sizeof(v.i), 0);
|
||||||
clientSocket.send((char*)&key.type, 1, 0);
|
clientSocket.send((char*)&key.type, 1, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -105,7 +113,9 @@ public:
|
|||||||
{
|
{
|
||||||
if (!clientSocket.connected()) return;
|
if (!clientSocket.connected()) return;
|
||||||
if (clientRemap.count(track) == 0) return;
|
if (clientRemap.count(track) == 0) return;
|
||||||
track = int(clientRemap[track]);
|
|
||||||
|
track = htonl(int(clientRemap[track]));
|
||||||
|
row = htonl(row);
|
||||||
|
|
||||||
unsigned char cmd = DELETE_KEY;
|
unsigned char cmd = DELETE_KEY;
|
||||||
clientSocket.send((char*)&cmd, 1, 0);
|
clientSocket.send((char*)&cmd, 1, 0);
|
||||||
@ -117,8 +127,9 @@ public:
|
|||||||
{
|
{
|
||||||
if (!clientSocket.connected()) return;
|
if (!clientSocket.connected()) return;
|
||||||
unsigned char cmd = SET_ROW;
|
unsigned char cmd = SET_ROW;
|
||||||
|
row = htonl(row);
|
||||||
clientSocket.send((char*)&cmd, 1, 0);
|
clientSocket.send((char*)&cmd, 1, 0);
|
||||||
clientSocket.send((char*)&row, sizeof(int), 0);
|
clientSocket.send((char*)&row, sizeof(int), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
void sendPauseCommand(bool pause)
|
void sendPauseCommand(bool pause)
|
||||||
|
|||||||
@ -167,28 +167,37 @@ static void save_tracks(const char *base, struct sync_data *data)
|
|||||||
static int request_track_data(SOCKET sock, const char *name, uint32_t idx)
|
static int request_track_data(SOCKET sock, const char *name, uint32_t idx)
|
||||||
{
|
{
|
||||||
unsigned char cmd = GET_TRACK;
|
unsigned char cmd = GET_TRACK;
|
||||||
uint32_t name_len = strlen(name);
|
uint32_t name_len = htonl(strlen(name));
|
||||||
|
idx = htonl(idx);
|
||||||
|
|
||||||
/* send request data */
|
/* send request data */
|
||||||
return xsend(sock, (char *)&cmd, 1, 0) ||
|
return xsend(sock, (char *)&cmd, 1, 0) ||
|
||||||
xsend(sock, (char *)&idx, sizeof(idx), 0) ||
|
xsend(sock, (char *)&idx, sizeof(idx), 0) ||
|
||||||
xsend(sock, (char *)&name_len, sizeof(name_len), 0) ||
|
xsend(sock, (char *)&name_len, sizeof(name_len), 0) ||
|
||||||
xsend(sock, name, (int)name_len, 0);
|
xsend(sock, name, (int)strlen(name), 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static int hanle_set_key_cmd(SOCKET sock, struct sync_data *data)
|
static int hanle_set_key_cmd(SOCKET sock, struct sync_data *data)
|
||||||
{
|
{
|
||||||
uint32_t track, row;
|
uint32_t track, row;
|
||||||
|
union {
|
||||||
|
float f;
|
||||||
|
uint32_t i;
|
||||||
|
} v;
|
||||||
struct track_key key;
|
struct track_key key;
|
||||||
unsigned char type;
|
unsigned char type;
|
||||||
|
|
||||||
if (xrecv(sock, (char *)&track, sizeof(track), 0) ||
|
if (xrecv(sock, (char *)&track, sizeof(track), 0) ||
|
||||||
xrecv(sock, (char *)&row, sizeof(row), 0) ||
|
xrecv(sock, (char *)&row, sizeof(row), 0) ||
|
||||||
xrecv(sock, (char *)&key.value, sizeof(float), 0) ||
|
xrecv(sock, (char *)&v.i, sizeof(v.i), 0) ||
|
||||||
xrecv(sock, (char *)&type, 1, 0))
|
xrecv(sock, (char *)&type, 1, 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
key.row = row;
|
track = ntohl(track);
|
||||||
|
v.i = ntohl(v.i);
|
||||||
|
|
||||||
|
key.row = ntohl(row);
|
||||||
|
key.value = v.f;
|
||||||
|
|
||||||
assert(type < KEY_TYPE_COUNT);
|
assert(type < KEY_TYPE_COUNT);
|
||||||
assert(track < (int)data->num_tracks);
|
assert(track < (int)data->num_tracks);
|
||||||
@ -205,6 +214,9 @@ static int hanle_del_key_cmd(SOCKET sock, struct sync_data *data)
|
|||||||
xrecv(sock, (char *)&row, sizeof(row), 0))
|
xrecv(sock, (char *)&row, sizeof(row), 0))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
track = ntohl(track);
|
||||||
|
row = ntohl(row);
|
||||||
|
|
||||||
assert(track < (int)data->num_tracks);
|
assert(track < (int)data->num_tracks);
|
||||||
sync_del_key(data->tracks[track], row);
|
sync_del_key(data->tracks[track], row);
|
||||||
return 1;
|
return 1;
|
||||||
@ -261,7 +273,7 @@ int sync_update(struct sync_device *d, int row)
|
|||||||
if (xrecv(d->sock, (char *)&row, sizeof(row), 0))
|
if (xrecv(d->sock, (char *)&row, sizeof(row), 0))
|
||||||
goto sockerr;
|
goto sockerr;
|
||||||
if (d->cb && d->cb->set_row)
|
if (d->cb && d->cb->set_row)
|
||||||
d->cb->set_row(d->cb_param, row);
|
d->cb->set_row(d->cb_param, ntohl(row));
|
||||||
break;
|
break;
|
||||||
case PAUSE:
|
case PAUSE:
|
||||||
if (xrecv(d->sock, (char *)&flag, 1, 0))
|
if (xrecv(d->sock, (char *)&flag, 1, 0))
|
||||||
@ -281,7 +293,7 @@ int sync_update(struct sync_device *d, int row)
|
|||||||
if (d->cb && d->cb->is_playing && d->cb->is_playing(d->cb_param)) {
|
if (d->cb && d->cb->is_playing && d->cb->is_playing(d->cb_param)) {
|
||||||
if (d->row != row && d->sock != INVALID_SOCKET) {
|
if (d->row != row && d->sock != INVALID_SOCKET) {
|
||||||
unsigned char cmd = SET_ROW;
|
unsigned char cmd = SET_ROW;
|
||||||
uint32_t nrow = row;
|
uint32_t nrow = htonl(row);
|
||||||
if (xsend(d->sock, (char*)&cmd, 1, 0) ||
|
if (xsend(d->sock, (char*)&cmd, 1, 0) ||
|
||||||
xsend(d->sock, (char*)&nrow, sizeof(nrow), 0))
|
xsend(d->sock, (char*)&nrow, sizeof(nrow), 0))
|
||||||
goto sockerr;
|
goto sockerr;
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user