// Copyright 2018 The Chromium OS 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 "shill/net/ieee80211.h"

#include <base/strings/stringprintf.h>

namespace shill {
namespace IEEE_80211 {

std::string ReasonToString(WiFiReasonCode reason) {
  switch (reason) {
    case kReasonCodeUnspecified:
      return "Unspecified reason";
    case kReasonCodePreviousAuthenticationInvalid:
      return "Previous authentication no longer valid";
    case kReasonCodeSenderHasLeft:
      return "Deauthentcated because sending STA is leaving (or has left) IBSS "
             "or ESS";
    case kReasonCodeInactivity:
      return "Disassociated due to inactivity";
    case kReasonCodeTooManySTAs:
      return "Disassociated because AP is unable to handle all currently "
             "associated STAs";
    case kReasonCodeNonAuthenticated:
      return "Class 2 frame received from nonauthenticated STA";
    case kReasonCodeNonAssociated:
      return "Class 3 frame received from nonassociated STA";
    case kReasonCodeDisassociatedHasLeft:
      return "Disassociated because sending STA is leaving (or has left) BSS";
    case kReasonCodeReassociationNotAuthenticated:
      return "STA requesting (re)association is not authenticated with "
             "responding STA";
    case kReasonCodeUnacceptablePowerCapability:
      return "Disassociated because the information in the Power Capability "
             "element is unacceptable";
    case kReasonCodeUnacceptableSupportedChannelInfo:
      return "Disassociated because the information in the Supported Channels "
             "element is unacceptable";
    case kReasonCodeInvalidInfoElement:
      return "Invalid information element, i.e., an information element "
             "defined in this standard for which the content does not meet the "
             "specifications in Clause 7";
    case kReasonCodeMICFailure:
      return "Message integrity code (MIC) failure";
    case kReasonCode4WayTimeout:
      return "4-Way Handshake timeout";
    case kReasonCodeGroupKeyHandshakeTimeout:
      return "Group Key Handshake timeout";
    case kReasonCodeDifferenIE:
      return "Information element in 4-Way Handshake different from "
             "(Re)Association Request/Probe Response/Beacon frame";
    case kReasonCodeGroupCipherInvalid:
      return "Invalid group cipher";
    case kReasonCodePairwiseCipherInvalid:
      return "Invalid pairwise cipher";
    case kReasonCodeAkmpInvalid:
      return "Invalid AKMP";
    case kReasonCodeUnsupportedRsnIeVersion:
      return "Unsupported RSN information element version";
    case kReasonCodeInvalidRsnIeCaps:
      return "Invalid RSN information element capabilities";
    case kReasonCode8021XAuth:
      return "IEEE 802.1X authentication failed";
    case kReasonCodeCipherSuiteRejected:
      return "Cipher suite rejected because of the security policy";
    case kReasonCodeUnspecifiedQoS:
      return "Disassociated for unspecified, QoS-related reason";
    case kReasonCodeQoSBandwidth:
      return "Disassociated because QoS AP lacks sufficient bandwidth for this "
             "QoS STA";
    case kReasonCodeiPoorConditions:
      return "Disassociated because excessive number of frames need to be "
             "acknowledged, but are not acknowledged due to AP transmissions "
             "and/or poor channel conditions";
    case kReasonCodeOutsideTxop:
      return "Disassociated because STA is transmitting outside the limits of "
             "its TXOPs";
    case kReasonCodeStaLeaving:
      return "Requested from peer STA as the STA is leaving the BSS (or "
             "resetting)";
    case kReasonCodeUnacceptableMechanism:
      return "Requested from peer STA as it does not want to use the mechanism";
    case kReasonCodeSetupRequired:
      return "Requested from peer STA as the STA received frames using the "
             "mechanism for which a setup is required";
    case kReasonCodeTimeout:
      return "Requested from peer STA due to timeout";
    case kReasonCodeCipherSuiteNotSupported:
      return "Peer STA does not support the requested cipher suite";
    case kReasonCodeInvalid:
      return "<INVALID REASON>";
    default:
      if (reason < kReasonCodeMax) {
        return base::StringPrintf("<Reserved Reason:%u>", reason);
      }
      return base::StringPrintf("<Unknown Reason:%u>", reason);
  }
}

std::string StatusToString(WiFiStatusCode status) {
  switch (status) {
    case kStatusCodeSuccessful:
      return "Successful";
    case kStatusCodeFailure:
      return "Unspecified failure";
    case kStatusCodeAllCapabilitiesNotSupported:
      return "Cannot support all requested capabilities in the capability "
             "information field";
    case kStatusCodeCantConfirmAssociation:
      return "Reassociation denied due to inability to confirm that "
             "association exists";
    case kStatusCodeAssociationDenied:
      return "Association denied due to reason outside the scope of this "
             "standard";
    case kStatusCodeAuthenticationUnsupported:
      return "Responding station does not support the specified authentication "
             "algorithm";
    case kStatusCodeOutOfSequence:
      return "Received an authentication frame with authentication transaction "
             "sequence number out of expected sequence";
    case kStatusCodeChallengeFailure:
      return "Authentication rejected because of challenge failure";
    case kStatusCodeFrameTimeout:
      return "Authentication rejected due to timeout waiting for next frame in "
             "sequence";
    case kStatusCodeMaxSta:
      return "Association denied because AP is unable to handle additional "
             "associated STA";
    case kStatusCodeDataRateUnsupported:
      return "Association denied due to requesting station not supporting all "
             "of the data rates in the BSSBasicRateSet parameter";
    case kStatusCodeShortPreambleUnsupported:
      return "Association denied due to requesting station not supporting the "
             "short preamble option";
    case kStatusCodePbccUnsupported:
      return "Association denied due to requesting station not supporting the "
             "PBCC modulation option";
    case kStatusCodeChannelAgilityUnsupported:
      return "Association denied due to requesting station not supporting the "
             "channel agility option";
    case kStatusCodeNeedSpectrumManagement:
      return "Association request rejected because Spectrum Management "
             "capability is required";
    case kStatusCodeUnacceptablePowerCapability:
      return "Association request rejected because the information in the "
             "Power Capability element is unacceptable";
    case kStatusCodeUnacceptableSupportedChannelInfo:
      return "Association request rejected because the information in the "
             "Supported Channels element is unacceptable";
    case kStatusCodeShortTimeSlotRequired:
      return "Association request rejected due to requesting station not "
             "supporting the Short Slot Time option";
    case kStatusCodeDssOfdmRequired:
      return "Association request rejected due to requesting station not "
             "supporting the DSSS-OFDM option";
    case kStatusCodeQosFailure:
      return "Unspecified, QoS related failure";
    case kStatusCodeInsufficientBandwithForQsta:
      return "Association denied due to QAP having insufficient bandwidth to "
             "handle another QSTA";
    case kStatusCodePoorConditions:
      return "Association denied due to poor channel conditions";
    case kStatusCodeQosNotSupported:
      return "Association (with QoS BSS) denied due to requesting station not "
             "supporting the QoS facility";
    case kStatusCodeDeclined:
      return "The request has been declined";
    case kStatusCodeInvalidParameterValues:
      return "The request has not been successful as one or more parameters "
             "have invalid values";
    case kStatusCodeCannotBeHonored:
      return "The TS has not been created because the request cannot be "
             "honored. However, a suggested Tspec is provided so that the "
             "initiating QSTA may attempt to send another TS with the "
             "suggested changes to the TSpec";
    case kStatusCodeInvalidInfoElement:
      return "Invalid Information Element";
    case kStatusCodeGroupCipherInvalid:
      return "Invalid Group Cipher";
    case kStatusCodePairwiseCipherInvalid:
      return "Invalid Pairwise Cipher";
    case kStatusCodeAkmpInvalid:
      return "Invalid AKMP";
    case kStatusCodeUnsupportedRsnIeVersion:
      return "Unsupported RSN Information Element version";
    case kStatusCodeInvalidRsnIeCaps:
      return "Invalid RSN Information Element Capabilities";
    case kStatusCodeCipherSuiteRejected:
      return "Cipher suite is rejected per security policy";
    case kStatusCodeTsDelayNotMet:
      return "The TS has not been created. However, the HC may be capable of "
             "creating a TS, in response to a request, after the time "
             "indicated in the TS Delay element";
    case kStatusCodeDirectLinkIllegal:
      return "Direct link is not allowed in the BSS by policy";
    case kStatusCodeStaNotInBss:
      return "Destination STA is not present within this BSS";
    case kStatusCodeStaNotInQsta:
      return "The destination STA is not a QoS STA";
    case kStatusCodeExcessiveListenInterval:
      return "Association denied because Listen Interval is too large";
    case kStatusCodeInvalid:
      return "<INVALID STATUS>";
    default:
      if (status < kStatusCodeMax) {
        return base::StringPrintf("<Reserved Status:%u>", status);
      }
      return base::StringPrintf("<Unknown Status:%u>", status);
  }
}

}  // namespace IEEE_80211
}  // namespace shill
