364 lines
9.3 KiB
C++
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
|