summaryrefslogtreecommitdiff
path: root/src/PeerConnection.cc
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2006-12-24 06:25:21 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2006-12-24 06:25:21 +0000
commit9c3e8fbd9c92cc858c2b0f805714e19ce97b7983 (patch)
tree2f53afd601fbe1fff339f17cef5ef37186a1960a /src/PeerConnection.cc
parent458cc274628f226b3130240d15a1ae8e562d31b2 (diff)
2006-12-24 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Rewritten a portion of bittorrent implementation: * src/BtMessageValidator.h: New class. * src/BtBitfieldMessageValidator.h: New class. * src/BtHandshakeMessageValidator.h: New class. * src/BtRequestMessageValidator.h: New class. * src/BtSuggestPieceMessageValidator.h: New class. * src/BtAllowedFastMessageValidator.h: New class. * src/BtRejectMessageValidator.h: New class. * src/BtCancelMessageValidator.h: New class. * src/BtPieceMessageValidator.h: New class. * src/BtHaveMessageValidator.h: New class. * src/BtEventListener.h: New class. * src/AbstractBtEventListener.h: New class. * src/BtEvent.h: New class. * src/BtChokingEvent.h: New class. * src/BtChokedEvent.h: New class. * src/BtCancelSendingPieceEvent.h: New class. * src/BtAbortOutstandingRequestEvent.h: New class. * src/Randomizer.h: New class. * src/SimpleRandomizer.h: New class. * src/BtMessage.h: New class. * src/AbstractBtMessage.h: New class. * src/SimpleBtMessage.h: New class. * src/BtHaveMessage.h: New class. * src/BtInterestedMessage.h: New class. * src/BtAllowedFastMessage.h: New class. * src/BtUnchokeMessage.h: New class. * src/BtCancelMessage.h: New class. * src/BtNotInterestedMessage.h: New class. * src/BtChokeMessage.h: New class. * src/BtHaveNoneMessage.h: New class. * src/BtHandshakeMessage.h: New class. * src/BtSuggestPieceMessage.h: New class. * src/BtHaveMessage.h: New class. * src/BtPieceMessage.h: New class. * src/BtHaveAllMessage.h: New class. * src/BtKeepAliveMessage.h: New class. * src/BtPortMessage.h: New class. * src/BtRejectMessage.h: New class. * src/BtBitfieldMessage.h: New class. * src/BtRequestMessage.h: New class. * src/DefaultBtRequestFactory.h: New class. * src/DefaultBtMessageReceiver.h: New class. * src/BtInteractive.h: New class. * src/BtMessageDispatcher.h: New class. * src/DefaultBtMessageDispatcher.h: New class. * src/DefaultBtInteractive.h: New class. * src/BitfieldManFactory.h: New class. * src/HandleRegistry.h: New class. * src/BtMessageFactory.h: New class. * src/BtMessageReceiver.h: New class. * src/DefaultBtMessageFactory.h: New class. * src/PeerObject.h: New class. * src/BtRequestFactory.h: New class.
Diffstat (limited to 'src/PeerConnection.cc')
-rw-r--r--src/PeerConnection.cc47
1 files changed, 25 insertions, 22 deletions
diff --git a/src/PeerConnection.cc b/src/PeerConnection.cc
index e8a5257e..6608149a 100644
--- a/src/PeerConnection.cc
+++ b/src/PeerConnection.cc
@@ -38,9 +38,10 @@
#include "PeerMessageUtil.h"
#include "Util.h"
#include "LogFactory.h"
+#include "BtHandshakeMessage.h"
#include <netinet/in.h>
-PeerConnection::PeerConnection(int cuid,
+PeerConnection::PeerConnection(int32_t cuid,
const SocketHandle& socket,
const Option* op)
:cuid(cuid),
@@ -55,24 +56,26 @@ PeerConnection::PeerConnection(int cuid,
PeerConnection::~PeerConnection() {}
-int PeerConnection::sendMessage(const char* msg, int length) {
- int writtenLength = 0;
+uint32_t PeerConnection::sendMessage(const unsigned char* data, uint32_t dataLength) {
+ uint32_t writtenLength = 0;
if(socket->isWritable(0)) {
- socket->writeData(msg, length);
- writtenLength += length;
+ // TODO fix this
+ socket->writeData((const char*)data, dataLength);
+ writtenLength += dataLength;
}
return writtenLength;
}
-bool PeerConnection::receiveMessage(char* msg, int& length) {
+bool PeerConnection::receiveMessage(unsigned char* data, uint32_t& dataLength) {
if(!socket->isReadable(0)) {
return false;
}
if(resbufLength == 0 && lenbufLength != 4) {
// read payload size, 4-byte integer
- int remain = 4-lenbufLength;
- int temp = remain;
- socket->readData(lenbuf+lenbufLength, temp);
+ uint32_t remain = 4-lenbufLength;
+ uint32_t temp = remain;
+ // TODO fix this
+ socket->readData((char*)lenbuf+lenbufLength, (int&)temp);
if(temp == 0) {
// we got EOF
throw new DlAbortEx(EX_EOF_FROM_PEER);
@@ -83,7 +86,7 @@ bool PeerConnection::receiveMessage(char* msg, int& length) {
return false;
}
//payloadLen = ntohl(nPayloadLen);
- int payloadLength = ntohl(*((int*)lenbuf));
+ uint32_t payloadLength = ntohl(*((uint32_t*)lenbuf));
if(payloadLength > MAX_PAYLOAD_LEN || payloadLength < 0) {
throw new DlAbortEx("max payload length exceeded or invalid. length = %d",
payloadLength);
@@ -91,9 +94,9 @@ bool PeerConnection::receiveMessage(char* msg, int& length) {
currentPayloadLength = payloadLength;
}
// we have currentPayloadLen-resbufLen bytes to read
- int remaining = currentPayloadLength-resbufLength;
+ uint32_t remaining = currentPayloadLength-resbufLength;
if(remaining > 0) {
- socket->readData(resbuf+resbufLength, remaining);
+ socket->readData((char*)resbuf+resbufLength, (int&)remaining);
if(remaining == 0) {
// we got EOF
throw new DlAbortEx(EX_EOF_FROM_PEER);
@@ -107,19 +110,19 @@ bool PeerConnection::receiveMessage(char* msg, int& length) {
resbufLength = 0;
lenbufLength = 0;
- memcpy(msg, resbuf, currentPayloadLength);
- length = currentPayloadLength;
+ memcpy(data, resbuf, currentPayloadLength);
+ dataLength = currentPayloadLength;
return true;
}
-bool PeerConnection::receiveHandshake(char* msg, int& length) {
+bool PeerConnection::receiveHandshake(unsigned char* data, uint32_t& dataLength) {
if(!socket->isReadable(0)) {
- length = 0;
+ dataLength = 0;
return false;
}
- int remain = HANDSHAKE_MESSAGE_LENGTH-resbufLength;
- int temp = remain;
- socket->readData(resbuf+resbufLength, temp);
+ uint32_t remain = BtHandshakeMessage::MESSAGE_LENGTH-resbufLength;
+ uint32_t temp = remain;
+ socket->readData((char*)resbuf+resbufLength, (int&)temp);
if(temp == 0) {
// we got EOF
throw new DlAbortEx(EX_EOF_FROM_PEER);
@@ -132,9 +135,9 @@ bool PeerConnection::receiveHandshake(char* msg, int& length) {
}
resbufLength += temp;
// we got whole handshake payload
- int writeLength = resbufLength > length ? length : resbufLength;
- memcpy(msg, resbuf, writeLength);
- length = writeLength;
+ uint32_t writeLength = resbufLength > dataLength ? dataLength : resbufLength;
+ memcpy(data, resbuf, writeLength);
+ dataLength = writeLength;
if(retval) {
resbufLength = 0;
}