shill: Refactor message types into UserBoundNlMessage

Since all UserBoundNlMessage subclasses have a particular message type
and type string, pull that functionality into the abstract super class.

BUG=None
TEST=Unit tests

Change-Id: Ib44db2acabab33c48de2ef1143de6be3e1df0acf
Reviewed-on: https://gerrit.chromium.org/gerrit/37731
Tested-by: Christopher Wiley <wiley@chromium.org>
Reviewed-by: Wade Guthrie <wdg@chromium.org>
Commit-Ready: Christopher Wiley <wiley@chromium.org>
diff --git a/callback80211_metrics.cc b/callback80211_metrics.cc
index 9b20966..9acc501 100644
--- a/callback80211_metrics.cc
+++ b/callback80211_metrics.cc
@@ -29,9 +29,10 @@
 
 void Callback80211Metrics::Config80211MessageCallback(
     const UserBoundNlMessage &message) {
-  SLOG(WiFi, 3) << "Received " << message.GetMessageTypeString()
-                << " (" << + message.GetMessageType() << ")";
-  if (metrics_ && message.GetMessageType() == DeauthenticateMessage::kCommand) {
+  SLOG(WiFi, 3) << "Received " << message.message_type_string()
+                << " (" << + message.message_type() << ")";
+  if (metrics_ &&
+      message.message_type() == DeauthenticateMessage::kCommand) {
     Metrics::WiFiDisconnectByWhom by_whom =
         message.AttributeExists(NL80211_ATTR_DISCONNECTED_BY_AP) ?
                     Metrics::kDisconnectedByAp : Metrics::kDisconnectedNotByAp;
diff --git a/callback80211_object.cc b/callback80211_object.cc
index 3d45bc7..3369e06 100644
--- a/callback80211_object.cc
+++ b/callback80211_object.cc
@@ -41,8 +41,8 @@
   SLOG(WiFi, 2) << output;
 
   // Show the more complicated version of the message.
-  SLOG(WiFi, 3) << "Received " << message.GetMessageTypeString()
-                << " (" << + message.GetMessageType() << ")";
+  SLOG(WiFi, 3) << "Received " << message.message_type_string()
+                << " (" << + message.message_type() << ")";
 
   scoped_ptr<UserBoundNlMessage::AttributeNameIterator> i;
   for (i.reset(message.GetAttributeNameIterator()); !i->AtEnd(); i->Advance()) {
diff --git a/config80211_unittest.cc b/config80211_unittest.cc
index 5d4bfa4..6a09eb4 100644
--- a/config80211_unittest.cc
+++ b/config80211_unittest.cc
@@ -565,7 +565,7 @@
         reinterpret_cast<const nlmsghdr *>(kNL80211_CMD_TRIGGER_SCAN)));
 
   EXPECT_NE(message, reinterpret_cast<UserBoundNlMessage *>(NULL));
-  EXPECT_EQ(message->GetMessageType(), NL80211_CMD_TRIGGER_SCAN);
+  EXPECT_EQ(message->message_type(), NL80211_CMD_TRIGGER_SCAN);
 
   {
     uint8_t value;
@@ -612,7 +612,7 @@
         reinterpret_cast<const nlmsghdr *>(kNL80211_CMD_NEW_SCAN_RESULTS)));
 
   EXPECT_NE(message, reinterpret_cast<UserBoundNlMessage *>(NULL));
-  EXPECT_EQ(message->GetMessageType(), NL80211_CMD_NEW_SCAN_RESULTS);
+  EXPECT_EQ(message->message_type(), NL80211_CMD_NEW_SCAN_RESULTS);
 
   {
     uint8_t value;
@@ -659,7 +659,7 @@
         reinterpret_cast<const nlmsghdr *>(kNL80211_CMD_NEW_STATION)));
 
   EXPECT_NE(message, reinterpret_cast<UserBoundNlMessage *>(NULL));
-  EXPECT_EQ(message->GetMessageType(), NL80211_CMD_NEW_STATION);
+  EXPECT_EQ(message->message_type(), NL80211_CMD_NEW_STATION);
 
   {
     uint32_t value;
@@ -691,7 +691,7 @@
         reinterpret_cast<const nlmsghdr *>(kNL80211_CMD_AUTHENTICATE)));
 
   EXPECT_NE(message, reinterpret_cast<UserBoundNlMessage *>(NULL));
-  EXPECT_EQ(message->GetMessageType(), NL80211_CMD_AUTHENTICATE);
+  EXPECT_EQ(message->message_type(), NL80211_CMD_AUTHENTICATE);
 
   {
     uint8_t value;
@@ -726,7 +726,7 @@
         reinterpret_cast<const nlmsghdr *>(kNL80211_CMD_ASSOCIATE)));
 
   EXPECT_NE(message, reinterpret_cast<UserBoundNlMessage *>(NULL));
-  EXPECT_EQ(message->GetMessageType(), NL80211_CMD_ASSOCIATE);
+  EXPECT_EQ(message->message_type(), NL80211_CMD_ASSOCIATE);
 
   {
     uint8_t value;
@@ -761,7 +761,7 @@
         reinterpret_cast<const nlmsghdr *>(kNL80211_CMD_CONNECT)));
 
   EXPECT_NE(message, reinterpret_cast<UserBoundNlMessage *>(NULL));
-  EXPECT_EQ(message->GetMessageType(), NL80211_CMD_CONNECT);
+  EXPECT_EQ(message->message_type(), NL80211_CMD_CONNECT);
 
   {
     uint8_t value;
@@ -797,7 +797,7 @@
         reinterpret_cast<const nlmsghdr *>(kNL80211_CMD_DEAUTHENTICATE)));
 
   EXPECT_NE(message, reinterpret_cast<UserBoundNlMessage *>(NULL));
-  EXPECT_EQ(message->GetMessageType(), NL80211_CMD_DEAUTHENTICATE);
+  EXPECT_EQ(message->message_type(), NL80211_CMD_DEAUTHENTICATE);
 
   {
     uint8_t value;
@@ -833,7 +833,7 @@
         reinterpret_cast<const nlmsghdr *>(kNL80211_CMD_DISCONNECT)));
 
   EXPECT_NE(message, reinterpret_cast<UserBoundNlMessage *>(NULL));
-  EXPECT_EQ(message->GetMessageType(), NL80211_CMD_DISCONNECT);
+  EXPECT_EQ(message->message_type(), NL80211_CMD_DISCONNECT);
 
   {
     uint8_t value;
@@ -863,7 +863,7 @@
         reinterpret_cast<const nlmsghdr *>(kNL80211_CMD_NOTIFY_CQM)));
 
   EXPECT_NE(message, reinterpret_cast<UserBoundNlMessage *>(NULL));
-  EXPECT_EQ(message->GetMessageType(), NL80211_CMD_NOTIFY_CQM);
+  EXPECT_EQ(message->message_type(), NL80211_CMD_NOTIFY_CQM);
 
 
   {
@@ -916,7 +916,7 @@
         reinterpret_cast<const nlmsghdr *>(kNL80211_CMD_DISASSOCIATE)));
 
   EXPECT_NE(message, reinterpret_cast<UserBoundNlMessage *>(NULL));
-  EXPECT_EQ(message->GetMessageType(), NL80211_CMD_DISASSOCIATE);
+  EXPECT_EQ(message->message_type(), NL80211_CMD_DISASSOCIATE);
 
 
   {
diff --git a/user_bound_nlmessage.cc b/user_bound_nlmessage.cc
index 62eb59c..a698cd5 100644
--- a/user_bound_nlmessage.cc
+++ b/user_bound_nlmessage.cc
@@ -63,8 +63,6 @@
     LAZY_INSTANCE_INITIALIZER;
 }  // namespace
 
-const uint8_t UserBoundNlMessage::kCommand = 0xff;
-const char UserBoundNlMessage::kCommandString[] = "<Unknown Message>";
 const char UserBoundNlMessage::kBogusMacAddress[]="XX:XX:XX:XX:XX:XX";
 
 const uint8_t Nl80211Frame::kMinimumFrameByteCount = 26;
@@ -1968,13 +1966,13 @@
   bool doit = false;
 
   map<uint8_t, bool>::const_iterator node;
-  node = need_to_print.find(message.GetMessageType());
+  node = need_to_print.find(message.message_type());
   if (node != need_to_print.end())
     doit = node->second;
 
   if (doit) {
     LOG(INFO) << "@@const unsigned char "
-               << "k" << message.GetMessageTypeString()
+               << "k" << message.message_type_string()
                << "[] = {";
 
     int payload_bytes = nlmsg_datalen(msg);
@@ -1987,7 +1985,7 @@
                  << + rawdata[i] << ",";
     }
     LOG(INFO) << "};";
-    need_to_print[message.GetMessageType()] = false;
+    need_to_print[message.message_type()] = false;
   }
 }
 
diff --git a/user_bound_nlmessage.h b/user_bound_nlmessage.h
index aa9881c..a15e61a 100644
--- a/user_bound_nlmessage.h
+++ b/user_bound_nlmessage.h
@@ -70,11 +70,12 @@
     DISALLOW_COPY_AND_ASSIGN(AttributeNameIterator);
   };
 
-  static const uint8_t kCommand;
-  static const char kCommandString[];
   static const char kBogusMacAddress[];
 
-  UserBoundNlMessage() : message_(NULL) { }
+  UserBoundNlMessage(uint8 message_type, const char *message_type_string)
+      : message_(NULL),
+        message_type_(message_type),
+        message_type_string_(message_type_string) { }
   virtual ~UserBoundNlMessage();
 
   // Non-trivial initialization.
@@ -87,13 +88,6 @@
   bool HasAttributes() const { return !attributes_.empty(); }
   uint32_t GetAttributeCount() const { return attributes_.size(); }
 
-  virtual uint8_t GetMessageType() const {
-    return UserBoundNlMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return UserBoundNlMessage::kCommandString;
-  }
-
   // Other ways to see the internals of the object.
 
   // Return true if the attribute is in our map, regardless of the value of
@@ -165,6 +159,9 @@
   // Returns a string that describes this message.
   virtual std::string ToString() const { return GetHeaderString(); }
 
+  uint8 message_type() const { return message_type_; }
+  const char *message_type_string() const { return message_type_string_; }
+
  protected:
   // Duplicate attribute data, store in map indexed on 'name'.
   bool AddAttribute(nl80211_attrs name, nlattr *data);
@@ -200,6 +197,8 @@
   static const int kEthernetAddressBytes;
 
   nlmsghdr *message_;
+  const uint8 message_type_;
+  const char *message_type_string_;
   static std::map<uint16_t, std::string> *reason_code_string_;
   static std::map<uint16_t, std::string> *status_code_string_;
   std::map<nl80211_attrs, nlattr *> attributes_;
@@ -251,12 +250,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  AssociateMessage() {}
+  AssociateMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const { return AssociateMessage::kCommand; }
-  virtual std::string GetMessageTypeString() const {
-    return AssociateMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -269,14 +264,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  AuthenticateMessage() {}
+  AuthenticateMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return AuthenticateMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return AuthenticateMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -289,14 +278,9 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  CancelRemainOnChannelMessage() {}
+  CancelRemainOnChannelMessage()
+      : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return CancelRemainOnChannelMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return CancelRemainOnChannelMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -309,12 +293,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  ConnectMessage() {}
+  ConnectMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const { return ConnectMessage::kCommand; }
-  virtual std::string GetMessageTypeString() const {
-    return ConnectMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -327,14 +307,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  DeauthenticateMessage() {}
+  DeauthenticateMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return DeauthenticateMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return DeauthenticateMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -347,14 +321,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  DeleteStationMessage() {}
+  DeleteStationMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return DeleteStationMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return DeleteStationMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -367,14 +335,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  DisassociateMessage() {}
+  DisassociateMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return DisassociateMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return DisassociateMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -387,12 +349,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  DisconnectMessage() {}
+  DisconnectMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const { return DisconnectMessage::kCommand; }
-  virtual std::string GetMessageTypeString() const {
-    return DisconnectMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -405,14 +363,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  FrameTxStatusMessage() {}
+  FrameTxStatusMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return FrameTxStatusMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return FrameTxStatusMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -425,12 +377,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  JoinIbssMessage() {}
+  JoinIbssMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const { return JoinIbssMessage::kCommand; }
-  virtual std::string GetMessageTypeString() const {
-    return JoinIbssMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -443,14 +391,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  MichaelMicFailureMessage() {}
+  MichaelMicFailureMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return MichaelMicFailureMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return MichaelMicFailureMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -463,14 +405,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  NewScanResultsMessage() {}
+  NewScanResultsMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return NewScanResultsMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return NewScanResultsMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -483,12 +419,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  NewStationMessage() {}
+  NewStationMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const { return NewStationMessage::kCommand; }
-  virtual std::string GetMessageTypeString() const {
-    return NewStationMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -501,12 +433,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  NewWifiMessage() {}
+  NewWifiMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const { return NewWifiMessage::kCommand; }
-  virtual std::string GetMessageTypeString() const {
-    return NewWifiMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -519,12 +447,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  NotifyCqmMessage() {}
+  NotifyCqmMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const { return NotifyCqmMessage::kCommand; }
-  virtual std::string GetMessageTypeString() const {
-    return NotifyCqmMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -537,14 +461,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  PmksaCandidateMessage() {}
+  PmksaCandidateMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return PmksaCandidateMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return PmksaCandidateMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -557,14 +475,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  RegBeaconHintMessage() {}
+  RegBeaconHintMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return RegBeaconHintMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return RegBeaconHintMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -591,12 +503,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  RegChangeMessage() {}
+  RegChangeMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const { return RegChangeMessage::kCommand; }
-  virtual std::string GetMessageTypeString() const {
-    return RegChangeMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -609,14 +517,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  RemainOnChannelMessage() {}
+  RemainOnChannelMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return RemainOnChannelMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return RemainOnChannelMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -629,12 +531,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  RoamMessage() {}
+  RoamMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const { return RoamMessage::kCommand; }
-  virtual std::string GetMessageTypeString() const {
-    return RoamMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -647,14 +545,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  ScanAbortedMessage() {}
+  ScanAbortedMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return ScanAbortedMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return ScanAbortedMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -667,14 +559,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  TriggerScanMessage() {}
+  TriggerScanMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return TriggerScanMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return TriggerScanMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -684,15 +570,13 @@
 
 class UnknownMessage : public UserBoundNlMessage {
  public:
-  explicit UnknownMessage(uint8_t command) : command_(command) {}
+  explicit UnknownMessage(uint8_t command)
+      : UserBoundNlMessage(command, kCommandString),
+        command_(command) {}
 
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  virtual uint8_t GetMessageType() const { return command_; }
-  virtual std::string GetMessageTypeString() const {
-    return UnknownMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -707,14 +591,9 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  UnprotDeauthenticateMessage() {}
+  UnprotDeauthenticateMessage()
+      : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return UnprotDeauthenticateMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return UnprotDeauthenticateMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private:
@@ -727,14 +606,8 @@
   static const uint8_t kCommand;
   static const char kCommandString[];
 
-  UnprotDisassociateMessage() {}
+  UnprotDisassociateMessage() : UserBoundNlMessage(kCommand, kCommandString) {}
 
-  virtual uint8_t GetMessageType() const {
-    return UnprotDisassociateMessage::kCommand;
-  }
-  virtual std::string GetMessageTypeString() const {
-    return UnprotDisassociateMessage::kCommandString;
-  }
   virtual std::string ToString() const;
 
  private: