Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(3)

Side by Side Diff: ipc/ipc_channel_win.cc

Issue 10199005: Merge 130346 - Require IPC hello for a verified channel (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1084/src/
Patch Set: Created 8 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 124 matching lines...) Expand 10 before | Expand all | Expand 10 after
135 // 135 //
136 // This allows us to potentially process some outgoing messages and 136 // This allows us to potentially process some outgoing messages and
137 // interleave other work on this thread when we're getting hammered with 137 // interleave other work on this thread when we're getting hammered with
138 // input messages. Potentially, this could be tuned to be more efficient 138 // input messages. Potentially, this could be tuned to be more efficient
139 // with some testing. 139 // with some testing.
140 input_state_.is_pending = true; 140 input_state_.is_pending = true;
141 return READ_PENDING; 141 return READ_PENDING;
142 } 142 }
143 143
144 bool Channel::ChannelImpl::WillDispatchInputMessage(Message* msg) { 144 bool Channel::ChannelImpl::WillDispatchInputMessage(Message* msg) {
145 // We don't need to do anything here. 145 // Make sure we get a hello when client validation is required.
146 if (validate_client_)
147 return IsHelloMessage(*msg);
146 return true; 148 return true;
147 } 149 }
148 150
149 void Channel::ChannelImpl::HandleHelloMessage(const Message& msg) { 151 void Channel::ChannelImpl::HandleHelloMessage(const Message& msg) {
150 // The hello message contains one parameter containing the PID. 152 // The hello message contains one parameter containing the PID.
151 MessageIterator it = MessageIterator(msg); 153 MessageIterator it = MessageIterator(msg);
152 int32 claimed_pid = it.NextInt(); 154 int32 claimed_pid = it.NextInt();
153 if (validate_client_ && (it.NextInt() != client_secret_)) { 155 if (validate_client_ && (it.NextInt() != client_secret_)) {
154 NOTREACHED(); 156 NOTREACHED();
155 // Something went wrong. Abort connection. 157 // Something went wrong. Abort connection.
156 Close(); 158 Close();
157 listener()->OnChannelError(); 159 listener()->OnChannelError();
158 return; 160 return;
159 } 161 }
162 // validation completed.
163 validate_client_ = false;
160 listener()->OnChannelConnected(claimed_pid); 164 listener()->OnChannelConnected(claimed_pid);
161 } 165 }
162 166
163 bool Channel::ChannelImpl::DidEmptyInputBuffers() { 167 bool Channel::ChannelImpl::DidEmptyInputBuffers() {
164 // We don't need to do anything here. 168 // We don't need to do anything here.
165 return true; 169 return true;
166 } 170 }
167 171
168 // static 172 // static
169 const string16 Channel::ChannelImpl::PipeName( 173 const string16 Channel::ChannelImpl::PipeName(
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
486 int secret; 490 int secret;
487 do { // Guarantee we get a non-zero value. 491 do { // Guarantee we get a non-zero value.
488 secret = base::RandInt(0, std::numeric_limits<int>::max()); 492 secret = base::RandInt(0, std::numeric_limits<int>::max());
489 } while (secret == 0); 493 } while (secret == 0);
490 494
491 id.append(GenerateUniqueRandomChannelID()); 495 id.append(GenerateUniqueRandomChannelID());
492 return id.append(base::StringPrintf("\\%d", secret)); 496 return id.append(base::StringPrintf("\\%d", secret));
493 } 497 }
494 498
495 } // namespace IPC 499 } // namespace IPC
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698