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

Last change on this file since 1064 was 1064, 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 _outSocket = 0;
27 _outSocketOpenTrial = 0;
28}
29
30// Destructor
31////////////////////////////////////////////////////////////////////////////
32t_bnscaster::~t_bnscaster() {
33 delete _outSocket;
34}
35
36// Start the Communication with NTRIP Caster
37////////////////////////////////////////////////////////////////////////////
38void t_bnscaster::open() {
39
40 if (_outSocket != 0 &&
41 _outSocket->state() == QAbstractSocket::ConnectedState) {
42 return;
43 }
44
45 delete _outSocket; _outSocket = 0;
46
47 double minDt = exp2(_outSocketOpenTrial);
48 if (++_outSocketOpenTrial > 8) {
49 _outSocketOpenTrial = 8;
50 }
51 if (_outSocketOpenTime.isValid() &&
52 _outSocketOpenTime.secsTo(QDateTime::currentDateTime()) < minDt) {
53 return;
54 }
55 else {
56 _outSocketOpenTime = QDateTime::currentDateTime();
57 }
58
59 QSettings settings;
60 _outSocket = new QTcpSocket();
61 _outSocket->connectToHost(settings.value("outHost").toString(),
62 settings.value("outPort").toInt());
63
64 const int timeOut = 100; // 0.1 seconds
65 if (!_outSocket->waitForConnected(timeOut)) {
66 delete _outSocket;
67 _outSocket = 0;
68 emit(error("bns::openCaster Connect Timeout"));
69 return;
70 }
71
72 QString password = settings.value("password").toString();
73
74 QByteArray msg = "SOURCE " + password.toAscii() + " /" +
75 _mountpoint.toAscii() + "\r\n" +
76 "Source-Agent: NTRIP BNS/1.0\r\n\r\n";
77
78 _outSocket->write(msg);
79 _outSocket->waitForBytesWritten();
80
81 _outSocket->waitForReadyRead();
82 QByteArray ans = _outSocket->readLine();
83
84 if (ans.indexOf("OK") == -1) {
85 delete _outSocket;
86 _outSocket = 0;
87 emit(newMessage("bns::openCaster socket deleted"));
88 }
89 else {
90 emit(newMessage("bns::openCaster socket OK"));
91 _outSocketOpenTrial = 0;
92 }
93}
94
95// Write buffer
96////////////////////////////////////////////////////////////////////////////
97void t_bnscaster::write(char* buffer, unsigned len) {
98 if (_outSocket) {
99 _outSocket->write(buffer, len);
100 _outSocket->flush();
101 }
102}
Note: See TracBrowser for help on using the repository browser.