Copyright (C) 2010 celeron55, Perttu Ahola <celeron55@gmail.com>
This program is free software; you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation; either version 2 of the License, or
+it under the terms of the GNU Lesser General Public License as published by
+the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
+GNU Lesser General Public License for more details.
-You should have received a copy of the GNU General Public License along
+You should have received a copy of the GNU Lesser General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
*/
#ifndef CONNECTION_HEADER
#define CONNECTION_HEADER
-#include <iostream>
-#include <fstream>
-#include "debug.h"
-#include "common_irrlicht.h"
+#include "irrlichttypes_bloated.h"
#include "socket.h"
-#include "utility.h"
#include "exceptions.h"
#include "constants.h"
+#include "util/pointer.h"
+#include "util/container.h"
+#include "util/thread.h"
+#include <iostream>
+#include <fstream>
namespace con
{
{}
};
+class ConnectionBindFailed : public BaseException
+{
+public:
+ ConnectionBindFailed(const char *s):
+ BaseException(s)
+ {}
+};
+
/*class ThrottlingException : public BaseException
{
public:
{}
};
-inline u16 readPeerId(u8 *packetdata)
-{
- return readU16(&packetdata[4]);
-}
-inline u8 readChannel(u8 *packetdata)
-{
- return readU8(&packetdata[6]);
-}
-
#define SEQNUM_MAX 65535
inline bool seqnum_higher(u16 higher, u16 lower)
{
float m_max_packets_per_second;
int m_num_sent;
int m_max_num_sent;
-
+
+ // Updated from configuration by Connection
+ float congestion_control_aim_rtt;
+ float congestion_control_max_rate;
+ float congestion_control_min_rate;
private:
};
CONNEVENT_DATA_RECEIVED,
CONNEVENT_PEER_ADDED,
CONNEVENT_PEER_REMOVED,
+ CONNEVENT_BIND_FAILED,
};
struct ConnectionEvent
{
enum ConnectionEventType type;
u16 peer_id;
- SharedBuffer<u8> data;
+ Buffer<u8> data;
bool timeout;
Address address;
return "CONNEVENT_PEER_ADDED";
case CONNEVENT_PEER_REMOVED:
return "CONNEVENT_PEER_REMOVED";
+ case CONNEVENT_BIND_FAILED:
+ return "CONNEVENT_BIND_FAILED";
}
return "Invalid ConnectionEvent";
}
timeout = timeout_;
address = address_;
}
+ void bindFailed()
+ {
+ type = CONNEVENT_BIND_FAILED;
+ }
};
enum ConnectionCommandType{
Address address;
u16 peer_id;
u8 channelnum;
- SharedBuffer<u8> data;
+ Buffer<u8> data;
bool reliable;
ConnectionCommand(): type(CONNCMD_NONE) {}
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