source: ntrip/trunk/BNC/combination/cmbcaster.cpp@ 2925

Last change on this file since 2925 was 2925, checked in by mervart, 13 years ago
File size: 2.7 KB
Line 
1/* -------------------------------------------------------------------------
2 * BKG NTRIP Server
3 * -------------------------------------------------------------------------
4 *
5 * Class: cmbCaster
6 *
7 * Purpose: Connection to NTRIP Caster
8 *
9 * Author: L. Mervart
10 *
11 * Created: 29-Jan-2011
12 *
13 * Changes:
14 *
15 * -----------------------------------------------------------------------*/
16
17#include <math.h>
18#include "cmbcaster.h"
19#include "bncsettings.h"
20#include "bncversion.h"
21
22using namespace std;
23
24// Constructor
25////////////////////////////////////////////////////////////////////////////
26cmbCaster::cmbCaster() {
27 bncSettings settings;
28 _mountpoint = settings.value("cmbMountpoint").toString();
29 _outSocket = 0;
30 _sOpenTrial = 0;
31}
32
33// Destructor
34////////////////////////////////////////////////////////////////////////////
35cmbCaster::~cmbCaster() {
36 delete _outSocket;
37}
38
39// Start the Communication with NTRIP Caster
40////////////////////////////////////////////////////////////////////////////
41void cmbCaster::open() {
42
43 if (_mountpoint.isEmpty()) {
44 return;
45 }
46
47 if (_outSocket != 0 &&
48 _outSocket->state() == QAbstractSocket::ConnectedState) {
49 return;
50 }
51
52 delete _outSocket; _outSocket = 0;
53
54 double minDt = pow(2.0,_sOpenTrial);
55 if (++_sOpenTrial > 4) {
56 _sOpenTrial = 4;
57 }
58 if (_outSocketOpenTime.isValid() &&
59 _outSocketOpenTime.secsTo(QDateTime::currentDateTime()) < minDt) {
60 return;
61 }
62 else {
63 _outSocketOpenTime = QDateTime::currentDateTime();
64 }
65
66 bncSettings settings;
67 _outSocket = new QTcpSocket();
68 QString password;
69 _outSocket->connectToHost(settings.value("cmbOutHost").toString(),
70 settings.value("cmbOutPort").toInt());
71 password = settings.value("cmbPassword").toString();
72
73 const int timeOut = 5000; // 5 seconds
74 if (!_outSocket->waitForConnected(timeOut)) {
75 delete _outSocket;
76 _outSocket = 0;
77 emit(newMessage("Broadcaster: Connect timeout"));
78 return;
79 }
80
81 QByteArray msg = "SOURCE " + password.toAscii() + " /" +
82 _mountpoint.toAscii() + "\r\n" +
83 "Source-Agent: NTRIP BNC/" BNCVERSION "\r\n\r\n";
84
85 _outSocket->write(msg);
86 _outSocket->waitForBytesWritten();
87
88 _outSocket->waitForReadyRead();
89 QByteArray ans = _outSocket->readLine();
90
91 if (ans.indexOf("OK") == -1) {
92 delete _outSocket;
93 _outSocket = 0;
94 emit(newMessage("Broadcaster: Connection broken"));
95 }
96 else {
97 emit(newMessage("Broadcaster: Connection opened"));
98 _sOpenTrial = 0;
99 }
100}
101
102// Write buffer
103////////////////////////////////////////////////////////////////////////////
104void cmbCaster::write(char* buffer, unsigned len) {
105 if (_outSocket) {
106 _outSocket->write(buffer, len);
107 _outSocket->flush();
108 }
109}
Note: See TracBrowser for help on using the repository browser.