@@ -59,7 +59,7 @@ const unsigned short Socket::defaultPortNumber = DEFAULT_PORT_NUMBER;
59
59
Socket::Socket ( const std::string& host, const unsigned short port )
60
60
: _host( host )
61
61
, _socket( new QTcpSocket( ))
62
- , _remoteProtocolVersion ( INVALID_NETWORK_PROTOCOL_VERSION )
62
+ , _serverProtocolVersion ( INVALID_NETWORK_PROTOCOL_VERSION )
63
63
{
64
64
// disable warnings which occur if no QCoreApplication is present during
65
65
// _connect(): QObject::connect: Cannot connect (null)::destroyed() to
@@ -91,6 +91,11 @@ bool Socket::isConnected() const
91
91
return _socket->state () == QTcpSocket::ConnectedState;
92
92
}
93
93
94
+ int32_t Socket::getServerProtocolVersion () const
95
+ {
96
+ return _serverProtocolVersion;
97
+ }
98
+
94
99
int Socket::getFileDescriptor () const
95
100
{
96
101
return _socket->socketDescriptor ();
@@ -172,11 +177,6 @@ bool Socket::receive( MessageHeader& messageHeader, QByteArray& message )
172
177
return true ;
173
178
}
174
179
175
- int32_t Socket::getRemoteProtocolVersion () const
176
- {
177
- return _remoteProtocolVersion;
178
- }
179
-
180
180
bool Socket::_receiveHeader ( MessageHeader& messageHeader )
181
181
{
182
182
while ( _socket->bytesAvailable () < qint64 (MessageHeader::serializedSize) )
@@ -193,45 +193,42 @@ bool Socket::_receiveHeader( MessageHeader& messageHeader )
193
193
194
194
bool Socket::_connect ( const std::string& host, const unsigned short port )
195
195
{
196
- // make sure we're disconnected
197
- _socket->disconnectFromHost ();
198
-
199
- // open connection
200
196
_socket->connectToHost ( host.c_str (), port );
201
-
202
197
if ( !_socket->waitForConnected ( RECEIVE_TIMEOUT_MS ))
203
198
{
204
- std::cerr << " could not connect to host " << host << " :" << port
199
+ std::cerr << " could not connect to " << host << " :" << port
205
200
<< std::endl;
206
201
return false ;
207
202
}
208
203
209
- // handshake
210
- if ( _checkProtocolVersion ( ))
211
- return true ;
204
+ if ( !_receiveProtocolVersion ( ))
205
+ {
206
+ std::cerr << " server protocol version was not received" << std::endl;
207
+ _socket->disconnectFromHost ();
208
+ return false ;
209
+ }
210
+
211
+ if ( _serverProtocolVersion < NETWORK_PROTOCOL_VERSION )
212
+ {
213
+ std::cerr << " server uses unsupported protocol: "
214
+ << _serverProtocolVersion << " < "
215
+ << NETWORK_PROTOCOL_VERSION << std::endl;
216
+ _socket->disconnectFromHost ();
217
+ return false ;
218
+ }
212
219
213
- std::cerr << " Protocol version check failed for host: " << host << " :"
214
- << port << std::endl;
215
- _socket->disconnectFromHost ();
216
- return false ;
220
+ return true ;
217
221
}
218
222
219
- bool Socket::_checkProtocolVersion ()
223
+ bool Socket::_receiveProtocolVersion ()
220
224
{
221
225
while ( _socket->bytesAvailable () < qint64 (sizeof (int32_t )) )
222
226
{
223
227
if ( !_socket->waitForReadyRead ( RECEIVE_TIMEOUT_MS ))
224
228
return false ;
225
229
}
226
-
227
- _socket->read ((char *)&_remoteProtocolVersion, sizeof (int32_t ));
228
-
229
- if ( _remoteProtocolVersion == NETWORK_PROTOCOL_VERSION )
230
- return true ;
231
-
232
- std::cerr << " unsupported protocol version " << _remoteProtocolVersion
233
- << " != " << NETWORK_PROTOCOL_VERSION << std::endl;
234
- return false ;
230
+ _socket->read ((char *)&_serverProtocolVersion, sizeof (int32_t ));
231
+ return true ;
235
232
}
236
233
237
234
}
0 commit comments