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
|
||||
sock.recv((char *)&clientIndex, sizeof(int), 0);
|
||||
sock.recv((char *)&strLen, sizeof(int), 0);
|
||||
clientIndex = ntohl(clientIndex);
|
||||
strLen = ntohl(strLen);
|
||||
|
||||
trackName.resize(strLen);
|
||||
sock.recv(&trackName[0], strLen, 0);
|
||||
if (!sock.connected())
|
||||
@ -599,7 +602,7 @@ void processCommand(NetworkSocket &sock)
|
||||
|
||||
case SET_ROW:
|
||||
sock.recv((char*)&newRow, sizeof(int), 0);
|
||||
trackView->setEditRow(newRow);
|
||||
trackView->setEditRow(ntohl(newRow));
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
@ -85,19 +85,27 @@ public:
|
||||
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 (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);
|
||||
|
||||
unsigned char cmd = SET_KEY;
|
||||
clientSocket.send((char*)&cmd, 1, 0);
|
||||
clientSocket.send((char*)&track, sizeof(int), 0);
|
||||
clientSocket.send((char*)&key.row, sizeof(int), 0);
|
||||
clientSocket.send((char*)&key.value, sizeof(float), 0);
|
||||
clientSocket.send((char*)&track, sizeof(track), 0);
|
||||
clientSocket.send((char*)&row, sizeof(row), 0);
|
||||
clientSocket.send((char*)&v.i, sizeof(v.i), 0);
|
||||
clientSocket.send((char*)&key.type, 1, 0);
|
||||
}
|
||||
|
||||
@ -105,8 +113,10 @@ public:
|
||||
{
|
||||
if (!clientSocket.connected()) return;
|
||||
if (clientRemap.count(track) == 0) return;
|
||||
track = int(clientRemap[track]);
|
||||
|
||||
|
||||
track = htonl(int(clientRemap[track]));
|
||||
row = htonl(row);
|
||||
|
||||
unsigned char cmd = DELETE_KEY;
|
||||
clientSocket.send((char*)&cmd, 1, 0);
|
||||
clientSocket.send((char*)&track, sizeof(int), 0);
|
||||
@ -117,8 +127,9 @@ public:
|
||||
{
|
||||
if (!clientSocket.connected()) return;
|
||||
unsigned char cmd = SET_ROW;
|
||||
row = htonl(row);
|
||||
clientSocket.send((char*)&cmd, 1, 0);
|
||||
clientSocket.send((char*)&row, sizeof(int), 0);
|
||||
clientSocket.send((char*)&row, sizeof(int), 0);
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
unsigned char cmd = GET_TRACK;
|
||||
uint32_t name_len = strlen(name);
|
||||
uint32_t name_len = htonl(strlen(name));
|
||||
idx = htonl(idx);
|
||||
|
||||
/* send request data */
|
||||
return xsend(sock, (char *)&cmd, 1, 0) ||
|
||||
xsend(sock, (char *)&idx, sizeof(idx), 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)
|
||||
{
|
||||
uint32_t track, row;
|
||||
union {
|
||||
float f;
|
||||
uint32_t i;
|
||||
} v;
|
||||
struct track_key key;
|
||||
unsigned char type;
|
||||
|
||||
if (xrecv(sock, (char *)&track, sizeof(track), 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))
|
||||
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(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))
|
||||
return 0;
|
||||
|
||||
track = ntohl(track);
|
||||
row = ntohl(row);
|
||||
|
||||
assert(track < (int)data->num_tracks);
|
||||
sync_del_key(data->tracks[track], row);
|
||||
return 1;
|
||||
@ -261,7 +273,7 @@ int sync_update(struct sync_device *d, int row)
|
||||
if (xrecv(d->sock, (char *)&row, sizeof(row), 0))
|
||||
goto sockerr;
|
||||
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;
|
||||
case PAUSE:
|
||||
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->row != row && d->sock != INVALID_SOCKET) {
|
||||
unsigned char cmd = SET_ROW;
|
||||
uint32_t nrow = row;
|
||||
uint32_t nrow = htonl(row);
|
||||
if (xsend(d->sock, (char*)&cmd, 1, 0) ||
|
||||
xsend(d->sock, (char*)&nrow, sizeof(nrow), 0))
|
||||
goto sockerr;
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user