diff options
| author | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-12-24 06:25:21 +0000 |
|---|---|---|
| committer | Tatsuhiro Tsujikawa <tatsuhiro.t@gmail.com> | 2006-12-24 06:25:21 +0000 |
| commit | 9c3e8fbd9c92cc858c2b0f805714e19ce97b7983 (patch) | |
| tree | 2f53afd601fbe1fff339f17cef5ef37186a1960a /src/PeerConnection.cc | |
| parent | 458cc274628f226b3130240d15a1ae8e562d31b2 (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.cc | 47 |
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; } |
