Make Connection::Receive return the data via a SharedBuffer reference, so the caller...
authorKahrl <kahrl@gmx.net>
Mon, 7 Nov 2011 03:20:33 +0000 (04:20 +0100)
committerPerttu Ahola <celeron55@gmail.com>
Mon, 7 Nov 2011 09:21:42 +0000 (11:21 +0200)
Conflicts:

src/test.cpp

src/client.cpp
src/connection.cpp
src/connection.h
src/server.cpp
src/test.cpp

index a777293a36dc01128025a93f0505fc3ec2a9c0dc..69c91bc30947d161bfc9cbcd7725cca52b203b29 100644 (file)
@@ -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);
index 31c0f77a353279f25d20e58b92600f3d71ad89d4..b9c5d2ac8bac413c1264ac6746e873fca0c471e7 100644 (file)
@@ -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);
index dc61394face1a4eb53b3571babfb14ef8eff66f2..6d26e2e35e8cc632450fe478468b0b851f2156df 100644 (file)
@@ -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
index 37ba65a95957a604a9b2f447092b4212c5dccc35..52e9dc879c5560d1311308f1980fa4886ad142a9 100644 (file)
@@ -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
index db8db4eccf70a9383739d4f0bf42aea86164d148..37412d179e5f0a111723d0b11136eb2dbf11f365 100644 (file)
@@ -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);
                }