131 lines
4.1 KiB
C++
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 |