// Copyright 2020 Google LLC // // Licensed under the Apache License, Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // https://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. #ifndef CORE_INTERNAL_OFFLINE_FRAMES_H_ #define CORE_INTERNAL_OFFLINE_FRAMES_H_ #include #include #include "core/options.h" #include "proto/connections/offline_wire_formats.pb.h" #include "platform/base/byte_array.h" #include "platform/base/exception.h" #include "proto/connections_enums.pb.h" namespace location { namespace nearby { namespace connections { namespace parser { using UpgradePathInfo = BandwidthUpgradeNegotiationFrame::UpgradePathInfo; // Serialize/Deserialize Nearby Connections Protocol messages. // Parses incoming message. // Returns OfflineFrame if parser was able to understand it, or // Exception::kInvalidProtocolBuffer, if parser failed. ExceptionOr FromBytes(const ByteArray& offline_frame_bytes); // Returns FrameType of a parsed message, or // V1Frame::UNKNOWN_FRAME_TYPE, if frame contents is not recognized. V1Frame::FrameType GetFrameType(const OfflineFrame& offline_frame); // Builds Connection Request / Response messages. ByteArray ForConnectionRequest(const std::string& endpoint_id, const ByteArray& endpoint_info, std::int32_t nonce, bool supports_5_ghz, const std::string& bssid, const std::vector& mediums); ByteArray ForConnectionResponse(std::int32_t status); // Builds Payload transfer messages. ByteArray ForDataPayloadTransfer( const PayloadTransferFrame::PayloadHeader& header, const PayloadTransferFrame::PayloadChunk& chunk); ByteArray ForControlPayloadTransfer( const PayloadTransferFrame::PayloadHeader& header, const PayloadTransferFrame::ControlMessage& control); // Builds Bandwidth Upgrade [BWU] messages. ByteArray ForBwuIntroduction(const std::string& endpoint_id); ByteArray ForBwuIntroductionAck(); ByteArray ForBwuWifiHotspotPathAvailable(const std::string& ssid, const std::string& password, std::int32_t port, const std::string& gateway, bool supports_disabling_encryption); ByteArray ForBwuWifiLanPathAvailable(const std::string& ip_address, std::int32_t port); ByteArray ForBwuWifiAwarePathAvailable(const std::string& service_id, const std::string& service_info, const std::string& password, bool supports_disabling_encryption); ByteArray ForBwuWifiDirectPathAvailable(const std::string& ssid, const std::string& password, std::int32_t port, std::int32_t frequency, bool supports_disabling_encryption); ByteArray ForBwuBluetoothPathAvailable(const std::string& service_id, const std::string& mac_address); ByteArray ForBwuWebrtcPathAvailable(const std::string& peer_id, const LocationHint& location_hint_a); ByteArray ForBwuFailure(const UpgradePathInfo& info); ByteArray ForBwuLastWrite(); ByteArray ForBwuSafeToClose(); ByteArray ForKeepAlive(); ByteArray ForDisconnection(); UpgradePathInfo::Medium MediumToUpgradePathInfoMedium(Medium medium); Medium UpgradePathInfoMediumToMedium(UpgradePathInfo::Medium medium); ConnectionRequestFrame::Medium MediumToConnectionRequestMedium(Medium medium); Medium ConnectionRequestMediumToMedium(ConnectionRequestFrame::Medium medium); std::vector ConnectionRequestMediumsToMediums( const ConnectionRequestFrame& connection_request_frame); } // namespace parser } // namespace connections } // namespace nearby } // namespace location #endif // CORE_INTERNAL_OFFLINE_FRAMES_H_