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

131 lines
4.1 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_BINDING_H
#define __ICE_BINDING_H
#include "ICEStunTransaction.h"
#include "ICEAuthTransaction.h"
#include "ICEAddress.h"
namespace ice
{
class CheckResult
{
public:
virtual Transaction::State resultState() = 0;
virtual int resultError() = 0;
virtual NetworkAddress& resultSource() = 0;
virtual NetworkAddress& resultLocal() = 0;
virtual void useCandidate() = 0;
virtual unsigned resultPriority() = 0;
};
class ConnectivityCheck: public Transaction, public CheckResult
{
public:
ConnectivityCheck();
virtual ~ConnectivityCheck();
ByteBuffer* generateData(bool force = false);
bool processData(StunMessage& msg, NetworkAddress& sourceAddress);
NetworkAddress& mappedAddress(); //returns result from succesful transaction
NetworkAddress& responseAddress(); //returns responses source address
int errorCode();
void addUseCandidate();
void confirmTransaction(NetworkAddress& mapped);
// CheckResult interface
int resultError();
NetworkAddress& resultSource();
NetworkAddress& resultLocal();
State resultState();
void useCandidate();
unsigned resultPriority();
protected:
NetworkAddress mResponseAddress;
NetworkAddress mMappedAddress;
bool mUseCandidate;
int mErrorCode;
std::string mErrorResponse;
};
class ClientBinding: public Transaction
{
public:
ClientBinding();
virtual ~ClientBinding();
int errorCode(); //returns error code from failed transaction
std::string errorResponse(); //returns error msg from failed transaction
NetworkAddress& mappedAddress(); //returns result from succesful transaction
NetworkAddress& responseAddress(); //returns responses source address
bool processData(StunMessage& msg, NetworkAddress& address);
ByteBuffer* generateData(bool force = false);
void addUseCandidate();
protected:
int mErrorCode;
NetworkAddress mMappedAddress;
std::string mErrorResponse;
NetworkAddress mResponseAddress;
bool mUseCandidate;
};
class ServerBinding: public Transaction
{
public:
ServerBinding();
virtual ~ServerBinding();
void setLocalTieBreaker(std::string tieBreaker);
bool processData(StunMessage& msg, NetworkAddress& address);
ByteBuffer* generateData(bool force = false);
void restart();
// Checks if incoming request has UseCandidate attribute
bool hasUseCandidate();
// Checks if processed StunMessage was authenticated ok
bool gotRequest();
// Gets the role from processed message. It can be Controlled or Controlling or None.
int role();
// Instructs transaction to response with 487 code
void generate487();
// Returns received tie breaker
std::string remoteTieBreaker();
protected:
NetworkAddress mSourceAddress;
bool mUseCandidate;
bool mGenerate400;
bool mGenerate487;
int mRole;
std::string mLocalTieBreaker;
std::string mRemoteTieBreaker;
};
class BindingIndication: public Transaction
{
public:
BindingIndication(unsigned int interval);
virtual ~BindingIndication();
bool processData(StunMessage& msg, NetworkAddress& address);
ByteBuffer* generateData(bool force = false);
protected:
unsigned mTimestamp;
unsigned mInterval;
};
}
#endif