summaryrefslogtreecommitdiff
path: root/src/PeerConnection.h
diff options
context:
space:
mode:
authorTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-02-17 15:56:47 +0000
committerTatsuhiro Tsujikawa <tatsuhiro.t@gmail.com>2008-02-17 15:56:47 +0000
commitc0d2223c778ae9719fd13d1fde6dc2fbf4faa82b (patch)
tree1d7a2ca2f7d99ebe7aa24cf0be364aa0453afc89 /src/PeerConnection.h
parent13021233680e3fb3650075e2a71c1f234acb1803 (diff)
2008-02-16 Tatsuhiro Tsujikawa <tujikawa at rednoah dot com>
Added Message Stream Encryption(MSE) support. Currently, aria2 accepts incoming connections with Obfuscation Header and legacy BitTorrent Header and establishes connections with Obfuscation Header first and if failed then retry with legacy BitTorrent header. If plain text and ARC4 is provided, aria2 always choose ARC4. The new option to change the default behavior is planned. For tracker extension, "supportcrypto=1" is added statically. * src/PeerInitiateConnectionCommand.{h, cc} * src/PeerConnection.{h, cc} * src/HandleRegistry.h * src/SocketCore.h * src/PeerReceiveHandshakeCommand.{h, cc} * src/BtRegistry.{h, cc} * src/PeerListenCommand.cc * src/InitiatorMSEHandshakeCommand.{h, cc} * src/ReceiverMSEHandshakeCommand.{h, cc} * src/MSEHandshake.{h, cc} * src/ARC4Encryptor.h * src/ARC4Decryptor.h * src/LibgcryptARC4Encryptor.h * src/LibgcryptARC4Decryptor.h * src/LibgcryptARC4Context.h * src/LibsslARC4Encryptor.h * src/LibsslARC4Decryptor.h * src/LibsslARC4Context.h * src/DHKeyExchange.h * src/LibgcryptDHKeyExchange.h * src/LibsslDHKeyExchange.h * src/DefaultBtAnnounce.cc: Just added "supportcrypto=1" parameter. * test/DefaultBtAnnounceTest.cc * test/ARC4Test.cc * test/DHKeyExchangeTest.cc Removed prepareForRetry() because it is not used. * src/PeerAbstractCommand.{h, cc} * src/PeerInteractionCommand.{h, cc} * src/PeerInitiateConnectionCommand.{h, cc}
Diffstat (limited to 'src/PeerConnection.h')
-rw-r--r--src/PeerConnection.h15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/PeerConnection.h b/src/PeerConnection.h
index 5f254600..5dad0fca 100644
--- a/src/PeerConnection.h
+++ b/src/PeerConnection.h
@@ -43,6 +43,8 @@ namespace aria2 {
class Option;
class Logger;
class SocketCore;
+class ARC4Encryptor;
+class ARC4Decryptor;
// we assume maximum length of incoming message is "piece" message with 16KB
// data. Messages beyond that size are dropped.
@@ -61,6 +63,14 @@ private:
char lenbuf[4];
int32_t lenbufLength;
+ bool _encryptionEnabled;
+ SharedHandle<ARC4Encryptor> _encryptor;
+ SharedHandle<ARC4Decryptor> _decryptor;
+
+ void readData(char* data, int32_t& length, bool encryption);
+
+ void sendData(const unsigned char* data, size_t length, bool encryption);
+
public:
PeerConnection(int32_t cuid, const SharedHandle<SocketCore>& socket, const Option* op);
@@ -78,6 +88,11 @@ public:
* is assigned to 'length'.
*/
bool receiveHandshake(unsigned char* data, int32_t& dataLength, bool peek = false);
+
+ void enableEncryption(const SharedHandle<ARC4Encryptor>& encryptor,
+ const SharedHandle<ARC4Decryptor>& decryptor);
+
+ void presetBuffer(const unsigned char* data, size_t length);
};
typedef SharedHandle<PeerConnection> PeerConnectionHandle;