From 6b4014dfcabf44c1524d24ff9d0851f4006e81df Mon Sep 17 00:00:00 2001 From: "simon.kagstrom" Date: Sun, 7 Feb 2010 09:37:21 +0000 Subject: [PATCH] Handle register data in marshal/demarshal and packet reception --- Src/Network.cpp | 23 +++++++++++++++++++++++ Src/data_store.cpp | 15 +++++++++++++++ Src/data_store.hh | 3 +++ 3 files changed, 41 insertions(+) diff --git a/Src/Network.cpp b/Src/Network.cpp index ef25d09..66989d9 100644 --- a/Src/Network.cpp +++ b/Src/Network.cpp @@ -682,6 +682,13 @@ bool Network::MarshalData(NetworkUpdate *p) NetworkUpdateSelectPeer *sp = (NetworkUpdateSelectPeer *)p->data; sp->server_id = htonl(sp->server_id); } break; + case REGISTER_DATA: + { + NetworkUpdateRegisterData *ds = (NetworkUpdateRegisterData *)p->data; + + ds->key = htonl(ds->key); + ds->metadata = htonl(ds->metadata); + } break; case LIST_PEERS: { NetworkUpdateListPeers *lp = (NetworkUpdateListPeers *)p->data; @@ -696,6 +703,7 @@ bool Network::MarshalData(NetworkUpdate *p) peer->server_id = htonl(peer->server_id); peer->version = htonl(peer->version); peer->avatar = htonl(peer->avatar); + peer->screenshot_key = htonl(peer->screenshot_key); } lp->n_peers = htonl(lp->n_peers); lp->your_port = htons(lp->your_port); @@ -791,6 +799,13 @@ bool Network::DeMarshalData(NetworkUpdate *p) NetworkUpdateSelectPeer *sp = (NetworkUpdateSelectPeer *)p->data; sp->server_id = ntohl(sp->server_id); } break; + case REGISTER_DATA: + { + NetworkUpdateRegisterData *ds = (NetworkUpdateRegisterData *)p->data; + + ds->key = ntohl(ds->key); + ds->metadata = ntohl(ds->metadata); + } break; case LIST_PEERS: { NetworkUpdateListPeers *lp = (NetworkUpdateListPeers *)p->data; @@ -807,6 +822,7 @@ bool Network::DeMarshalData(NetworkUpdate *p) peer->server_id = ntohl(peer->server_id); peer->version = ntohl(peer->version); peer->avatar = ntohl(peer->avatar); + peer->screenshot_key = ntohl(peer->screenshot_key); } lp->your_port = ntohs(lp->your_port); } break; @@ -922,6 +938,13 @@ bool Network::DecodeUpdate(C64Display *display, uint8 *js, MOS6581 *dst) case LIST_PEERS: { } break; + case REGISTER_DATA: + { + NetworkUpdateRegisterData *rd = (NetworkUpdateRegisterData *)p->data; + + DataStore::ds->registerNetworkData(rd->key, rd->metadata, rd->data, + p->size - (sizeof(NetworkUpdateRegisterData) + sizeof(NetworkUpdate))); + } break; case BANDWIDTH_PING: case PING: { diff --git a/Src/data_store.cpp b/Src/data_store.cpp index d1be2c2..bccf2b0 100644 --- a/Src/data_store.cpp +++ b/Src/data_store.cpp @@ -17,6 +17,20 @@ DataStore::~DataStore() free(this->registeredData); } +struct ds_data *DataStore::registerNetworkData(uint32_t key, uint32_t metadata, + void *data, size_t data_sz) +{ + struct ds_data *out; + + out = (struct ds_data *)xmalloc(sizeof(struct ds_data) + data_sz); + out->key = key; + out->metadata = metadata; + + memcpy(out->data, data, data_sz); + + return this->registerData(key, out); +} + struct ds_data *DataStore::registerData(uint32_t key, struct ds_data *data) { @@ -49,6 +63,7 @@ struct ds_data *DataStore::registerData(uint32_t key, this->n_registeredData * sizeof(void*)); } this->registeredData[i] = data; + data->key = key; return NULL; } diff --git a/Src/data_store.hh b/Src/data_store.hh index d9e32d6..d2ad7df 100644 --- a/Src/data_store.hh +++ b/Src/data_store.hh @@ -29,6 +29,9 @@ public: */ struct ds_data *registerData(uint32_t key, struct ds_data *data); + struct ds_data *registerNetworkData(uint32_t key, uint32_t metadata, + void *data, size_t data_sz); + /** * Embed existing data into a data store. The new data is reallocated, * but the old is not freed