Home | History | Annotate | Download | only in shill
      1 //
      2 // Copyright (C) 2014 The Android Open Source Project
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 //      http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 //
     16 
     17 #include "shill/connection_tester.h"
     18 
     19 #include <string>
     20 
     21 #include <base/bind.h>
     22 #include <base/strings/string_util.h>
     23 #include <base/strings/stringprintf.h>
     24 #if defined(__ANDROID__)
     25 #include <dbus/service_constants.h>
     26 #else
     27 #include <chromeos/dbus/service_constants.h>
     28 #endif  // __ANDROID__
     29 
     30 #include "shill/connection.h"
     31 #include "shill/connectivity_trial.h"
     32 #include "shill/logging.h"
     33 
     34 using base::Bind;
     35 using base::Callback;
     36 using base::StringPrintf;
     37 using std::string;
     38 
     39 namespace shill {
     40 
     41 namespace Logging {
     42 static auto kModuleLogScope = ScopeLogger::kPortal;
     43 static string ObjectID(Connection* c) { return c->interface_name(); }
     44 }
     45 
     46 const int ConnectionTester::kTrialTimeoutSeconds = 5;
     47 
     48 ConnectionTester::ConnectionTester(
     49     ConnectionRefPtr connection,
     50     EventDispatcher* dispatcher,
     51     const Callback<void()>& callback)
     52     : connection_(connection),
     53       dispatcher_(dispatcher),
     54       weak_ptr_factory_(this),
     55       tester_callback_(callback),
     56       connectivity_trial_(
     57           new ConnectivityTrial(connection_,
     58                                 dispatcher_,
     59                                 kTrialTimeoutSeconds,
     60                                 Bind(&ConnectionTester::CompleteTest,
     61                                      weak_ptr_factory_.GetWeakPtr()))) { }
     62 
     63 ConnectionTester::~ConnectionTester() {
     64   Stop();
     65   connectivity_trial_.reset();
     66 }
     67 
     68 void ConnectionTester::Start() {
     69   SLOG(connection_.get(), 3) << "In " << __func__;
     70   if (!connectivity_trial_->Start(ConnectivityTrial::kDefaultURL, 0))
     71     LOG(ERROR) << StringPrintf("ConnectivityTrial failed to parse default "
     72                                "URL %s", ConnectivityTrial::kDefaultURL);
     73 }
     74 
     75 void ConnectionTester::Stop() {
     76   SLOG(connection_.get(), 3) << "In " << __func__;
     77   connectivity_trial_->Stop();
     78 }
     79 
     80 void ConnectionTester::CompleteTest(ConnectivityTrial::Result result) {
     81   LOG(INFO) << StringPrintf("ConnectivityTester completed with phase==%s, "
     82                             "status==%s",
     83                             ConnectivityTrial::PhaseToString(
     84                                 result.phase).c_str(),
     85                             ConnectivityTrial::StatusToString(
     86                                 result.status).c_str());
     87   Stop();
     88   tester_callback_.Run();
     89 }
     90 
     91 }  // namespace shill
     92 
     93