aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorKahrl <kahrl@gmx.net>2011-11-07 04:20:33 +0100
committerPerttu Ahola <celeron55@gmail.com>2011-11-07 11:21:42 +0200
commit1c98ec94da18c97272e1b0a2c1e43baf0683a187 (patch)
tree9351db1279247e48303fb021323e4e3428f9a42b /src
parent28660b4c1af1b1b6ac2d3fda6984bda2a1199dc1 (diff)
downloadminetest-1c98ec94da18c97272e1b0a2c1e43baf0683a187.tar.gz
minetest-1c98ec94da18c97272e1b0a2c1e43baf0683a187.tar.bz2
minetest-1c98ec94da18c97272e1b0a2c1e43baf0683a187.zip
Make Connection::Receive return the data via a SharedBuffer reference, so the caller doesn't have to choose the right buffer size in advance.
Conflicts: src/test.cpp
Diffstat (limited to 'src')
-rw-r--r--src/client.cpp5
-rw-r--r--src/connection.cpp4
-rw-r--r--src/connection.h2
-rw-r--r--src/server.cpp5
-rw-r--r--src/test.cpp52
5 files changed, 33 insertions, 35 deletions
diff --git a/src/client.cpp b/src/client.cpp
index a777293a3..69c91bc30 100644
--- a/src/client.cpp
+++ b/src/client.cpp
@@ -665,14 +665,13 @@ void Client::ReceiveAll()
void Client::Receive()
{
DSTACK(__FUNCTION_NAME);
- u32 data_maxsize = 200000;
- Buffer<u8> data(data_maxsize);
+ SharedBuffer<u8> data;
u16 sender_peer_id;
u32 datasize;
{
//TimeTaker t1("con mutex and receive", m_device);
//JMutexAutoLock lock(m_con_mutex); //bulk comment-out
- datasize = m_con.Receive(sender_peer_id, *data, data_maxsize);
+ datasize = m_con.Receive(sender_peer_id, data);
}
//TimeTaker t1("ProcessData", m_device);
ProcessData(*data, datasize, sender_peer_id);
diff --git a/src/connection.cpp b/src/connection.cpp
index 31c0f77a3..b9c5d2ac8 100644
--- a/src/connection.cpp
+++ b/src/connection.cpp
@@ -1577,7 +1577,7 @@ void Connection::Disconnect()
putCommand(c);
}
-u32 Connection::Receive(u16 &peer_id, u8 *data, u32 datasize)
+u32 Connection::Receive(u16 &peer_id, SharedBuffer<u8> &data)
{
for(;;){
ConnectionEvent e = waitEvent(m_bc_receive_timeout);
@@ -1589,7 +1589,7 @@ u32 Connection::Receive(u16 &peer_id, u8 *data, u32 datasize)
throw NoIncomingDataException("No incoming data");
case CONNEVENT_DATA_RECEIVED:
peer_id = e.peer_id;
- memcpy(data, *e.data, e.data.getSize());
+ data = SharedBuffer<u8>(e.data);
return e.data.getSize();
case CONNEVENT_PEER_ADDED: {
Peer tmp(e.peer_id, e.address);
diff --git a/src/connection.h b/src/connection.h
index dc61394fa..6d26e2e35 100644
--- a/src/connection.h
+++ b/src/connection.h
@@ -551,7 +551,7 @@ public:
void Connect(Address address);
bool Connected();
void Disconnect();
- u32 Receive(u16 &peer_id, u8 *data, u32 datasize);
+ u32 Receive(u16 &peer_id, SharedBuffer<u8> &data);
void SendToAll(u8 channelnum, SharedBuffer<u8> data, bool reliable);
void Send(u16 peer_id, u8 channelnum, SharedBuffer<u8> data, bool reliable);
void RunTimeouts(float dtime); // dummy
diff --git a/src/server.cpp b/src/server.cpp
index 37ba65a95..52e9dc879 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -1777,14 +1777,13 @@ void Server::AsyncRunStep()
void Server::Receive()
{
DSTACK(__FUNCTION_NAME);
- u32 data_maxsize = 10000;
- Buffer<u8> data(data_maxsize);
+ SharedBuffer<u8> data;
u16 peer_id;
u32 datasize;
try{
{
JMutexAutoLock conlock(m_con_mutex);
- datasize = m_con.Receive(peer_id, *data, data_maxsize);
+ datasize = m_con.Receive(peer_id, data);
}
// This has to be called so that the client list gets synced
diff --git a/src/test.cpp b/src/test.cpp
index db8db4ecc..37412d179 100644
--- a/src/test.cpp
+++ b/src/test.cpp
@@ -852,9 +852,9 @@ struct TestConnection
try
{
u16 peer_id;
- u8 data[100];
+ SharedBuffer<u8> data;
infostream<<"** running client.Receive()"<<std::endl;
- u32 size = client.Receive(peer_id, data, 100);
+ u32 size = client.Receive(peer_id, data);
infostream<<"** Client received: peer_id="<<peer_id
<<", size="<<size
<<std::endl;
@@ -874,9 +874,9 @@ struct TestConnection
try
{
u16 peer_id;
- u8 data[100];
+ SharedBuffer<u8> data;
infostream<<"** running server.Receive()"<<std::endl;
- u32 size = server.Receive(peer_id, data, 100);
+ u32 size = server.Receive(peer_id, data);
infostream<<"** Server received: peer_id="<<peer_id
<<", size="<<size
<<std::endl;
@@ -901,9 +901,9 @@ struct TestConnection
try
{
u16 peer_id;
- u8 data[100];
+ SharedBuffer<u8> data;
infostream<<"** running client.Receive()"<<std::endl;
- u32 size = client.Receive(peer_id, data, 100);
+ u32 size = client.Receive(peer_id, data);
infostream<<"** Client received: peer_id="<<peer_id
<<", size="<<size
<<std::endl;
@@ -919,9 +919,9 @@ struct TestConnection
try
{
u16 peer_id;
- u8 data[100];
+ SharedBuffer<u8> data;
infostream<<"** running server.Receive()"<<std::endl;
- u32 size = server.Receive(peer_id, data, 100);
+ u32 size = server.Receive(peer_id, data);
infostream<<"** Server received: peer_id="<<peer_id
<<", size="<<size
<<std::endl;
@@ -944,14 +944,14 @@ struct TestConnection
sleep_ms(50);
u16 peer_id;
- u8 recvdata[100];
+ SharedBuffer<u8> recvdata;
infostream<<"** running server.Receive()"<<std::endl;
- u32 size = server.Receive(peer_id, recvdata, 100);
+ u32 size = server.Receive(peer_id, recvdata);
infostream<<"** Server received: peer_id="<<peer_id
<<", size="<<size
<<", data="<<*data
<<std::endl;
- assert(memcmp(*data, recvdata, data.getSize()) == 0);
+ assert(memcmp(*data, *recvdata, data.getSize()) == 0);
}
#endif
u16 peer_id_client = 2;
@@ -987,29 +987,29 @@ struct TestConnection
infostream<<"*** Receiving the packets"<<std::endl;
u16 peer_id;
- u8 recvdata[20];
+ SharedBuffer<u8> recvdata;
u32 size;
infostream<<"** running client.Receive()"<<std::endl;
peer_id = 132;
- size = client.Receive(peer_id, recvdata, 20);
+ size = client.Receive(peer_id, recvdata);
infostream<<"** Client received: peer_id="<<peer_id
<<", size="<<size
- <<", data="<<recvdata
+ <<", data="<<*recvdata
<<std::endl;
assert(size == data1.getSize());
- assert(memcmp(*data1, recvdata, data1.getSize()) == 0);
+ assert(memcmp(*data1, *recvdata, data1.getSize()) == 0);
assert(peer_id == PEER_ID_SERVER);
infostream<<"** running client.Receive()"<<std::endl;
peer_id = 132;
- size = client.Receive(peer_id, recvdata, 20);
+ size = client.Receive(peer_id, recvdata);
infostream<<"** Client received: peer_id="<<peer_id
<<", size="<<size
- <<", data="<<recvdata
+ <<", data="<<*recvdata
<<std::endl;
assert(size == data2.getSize());
- assert(memcmp(*data2, recvdata, data2.getSize()) == 0);
+ assert(memcmp(*data2, *recvdata, data2.getSize()) == 0);
assert(peer_id == PEER_ID_SERVER);
bool got_exception = false;
@@ -1017,10 +1017,10 @@ struct TestConnection
{
infostream<<"** running client.Receive()"<<std::endl;
peer_id = 132;
- size = client.Receive(peer_id, recvdata, 20);
+ size = client.Receive(peer_id, recvdata);
infostream<<"** Client received: peer_id="<<peer_id
<<", size="<<size
- <<", data="<<recvdata
+ <<", data="<<*recvdata
<<std::endl;
}
catch(con::NoIncomingDataException &e)
@@ -1056,12 +1056,12 @@ struct TestConnection
//int receivetimes = myrand_range(1,20);
int receivetimes = 20;
for(int i=0; i<receivetimes; i++){
- u8 recvdata[100000];
+ SharedBuffer<u8> recvdata;
u16 peer_id = 132;
u16 size = 0;
bool received = false;
try{
- size = client.Receive(peer_id, recvdata, 100000);
+ size = client.Receive(peer_id, recvdata);
received = true;
}catch(con::NoIncomingDataException &e){
}
@@ -1092,7 +1092,7 @@ struct TestConnection
sleep_ms(3000);
- u8 recvdata[datasize + 1000];
+ SharedBuffer<u8> recvdata;
infostream<<"** running client.Receive()"<<std::endl;
u16 peer_id = 132;
u16 size = 0;
@@ -1102,7 +1102,7 @@ struct TestConnection
if(porting::getTimeMs() - timems0 > 5000)
break;
try{
- size = client.Receive(peer_id, recvdata, datasize + 1000);
+ size = client.Receive(peer_id, recvdata);
received = true;
}catch(con::NoIncomingDataException &e){
}
@@ -1116,13 +1116,13 @@ struct TestConnection
infostream<<"Received data (size="<<size<<"):";
for(int i=0; i<size && i<20; i++){
if(i%2==0) DEBUGPRINT(" ");
- DEBUGPRINT("%.2X", ((int)((const char*)recvdata)[i])&0xff);
+ DEBUGPRINT("%.2X", ((int)(recvdata[i]))&0xff);
}
if(size>20)
infostream<<"...";
infostream<<std::endl;
- assert(memcmp(*data1, recvdata, data1.getSize()) == 0);
+ assert(memcmp(*data1, *recvdata, data1.getSize()) == 0);
assert(peer_id == PEER_ID_SERVER);
}