aboutsummaryrefslogtreecommitdiff
path: root/source/QXmppCallManager.cpp
diff options
context:
space:
mode:
authorJeremy Lainé <jeremy.laine@m4x.org>2010-07-21 09:04:43 +0000
committerJeremy Lainé <jeremy.laine@m4x.org>2010-07-21 09:04:43 +0000
commit2e80cec6c37d03d6783bde76fd27f5f2c50d9538 (patch)
treeedebcaa34644bedb769119d10ebee04f144c700c /source/QXmppCallManager.cpp
parentb51a31c74dca7aae2f46d35353972946021518cd (diff)
downloadqxmpp-2e80cec6c37d03d6783bde76fd27f5f2c50d9538.tar.gz
simplify state changes
Diffstat (limited to 'source/QXmppCallManager.cpp')
-rw-r--r--source/QXmppCallManager.cpp36
1 files changed, 14 insertions, 22 deletions
diff --git a/source/QXmppCallManager.cpp b/source/QXmppCallManager.cpp
index 07cf7e37..733ab962 100644
--- a/source/QXmppCallManager.cpp
+++ b/source/QXmppCallManager.cpp
@@ -54,7 +54,6 @@ QXmppCall::QXmppCall(const QString &jid, QXmppCall::Direction direction, QObject
m_state(OfferState),
m_signalsEmitted(false),
m_writtenSinceLastEmit(0),
- m_buffered(false),
m_codec(0),
m_incomingBuffering(true),
m_incomingMinimum(0),
@@ -126,7 +125,6 @@ void QXmppCall::terminate()
void QXmppCall::terminated()
{
- emit openModeChanged(openMode());
emit stateChanged(m_state);
emit finished();
}
@@ -242,26 +240,10 @@ void QXmppCall::setRemotePassword(const QString &password)
void QXmppCall::updateOpenMode()
{
// determine mode
- QIODevice::OpenMode mode = QIODevice::NotOpen;
- if (m_codec && m_socket->isConnected())
+ if (m_codec && m_socket->isConnected() && m_state != ActiveState)
{
- // update state
+ open(QIODevice::ReadWrite);
setState(ActiveState);
-
- // check whether we are buffering
- if (m_incomingBuffer.size() >= m_incomingMinimum)
- m_incomingBuffering = false;
- if (m_incomingBuffering)
- mode = QIODevice::WriteOnly;
- else
- mode = QIODevice::ReadWrite;
- }
-
- // update mode
- if (mode != openMode())
- {
- open(mode);
- emit openModeChanged(mode);
}
}
@@ -335,8 +317,11 @@ void QXmppCall::datagramReceived(const QByteArray &buffer)
output.setByteOrder(QDataStream::LittleEndian);
m_codec->decode(stream, output);
- updateOpenMode();
- emit readyRead();
+ // check whether we have filled the initial buffer
+ if (m_incomingBuffer.size() >= m_incomingMinimum)
+ m_incomingBuffering = false;
+ if (!m_incomingBuffering)
+ emit readyRead();
}
/// Returns the call's session identifier.
@@ -367,6 +352,13 @@ void QXmppCall::setState(QXmppCall::State state)
qint64 QXmppCall::readData(char * data, qint64 maxSize)
{
+ // if we are filling the buffer, return empty samples
+ if (m_incomingBuffering)
+ {
+ memset(data, 0, maxSize);
+ return maxSize;
+ }
+
qint64 readSize = qMin(maxSize, qint64(m_incomingBuffer.size()));
memcpy(data, m_incomingBuffer.constData(), readSize);
m_incomingBuffer.remove(0, readSize);