Changeset 1848 in ntrip


Ignore:
Timestamp:
Jun 29, 2009, 11:17:23 AM (15 years ago)
Author:
mervart
Message:

* empty log message *

Location:
trunk/BNC
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/BNC/bncnetqueryv1.cpp

    r1816 r1848  
    2828////////////////////////////////////////////////////////////////////////////
    2929bncNetQueryV1::bncNetQueryV1() {
    30   _socket  = 0;
    31   _timeOut = 20000;
     30  _socket    = 0;
     31  _eventLoop = new QEventLoop(this);
     32  _timeOut   = 20000;
    3233}
    3334
     
    3637bncNetQueryV1::~bncNetQueryV1() {
    3738  delete _socket;
     39  delete _eventLoop;
    3840}
    3941
     
    4143////////////////////////////////////////////////////////////////////////////
    4244void bncNetQueryV1::stop() {
     45  _eventLoop->quit();
    4346#ifndef sparc
    4447  if (_socket) {
     
    4952}
    5053
     54// End of Request
     55////////////////////////////////////////////////////////////////////////////
     56void bncNetQueryV1::slotFinished() {
     57  _eventLoop->quit();
     58  if (_socket) {
     59    _outData = _socket->readAll();
     60    _status = finished;
     61  }
     62}
     63
    5164//
    5265////////////////////////////////////////////////////////////////////////////
    53 void bncNetQueryV1::waitForRequestResult(const QUrl&, QByteArray&) {
     66void bncNetQueryV1::waitForRequestResult(const QUrl& url, QByteArray& outData){
     67
     68  delete _socket;
     69  _socket = new QTcpSocket();
     70
     71  connect(_socket, SIGNAL(disconnected()), this, SLOT(slotFinished()));
     72
     73  startRequestPrivate(url, "", true);
     74
     75  _eventLoop->exec();
     76
     77  delete _socket; _socket = 0;
     78
     79  outData = _outData;
     80  _outData.clear();
    5481}
    5582
     
    83110////////////////////////////////////////////////////////////////////////////
    84111void bncNetQueryV1::startRequest(const QUrl& url, const QByteArray& gga) {
     112  startRequestPrivate(url, gga, false);
     113}
     114
     115// Connect to Caster, send the Request
     116////////////////////////////////////////////////////////////////////////////
     117void bncNetQueryV1::startRequestPrivate(const QUrl& url,
     118                                        const QByteArray& gga,
     119                                        bool sendRequestOnly) {
    85120
    86121  _status = running;
    87122
    88   delete _socket;
    89   _socket = new QTcpSocket();
     123  if (!sendRequestOnly) {
     124    delete _socket;
     125    _socket = new QTcpSocket();
     126  }
    90127
    91128  // Default scheme and path
     
    161198  // Read Caster Response
    162199  // --------------------
    163   bool proxyResponse = false;
    164   QStringList response;
    165   while (true) {
    166     if (_socket->canReadLine()) {
    167       QString line = _socket->readLine();
    168 
    169       if (line.indexOf("ICY 200 OK") == -1 &&
    170           line.indexOf("HTTP")       != -1 &&
    171           line.indexOf("200 OK")     != -1 ) {
    172         proxyResponse = true;
    173       }
    174 
    175       if (!proxyResponse && !line.trimmed().isEmpty()) {
    176         response.push_back(line);
    177       }
    178 
    179       if (line.trimmed().isEmpty()) {
    180         if (proxyResponse) {
    181           proxyResponse = false;
    182         }
    183         else {
     200  if (!sendRequestOnly) {
     201    bool proxyResponse = false;
     202    QStringList response;
     203    while (true) {
     204      if (_socket->canReadLine()) {
     205        QString line = _socket->readLine();
     206   
     207        if (line.indexOf("ICY 200 OK") == -1 &&
     208            line.indexOf("HTTP")       != -1 &&
     209            line.indexOf("200 OK")     != -1 ) {
     210          proxyResponse = true;
     211        }
     212   
     213        if (!proxyResponse && !line.trimmed().isEmpty()) {
     214          response.push_back(line);
     215        }
     216   
     217        if (line.trimmed().isEmpty()) {
     218          if (proxyResponse) {
     219            proxyResponse = false;
     220        }
     221        else {
     222            break;
     223        }
     224        }
     225   
     226        if (line.indexOf("Unauthorized") != -1) {
    184227          break;
    185         }
    186       }
    187 
    188       if (line.indexOf("Unauthorized") != -1) {
    189         break;
    190       }
    191 
    192       if (!proxyResponse                    &&
    193           line.indexOf("200 OK")      != -1 &&
    194           line.indexOf("SOURCETABLE") == -1) {
    195         response.clear();
    196         if (_socket->canReadLine()) {
    197           _socket->readLine();
    198         }
    199         break;
     228        }
     229   
     230        if (!proxyResponse                    &&
     231            line.indexOf("200 OK")      != -1 &&
     232            line.indexOf("SOURCETABLE") == -1) {
     233          response.clear();
     234          if (_socket->canReadLine()) {
     235            _socket->readLine();
     236        }
     237        break;
     238        }
     239      }
     240      else if (!_socket->waitForReadyRead(_timeOut)) {
     241        delete _socket;
     242        _socket = 0;
     243        _status = error;
     244        emit newMessage(_url.path().toAscii().replace(0,1,"")
     245                        + ": Response timeout", true);
     246        return;
    200247      }
    201248    }
    202     else if (!_socket->waitForReadyRead(_timeOut)) {
     249    if (response.size() > 0) {
    203250      delete _socket;
    204251      _socket = 0;
    205252      _status = error;
    206253      emit newMessage(_url.path().toAscii().replace(0,1,"")
    207                       + ": Response timeout", true);
    208       return;
     254                      + ": Wrong caster response\n"
     255                      + response.join("").toAscii(), true);
    209256    }
    210257  }
    211   if (response.size() > 0) {
    212     delete _socket;
    213     _socket = 0;
    214     _status = error;
    215     emit newMessage(_url.path().toAscii().replace(0,1,"")
    216                     + ": Wrong caster response\n"
    217                     + response.join("").toAscii(), true);
    218   }
    219 }
    220 
     258}
     259
  • trunk/BNC/bncnetqueryv1.h

    r1716 r1848  
    55
    66class bncNetQueryV1 : public bncNetQuery {
     7 Q_OBJECT
     8
    79 public:
    810  bncNetQueryV1();
     
    1416  virtual void waitForReadyRead(QByteArray& outData);
    1517
     18 private slots:
     19  void slotFinished();
     20
    1621 private:
     22  void startRequestPrivate(const QUrl& url, const QByteArray& gga,
     23                           bool sendRequestOnly);
     24  QEventLoop* _eventLoop;
    1725  QTcpSocket* _socket;
     26  QByteArray  _outData;
    1827};
    1928
  • trunk/BNC/bncrinex.cpp

    r1778 r1848  
    5454#include "bnctabledlg.h"
    5555#include "bncgetthread.h"
    56 #include "bncnetqueryv2.h"
     56#include "bncnetqueryv1.h"
    5757#include "bncsettings.h"
    5858#include "RTCM3/rtcm3torinex.h"
     
    162162    }
    163163
    164     bncNetQueryV2 query;
     164    bncNetQueryV1 query;
    165165    QByteArray outData;
    166166    query.waitForRequestResult(url, outData);
  • trunk/BNC/bnctabledlg.cpp

    r1821 r1848  
    4343#include "bnctabledlg.h"
    4444#include "bncgetthread.h"
    45 #include "bncnetqueryv2.h"
     45#include "bncnetqueryv1.h"
    4646#include "bncsettings.h"
    4747
     
    196196  url.setPath("/");
    197197
    198   bncNetQueryV2 query;
     198  bncNetQueryV1 query;
    199199  QByteArray outData;
    200200  query.waitForRequestResult(url, outData);
     
    448448  url.setPath("/");
    449449
    450   bncNetQueryV2 query;
     450  bncNetQueryV1 query;
    451451  QByteArray outData;
    452452  query.waitForRequestResult(url, outData);
Note: See TracChangeset for help on using the changeset viewer.