29 #include "QXmppLogger.h" 
   30 #include "QXmppJingleIq.h" 
   41 class QXMPP_EXPORT QXmppStunMessage
 
   51         CreatePermission = 0x8,
 
   64     quint32 cookie() 
const;
 
   65     void setCookie(quint32 cookie);
 
   67     QByteArray id() 
const;
 
   68     void setId(
const QByteArray &
id);
 
   70     quint16 messageClass() 
const;
 
   71     quint16 messageMethod() 
const;
 
   74     void setType(quint16 type);
 
   78     quint32 changeRequest() 
const;
 
   79     void setChangeRequest(quint32 changeRequest);
 
   81     quint16 channelNumber() 
const;
 
   82     void setChannelNumber(quint16 channelNumber);
 
   84     QByteArray data() 
const;
 
   85     void setData(
const QByteArray &data);
 
   87     quint32 lifetime() 
const;
 
   88     void setLifetime(quint32 changeRequest);
 
   90     QByteArray nonce() 
const;
 
   91     void setNonce(
const QByteArray &nonce);
 
   93     quint32 priority() 
const;
 
   94     void setPriority(quint32 priority);
 
   96     QString realm() 
const;
 
   97     void setRealm(
const QString &realm);
 
   99     QByteArray reservationToken() 
const;
 
  100     void setReservationToken(
const QByteArray &reservationToken);
 
  102     quint8 requestedTransport() 
const;
 
  103     void setRequestedTransport(quint8 requestedTransport);
 
  105     QString software() 
const;
 
  106     void setSoftware(
const QString &software);
 
  108     QString username() 
const;
 
  109     void setUsername(
const QString &username);
 
  111     QByteArray encode(
const QByteArray &key = QByteArray(), 
bool addFingerprint = 
true) 
const;
 
  112     bool decode(
const QByteArray &buffer, 
const QByteArray &key = QByteArray(), QStringList *errors = 0);
 
  113     QString toString() 
const;
 
  114     static quint16 peekType(
const QByteArray &buffer, quint32 &cookie, QByteArray &
id);
 
  119     QByteArray iceControlling;
 
  120     QByteArray iceControlled;
 
  121     QHostAddress changedHost;
 
  123     QHostAddress mappedHost;
 
  125     QHostAddress otherHost;
 
  127     QHostAddress sourceHost;
 
  129     QHostAddress xorMappedHost;
 
  130     quint16 xorMappedPort;
 
  131     QHostAddress xorPeerHost;
 
  133     QHostAddress xorRelayedHost;
 
  134     quint16 xorRelayedPort;
 
  143     QSet<quint16> m_attributes;
 
  144     quint32 m_changeRequest;
 
  145     quint16 m_channelNumber;
 
  151     quint8 m_requestedTransport;
 
  152     QByteArray m_reservationToken;
 
  162 class QXMPP_EXPORT QXmppStunTransaction : 
public QXmppLoggable 
  167     QXmppStunTransaction(
const QXmppStunMessage &request, QObject *parent);
 
  168     QXmppStunMessage request() 
const;
 
  169     QXmppStunMessage response() 
const;
 
  173     void writeStun(
const QXmppStunMessage &request);
 
  176     void readStun(
const QXmppStunMessage &response);
 
  182     QXmppStunMessage m_request;
 
  183     QXmppStunMessage m_response;
 
  184     QTimer *m_retryTimer;
 
  194 class QXMPP_EXPORT QXmppTurnAllocation : 
public QXmppLoggable 
  207     QXmppTurnAllocation(QObject *parent = 0);
 
  208     ~QXmppTurnAllocation();
 
  210     QHostAddress relayedHost() 
const;
 
  211     quint16 relayedPort() 
const;
 
  212     AllocationState state() 
const;
 
  214     void setServer(
const QHostAddress &host, quint16 port = 3478);
 
  215     void setUser(
const QString &user);
 
  216     void setPassword(
const QString &password);
 
  218     qint64 writeDatagram(
const QByteArray &data, 
const QHostAddress &host, quint16 port);
 
  225     void datagramReceived(
const QByteArray &data, 
const QHostAddress &host, quint16 port);
 
  231     void connectToHost();
 
  232     void disconnectFromHost();
 
  237     void refreshChannels();
 
  238     void transactionFinished();
 
  239     void writeStun(
const QXmppStunMessage &message);
 
  242     void handleDatagram(
const QByteArray &datagram, 
const QHostAddress &host, quint16 port);
 
  243     void setState(AllocationState state);
 
  247     QTimer *m_channelTimer;
 
  250     QHostAddress m_relayedHost;
 
  251     quint16 m_relayedPort;
 
  252     QHostAddress m_turnHost;
 
  256     typedef QPair<QHostAddress, quint16> Address;
 
  257     quint16 m_channelNumber;
 
  258     QMap<quint16, Address> m_channels;
 
  265     AllocationState m_state;
 
  266     QList<QXmppStunTransaction*> m_transactions;
 
  280     void setIceControlling(
bool controlling);
 
  281     void setStunServer(
const QHostAddress &host, quint16 port);
 
  282     void setTurnServer(
const QHostAddress &host, quint16 port);
 
  283     void setTurnUser(
const QString &user);
 
  284     void setTurnPassword(
const QString &password);
 
  286     QList<QXmppJingleCandidate> localCandidates() 
const;
 
  287     void setLocalUser(
const QString &user);
 
  288     void setLocalPassword(
const QString &password);
 
  290     int component() 
const;
 
  291     void setComponent(
int component);
 
  294     void setRemoteUser(
const QString &user);
 
  295     void setRemotePassword(
const QString &password);
 
  297     bool isConnected() 
const;
 
  298     void setSockets(QList<QUdpSocket*> sockets);
 
  300     static QList<QHostAddress> discoverAddresses();
 
  301     static QList<QUdpSocket*> reservePorts(
const QList<QHostAddress> &addresses, 
int count, QObject *parent = 0);
 
  305     void connectToHost();
 
  306     qint64 sendDatagram(
const QByteArray &datagram);
 
  309     void checkCandidates();
 
  311     void handleDatagram(
const QByteArray &datagram, 
const QHostAddress &host, quint16 port, QUdpSocket *socket = 0);
 
  313     void turnConnected();
 
  320     void datagramReceived(
const QByteArray &datagram);
 
  323     void localCandidatesChanged();
 
  328         Pair(
int component, 
bool controlling);
 
  329         quint64 priority() 
const;
 
  330         QString toString() 
const;
 
  332         QIODevice::OpenMode checked;
 
  335         QByteArray transaction;
 
  343     Pair *addRemoteCandidate(QUdpSocket *socket, 
const QHostAddress &host, quint16 port, quint32 priority);
 
  344     qint64 writeStun(
const QXmppStunMessage &message, QXmppIceComponent::Pair *pair);
 
  348     QList<QXmppJingleCandidate> m_localCandidates;
 
  350     QString m_localPassword;
 
  353     Pair *m_fallbackPair;
 
  354     bool m_iceControlling;
 
  355     QList<Pair*> m_pairs;
 
  356     quint32 m_peerReflexivePriority;
 
  357     QString m_remoteUser;
 
  358     QString m_remotePassword;
 
  360     QList<QUdpSocket*> m_sockets;
 
  365     QHostAddress m_stunHost;
 
  371     QXmppTurnAllocation *m_turnAllocation;
 
  372     bool m_turnConfigured;
 
  387     void addComponent(
int component);
 
  388     void setIceControlling(
bool controlling);
 
  390     QList<QXmppJingleCandidate> localCandidates() 
const;
 
  391     QString localUser() 
const;
 
  392     void setLocalUser(
const QString &user);
 
  393     QString localPassword() 
const;
 
  394     void setLocalPassword(
const QString &password);
 
  397     void setRemoteUser(
const QString &user);
 
  398     void setRemotePassword(
const QString &password);
 
  400     void setStunServer(
const QHostAddress &host, quint16 port = 3478);
 
  401     void setTurnServer(
const QHostAddress &host, quint16 port = 3478);
 
  402     void setTurnUser(
const QString &user);
 
  403     void setTurnPassword(
const QString &password);
 
  405     bool bind(
const QList<QHostAddress> &addresses);
 
  406     bool isConnected() 
const;
 
  416     void localCandidatesChanged();
 
  420     void connectToHost();
 
  423     void slotConnected();
 
  427     QTimer *m_connectTimer;
 
  428     bool m_iceControlling;
 
  429     QMap<int, QXmppIceComponent*> m_components;
 
  431     QString m_localPassword;
 
  432     QHostAddress m_stunHost;
 
  434     QHostAddress m_turnHost;
 
  437     QString m_turnPassword;