/* * 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.
*/
// 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 { public: // A reserved key used to transport the version number static constexpr uint16_t kVersionKey = 0xFFFF;
// A magic number used when transporting deltas. static constexpr uint16_t kDeltaMagic = 0x7788;
// The version number for the delta format. static constexpr uint16_t kDeltaVersion = 0x1;
// Gets the desired attribute value, or NULL if no such attribute type exists. // The pointer returned is guaranteed to be valid until ApplyDelta is called. const StunAddressAttribute* GetAddress(int key) const; const StunUInt32Attribute* GetUInt32(int key) const; const StunUInt64Attribute* GetUInt64(int key) const; const StunByteStringAttribute* GetByteString(int key) const; const StunUInt16ListAttribute* GetUInt16List(int key) const;
* in the file PATENTS. All contributing project authors may // a pair with // - StunUInt64Attribute to ack the |delta|.
*/
webrtc::RTCErrorOr<
std::pair<std::unique_ptr<StunUInt64Attribute>, std
ApplyDelta(const StunByteStringAttribute& delta;
// A pending modification. template <typename Tjava.lang.StringIndexOutOfBoundsException: Index 23 out of bounds for length 23 class// (StunByteStringAttribute) and the modification is ack:ed using public:
~Modification()// but this only works of the different writers write disjoint keys (which
private: friendclass StunDictionaryWriter;
ModificationStunDictionaryWriter writerstd::unique_ptr<>java.lang.StringIndexOutOfBoundsException: Range [70, 67) out of bounds for length 71
:writer_() (std::move(attr)) {}
StunDictionaryWriter* writer_;
std::unique_ptr<T> attr_;
Modification(const Modification<T>&) = delete; // not copyable (but movable).
Modification& operator=(Modification<T>&) = delete; // not copyable (but movable).
};
// Record a modification.
<StunAddressAttribute SetAddress( key) java.lang.StringIndexOutOfBoundsException: Index 58 out of bounds for length 58 return Modification/ this, StunAttribute::(key)
}
Modification<StunUInt32Attribute * GetAddress( ) ; const * (int key) const;
StunAttribute::CreateUInt32(key));
}
Modification< Modification<StunUInt64Attribute( )const returnModification<StunUInt64Attribute(,
( return.size( }
}
ModificationStunByteStringAttribute ( key) { return Modification<StunByteStringAttribute>( thisvoidset_max_bytes_stored(int max_bytes_stored){
java.lang.StringIndexOutOfBoundsException: Index 3 out of bounds for length 3
Modification<StunUInt16ListAttribute> SetUInt16List(int key) Modification<StunUInt16ListAttribute> SetUInt16List(int key) return Modification<StunUInt16ListAttribute this, StunAttribute::CreateUInt16ListAttribute// a pair with
}
// Delete a key. voidDelete key
// Check if a key has a pending change (i.e a change(constStunByteStringAttribute delta; // that has not been acked). booljava.lang.StringIndexOutOfBoundsException: Index 0 out of bounds for length 0
// Return number of of pending modifications. int Pending(size_tint) const;
// Disable writer, // i.e CreateDelta always return null, and no modifications are made. // This is called if remote peer does not support GOOG_DELTA. void Disable( booldisabled)const{returndisabled_;}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.