QXmpp Version:0.3.91
|
00001 /* 00002 * Copyright (C) 2008-2011 The QXmpp developers 00003 * 00004 * Author: 00005 * Jeremy Lainé 00006 * 00007 * Source: 00008 * http://code.google.com/p/qxmpp 00009 * 00010 * This file is a part of QXmpp library. 00011 * 00012 * This library is free software; you can redistribute it and/or 00013 * modify it under the terms of the GNU Lesser General Public 00014 * License as published by the Free Software Foundation; either 00015 * version 2.1 of the License, or (at your option) any later version. 00016 * 00017 * This library is distributed in the hope that it will be useful, 00018 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00019 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 00020 * Lesser General Public License for more details. 00021 * 00022 */ 00023 00024 #ifndef QXMPPCALLMANAGER_H 00025 #define QXMPPCALLMANAGER_H 00026 00027 #include <QObject> 00028 #include <QIODevice> 00029 #include <QMetaType> 00030 00031 #include "QXmppClientExtension.h" 00032 #include "QXmppLogger.h" 00033 00034 class QHostAddress; 00035 class QXmppCallPrivate; 00036 class QXmppCallManager; 00037 class QXmppCallManagerPrivate; 00038 class QXmppIq; 00039 class QXmppJingleCandidate; 00040 class QXmppJingleIq; 00041 class QXmppJinglePayloadType; 00042 class QXmppPresence; 00043 class QXmppRtpAudioChannel; 00044 class QXmppRtpVideoChannel; 00045 00052 00053 class QXmppCall : public QXmppLoggable 00054 { 00055 Q_OBJECT 00056 Q_ENUMS(Direction State) 00057 Q_FLAGS(QIODevice::OpenModeFlag QIODevice::OpenMode) 00058 Q_PROPERTY(Direction direction READ direction CONSTANT) 00059 Q_PROPERTY(QString jid READ jid CONSTANT) 00060 Q_PROPERTY(State state READ state NOTIFY stateChanged) 00061 Q_PROPERTY(QIODevice::OpenMode audioMode READ audioMode NOTIFY audioModeChanged) 00062 Q_PROPERTY(QIODevice::OpenMode videoMode READ videoMode NOTIFY videoModeChanged) 00063 00064 public: 00066 enum Direction 00067 { 00068 IncomingDirection, 00069 OutgoingDirection, 00070 }; 00071 00073 enum State 00074 { 00075 ConnectingState = 0, 00076 ActiveState = 1, 00077 DisconnectingState = 2, 00078 FinishedState = 3, 00079 }; 00080 00081 ~QXmppCall(); 00082 00083 QXmppCall::Direction direction() const; 00084 QString jid() const; 00085 QString sid() const; 00086 QXmppCall::State state() const; 00087 00088 QXmppRtpAudioChannel *audioChannel() const; 00089 QIODevice::OpenMode audioMode() const; 00090 QXmppRtpVideoChannel *videoChannel() const; 00091 QIODevice::OpenMode videoMode() const; 00092 00093 signals: 00099 void connected(); 00100 00105 void finished(); 00106 00108 void ringing(); 00109 00111 void stateChanged(QXmppCall::State state); 00112 00114 void audioModeChanged(QIODevice::OpenMode mode); 00115 00117 void videoModeChanged(QIODevice::OpenMode mode); 00118 00119 public slots: 00120 void accept(); 00121 void hangup(); 00122 void startVideo(); 00123 void stopVideo(); 00124 00125 private slots: 00126 void localCandidatesChanged(); 00127 void terminated(); 00128 void updateOpenMode(); 00129 00130 private: 00131 QXmppCall(const QString &jid, QXmppCall::Direction direction, QXmppCallManager *parent); 00132 00133 QXmppCallPrivate *d; 00134 friend class QXmppCallManager; 00135 friend class QXmppCallManagerPrivate; 00136 friend class QXmppCallPrivate; 00137 }; 00138 00159 00160 class QXmppCallManager : public QXmppClientExtension 00161 { 00162 Q_OBJECT 00163 00164 public: 00165 QXmppCallManager(); 00166 ~QXmppCallManager(); 00167 void setStunServer(const QHostAddress &host, quint16 port = 3478); 00168 void setTurnServer(const QHostAddress &host, quint16 port = 3478); 00169 void setTurnUser(const QString &user); 00170 void setTurnPassword(const QString &password); 00171 00173 QStringList discoveryFeatures() const; 00174 bool handleStanza(const QDomElement &element); 00176 00177 signals: 00182 void callReceived(QXmppCall *call); 00183 00184 void callStarted(QXmppCall *call); 00185 00186 public slots: 00187 QXmppCall *call(const QString &jid); 00188 00189 protected: 00191 void setClient(QXmppClient* client); 00193 00194 private slots: 00195 void _q_callDestroyed(QObject *object); 00196 void _q_disconnected(); 00197 void _q_iqReceived(const QXmppIq &iq); 00198 void _q_jingleIqReceived(const QXmppJingleIq &iq); 00199 void _q_presenceReceived(const QXmppPresence &presence); 00200 00201 private: 00202 QXmppCallManagerPrivate *d; 00203 friend class QXmppCall; 00204 friend class QXmppCallPrivate; 00205 friend class QXmppCallManagerPrivate; 00206 }; 00207 00208 Q_DECLARE_METATYPE(QXmppCall::State) 00209 00210 #endif