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

136 lines
4.2 KiB
C++

/* Copyright(C) 2007-2014 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_RELAYING_H
#define __ICE_RELAYING_H
#include "ICEStunTransaction.h"
#include "ICEAddress.h"
#include "ICEAuthTransaction.h"
#include "ICEBinding.h"
namespace ice
{
const int ChannelBindTimeout = 10 * 60 * 1000;
const int PermissionTimeout = 5 * 60 * 1000;
// This class encapsulates TURN Allocate transaction
// Usage: create instance, set password and login, generate data.
// pass incoming data while GetState() != StunTransaction::Failed or Success
class ClientAllocate: public AuthTransaction
{
public:
ClientAllocate(unsigned int lifetime);
virtual ~ClientAllocate();
NetworkAddress& relayedAddress();
NetworkAddress& reflexiveAddress();
NetworkAddress& responseAddress();
int lifetime();
void setWireFamily(int family);
int getWireFamily() const;
void setAllocFamily(int family);
int getAllocFamily() const;
virtual void setInitialRequest(StunMessage& msg);
virtual void setAuthenticatedRequest(StunMessage& msg);
virtual void processSuccessMessage(StunMessage& msg, NetworkAddress& sourceAddress);
protected:
NetworkAddress mRelayedAddr;
NetworkAddress mReflexiveAddr;
NetworkAddress mResponseAddr;
unsigned int mLifetime;
int mWireFamily;
int mAllocFamily;
};
class ClientChannelBind: public AuthTransaction
{
public:
ClientChannelBind(const NetworkAddress& peerAddress);
virtual ~ClientChannelBind();
/*Channel prefix must be 0x4000 through 0x7FFF: These values are the allowed channel
numbers (16,383 possible values)
*/
unsigned short channelPrefix();
void setInitialRequest(StunMessage& msg);
void setAuthenticatedRequest(StunMessage& msg);
void processSuccessMessage(StunMessage& msg, NetworkAddress& sourceAddress);
bool processData(StunMessage& msg, NetworkAddress& address);
void processError();
NetworkAddress peerAddress();
protected:
unsigned short mChannelPrefix;
NetworkAddress mPeerAddress;
};
class ClientCreatePermission: public AuthTransaction
{
public:
typedef std::vector<NetworkAddress> IpList;
ClientCreatePermission();
virtual ~ClientCreatePermission();
void addIpAddress(const NetworkAddress& ip);
virtual void setInitialRequest(StunMessage& msg);
virtual void setAuthenticatedRequest(StunMessage& msg);
virtual void processSuccessMessage(StunMessage& msg, NetworkAddress& sourceAddress);
IpList& ipList();
protected:
IpList mIPAddressList;
};
struct Stream;
class ClientRefresh: public AuthTransaction
{
public:
ClientRefresh(unsigned int lifetime, Stream* stream, ClientAllocate* allocate = NULL);
virtual ~ClientRefresh();
virtual void setInitialRequest(StunMessage& msg);
virtual void setAuthenticatedRequest(StunMessage& msg);
virtual void processSuccessMessage(StunMessage& msg, NetworkAddress& sourceAddress);
virtual void processError();
unsigned int lifetime() { return mLifetime; }
NetworkAddress relayedAddress();
NetworkAddress reflexiveAddress();
protected:
unsigned int mLifetime;
Stream* mStream;
NetworkAddress mRelayed, mReflexive;
};
class SendIndication
{
public:
SendIndication();
~SendIndication();
void setTarget(NetworkAddress& addr);
NetworkAddress& target();
void setPlainData(ByteBuffer& plain);
ByteBuffer& plainData();
ByteBuffer* buildPacket();
static ByteBuffer* buildPacket(NetworkAddress& target, ByteBuffer& data, NetworkAddress& relay, int component);
protected:
NetworkAddress mTarget;
ByteBuffer mPlainData;
};
}
#endif