| Index: net/curvecp/client_packetizer.cc
|
| diff --git a/net/curvecp/client_packetizer.cc b/net/curvecp/client_packetizer.cc
|
| index 72bf4a0e8b4e625d53fa7bd1dcab786448f5e1a5..77ddfda984de73c237d9376d18193146af1f292f 100644
|
| --- a/net/curvecp/client_packetizer.cc
|
| +++ b/net/curvecp/client_packetizer.cc
|
| @@ -33,7 +33,7 @@ ClientPacketizer::ClientPacketizer()
|
| : Packetizer(),
|
| next_state_(NONE),
|
| listener_(NULL),
|
| - user_callback_(NULL),
|
| + old_user_callback_(NULL),
|
| current_address_(NULL),
|
| hello_attempts_(0),
|
| initiate_sent_(false),
|
| @@ -52,7 +52,23 @@ ClientPacketizer::~ClientPacketizer() {
|
| int ClientPacketizer::Connect(const AddressList& server,
|
| Packetizer::Listener* listener,
|
| OldCompletionCallback* callback) {
|
| - DCHECK(!user_callback_);
|
| + DCHECK(!old_user_callback_);
|
| + DCHECK(!socket_.get());
|
| + DCHECK(!listener_);
|
| +
|
| + listener_ = listener;
|
| +
|
| + addresses_ = server;
|
| +
|
| + old_user_callback_ = callback;
|
| + next_state_ = LOOKUP_COOKIE;
|
| +
|
| + return DoLoop(OK);
|
| +}
|
| +int ClientPacketizer::Connect(const AddressList& server,
|
| + Packetizer::Listener* listener,
|
| + const net::CompletionCallback& callback) {
|
| + DCHECK(user_callback_.is_null());
|
| DCHECK(!socket_.get());
|
| DCHECK(!listener_);
|
|
|
| @@ -279,11 +295,17 @@ int ClientPacketizer::DoConnected(int rv) {
|
|
|
| void ClientPacketizer::DoCallback(int result) {
|
| DCHECK_NE(result, ERR_IO_PENDING);
|
| - DCHECK(user_callback_);
|
| -
|
| - OldCompletionCallback* callback = user_callback_;
|
| - user_callback_ = NULL;
|
| - callback->Run(result);
|
| + DCHECK(old_user_callback_ || !user_callback_.is_null());
|
| +
|
| + if (old_user_callback_) {
|
| + OldCompletionCallback* callback = old_user_callback_;
|
| + old_user_callback_ = NULL;
|
| + callback->Run(result);
|
| + } else {
|
| + CompletionCallback callback = user_callback_;
|
| + user_callback_.Reset();
|
| + callback.Run(result);
|
| + }
|
| }
|
|
|
| int ClientPacketizer::ConnectNextAddress() {
|
|
|