mirror of https://github.com/aria2/aria2
				
				
				
			2008-06-09 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Returns cached data only when the previous receiveHandshake() is called with peek = true. * src/PeerConnection.cc (receiveHandshake) * src/PeerConnection.h (receiveHandshake)pull/1/head
							parent
							
								
									de9605815d
								
							
						
					
					
						commit
						811649149d
					
				| 
						 | 
				
			
			@ -1,3 +1,10 @@
 | 
			
		|||
2008-06-09  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 | 
			
		||||
 | 
			
		||||
	Returns cached data only when the previous receiveHandshake() is called
 | 
			
		||||
	with peek = true.
 | 
			
		||||
	* src/PeerConnection.cc (receiveHandshake)
 | 
			
		||||
	* src/PeerConnection.h (receiveHandshake)
 | 
			
		||||
 | 
			
		||||
2008-06-09  Tatsuhiro Tsujikawa  <tujikawa at rednoah dot com>
 | 
			
		||||
 | 
			
		||||
	Changed default value of -s option from 1 to 5.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -59,7 +59,8 @@ PeerConnection::PeerConnection(int32_t cuid,
 | 
			
		|||
   resbufLength(0),
 | 
			
		||||
   currentPayloadLength(0),
 | 
			
		||||
   lenbufLength(0),
 | 
			
		||||
   _encryptionEnabled(false)
 | 
			
		||||
   _encryptionEnabled(false),
 | 
			
		||||
   _prevPeek(false)
 | 
			
		||||
{}
 | 
			
		||||
 | 
			
		||||
PeerConnection::~PeerConnection() {}
 | 
			
		||||
| 
						 | 
				
			
			@ -130,15 +131,19 @@ bool PeerConnection::receiveMessage(unsigned char* data, size_t& dataLength) {
 | 
			
		|||
 | 
			
		||||
bool PeerConnection::receiveHandshake(unsigned char* data, size_t& dataLength,
 | 
			
		||||
				      bool peek) {
 | 
			
		||||
  assert(BtHandshakeMessage::MESSAGE_LENGTH >= resbufLength);
 | 
			
		||||
  bool retval = true;
 | 
			
		||||
  if(!peek && resbufLength) {
 | 
			
		||||
  if(_prevPeek && !peek && resbufLength) {
 | 
			
		||||
    // We have data in previous peek.
 | 
			
		||||
    // There is a chance that socket is readable because of EOF, for example,
 | 
			
		||||
    // official bttrack shutdowns socket after sending first 48 bytes of
 | 
			
		||||
    // handshake in its NAT checking.
 | 
			
		||||
    // So if there are data in resbuf, return it without checking socket
 | 
			
		||||
    // status.
 | 
			
		||||
    _prevPeek = false;
 | 
			
		||||
    retval = BtHandshakeMessage::MESSAGE_LENGTH <= resbufLength;
 | 
			
		||||
  } else {
 | 
			
		||||
    _prevPeek = peek;
 | 
			
		||||
    size_t remaining = BtHandshakeMessage::MESSAGE_LENGTH-resbufLength;
 | 
			
		||||
    if(remaining > 0 && !socket->isReadable(0)) {
 | 
			
		||||
      dataLength = 0;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -68,6 +68,8 @@ private:
 | 
			
		|||
  SharedHandle<ARC4Encryptor> _encryptor;
 | 
			
		||||
  SharedHandle<ARC4Decryptor> _decryptor;
 | 
			
		||||
 | 
			
		||||
  bool _prevPeek;
 | 
			
		||||
 | 
			
		||||
  void readData(unsigned char* data, size_t& length, bool encryption);
 | 
			
		||||
 | 
			
		||||
  void sendData(const unsigned char* data, size_t length, bool encryption);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in New Issue