aboutsummaryrefslogtreecommitdiff
path: root/src/QXmppStun.h
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-12-03 18:36:53 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-12-03 18:36:53 +0000
commitdab9a269c17e0c8ab26f8c295afecef45dc23915 (patch)
tree90c79d32e09edff6497aed5333596d4069083dff /src/QXmppStun.h
parente12c89d020dd090af7de37627b0eccd0ace33df2 (diff)
downloadqxmpp-dab9a269c17e0c8ab26f8c295afecef45dc23915.tar.gz
overhaul ICE support to reserve consecutive ports (required for RTP/RTCP pairs)
Diffstat (limited to 'src/QXmppStun.h')
-rw-r--r--src/QXmppStun.h29
1 files changed, 28 insertions, 1 deletions
diff --git a/src/QXmppStun.h b/src/QXmppStun.h
index aec8e8a1..c0744b19 100644
--- a/src/QXmppStun.h
+++ b/src/QXmppStun.h
@@ -39,14 +39,32 @@ class QTimer;
class QXmppStunMessage
{
public:
+ enum MethodType {
+ Binding = 0x1,
+ SharedSecret = 0x2,
+ Allocate = 0x3,
+ };
+
+ enum MessageType {
+ Request = 0x000,
+ Indication = 0x010,
+ Response = 0x100,
+ Error = 0x110,
+ };
+
QXmppStunMessage();
+ quint32 cookie() const;
+ void setCookie(quint32 cookie);
+
QByteArray id() const;
void setId(const QByteArray &id);
quint16 type() const;
void setType(quint16 type);
+ void setChangeRequest(quint32 changeRequest);
+
QByteArray encode(const QString &password = QString(), bool addFingerprint = true) const;
bool decode(const QByteArray &buffer, const QString &password = QString(), QStringList *errors = 0);
QString toString() const;
@@ -73,8 +91,12 @@ public:
bool useCandidate;
private:
+ quint32 m_cookie;
QByteArray m_id;
quint16 m_type;
+
+ quint32 m_changeRequest;
+ bool m_haveChangeRequest;
};
class QXmppStunSocket : public QXmppLoggable
@@ -97,12 +119,15 @@ public:
void setRemoteUser(const QString &user);
void setRemotePassword(const QString &password);
- bool bind();
void close();
void connectToHost();
bool isConnected() const;
+ void setSockets(QList<QUdpSocket*> sockets);
qint64 writeDatagram(const QByteArray &datagram);
+ static QList<QHostAddress> discoverAddresses();
+ static QList<QUdpSocket*> reservePorts(const QList<QHostAddress> &addresses, int count, QObject *parent = 0);
+
private slots:
void checkCandidates();
void readyRead();
@@ -141,6 +166,7 @@ private:
QString m_localPassword;
Pair *m_activePair;
+ Pair *m_fallbackPair;
bool m_iceControlling;
QList<Pair*> m_pairs;
QString m_remoteUser;
@@ -177,6 +203,7 @@ public:
void setRemoteUser(const QString &user);
void setRemotePassword(const QString &password);
+ bool bind(const QList<QHostAddress> &addresses);
void close();
void connectToHost();
bool isConnected() const;