/* * Copyright 2020 The WebRTC Project Authors. All rights reserved. * * Use of this source code is governed by a BSD-style license * that can be found in the LICENSE file in the root of the source * tree. An additional intellectual property rights grant can be found * in the file PATENTS. All contributing project authors may * be found in the AUTHORS file in the root of the source tree. */ #ifndef P2P_BASE_STUN_DICTIONARY_H_ #define P2P_BASE_STUN_DICTIONARY_H_ #include <deque> #include <map> #include <memory> #include <utility> #include <vector> #include "api/rtc_error.h" #include "api/transport/stun.h" namespace cricket { // A StunDictionaryView is a dictionary of StunAttributes. // - the StunAttributes can be read using the |Get|-methods. // - the dictionary is updated by using the |ApplyDelta|-method. // // A StunDictionaryWriter is used to create |delta|s for the |ApplyDelta|-method // - It keeps track of which updates has been applied at StunDictionaryView. // - It optionally keeps a local StunDictionaryView contains modification made // `locally` // // A pair StunDictionaryView(A)/StunDictionaryWriter(B) are linked so that // modifications to B is transfered to A using the STUN_ATTR_GOOG_DELTA // (StunByteStringAttribute) and the modification is ack:ed using // STUN_ATTR_GOOG_DELTA_ACK (StunUInt64Attribute). // // Note: // 1) It is possible to update one StunDictionaryView from multiple writers, // but this only works of the different writers write disjoint keys (which // is not checked/enforced by these classes). // 2) The opposite, one writer updating multiple StunDictionaryView, is not // possible. class StunDictionaryView { … }; class StunDictionaryWriter { … }; } // namespace cricket #endif // P2P_BASE_STUN_DICTIONARY_H_