Files
rtphone/src/libs/ice/ICEStunAttributes.h
2018-06-05 11:05:37 +03:00

364 lines
9.3 KiB
C++

/* Copyright(C) 2007-2016 VoIP objects (voipobjects.com)
* This Source Code Form is subject to the terms of the Mozilla Public
* License, v. 2.0. If a copy of the MPL was not distributed with this
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
#ifndef __ICE_STUN_ATTRIBUTES_H
#define __ICE_STUN_ATTRIBUTES_H
#include "ICEStunMessage.h"
#include <string>
namespace ice
{
class MappedAddress: public StunAttribute
{
public:
MappedAddress();
virtual ~MappedAddress();
virtual int type() const override;
NetworkAddress& address();
virtual void buildPacket(BufferWriter& buffer) override;
virtual bool parsePacket(BufferReader& buffer) override;
virtual void dump(std::ostream& output) override;
protected:
NetworkAddress mAddress;
};
class XorMappedAddress: public MappedAddress
{
public:
XorMappedAddress();
virtual ~XorMappedAddress();
virtual int type() const override;
virtual void buildPacket(BufferWriter& writer) override;
virtual bool parsePacket(BufferReader& reader) override;
virtual void dump(std::ostream& output) override;
};
class StringAttr: public StunAttribute
{
public:
StringAttr();
virtual ~StringAttr();
virtual int type() const override;
std::string value() const;
void setValue(const std::string& value);
virtual void buildPacket(BufferWriter& writer) override;
virtual bool parsePacket(BufferReader& reader) override;
virtual void dump(std::ostream& output) override;
protected:
std::string mValue;
};
class Username: public StringAttr
{
public:
Username();
~Username();
int type() const;
void dump(std::ostream& output);
};
class MessageIntegrity: public StunAttribute
{
public:
MessageIntegrity();
~MessageIntegrity();
int type() const override;
void setValue(const void* data);
const void* value() const;
void buildPacket(BufferWriter& stream) override;
bool parsePacket(BufferReader& stream) override;
void dump(std::ostream& output) override;
protected:
unsigned char mValue[20];
};
class Fingerprint: public StunAttribute
{
public:
Fingerprint();
~Fingerprint();
int type() const override;
void setCrc32(unsigned int crc);
unsigned int crc32() const;
void buildPacket(BufferWriter& stream) override;
bool parsePacket(BufferReader& stream) override;
void dump(std::ostream& output) override;
protected:
unsigned int mCRC32;
};
class ErrorCode: public StunAttribute
{
public:
ErrorCode();
~ErrorCode();
virtual int type() const override;
void setErrorCode(int errorCode);
int errorCode() const;
void setErrorPhrase(const std::string& phrase);
std::string errorPhrase() const;
void buildPacket(BufferWriter& stream) override;
bool parsePacket(BufferReader& stream) override;
void dump(std::ostream& output) override;
protected:
int mErrorCode;
std::string mErrorPhrase;
};
class Realm: public StringAttr
{
public:
Realm();
~Realm();
int type() const override;
void dump(std::ostream& output) override;
};
class Nonce: public StringAttr
{
public:
Nonce();
~Nonce();
int type() const override;
void dump(std::ostream& output) override;
};
class UnknownAttributes: public StunAttribute
{
public:
UnknownAttributes();
~UnknownAttributes();
int type() const override;
void buildPacket(BufferWriter& stream) override;
bool parsePacket(BufferReader& stream) override;
void dump(std::ostream& output) override;
};
class Server: public StringAttr
{
public:
Server();
~Server();
int type() const override;
void dump(std::ostream& output) override;
};
class AlternateServer: public MappedAddress
{
public:
AlternateServer();
~AlternateServer();
int type() const override;
void dump(std::ostream& output) override;
};
class ChannelNumber: public StunAttribute
{
public:
ChannelNumber();
~ChannelNumber();
int type() const override;
void setChannelNumber(unsigned short value);
unsigned short channelNumber() const;
void buildPacket(BufferWriter& stream) override;
bool parsePacket(BufferReader& stream) override;
void dump(std::ostream& output) override;
protected:
unsigned short mChannelNumber;
};
class Lifetime: public StunAttribute
{
public:
Lifetime();
~Lifetime();
int type() const override;
void setLifetime(unsigned int value);
unsigned int lifetime() const;
void buildPacket(BufferWriter& writer) override;
bool parsePacket(BufferReader& reader) override;
void dump(std::ostream& output) override;
protected:
unsigned int mLifetime;
};
class XorPeerAddress: public XorMappedAddress
{
public:
int type() const override
{
return StunAttribute::XorPeerAddress;
}
};
class DataAttribute: public StunAttribute
{
public:
DataAttribute();
virtual ~DataAttribute();
int type() const override;
void setData(ByteBuffer& buffer);
ByteBuffer data() const;
void buildPacket(BufferWriter& stream) override;
bool parsePacket(BufferReader& stream) override;
void dump(std::ostream &output) override;
protected:
ByteBuffer mData;
};
class XorRelayedAddress: public XorMappedAddress
{
public:
XorRelayedAddress();
~XorRelayedAddress();
int type() const override;
void dump(std::ostream& output) override;
};
class RequestedTransport: public StunAttribute
{
public:
RequestedTransport();
virtual ~RequestedTransport();
enum TransportType
{
UDP = 17
};
int type() const override;
void setRequestedTransport(TransportType value);
unsigned char requestedTransport() const;
void buildPacket(BufferWriter& stream) override;
bool parsePacket(BufferReader& stream) override;
void dump(std::ostream& output) override;
protected:
unsigned char mRequestedTransport; //always 17!
};
class ReservedToken: public StunAttribute
{
public:
ReservedToken();
~ReservedToken();
int type() const override;
void setToken(const std::string& token);
std::string token() const;
void buildPacket(BufferWriter& buffer) override;
bool parsePacket(BufferReader& buffer) override;
void dump(std::ostream& output) override;
protected:
std::string mToken;
};
class ControlledAttr: public StunAttribute
{
public:
ControlledAttr();
~ControlledAttr();
int type() const override;
std::string tieBreaker() const;
void setTieBreaker(const std::string& tieBreaker);
void buildPacket(BufferWriter& stream) override;
bool parsePacket(BufferReader& stream) override;
void dump(std::ostream& output) override;
protected:
unsigned char mTieBreaker[8];
};
class ControllingAttr: public StunAttribute
{
public:
ControllingAttr();
~ControllingAttr();
int type() const override;
std::string tieBreaker() const;
void setTieBreaker(const std::string& tieBreaker);
void buildPacket(BufferWriter& stream) override;
bool parsePacket(BufferReader& stream) override;
void dump(std::ostream& output) override;
protected:
unsigned char mTieBreaker[8];
};
class ICEPriority: public StunAttribute
{
public:
ICEPriority();
~ICEPriority();
int type() const override;
unsigned int priority() const;
void setPriority(unsigned int priority);
void buildPacket(BufferWriter& stream) override;
bool parsePacket(BufferReader& stream) override;
void dump(std::ostream& output) override;
protected:
unsigned int mPriority;
};
class ICEUseCandidate: public StunAttribute
{
public:
ICEUseCandidate();
virtual ~ICEUseCandidate();
int type() const override;
void buildPacket(BufferWriter& stream) override;
bool parsePacket(BufferReader& stream) override;
void dump(std::ostream& output) override;
};
class RequestedAddressFamily: public StunAttribute
{
public:
RequestedAddressFamily();
RequestedAddressFamily(AddressFamily family);
~RequestedAddressFamily();
int type() const override;
AddressFamily family() const;
void buildPacket(BufferWriter& stream) override;
bool parsePacket(BufferReader& stream) override;
void dump(std::ostream& output) override;
protected:
AddressFamily mAddressFamily;
};
}
#endif