Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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 "cloud_print/gcp20/prototype/printer.h" | 5 #include "cloud_print/gcp20/prototype/printer.h" |
| 6 | 6 |
| 7 #include <stdio.h> | 7 #include <stdio.h> |
| 8 #include <string> | 8 #include <string> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/bind.h" | |
| 11 #include "base/command_line.h" | 12 #include "base/command_line.h" |
| 12 #include "base/file_util.h" | 13 #include "base/file_util.h" |
| 13 #include "base/guid.h" | 14 #include "base/guid.h" |
| 14 #include "base/json/json_reader.h" | 15 #include "base/json/json_reader.h" |
| 15 #include "base/json/json_writer.h" | 16 #include "base/json/json_writer.h" |
| 16 #include "base/strings/string_number_conversions.h" | 17 #include "base/strings/string_number_conversions.h" |
| 18 #include "base/strings/stringprintf.h" | |
| 17 #include "cloud_print/gcp20/prototype/command_line_reader.h" | 19 #include "cloud_print/gcp20/prototype/command_line_reader.h" |
| 18 #include "cloud_print/gcp20/prototype/service_parameters.h" | 20 #include "cloud_print/gcp20/prototype/service_parameters.h" |
| 19 #include "cloud_print/gcp20/prototype/special_io.h" | 21 #include "cloud_print/gcp20/prototype/special_io.h" |
| 20 #include "net/base/net_util.h" | 22 #include "net/base/net_util.h" |
| 21 #include "net/base/url_util.h" | 23 #include "net/base/url_util.h" |
| 22 | 24 |
| 23 const base::FilePath::CharType kPrinterStatePath[] = | 25 const base::FilePath::CharType kPrinterStatePath[] = |
| 24 FILE_PATH_LITERAL("printer_state.json"); | 26 FILE_PATH_LITERAL("printer_state.json"); |
| 25 | 27 |
| 26 namespace { | 28 namespace { |
| 27 | 29 |
| 28 const char kServiceType[] = "_privet._tcp.local"; | 30 const char kServiceType[] = "_privet._tcp.local"; |
| 29 const char kServiceNamePrefix[] = "first_gcp20_device"; | 31 const char kServiceNamePrefix[] = "first_gcp20_device"; |
| 30 const char kServiceDomainName[] = "my-privet-device.local"; | 32 const char kServiceDomainName[] = "my-privet-device.local"; |
| 31 | 33 |
| 32 const char kPrinterName[] = "Google GCP2.0 Prototype"; | 34 const char kPrinterName[] = "Google GCP2.0 Prototype"; |
| 33 const char kPrinterDescription[] = "Printer emulator"; | 35 const char kPrinterDescription[] = "Printer emulator"; |
| 34 | 36 |
| 35 const char kUserConfirmationTitle[] = "Confirm registration: type 'y' if you " | 37 const char kUserConfirmationTitle[] = "Confirm registration: type 'y' if you " |
| 36 "agree and any other to discard\n"; | 38 "agree and any other to discard\n"; |
| 37 const uint kUserConfirmationTimeout = 30; // in seconds | 39 const uint kUserConfirmationTimeout = 30; // in seconds |
| 38 | 40 |
| 41 const uint32 kReconnectTimeout = 5; // in seconds | |
| 42 const uint32 kPrintJobsTimeout = 10; // in seconds | |
| 43 | |
| 39 const char kCdd[] = | 44 const char kCdd[] = |
| 40 "{\n" | 45 "{\n" |
| 41 " 'version': '1.0',\n" | 46 " 'version': '1.0',\n" |
| 42 " 'printer': {\n" | 47 " 'printer': {\n" |
| 43 " 'vendor_capability': [\n" | 48 " 'vendor_capability': [\n" |
| 44 " {\n" | 49 " {\n" |
| 45 " 'id': 'psk:MediaType',\n" | 50 " 'id': 'psk:MediaType',\n" |
| 46 " 'display_name': 'Media Type',\n" | 51 " 'display_name': 'Media Type',\n" |
| 47 " 'type': 'SELECT',\n" | 52 " 'type': 'SELECT',\n" |
| 48 " 'select_cap': {\n" | 53 " 'select_cap': {\n" |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 85 LOG(INFO) << net::IPAddressToString(iter->address); | 90 LOG(INFO) << net::IPAddressToString(iter->address); |
| 86 return iter->address; | 91 return iter->address; |
| 87 } | 92 } |
| 88 } | 93 } |
| 89 | 94 |
| 90 return net::IPAddressNumber(); | 95 return net::IPAddressNumber(); |
| 91 } | 96 } |
| 92 | 97 |
| 93 } // namespace | 98 } // namespace |
| 94 | 99 |
| 100 using cloud_print_response_parser::Job; | |
| 101 | |
| 95 Printer::RegistrationInfo::RegistrationInfo() | 102 Printer::RegistrationInfo::RegistrationInfo() |
| 96 : state(DEV_REG_UNREGISTERED), | 103 : state(DEV_REG_UNREGISTERED), |
| 97 confirmation_state(CONFIRMATION_PENDING) { | 104 confirmation_state(CONFIRMATION_PENDING) { |
| 98 } | 105 } |
| 99 | 106 |
| 100 Printer::RegistrationInfo::~RegistrationInfo() { | 107 Printer::RegistrationInfo::~RegistrationInfo() { |
| 101 } | 108 } |
| 102 | 109 |
| 103 Printer::Printer() : http_server_(this) { | 110 Printer::Printer() : http_server_(this), connection_state_(OFFLINE) { |
| 104 } | 111 } |
| 105 | 112 |
| 106 Printer::~Printer() { | 113 Printer::~Printer() { |
| 107 Stop(); | 114 Stop(); |
| 108 } | 115 } |
| 109 | 116 |
| 110 bool Printer::Start() { | 117 bool Printer::Start() { |
| 111 if (IsOnline()) | 118 if (IsOnline()) |
| 112 return true; | 119 return true; |
| 113 | 120 |
| (...skipping 26 matching lines...) Expand all Loading... | |
| 140 | 147 |
| 141 // Creating Cloud Requester. | 148 // Creating Cloud Requester. |
| 142 requester_.reset( | 149 requester_.reset( |
| 143 new CloudPrintRequester( | 150 new CloudPrintRequester( |
| 144 base::MessageLoop::current()->message_loop_proxy(), | 151 base::MessageLoop::current()->message_loop_proxy(), |
| 145 this)); | 152 this)); |
| 146 | 153 |
| 147 xtoken_ = XPrivetToken(); | 154 xtoken_ = XPrivetToken(); |
| 148 starttime_ = base::Time::Now(); | 155 starttime_ = base::Time::Now(); |
| 149 | 156 |
| 157 print_job_handler_.reset(new PrintJobHandler); | |
| 158 connection_state_ = CONNECTING; | |
| 159 if (IsRegistered()) | |
| 160 WakeUp(); | |
|
gene
2013/07/23 09:36:23
remove if() and just call WakeUp() ???
since WakeU
maksymb
2013/07/23 19:02:37
Done.
| |
| 161 | |
| 150 return true; | 162 return true; |
| 151 } | 163 } |
| 152 | 164 |
| 153 bool Printer::IsOnline() const { | 165 bool Printer::IsOnline() const { |
| 154 return requester_; | 166 return requester_; |
| 155 } | 167 } |
| 156 | 168 |
| 169 void Printer::WakeUp() { | |
| 170 VLOG(3) << "Function: " << __FUNCTION__; | |
| 171 | |
| 172 if (!IsRegistered()) | |
| 173 return; | |
| 174 | |
| 175 FetchPrintJobs(); | |
| 176 } | |
| 177 | |
| 157 void Printer::Stop() { | 178 void Printer::Stop() { |
| 158 dns_server_.Shutdown(); | 179 dns_server_.Shutdown(); |
| 159 http_server_.Shutdown(); | 180 http_server_.Shutdown(); |
| 160 requester_.reset(); | 181 requester_.reset(); |
| 182 print_job_handler_.reset(); | |
| 161 } | 183 } |
| 162 | 184 |
| 163 PrivetHttpServer::RegistrationErrorStatus Printer::RegistrationStart( | 185 PrivetHttpServer::RegistrationErrorStatus Printer::RegistrationStart( |
| 164 const std::string& user) { | 186 const std::string& user) { |
| 165 PrivetHttpServer::RegistrationErrorStatus status = CheckCommonRegErrors(user); | 187 PrivetHttpServer::RegistrationErrorStatus status = CheckCommonRegErrors(user); |
| 166 if (status != PrivetHttpServer::REG_ERROR_OK) | 188 if (status != PrivetHttpServer::REG_ERROR_OK) |
| 167 return status; | 189 return status; |
| 168 | 190 |
| 169 if (reg_info_.state != RegistrationInfo::DEV_REG_UNREGISTERED) | 191 if (reg_info_.state != RegistrationInfo::DEV_REG_UNREGISTERED) |
| 170 return PrivetHttpServer::REG_ERROR_INVALID_ACTION; | 192 return PrivetHttpServer::REG_ERROR_INVALID_ACTION; |
| 171 | 193 |
| 172 reg_info_ = RegistrationInfo(); | 194 reg_info_ = RegistrationInfo(); |
| 173 reg_info_.user = user; | 195 reg_info_.user = user; |
| 174 reg_info_.state = RegistrationInfo::DEV_REG_REGISTRATION_STARTED; | 196 reg_info_.state = RegistrationInfo::DEV_REG_REGISTRATION_STARTED; |
| 175 | 197 |
| 176 printf(kUserConfirmationTitle); | 198 printf(kUserConfirmationTitle); |
| 177 base::Time valid_until = base::Time::Now() + | 199 base::Time valid_until = base::Time::Now() + |
| 178 base::TimeDelta::FromSeconds(kUserConfirmationTimeout); | 200 base::TimeDelta::FromSeconds(kUserConfirmationTimeout); |
| 179 base::MessageLoop::current()->PostTask( | 201 base::MessageLoop::current()->PostTask( |
| 180 FROM_HERE, | 202 FROM_HERE, |
| 181 base::Bind(&Printer::WaitUserConfirmation, AsWeakPtr(), valid_until)); | 203 base::Bind(&Printer::WaitUserConfirmation, AsWeakPtr(), valid_until)); |
| 182 | 204 |
| 183 requester_->StartRegistration(GenerateProxyId(), kPrinterName, user, kCdd); | 205 requester_->StartRegistration(GenerateProxyId(), kPrinterName, user, kCdd); |
| 184 | 206 |
| 185 return PrivetHttpServer::REG_ERROR_OK; | 207 return PrivetHttpServer::REG_ERROR_OK; |
| 186 } | 208 } |
| 187 | 209 |
| 188 bool Printer::CheckXPrivetTokenHeader(const std::string& token) const { | |
| 189 return xtoken_.CheckValidXToken(token); | |
| 190 } | |
| 191 | |
| 192 bool Printer::IsRegistered() const { | |
| 193 return reg_info_.state == RegistrationInfo::DEV_REG_REGISTERED; | |
| 194 } | |
| 195 | |
| 196 PrivetHttpServer::RegistrationErrorStatus Printer::RegistrationGetClaimToken( | 210 PrivetHttpServer::RegistrationErrorStatus Printer::RegistrationGetClaimToken( |
| 197 const std::string& user, | 211 const std::string& user, |
| 198 std::string* token, | 212 std::string* token, |
| 199 std::string* claim_url) { | 213 std::string* claim_url) { |
| 200 PrivetHttpServer::RegistrationErrorStatus status = CheckCommonRegErrors(user); | 214 PrivetHttpServer::RegistrationErrorStatus status = CheckCommonRegErrors(user); |
| 201 if (status != PrivetHttpServer::REG_ERROR_OK) | 215 if (status != PrivetHttpServer::REG_ERROR_OK) |
| 202 return status; | 216 return status; |
| 203 | 217 |
| 204 // Check if |action=start| was called, but |action=complete| wasn't. | 218 // Check if |action=start| was called, but |action=complete| wasn't. |
| 205 if (reg_info_.state != RegistrationInfo::DEV_REG_REGISTRATION_STARTED && | 219 if (reg_info_.state != RegistrationInfo::DEV_REG_REGISTRATION_STARTED && |
| (...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 277 void Printer::CreateInfo(PrivetHttpServer::DeviceInfo* info) { | 291 void Printer::CreateInfo(PrivetHttpServer::DeviceInfo* info) { |
| 278 // TODO(maksymb): Replace "text" with constants. | 292 // TODO(maksymb): Replace "text" with constants. |
| 279 | 293 |
| 280 *info = PrivetHttpServer::DeviceInfo(); | 294 *info = PrivetHttpServer::DeviceInfo(); |
| 281 info->version = "1.0"; | 295 info->version = "1.0"; |
| 282 info->name = kPrinterName; | 296 info->name = kPrinterName; |
| 283 info->description = kPrinterDescription; | 297 info->description = kPrinterDescription; |
| 284 info->url = kCloudPrintUrl; | 298 info->url = kCloudPrintUrl; |
| 285 info->id = reg_info_.device_id; | 299 info->id = reg_info_.device_id; |
| 286 info->device_state = "idle"; | 300 info->device_state = "idle"; |
| 287 info->connection_state = "offline"; | 301 info->connection_state = ConnectionStateToString(connection_state_); |
| 288 info->manufacturer = "Google"; | 302 info->manufacturer = "Google"; |
| 289 info->model = "Prototype"; | 303 info->model = "Prototype"; |
| 290 info->serial_number = "2.3.5.7.13.17.19.31.61.89.107.127.521.607.1279.2203"; | 304 info->serial_number = "2.3.5.7.13.17.19.31.61.89.107.127.521.607.1279.2203"; |
| 291 info->firmware = "3.7.31.127.8191.131071.524287.2147483647"; | 305 info->firmware = "3.7.31.127.8191.131071.524287.2147483647"; |
| 292 info->uptime = static_cast<int>((base::Time::Now() - starttime_).InSeconds()); | 306 info->uptime = static_cast<int>((base::Time::Now() - starttime_).InSeconds()); |
| 293 | 307 |
| 294 info->x_privet_token = xtoken_.GenerateXToken(); | 308 info->x_privet_token = xtoken_.GenerateXToken(); |
| 295 | 309 |
| 296 if (reg_info_.state == RegistrationInfo::DEV_REG_UNREGISTERED) | 310 if (reg_info_.state == RegistrationInfo::DEV_REG_UNREGISTERED) |
| 297 info->api.push_back("/privet/register"); | 311 info->api.push_back("/privet/register"); |
| 298 | 312 |
| 299 info->type.push_back("printer"); | 313 info->type.push_back("printer"); |
| 300 } | 314 } |
| 301 | 315 |
| 316 bool Printer::IsRegistered() const { | |
| 317 return reg_info_.state == RegistrationInfo::DEV_REG_REGISTERED; | |
| 318 } | |
| 319 | |
| 320 bool Printer::CheckXPrivetTokenHeader(const std::string& token) const { | |
| 321 return xtoken_.CheckValidXToken(token); | |
| 322 } | |
| 323 | |
| 302 void Printer::OnRegistrationStartResponseParsed( | 324 void Printer::OnRegistrationStartResponseParsed( |
| 303 const std::string& registration_token, | 325 const std::string& registration_token, |
| 304 const std::string& complete_invite_url, | 326 const std::string& complete_invite_url, |
| 305 const std::string& device_id) { | 327 const std::string& device_id) { |
| 306 reg_info_.state = RegistrationInfo::DEV_REG_REGISTRATION_CLAIM_TOKEN_READY; | 328 reg_info_.state = RegistrationInfo::DEV_REG_REGISTRATION_CLAIM_TOKEN_READY; |
| 307 reg_info_.device_id = device_id; | 329 reg_info_.device_id = device_id; |
| 308 reg_info_.registration_token = registration_token; | 330 reg_info_.registration_token = registration_token; |
| 309 reg_info_.complete_invite_url = complete_invite_url; | 331 reg_info_.complete_invite_url = complete_invite_url; |
| 310 } | 332 } |
| 311 | 333 |
| 312 void Printer::OnGetAuthCodeResponseParsed(const std::string& refresh_token) { | 334 void Printer::OnGetAuthCodeResponseParsed(const std::string& refresh_token) { |
| 313 reg_info_.state = RegistrationInfo::DEV_REG_REGISTERED; | 335 reg_info_.state = RegistrationInfo::DEV_REG_REGISTERED; |
| 314 reg_info_.refresh_token = refresh_token; | 336 reg_info_.refresh_token = refresh_token; |
| 315 SaveToFile(kPrinterStatePath); | 337 SaveToFile(kPrinterStatePath); |
| 338 FetchPrintJobs(); | |
| 316 } | 339 } |
| 317 | 340 |
| 318 void Printer::OnRegistrationError(const std::string& description) { | 341 void Printer::OnRegistrationError(const std::string& description) { |
| 319 LOG(ERROR) << "server_error: " << description; | 342 LOG(ERROR) << "server_error: " << description; |
| 320 | 343 |
| 321 // TODO(maksymb): Implement waiting after error and timeout of registration. | 344 // TODO(maksymb): Implement waiting after error and timeout of registration. |
| 322 reg_info_.state = RegistrationInfo::DEV_REG_REGISTRATION_ERROR; | 345 reg_info_.state = RegistrationInfo::DEV_REG_REGISTRATION_ERROR; |
| 323 reg_info_.error_description = description; | 346 reg_info_.error_description = description; |
| 324 } | 347 } |
| 325 | 348 |
| 349 void Printer::OnServerError(const std::string& description) { | |
| 350 VLOG(3) << "Function: " << __FUNCTION__; | |
| 351 LOG(ERROR) << "Server error: " << description; | |
| 352 | |
| 353 PostDelayedWakeUp(base::TimeDelta::FromSeconds(kReconnectTimeout)); | |
| 354 } | |
| 355 | |
| 356 void Printer::OnNetworkError() { | |
| 357 VLOG(3) << "Function: " << __FUNCTION__; | |
| 358 ChangeState(OFFLINE); | |
| 359 PostDelayedWakeUp(base::TimeDelta::FromSeconds(kReconnectTimeout)); | |
| 360 } | |
| 361 | |
| 362 void Printer::OnPrintJobsAvailable(const std::vector<Job>& jobs) { | |
| 363 VLOG(3) << "Function: " << __FUNCTION__; | |
| 364 ChangeState(ONLINE); | |
| 365 | |
| 366 LOG(INFO) << "Available printjobs: " << jobs.size(); | |
| 367 | |
| 368 if (jobs.empty()) { | |
| 369 PostDelayedWakeUp(base::TimeDelta::FromSeconds(kPrintJobsTimeout)); | |
| 370 return; | |
| 371 } | |
| 372 | |
| 373 // TODO(maksymb): After finishing XMPP add 'Printjobs available' flag. | |
| 374 LOG(INFO) << "Downloading first printjob."; | |
| 375 requester_->RequestPrintJob(jobs[0]); | |
| 376 return; | |
| 377 } | |
| 378 | |
| 379 void Printer::OnPrintJobDownloaded(const Job& job) { | |
| 380 VLOG(3) << "Function: " << __FUNCTION__; | |
| 381 print_job_handler_->SavePrintJob( | |
| 382 job.file, | |
| 383 job.ticket, | |
| 384 base::StringPrintf("%s.%s", job.create_time.c_str(), job.job_id.c_str()), | |
| 385 job.title); | |
| 386 requester_->SendPrintJobDone(job.job_id); | |
| 387 } | |
| 388 | |
| 389 void Printer::OnPrintJobDone() { | |
| 390 VLOG(3) << "Function: " << __FUNCTION__; | |
| 391 // TODO(maksymb): Replace PostTask with with XMPP notifications. | |
| 392 PostWakeUp(); | |
| 393 } | |
| 394 | |
| 326 PrivetHttpServer::RegistrationErrorStatus Printer::CheckCommonRegErrors( | 395 PrivetHttpServer::RegistrationErrorStatus Printer::CheckCommonRegErrors( |
| 327 const std::string& user) const { | 396 const std::string& user) const { |
| 328 DCHECK(!IsRegistered()); | 397 DCHECK(!IsRegistered()); |
| 329 | 398 |
| 330 if (reg_info_.state != RegistrationInfo::DEV_REG_UNREGISTERED && | 399 if (reg_info_.state != RegistrationInfo::DEV_REG_UNREGISTERED && |
| 331 user != reg_info_.user) { | 400 user != reg_info_.user) { |
| 332 return PrivetHttpServer::REG_ERROR_DEVICE_BUSY; | 401 return PrivetHttpServer::REG_ERROR_DEVICE_BUSY; |
| 333 } | 402 } |
| 334 | 403 |
| 335 if (reg_info_.state == RegistrationInfo::DEV_REG_REGISTRATION_ERROR) | 404 if (reg_info_.state == RegistrationInfo::DEV_REG_REGISTRATION_ERROR) |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 368 } | 437 } |
| 369 | 438 |
| 370 std::vector<std::string> Printer::CreateTxt() const { | 439 std::vector<std::string> Printer::CreateTxt() const { |
| 371 std::vector<std::string> txt; | 440 std::vector<std::string> txt; |
| 372 txt.push_back("txtvers=1"); | 441 txt.push_back("txtvers=1"); |
| 373 txt.push_back("ty=" + std::string(kPrinterName)); | 442 txt.push_back("ty=" + std::string(kPrinterName)); |
| 374 txt.push_back("note=" + std::string(kPrinterDescription)); | 443 txt.push_back("note=" + std::string(kPrinterDescription)); |
| 375 txt.push_back("url=" + std::string(kCloudPrintUrl)); | 444 txt.push_back("url=" + std::string(kCloudPrintUrl)); |
| 376 txt.push_back("type=printer"); | 445 txt.push_back("type=printer"); |
| 377 txt.push_back("id=" + reg_info_.device_id); | 446 txt.push_back("id=" + reg_info_.device_id); |
| 378 txt.push_back("cs=offline"); | 447 txt.push_back("cs=" + ConnectionStateToString(connection_state_)); |
| 379 | 448 |
| 380 return txt; | 449 return txt; |
| 381 } | 450 } |
| 382 | 451 |
| 452 void Printer::FetchPrintJobs() { | |
| 453 VLOG(3) << "Function: " << __FUNCTION__; | |
| 454 | |
| 455 if (!IsRegistered()) | |
| 456 return; | |
| 457 | |
| 458 if (requester_->IsBusy()) { | |
| 459 PostDelayedWakeUp(base::TimeDelta::FromSeconds(kReconnectTimeout)); | |
| 460 } else { | |
| 461 requester_->FetchPrintJobs(reg_info_.refresh_token, reg_info_.device_id); | |
| 462 } | |
| 463 } | |
| 464 | |
| 383 void Printer::SaveToFile(const std::string& filename) const { | 465 void Printer::SaveToFile(const std::string& filename) const { |
| 384 base::DictionaryValue json; | 466 base::DictionaryValue json; |
| 385 // TODO(maksymb): Get rid of in-place constants. | 467 // TODO(maksymb): Get rid of in-place constants. |
| 386 if (IsRegistered()) { | 468 if (IsRegistered()) { |
| 387 json.SetBoolean("registered", true); | 469 json.SetBoolean("registered", true); |
| 388 json.SetString("user", reg_info_.user); | 470 json.SetString("user", reg_info_.user); |
| 389 json.SetString("device_id", reg_info_.device_id); | 471 json.SetString("device_id", reg_info_.device_id); |
| 390 json.SetString("refresh_token", reg_info_.refresh_token); | 472 json.SetString("refresh_token", reg_info_.refresh_token); |
| 391 } else { | 473 } else { |
| 392 json.SetBoolean("registered", false); | 474 json.SetBoolean("registered", false); |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 454 | 536 |
| 455 reg_info_ = RegistrationInfo(); | 537 reg_info_ = RegistrationInfo(); |
| 456 reg_info_.state = RegistrationInfo::DEV_REG_REGISTERED; | 538 reg_info_.state = RegistrationInfo::DEV_REG_REGISTERED; |
| 457 reg_info_.user = user; | 539 reg_info_.user = user; |
| 458 reg_info_.device_id = device_id; | 540 reg_info_.device_id = device_id; |
| 459 reg_info_.refresh_token = refresh_token; | 541 reg_info_.refresh_token = refresh_token; |
| 460 | 542 |
| 461 return true; | 543 return true; |
| 462 } | 544 } |
| 463 | 545 |
| 546 void Printer::PostWakeUp() { | |
| 547 VLOG(3) << "Function: " << __FUNCTION__; | |
| 548 base::MessageLoop::current()->PostTask( | |
| 549 FROM_HERE, | |
| 550 base::Bind(&Printer::WakeUp, AsWeakPtr())); | |
| 551 } | |
| 552 | |
| 553 void Printer::PostDelayedWakeUp(const base::TimeDelta& delay) { | |
| 554 VLOG(3) << "Function: " << __FUNCTION__; | |
| 555 base::MessageLoop::current()->PostDelayedTask( | |
| 556 FROM_HERE, | |
| 557 base::Bind(&Printer::WakeUp, AsWeakPtr()), | |
| 558 delay); | |
| 559 } | |
| 560 | |
| 464 PrivetHttpServer::RegistrationErrorStatus | 561 PrivetHttpServer::RegistrationErrorStatus |
| 465 Printer::ConfirmationToRegistrationError( | 562 Printer::ConfirmationToRegistrationError( |
| 466 RegistrationInfo::ConfirmationState state) { | 563 RegistrationInfo::ConfirmationState state) { |
| 467 switch (state) { | 564 switch (state) { |
| 468 case RegistrationInfo::CONFIRMATION_PENDING: | 565 case RegistrationInfo::CONFIRMATION_PENDING: |
| 469 return PrivetHttpServer::REG_ERROR_PENDING_USER_ACTION; | 566 return PrivetHttpServer::REG_ERROR_PENDING_USER_ACTION; |
| 470 case RegistrationInfo::CONFIRMATION_DISCARDED: | 567 case RegistrationInfo::CONFIRMATION_DISCARDED: |
| 471 return PrivetHttpServer::REG_ERROR_USER_CANCEL; | 568 return PrivetHttpServer::REG_ERROR_USER_CANCEL; |
| 472 case RegistrationInfo::CONFIRMATION_CONFIRMED: | 569 case RegistrationInfo::CONFIRMATION_CONFIRMED: |
| 473 NOTREACHED(); | 570 NOTREACHED(); |
| 474 return PrivetHttpServer::REG_ERROR_OK; | 571 return PrivetHttpServer::REG_ERROR_OK; |
| 475 case RegistrationInfo::CONFIRMATION_TIMEOUT: | 572 case RegistrationInfo::CONFIRMATION_TIMEOUT: |
| 476 return PrivetHttpServer::REG_ERROR_CONFIRMATION_TIMEOUT; | 573 return PrivetHttpServer::REG_ERROR_CONFIRMATION_TIMEOUT; |
| 477 default: | 574 default: |
| 478 NOTREACHED(); | 575 NOTREACHED(); |
| 479 return PrivetHttpServer::REG_ERROR_OK; | 576 return PrivetHttpServer::REG_ERROR_OK; |
| 480 } | 577 } |
| 481 } | 578 } |
| 482 | 579 |
| 580 std::string Printer::ConnectionStateToString(ConnectionState state) const { | |
| 581 if (state == OFFLINE) | |
|
gene
2013/07/23 09:36:23
switch() {
case
}
here??
maksymb
2013/07/23 19:02:37
Done.
| |
| 582 return "offline"; | |
| 583 if (state == ONLINE) | |
| 584 return "online"; | |
| 585 if (state == CONNECTING) | |
| 586 return "connecting"; | |
| 587 if (state == NOT_CONFIGURED) | |
| 588 return "not-configured"; | |
| 589 | |
| 590 NOTREACHED(); | |
| 591 return ""; | |
| 592 } | |
| 593 | |
| 594 bool Printer::ChangeState(ConnectionState new_state) { | |
| 595 if (connection_state_ == new_state) | |
| 596 return false; | |
| 597 | |
| 598 VLOG(1) << "Printer is now " << ConnectionStateToString(new_state); | |
| 599 connection_state_ = new_state; | |
| 600 dns_server_.UpdateMetadata(CreateTxt()); | |
| 601 return true; | |
| 602 } | |
| 603 | |
| OLD | NEW |