source: ntrip/trunk/BNS/bnscaster.cpp@ 1060

Last change on this file since 1060 was 1060, checked in by mervart, 16 years ago

* empty log message *

File size: 2.6 KB
Line 
1/* -------------------------------------------------------------------------
2 * BKG NTRIP Server
3 * -------------------------------------------------------------------------
4 *
5 * Class: bnscaster
6 *
7 * Purpose: Connection to NTRIP Caster
8 *
9 * Author: L. Mervart
10 *
11 * Created: 27-Aug-2008
12 *
13 * Changes:
14 *
15 * -----------------------------------------------------------------------*/
16
17#include <math.h>
18#include "bnscaster.h"
19
20using namespace std;
21
22// Constructor
23////////////////////////////////////////////////////////////////////////////
24t_bnscaster::t_bnscaster(const QString& mountpoint) {
25 _mountpoint = mountpoint;
26 _outSocketOpenTrial = 0;
27}
28
29// Destructor
30////////////////////////////////////////////////////////////////////////////
31t_bnscaster::~t_bnscaster() {
32 delete _outSocket;
33}
34
35// Start the Communication with NTRIP Caster
36////////////////////////////////////////////////////////////////////////////
37void t_bnscaster::open() {
38
39 if (_outSocket != 0 &&
40 _outSocket->state() == QAbstractSocket::ConnectedState) {
41 return;
42 }
43
44 delete _outSocket; _outSocket = 0;
45
46 double minDt = exp2(_outSocketOpenTrial);
47 if (++_outSocketOpenTrial > 8) {
48 _outSocketOpenTrial = 8;
49 }
50 if (_outSocketOpenTime.isValid() &&
51 _outSocketOpenTime.secsTo(QDateTime::currentDateTime()) < minDt) {
52 return;
53 }
54 else {
55 _outSocketOpenTime = QDateTime::currentDateTime();
56 }
57
58 QSettings settings;
59 _outSocket = new QTcpSocket();
60 _outSocket->connectToHost(settings.value("outHost").toString(),
61 settings.value("outPort").toInt());
62
63 const int timeOut = 100; // 0.1 seconds
64 if (!_outSocket->waitForConnected(timeOut)) {
65 delete _outSocket;
66 _outSocket = 0;
67 emit(error("bns::openCaster Connect Timeout"));
68 return;
69 }
70
71 QString password = settings.value("password").toString();
72
73 QByteArray msg = "SOURCE " + password.toAscii() + " /" +
74 _mountpoint.toAscii() + "\r\n" +
75 "Source-Agent: NTRIP BNS/1.0\r\n\r\n";
76
77 _outSocket->write(msg);
78 _outSocket->waitForBytesWritten();
79
80 _outSocket->waitForReadyRead();
81 QByteArray ans = _outSocket->readLine();
82
83 if (ans.indexOf("OK") == -1) {
84 delete _outSocket;
85 _outSocket = 0;
86 emit(newMessage("bns::openCaster socket deleted"));
87 }
88 else {
89 emit(newMessage("bns::openCaster socket OK"));
90 _outSocketOpenTrial = 0;
91 }
92}
93
94// Write buffer
95////////////////////////////////////////////////////////////////////////////
96void t_bnscaster::write(char* buffer, unsigned len) {
97 if (_outSocket) {
98 _outSocket->write(buffer, len);
99 _outSocket->flush();
100 }
101}
Note: See TracBrowser for help on using the repository browser.