qtmobility/tests/bearerex/datatransferer.cpp
branchRCL_3
changeset 9 5d007b20cfd0
parent 8 885c2596c964
child 10 cd2778e5acfe
equal deleted inserted replaced
8:885c2596c964 9:5d007b20cfd0
     1 #include <QDebug>
       
     2 #include <QUrl>
       
     3 #include <QByteArray>
       
     4 #include <QDataStream>
       
     5 #include "datatransferer.h"
       
     6 
       
     7 DataTransferer::DataTransferer(QObject *parent) :
       
     8     QObject(parent), m_dataTransferOngoing(false)
       
     9 {
       
    10 }
       
    11 
       
    12 bool DataTransferer::dataTransferOngoing()
       
    13 {
       
    14     return m_dataTransferOngoing;
       
    15 }
       
    16 
       
    17 
       
    18 
       
    19 // -------- Based on QTcp
       
    20 
       
    21 DataTransfererQTcp::DataTransfererQTcp(QObject* parent) :
       
    22       DataTransferer(parent)
       
    23 {
       
    24     qDebug("BearerEx DataTransferer QTcp created.");
       
    25 
       
    26     connect(&m_qsocket, SIGNAL(readyRead()), this, SLOT(readyRead()));
       
    27     connect(&m_qsocket, SIGNAL(connected()), this, SLOT(connected()));
       
    28     connect(&m_qsocket, SIGNAL(error(QAbstractSocket::SocketError)),
       
    29             this, SLOT(error(QAbstractSocket::SocketError)));
       
    30 }
       
    31 
       
    32 DataTransfererQTcp::~DataTransfererQTcp()
       
    33 {
       
    34     qDebug("BearerEx DataTransferer QTcp destroyed.");
       
    35     m_qsocket.abort();
       
    36 }
       
    37 
       
    38 bool DataTransfererQTcp::transferData()
       
    39 {
       
    40     if (m_dataTransferOngoing) {
       
    41         return false;
       
    42     }
       
    43     qDebug("BearerEx datatransfer for QTcp requested.");
       
    44     // Connect to host
       
    45     QUrl url("http://www.google.com.au");
       
    46     m_qsocket.connectToHost(url.host(), url.port(80));
       
    47 
       
    48     // m_qsocket.connectToHost("http://www.google.com", 80);
       
    49     // Wait for connected() signal.
       
    50     m_dataTransferOngoing = true;
       
    51     return true;
       
    52 }
       
    53 
       
    54 void DataTransfererQTcp::connected()
       
    55 {
       
    56     qDebug("BearerEx DataTransfererQtcp connected, requesting data.");
       
    57     // Establish HTTP request
       
    58     //QByteArray request("GET / HTTP/1.1 \nHost: www.google.com\n\n");
       
    59     QByteArray request("GET / HTTP/1.1\n\n");
       
    60 
       
    61     // QByteArray request("GET /index.html HTTP/1.1 \n Host: www.google.com \n\n");
       
    62     qint64 dataWritten = m_qsocket.write(request);
       
    63     m_qsocket.flush();
       
    64 
       
    65     qDebug() << "BearerEx DataTransferQTcp wrote " << dataWritten << " bytes";
       
    66     // Start waiting for readyRead() of error()
       
    67 }
       
    68 
       
    69 void DataTransfererQTcp::readyRead()
       
    70 {
       
    71     qDebug() << "BearerEx DataTransfererQTcp readyRead() with ";
       
    72     qint64 bytesAvailable = m_qsocket.bytesAvailable();
       
    73     qDebug() << bytesAvailable << " bytes available.";
       
    74 
       
    75     // QDataStream in(&m_qsocket);
       
    76     QByteArray array = m_qsocket.readAll();
       
    77     QString data = QString::fromAscii(array);
       
    78 
       
    79     // in >> data;
       
    80 
       
    81     qDebug() << "BearerEx DataTransferQTcp data received: " << data;
       
    82     m_dataTransferOngoing = false;
       
    83     // m_qsocket.error() returns uninitialized value in case no error has occured,
       
    84     // so emit '0'
       
    85     emit finished(0, bytesAvailable, "QAbstractSocket::SocketError");
       
    86 }
       
    87 
       
    88 void DataTransfererQTcp::error(QAbstractSocket::SocketError socketError)
       
    89 {
       
    90     qDebug("BearerEx DataTransfererQTcp error(), aborting socket.");
       
    91     m_qsocket.abort();
       
    92     m_dataTransferOngoing = false;
       
    93     emit finished(socketError, 0, "QAbstractSocket::SocketError");
       
    94 }
       
    95 
       
    96 // -------- Based on QHttp
       
    97 
       
    98 DataTransfererQHttp::DataTransfererQHttp(QObject* parent) :
       
    99       DataTransferer(parent)
       
   100 {
       
   101     connect(&m_qhttp, SIGNAL(done(bool)), this, SLOT(done(bool)));
       
   102     qDebug("BearerEx DataTransferer QHttp created.");
       
   103 }
       
   104 
       
   105 DataTransfererQHttp::~DataTransfererQHttp()
       
   106 {
       
   107     qDebug("BearerEx DataTransferer QHttp destroyed.");
       
   108 }
       
   109 
       
   110 bool DataTransfererQHttp::transferData()
       
   111 {
       
   112     qDebug("BearerEx datatransfer for QHttp requested.");
       
   113     if (m_dataTransferOngoing) {
       
   114         return false;
       
   115     }
       
   116     QString urlstring("http://www.google.com");
       
   117     QUrl url(urlstring);
       
   118     m_qhttp.setHost(url.host(), QHttp::ConnectionModeHttp, url.port() == -1 ? 0 : url.port());
       
   119     m_qhttp.get(urlstring);
       
   120     m_dataTransferOngoing = true;
       
   121     return true;
       
   122 }
       
   123 
       
   124 void DataTransfererQHttp::done(bool /*error*/ )
       
   125 {
       
   126     qDebug("BearerEx DatatransfererQHttp reply was finished (error code is type QHttp::Error).");
       
   127     qint64 dataReceived = 0;
       
   128     quint32 errorCode = m_qhttp.error();
       
   129     if (m_qhttp.error() == QHttp::NoError) {
       
   130         QString result(m_qhttp.readAll());
       
   131         dataReceived = result.length();
       
   132     }
       
   133     m_dataTransferOngoing = false;
       
   134     emit finished(errorCode, dataReceived, "QHttp::Error");
       
   135 }
       
   136 
       
   137 // -------- Based on QNetworkAccessManager
       
   138 
       
   139 DataTransfererQNam::DataTransfererQNam(QObject* parent) :
       
   140       DataTransferer(parent)
       
   141 {
       
   142     connect(&m_qnam, SIGNAL(finished(QNetworkReply*)),
       
   143             this, SLOT(replyFinished(QNetworkReply*)));
       
   144     qDebug("BearerEx DataTransferer QNam created.");
       
   145 }
       
   146 
       
   147 DataTransfererQNam::~DataTransfererQNam()
       
   148 {
       
   149     qDebug("BearerEx DataTransferer QNam destroyed.");
       
   150 }
       
   151 
       
   152 bool DataTransfererQNam::transferData()
       
   153 {
       
   154     qDebug("BearerEx datatransfer for QNam requested.");
       
   155     if (m_dataTransferOngoing) {
       
   156         return false;
       
   157     }
       
   158     m_qnam.get(QNetworkRequest(QUrl("http://www.google.com")));
       
   159     m_dataTransferOngoing = true;
       
   160     return true;
       
   161 }
       
   162 
       
   163 void DataTransfererQNam::replyFinished(QNetworkReply *reply)
       
   164 {
       
   165     qDebug("BearerEx DatatransfererQNam reply was finished (error code is type QNetworkReply::NetworkError).");
       
   166     qint64 dataReceived = 0;
       
   167     quint32 errorCode = (quint32)reply->error();
       
   168 
       
   169     if (reply->error() == QNetworkReply::NoError) {
       
   170         QString result(reply->readAll());
       
   171         dataReceived = result.length();
       
   172     }
       
   173     m_dataTransferOngoing = false;
       
   174     emit finished(errorCode, dataReceived, "QNetworkReply::NetworkError");
       
   175     reply->deleteLater();
       
   176 }
       
   177 
       
   178 
       
   179