blob: 6f05f4178de92a74b463182eb224c1a6ba21c237 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/sync/engine/loopback_server/loopback_connection_manager.h"
#include "components/sync/engine/net/server_connection_manager.h"
#include "components/sync/protocol/sync.pb.h"
#include "net/http/http_status_code.h"
namespace syncer {
LoopbackConnectionManager::LoopbackConnectionManager(
const base::FilePath& persistent_file)
: loopback_server_(persistent_file) {}
LoopbackConnectionManager::~LoopbackConnectionManager() = default;
HttpResponse LoopbackConnectionManager::PostBuffer(
const std::string& buffer_in,
const std::string& access_token,
bool allow_batching,
std::string* buffer_out) {
buffer_out->clear();
sync_pb::ClientToServerMessage message;
bool parsed = message.ParseFromString(buffer_in);
DCHECK(parsed) << "Unable to parse the ClientToServerMessage.";
sync_pb::ClientToServerResponse client_to_server_response;
HttpResponse http_response = HttpResponse::Uninitialized();
http_response.http_status_code =
loopback_server_.HandleCommand(message, &client_to_server_response);
if (client_to_server_response.IsInitialized()) {
*buffer_out = client_to_server_response.SerializeAsString();
}
DCHECK_GE(http_response.http_status_code, 0);
if (http_response.http_status_code != net::HTTP_OK) {
http_response.server_status = HttpResponse::SYNC_SERVER_ERROR;
} else {
http_response.server_status = HttpResponse::SERVER_CONNECTION_OK;
}
return http_response;
}
} // namespace syncer