| OLD | NEW | 
|---|
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be | 
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. | 
| 4 | 4 | 
| 5 #include "ipc/ipc_channel_win.h" | 5 #include "ipc/ipc_channel_win.h" | 
| 6 | 6 | 
| 7 #include <windows.h> | 7 #include <windows.h> | 
| 8 | 8 | 
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" | 
| 10 #include "base/bind.h" | 10 #include "base/bind.h" | 
| (...skipping 19 matching lines...) Expand all  Loading... | 
| 30   COMPILE_ASSERT(!offsetof(Channel::ChannelImpl::State, context), | 30   COMPILE_ASSERT(!offsetof(Channel::ChannelImpl::State, context), | 
| 31                  starts_with_io_context); | 31                  starts_with_io_context); | 
| 32 } | 32 } | 
| 33 | 33 | 
| 34 Channel::ChannelImpl::ChannelImpl(const IPC::ChannelHandle &channel_handle, | 34 Channel::ChannelImpl::ChannelImpl(const IPC::ChannelHandle &channel_handle, | 
| 35                                   Mode mode, Listener* listener) | 35                                   Mode mode, Listener* listener) | 
| 36     : ChannelReader(listener), | 36     : ChannelReader(listener), | 
| 37       ALLOW_THIS_IN_INITIALIZER_LIST(input_state_(this)), | 37       ALLOW_THIS_IN_INITIALIZER_LIST(input_state_(this)), | 
| 38       ALLOW_THIS_IN_INITIALIZER_LIST(output_state_(this)), | 38       ALLOW_THIS_IN_INITIALIZER_LIST(output_state_(this)), | 
| 39       pipe_(INVALID_HANDLE_VALUE), | 39       pipe_(INVALID_HANDLE_VALUE), | 
|  | 40       peer_pid_(base::kNullProcessId), | 
| 40       waiting_connect_(mode & MODE_SERVER_FLAG), | 41       waiting_connect_(mode & MODE_SERVER_FLAG), | 
| 41       processing_incoming_(false), | 42       processing_incoming_(false), | 
| 42       ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), | 43       ALLOW_THIS_IN_INITIALIZER_LIST(weak_factory_(this)), | 
| 43       client_secret_(0), | 44       client_secret_(0), | 
| 44       validate_client_(false) { | 45       validate_client_(false) { | 
| 45   CreatePipe(channel_handle, mode); | 46   CreatePipe(channel_handle, mode); | 
| 46 } | 47 } | 
| 47 | 48 | 
| 48 Channel::ChannelImpl::~ChannelImpl() { | 49 Channel::ChannelImpl::~ChannelImpl() { | 
| 49   Close(); | 50   Close(); | 
| (...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 152   // The hello message contains one parameter containing the PID. | 153   // The hello message contains one parameter containing the PID. | 
| 153   MessageIterator it = MessageIterator(msg); | 154   MessageIterator it = MessageIterator(msg); | 
| 154   int32 claimed_pid =  it.NextInt(); | 155   int32 claimed_pid =  it.NextInt(); | 
| 155   if (validate_client_ && (it.NextInt() != client_secret_)) { | 156   if (validate_client_ && (it.NextInt() != client_secret_)) { | 
| 156     NOTREACHED(); | 157     NOTREACHED(); | 
| 157     // Something went wrong. Abort connection. | 158     // Something went wrong. Abort connection. | 
| 158     Close(); | 159     Close(); | 
| 159     listener()->OnChannelError(); | 160     listener()->OnChannelError(); | 
| 160     return; | 161     return; | 
| 161   } | 162   } | 
|  | 163   peer_pid_ = claimed_pid; | 
| 162   // validation completed. | 164   // validation completed. | 
| 163   validate_client_ = false; | 165   validate_client_ = false; | 
| 164   listener()->OnChannelConnected(claimed_pid); | 166   listener()->OnChannelConnected(claimed_pid); | 
| 165 } | 167 } | 
| 166 | 168 | 
| 167 bool Channel::ChannelImpl::DidEmptyInputBuffers() { | 169 bool Channel::ChannelImpl::DidEmptyInputBuffers() { | 
| 168   // We don't need to do anything here. | 170   // We don't need to do anything here. | 
| 169   return true; | 171   return true; | 
| 170 } | 172 } | 
| 171 | 173 | 
| (...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 460 } | 462 } | 
| 461 | 463 | 
| 462 void Channel::Close() { | 464 void Channel::Close() { | 
| 463   channel_impl_->Close(); | 465   channel_impl_->Close(); | 
| 464 } | 466 } | 
| 465 | 467 | 
| 466 void Channel::set_listener(Listener* listener) { | 468 void Channel::set_listener(Listener* listener) { | 
| 467   channel_impl_->set_listener(listener); | 469   channel_impl_->set_listener(listener); | 
| 468 } | 470 } | 
| 469 | 471 | 
|  | 472 base::ProcessId Channel::peer_pid() const { | 
|  | 473   return channel_impl_->peer_pid(); | 
|  | 474 } | 
|  | 475 | 
| 470 bool Channel::Send(Message* message) { | 476 bool Channel::Send(Message* message) { | 
| 471   return channel_impl_->Send(message); | 477   return channel_impl_->Send(message); | 
| 472 } | 478 } | 
| 473 | 479 | 
| 474 // static | 480 // static | 
| 475 bool Channel::IsNamedServerInitialized(const std::string& channel_id) { | 481 bool Channel::IsNamedServerInitialized(const std::string& channel_id) { | 
| 476   return ChannelImpl::IsNamedServerInitialized(channel_id); | 482   return ChannelImpl::IsNamedServerInitialized(channel_id); | 
| 477 } | 483 } | 
| 478 | 484 | 
| 479 // static | 485 // static | 
| (...skipping 10 matching lines...) Expand all  Loading... | 
| 490   int secret; | 496   int secret; | 
| 491   do {  // Guarantee we get a non-zero value. | 497   do {  // Guarantee we get a non-zero value. | 
| 492     secret = base::RandInt(0, std::numeric_limits<int>::max()); | 498     secret = base::RandInt(0, std::numeric_limits<int>::max()); | 
| 493   } while (secret == 0); | 499   } while (secret == 0); | 
| 494 | 500 | 
| 495   id.append(GenerateUniqueRandomChannelID()); | 501   id.append(GenerateUniqueRandomChannelID()); | 
| 496   return id.append(base::StringPrintf("\\%d", secret)); | 502   return id.append(base::StringPrintf("\\%d", secret)); | 
| 497 } | 503 } | 
| 498 | 504 | 
| 499 }  // namespace IPC | 505 }  // namespace IPC | 
| OLD | NEW | 
|---|