summaryrefslogtreecommitdiffstats
path: root/src/nfc/qllcpsocket.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/nfc/qllcpsocket.cpp')
-rw-r--r--src/nfc/qllcpsocket.cpp404
1 files changed, 404 insertions, 0 deletions
diff --git a/src/nfc/qllcpsocket.cpp b/src/nfc/qllcpsocket.cpp
new file mode 100644
index 00000000..5b7e9e65
--- /dev/null
+++ b/src/nfc/qllcpsocket.cpp
@@ -0,0 +1,404 @@
+/****************************************************************************
+**
+** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
+** All rights reserved.
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** This file is part of the Qt Mobility Components.
+**
+** $QT_BEGIN_LICENSE:LGPL$
+** GNU Lesser General Public License Usage
+** This file may be used under the terms of the GNU Lesser General Public
+** License version 2.1 as published by the Free Software Foundation and
+** appearing in the file LICENSE.LGPL included in the packaging of this
+** file. Please review the following information to ensure the GNU Lesser
+** General Public License version 2.1 requirements will be met:
+** http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** In addition, as a special exception, Nokia gives you certain additional
+** rights. These rights are described in the Nokia Qt LGPL Exception
+** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU General
+** Public License version 3.0 as published by the Free Software Foundation
+** and appearing in the file LICENSE.GPL included in the packaging of this
+** file. Please review the following information to ensure the GNU General
+** Public License version 3.0 requirements will be met:
+** http://www.gnu.org/copyleft/gpl.html.
+**
+** Other Usage
+** Alternatively, this file may be used in accordance with the terms and
+** conditions contained in a signed written agreement between you and Nokia.
+**
+**
+**
+**
+**
+** $QT_END_LICENSE$
+**
+****************************************************************************/
+
+#include "qllcpsocket.h"
+
+#if defined(QT_SIMULATOR)
+#include "qllcpsocket_simulator_p.h"
+#elif defined(Q_OS_SYMBIAN)
+#include "qllcpsocket_symbian_p.h"
+#elif defined(Q_WS_MAEMO_6) || defined(Q_WS_MEEGO)
+#include "qllcpsocket_maemo6_p.h"
+#else
+#include "qllcpsocket_p.h"
+#endif
+
+/*!
+ \class QLlcpSocket
+ \brief The QLlcpSocket class provides an NFC LLCP socket.
+ \since 5.0
+
+ \ingroup connectivity-nfc
+ \inmodule QtConnectivity
+
+ NFC LLCP protocol is a peer-to-peer communication protocol between two NFC compliant devices.
+*/
+
+/*!
+ \enum QLlcpSocket::SocketError
+
+ This enum describes the errors that can occur. The most recent error can be retrieved through a
+ call to error().
+
+ \value UnknownSocketError An unidentified error has occurred.
+ \value RemoteHostClosedError The remote host closed the connection.
+ \value SocketAccessError The socket operation failed because the application lacked the
+ required privileges.
+ \value SocketResourceError The local system ran out of resources (e.g., too many sockets).
+*/
+
+/*!
+ \enum QLlcpSocket::SocketState
+
+ This enum describes the different state in which a socket can be.
+
+ \value UnconnectedState The socket is not connected.
+ \value ConnectingState The socket has started establishing a connection.
+ \value ConnectedState A connection is established.
+ \value ClosingState The socket is about to close.
+ \value BoundState The socket is bound to a local port (for servers).
+ \value ListeningState The socket is listening for incoming connections (for internal use).
+*/
+
+/*!
+ \fn QLlcpSocket::connected()
+
+ This signal is emitted after connectToService() has been called and a connection has been
+ successfully established.
+
+ \sa connectToService(), disconnected()
+*/
+
+/*!
+ \fn QLlcpSocket::disconnected()
+
+ This signal is emitted when the socket has been disconnected.
+
+ \sa disconnectFromService(),
+*/
+
+/*!
+ \fn QLlcpSocket::error(QLlcpSocket::SocketError socketError)
+
+ This signal is emitted when an error occurs. The \a socketError parameter describes the error.
+*/
+
+/*!
+ \fn QLlcpSocket::stateChanged(QLlcpSocket::SocketState socketState)
+
+ This signal is emitted when the state of the socket changes. The \a socketState parameter
+ describes the new state.
+*/
+
+/*!
+ Construct a new unconnected LLCP socket with \a parent.
+*/
+QLlcpSocket::QLlcpSocket(QObject *parent)
+: QIODevice(parent), d_ptr(new QLlcpSocketPrivate(this))
+{
+ setOpenMode(QIODevice::NotOpen);
+}
+
+/*!
+ \internal
+*/
+QLlcpSocket::QLlcpSocket(QLlcpSocketPrivate *d, QObject *parent)
+: QIODevice(parent), d_ptr(d)
+{
+ setOpenMode(QIODevice::ReadWrite);
+ d_ptr->q_ptr = this;
+}
+
+/*!
+ Destroys the LLCP socket.
+*/
+QLlcpSocket::~QLlcpSocket()
+{
+ delete d_ptr;
+}
+
+/*!
+ Connects to the service identified by the URI \a serviceUri on \a target.
+*/
+void QLlcpSocket::connectToService(QNearFieldTarget *target, const QString &serviceUri)
+{
+ Q_D(QLlcpSocket);
+
+ d->connectToService(target, serviceUri);
+}
+
+/*!
+ Disconnects the socket.
+*/
+void QLlcpSocket::disconnectFromService()
+{
+ Q_D(QLlcpSocket);
+
+ d->disconnectFromService();
+}
+
+/*!
+ Disconnects the socket.
+*/
+void QLlcpSocket::close()
+{
+ Q_D(QLlcpSocket);
+
+ QIODevice::close();
+
+ d->disconnectFromService();
+}
+
+/*!
+ Binds the LLCP socket to local \a port. Returns true on success; otherwise returns false.
+*/
+bool QLlcpSocket::bind(quint8 port)
+{
+ Q_D(QLlcpSocket);
+
+ return d->bind(port);
+}
+
+/*!
+ Returns true if at least one datagram (service data units) is waiting to be read; otherwise
+ returns false.
+
+ \sa pendingDatagramSize(), readDatagram()
+*/
+bool QLlcpSocket::hasPendingDatagrams() const
+{
+ Q_D(const QLlcpSocket);
+
+ return d->hasPendingDatagrams();
+}
+
+/*!
+ Returns the size of the first pending datagram (service data unit). If there is no datagram
+ available, this function returns -1.
+
+ \sa hasPendingDatagrams(), readDatagram()
+*/
+qint64 QLlcpSocket::pendingDatagramSize() const
+{
+ Q_D(const QLlcpSocket);
+
+ return d->pendingDatagramSize();
+}
+
+/*!
+ Sends the datagram at \a data of size \a size to the service that this socket is connected to.
+ Returns the number of bytes sent on success; otherwise return -1;
+*/
+qint64 QLlcpSocket::writeDatagram(const char *data, qint64 size)
+{
+ Q_D(QLlcpSocket);
+
+ return d->writeDatagram(data, size);
+}
+
+/*!
+ \reimp
+
+ Always returns true.
+*/
+bool QLlcpSocket::isSequential() const
+{
+ return true;
+}
+
+/*!
+ \overload
+
+ Sends the datagram \a datagram to the service that this socket is connected to.
+*/
+qint64 QLlcpSocket::writeDatagram(const QByteArray &datagram)
+{
+ Q_D(QLlcpSocket);
+
+ return d->writeDatagram(datagram);
+}
+
+/*!
+ Receives a datagram no larger than \a maxSize bytes and stores it in \a data. The sender's
+ details are stored in \a target and \a port (unless the pointers are 0).
+
+ Returns the size of the datagram on success; otherwise returns -1.
+
+ If maxSize is too small, the rest of the datagram will be lost. To avoid loss of data, call
+ pendingDatagramSize() to determine the size of the pending datagram before attempting to read
+ it. If maxSize is 0, the datagram will be discarded.
+
+ \sa writeDatagram(), hasPendingDatagrams(), pendingDatagramSize()
+*/
+qint64 QLlcpSocket::readDatagram(char *data, qint64 maxSize, QNearFieldTarget **target,
+ quint8 *port)
+{
+ Q_D(QLlcpSocket);
+
+ return d->readDatagram(data, maxSize, target, port);
+}
+
+/*!
+ Sends the datagram at \a data of size \a size to the service identified by the URI
+ \a port on \a target. Returns the number of bytes sent on success; otherwise returns -1.
+
+ \sa readDatagram()
+*/
+qint64 QLlcpSocket::writeDatagram(const char *data, qint64 size, QNearFieldTarget *target,
+ quint8 port)
+{
+ Q_D(QLlcpSocket);
+
+ return d->writeDatagram(data, size, target, port);
+}
+
+/*!
+ \overload
+
+ Sends the datagram \a datagram to the service identified by the URI \a port on \a target.
+*/
+qint64 QLlcpSocket::writeDatagram(const QByteArray &datagram, QNearFieldTarget *target,
+ quint8 port)
+{
+ Q_D(QLlcpSocket);
+
+ return d->writeDatagram(datagram, target, port);
+}
+
+/*!
+ Returns the type of error that last occurred.
+*/
+QLlcpSocket::SocketError QLlcpSocket::error() const
+{
+ Q_D(const QLlcpSocket);
+
+ return d->error();
+}
+
+/*!
+ Returns the state of the socket.
+*/
+QLlcpSocket::SocketState QLlcpSocket::state() const
+{
+ Q_D(const QLlcpSocket);
+
+ return d->state();
+}
+
+/*!
+ \reimp
+*/
+qint64 QLlcpSocket::bytesAvailable() const
+{
+ Q_D(const QLlcpSocket);
+
+ return d->bytesAvailable() + QIODevice::bytesAvailable();
+}
+
+/*!
+ \reimp
+*/
+bool QLlcpSocket::canReadLine() const
+{
+ Q_D(const QLlcpSocket);
+
+ return d->canReadLine() || QIODevice::canReadLine();
+}
+
+/*!
+ \reimp
+*/
+bool QLlcpSocket::waitForReadyRead(int msecs)
+{
+ Q_D(QLlcpSocket);
+
+ return d->waitForReadyRead(msecs);
+}
+
+/*!
+ \reimp
+*/
+bool QLlcpSocket::waitForBytesWritten(int msecs)
+{
+ Q_D(QLlcpSocket);
+
+ return d->waitForBytesWritten(msecs);
+}
+
+/*!
+ Waits until the socket is connected, up to \a msecs milliseconds. If the connection has been
+ established, this function returns true; otherwise it returns false. In the case where it
+ returns false, you can call error() to determine the cause of the error.
+
+ If msecs is -1, this function will not time out.
+*/
+bool QLlcpSocket::waitForConnected(int msecs)
+{
+ Q_D(QLlcpSocket);
+
+ return d->waitForConnected(msecs);
+}
+
+/*!
+ Waits until the socket is disconnected, up to \a msecs milliseconds. If the connection has been
+ disconnected, this function returns true; otherwise it returns false. In the case where it
+ returns false, you can call error() to determine the cause of the error.
+
+ If msecs is -1, this function will not time out.
+*/
+bool QLlcpSocket::waitForDisconnected(int msecs)
+{
+ Q_D(QLlcpSocket);
+
+ return d->waitForDisconnected(msecs);
+}
+
+/*!
+ \internal
+*/
+qint64 QLlcpSocket::readData(char *data, qint64 maxlen)
+{
+ Q_D(QLlcpSocket);
+
+ return d->readData(data, maxlen);
+}
+
+/*!
+ \internal
+*/
+qint64 QLlcpSocket::writeData(const char *data, qint64 len)
+{
+ Q_D(QLlcpSocket);
+
+ return d->writeData(data, len);
+}
+
+#include <moc_qllcpsocket.cpp>