OLD | NEW |
(Empty) | |
| 1 // Copyright (c) 2009 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. |
| 4 |
| 5 #include "chrome/browser/sync/engine/net/syncapi_server_connection_manager.h" |
| 6 |
| 7 #include "chrome/browser/sync/engine/net/http_return.h" |
| 8 #include "chrome/browser/sync/engine/syncapi.h" |
| 9 |
| 10 using browser_sync::HttpResponse; |
| 11 using std::string; |
| 12 |
| 13 namespace sync_api { |
| 14 |
| 15 bool SyncAPIBridgedPost::Init(const char* path, const string& auth_token, |
| 16 const string& payload, HttpResponse* response) { |
| 17 string sync_server; |
| 18 int sync_server_port = 0; |
| 19 bool use_ssl = false; |
| 20 GetServerParams(&sync_server, &sync_server_port, &use_ssl); |
| 21 std::string connection_url = MakeConnectionURL(sync_server, path, use_ssl); |
| 22 |
| 23 HttpPostProviderInterface* http = factory_->Create(); |
| 24 http->SetUserAgent(scm_->user_agent().c_str()); |
| 25 http->SetURL(connection_url.c_str(), sync_server_port); |
| 26 |
| 27 if (!auth_token.empty()) { |
| 28 string headers = "Authorization: GoogleLogin auth=" + auth_token; |
| 29 http->SetExtraRequestHeaders(headers.c_str()); |
| 30 } |
| 31 |
| 32 // Must be octet-stream, or the payload may be parsed for a cookie. |
| 33 http->SetPostPayload("application/octet-stream", payload.length(), |
| 34 payload.data()); |
| 35 |
| 36 // Issue the POST, blocking until it finishes. |
| 37 int os_error_code = 0; |
| 38 int response_code = 0; |
| 39 if (!http->MakeSynchronousPost(&os_error_code, &response_code)) { |
| 40 LOG(INFO) << "Http POST failed, error returns: " << os_error_code; |
| 41 response->server_status = HttpResponse::IO_ERROR; |
| 42 return false; |
| 43 } |
| 44 |
| 45 // We got a server response, copy over response codes and content. |
| 46 response->response_code = response_code; |
| 47 response->content_length = |
| 48 static_cast<int64>(http->GetResponseContentLength()); |
| 49 response->payload_length = |
| 50 static_cast<int64>(http->GetResponseContentLength()); |
| 51 if (response->response_code < 400) |
| 52 response->server_status = HttpResponse::SERVER_CONNECTION_OK; |
| 53 else if (response->response_code == browser_sync::RC_UNAUTHORIZED) |
| 54 response->server_status = HttpResponse::SYNC_AUTH_ERROR; |
| 55 else |
| 56 response->server_status = HttpResponse::SYNC_SERVER_ERROR; |
| 57 |
| 58 // Write the content into our buffer. |
| 59 buffer_.assign(http->GetResponseContent(), http->GetResponseContentLength()); |
| 60 |
| 61 // We're done with the HttpPostProvider. |
| 62 factory_->Destroy(http); |
| 63 return true; |
| 64 } |
| 65 |
| 66 SyncAPIServerConnectionManager::~SyncAPIServerConnectionManager() { |
| 67 delete post_provider_factory_; |
| 68 } |
| 69 |
| 70 void SyncAPIServerConnectionManager::SetHttpPostProviderFactory( |
| 71 HttpPostProviderFactory* factory) { |
| 72 if (post_provider_factory_) |
| 73 delete post_provider_factory_; |
| 74 post_provider_factory_ = factory; |
| 75 } |
| 76 |
| 77 } // namespace sync_api |
OLD | NEW |