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

Side by Side Diff: sync/engine/net/server_connection_manager.cc

Issue 9348036: Trim code from sync's ServerConnectionManager (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase after Fred's patch Created 8 years, 9 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 | « sync/engine/net/server_connection_manager.h ('k') | sync/engine/sync_scheduler.h » ('j') | 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 "sync/engine/net/server_connection_manager.h" 5 #include "sync/engine/net/server_connection_manager.h"
6 6
7 #include <errno.h> 7 #include <errno.h>
8 8
9 #include <ostream> 9 #include <ostream>
10 #include <string> 10 #include <string>
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after
145 int length) { 145 int length) {
146 int bytes_read = buffer_.length(); 146 int bytes_read = buffer_.length();
147 CHECK(length <= bytes_read); 147 CHECK(length <= bytes_read);
148 out_buffer->assign(buffer_); 148 out_buffer->assign(buffer_);
149 return bytes_read; 149 return bytes_read;
150 } 150 }
151 151
152 ScopedServerStatusWatcher::ScopedServerStatusWatcher( 152 ScopedServerStatusWatcher::ScopedServerStatusWatcher(
153 ServerConnectionManager* conn_mgr, HttpResponse* response) 153 ServerConnectionManager* conn_mgr, HttpResponse* response)
154 : conn_mgr_(conn_mgr), 154 : conn_mgr_(conn_mgr),
155 response_(response), 155 response_(response) {
156 server_reachable_(conn_mgr->server_reachable_) {
157 response->server_status = conn_mgr->server_status_; 156 response->server_status = conn_mgr->server_status_;
158 } 157 }
159 158
160 ScopedServerStatusWatcher::~ScopedServerStatusWatcher() { 159 ScopedServerStatusWatcher::~ScopedServerStatusWatcher() {
161 if (conn_mgr_->server_status_ != response_->server_status) { 160 if (conn_mgr_->server_status_ != response_->server_status) {
162 conn_mgr_->server_status_ = response_->server_status; 161 conn_mgr_->server_status_ = response_->server_status;
163 conn_mgr_->NotifyStatusChanged(); 162 conn_mgr_->NotifyStatusChanged();
164 return; 163 return;
165 } 164 }
166 // Notify if we've gone on or offline.
167 if (server_reachable_ != conn_mgr_->server_reachable_)
168 conn_mgr_->NotifyStatusChanged();
169 } 165 }
170 166
171 ServerConnectionManager::ServerConnectionManager( 167 ServerConnectionManager::ServerConnectionManager(
172 const string& server, 168 const string& server,
173 int port, 169 int port,
174 bool use_ssl, 170 bool use_ssl,
175 const string& user_agent) 171 const string& user_agent)
176 : sync_server_(server), 172 : sync_server_(server),
177 sync_server_port_(port), 173 sync_server_port_(port),
178 user_agent_(user_agent), 174 user_agent_(user_agent),
179 use_ssl_(use_ssl), 175 use_ssl_(use_ssl),
180 proto_sync_path_(kSyncServerSyncPath), 176 proto_sync_path_(kSyncServerSyncPath),
181 get_time_path_(kSyncServerGetTimePath), 177 get_time_path_(kSyncServerGetTimePath),
182 server_status_(HttpResponse::NONE), 178 server_status_(HttpResponse::NONE),
183 server_reachable_(false),
184 terminated_(false), 179 terminated_(false),
185 active_connection_(NULL) { 180 active_connection_(NULL) {
186 } 181 }
187 182
188 ServerConnectionManager::~ServerConnectionManager() { 183 ServerConnectionManager::~ServerConnectionManager() {
189 } 184 }
190 185
191 ServerConnectionManager::Connection* 186 ServerConnectionManager::Connection*
192 ServerConnectionManager::MakeActiveConnection() { 187 ServerConnectionManager::MakeActiveConnection() {
193 base::AutoLock lock(terminate_connection_lock_); 188 base::AutoLock lock(terminate_connection_lock_);
(...skipping 14 matching lines...) Expand all
208 if (active_connection_ != connection) 203 if (active_connection_ != connection)
209 return; 204 return;
210 205
211 active_connection_ = NULL; 206 active_connection_ = NULL;
212 } 207 }
213 208
214 void ServerConnectionManager::NotifyStatusChanged() { 209 void ServerConnectionManager::NotifyStatusChanged() {
215 DCHECK(thread_checker_.CalledOnValidThread()); 210 DCHECK(thread_checker_.CalledOnValidThread());
216 FOR_EACH_OBSERVER(ServerConnectionEventListener, listeners_, 211 FOR_EACH_OBSERVER(ServerConnectionEventListener, listeners_,
217 OnServerConnectionEvent( 212 OnServerConnectionEvent(
218 ServerConnectionEvent(server_status_, server_reachable_))); 213 ServerConnectionEvent(server_status_)));
219 } 214 }
220 215
221 bool ServerConnectionManager::PostBufferWithCachedAuth( 216 bool ServerConnectionManager::PostBufferWithCachedAuth(
222 PostBufferParams* params, ScopedServerStatusWatcher* watcher) { 217 PostBufferParams* params, ScopedServerStatusWatcher* watcher) {
223 DCHECK(thread_checker_.CalledOnValidThread()); 218 DCHECK(thread_checker_.CalledOnValidThread());
224 string path = 219 string path =
225 MakeSyncServerPath(proto_sync_path(), MakeSyncQueryString(client_id_)); 220 MakeSyncServerPath(proto_sync_path(), MakeSyncQueryString(client_id_));
226 return PostBufferToPath(params, path, auth_token(), watcher); 221 return PostBufferToPath(params, path, auth_token(), watcher);
227 } 222 }
228 223
(...skipping 23 matching lines...) Expand all
252 247
253 if (params->response.server_status == HttpResponse::SYNC_AUTH_ERROR) 248 if (params->response.server_status == HttpResponse::SYNC_AUTH_ERROR)
254 InvalidateAndClearAuthToken(); 249 InvalidateAndClearAuthToken();
255 250
256 if (!ok || net::HTTP_OK != params->response.response_code) 251 if (!ok || net::HTTP_OK != params->response.response_code)
257 return false; 252 return false;
258 253
259 if (post.get()->ReadBufferResponse( 254 if (post.get()->ReadBufferResponse(
260 &params->buffer_out, &params->response, true)) { 255 &params->buffer_out, &params->response, true)) {
261 params->response.server_status = HttpResponse::SERVER_CONNECTION_OK; 256 params->response.server_status = HttpResponse::SERVER_CONNECTION_OK;
262 server_reachable_ = true;
263 return true; 257 return true;
264 } 258 }
265 return false; 259 return false;
266 } 260 }
267 261
268 bool ServerConnectionManager::CheckTime(int32* out_time) {
269 DCHECK(thread_checker_.CalledOnValidThread());
270
271 // Verify that the server really is reachable by checking the time. We need
272 // to do this because of wifi interstitials that intercept messages from the
273 // client and return HTTP OK instead of a redirect.
274 HttpResponse response;
275 ScopedServerStatusWatcher watcher(this, &response);
276 string post_body = "command=get_time";
277
278 for (int i = 0 ; i < 3; i++) {
279 ScopedConnectionHelper post(this, MakeActiveConnection());
280 if (!post.get())
281 break;
282
283 // Note that the server's get_time path doesn't require authentication.
284 string get_time_path =
285 MakeSyncServerPath(kSyncServerGetTimePath, post_body);
286 DVLOG(1) << "Requesting get_time from:" << get_time_path;
287
288 string blank_post_body;
289 bool ok = post.get()->Init(get_time_path.c_str(), blank_post_body,
290 blank_post_body, &response);
291 if (!ok) {
292 DVLOG(1) << "Unable to check the time";
293 continue;
294 }
295 string time_response;
296 time_response.resize(
297 static_cast<string::size_type>(response.content_length));
298 ok = post.get()->ReadDownloadResponse(&response, &time_response);
299 if (!ok || string::npos !=
300 time_response.find_first_not_of("0123456789")) {
301 LOG(ERROR) << "unable to read a non-numeric response from get_time:"
302 << time_response;
303 continue;
304 }
305 *out_time = atoi(time_response.c_str());
306 DVLOG(1) << "Server was reachable.";
307 return true;
308 }
309 return false;
310 }
311
312 bool ServerConnectionManager::IsServerReachable() {
313 DCHECK(thread_checker_.CalledOnValidThread());
314 int32 time;
315 return CheckTime(&time);
316 }
317
318 bool ServerConnectionManager::IsUserAuthenticated() {
319 DCHECK(thread_checker_.CalledOnValidThread());
320 return IsGoodReplyFromServer(server_status_);
321 }
322
323 bool ServerConnectionManager::CheckServerReachable() {
324 DCHECK(thread_checker_.CalledOnValidThread());
325 const bool server_is_reachable = IsServerReachable();
326 if (server_reachable_ != server_is_reachable) {
327 server_reachable_ = server_is_reachable;
328 NotifyStatusChanged();
329 }
330 return server_is_reachable;
331 }
332
333 void ServerConnectionManager::SetServerParameters(const string& server_url,
334 int port,
335 bool use_ssl) {
336 DCHECK(thread_checker_.CalledOnValidThread());
337 sync_server_ = server_url;
338 sync_server_port_ = port;
339 use_ssl_ = use_ssl;
340 }
341
342 // Returns the current server parameters in server_url and port. 262 // Returns the current server parameters in server_url and port.
343 void ServerConnectionManager::GetServerParameters(string* server_url, 263 void ServerConnectionManager::GetServerParameters(string* server_url,
344 int* port, 264 int* port,
345 bool* use_ssl) const { 265 bool* use_ssl) const {
346 if (server_url != NULL) 266 if (server_url != NULL)
347 *server_url = sync_server_; 267 *server_url = sync_server_;
348 if (port != NULL) 268 if (port != NULL)
349 *port = sync_server_port_; 269 *port = sync_server_port_;
350 if (use_ssl != NULL) 270 if (use_ssl != NULL)
351 *use_ssl = use_ssl_; 271 *use_ssl = use_ssl_;
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after
405 } 325 }
406 326
407 std::ostream& operator << (std::ostream& s, const struct HttpResponse& hr) { 327 std::ostream& operator << (std::ostream& s, const struct HttpResponse& hr) {
408 s << " Response Code (bogus on error): " << hr.response_code; 328 s << " Response Code (bogus on error): " << hr.response_code;
409 s << " Content-Length (bogus on error): " << hr.content_length; 329 s << " Content-Length (bogus on error): " << hr.content_length;
410 s << " Server Status: " << hr.server_status; 330 s << " Server Status: " << hr.server_status;
411 return s; 331 return s;
412 } 332 }
413 333
414 } // namespace browser_sync 334 } // namespace browser_sync
OLDNEW
« no previous file with comments | « sync/engine/net/server_connection_manager.h ('k') | sync/engine/sync_scheduler.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698