Skip to content

Commit 4adeafd

Browse files
committed
WL#15130 Socket-level TLS patch mysql#10: Transporter connect impls
Change-Id: I69245d3ffb847bfedf0c1abe478e94d069d015f8
1 parent 02b1449 commit 4adeafd

File tree

9 files changed

+63
-60
lines changed

9 files changed

+63
-60
lines changed

storage/ndb/src/common/transporter/Multi_Transporter.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -68,12 +68,12 @@ Multi_Transporter::resetBuffers()
6868
send_checksum_state.init();
6969
}
7070

71-
bool Multi_Transporter::connect_server_impl(ndb_socket_t)
71+
bool Multi_Transporter::connect_server_impl(NdbSocket &)
7272
{
7373
return true;
7474
}
7575

76-
bool Multi_Transporter::connect_client_impl(ndb_socket_t)
76+
bool Multi_Transporter::connect_client_impl(NdbSocket &)
7777
{
7878
return true;
7979
}

storage/ndb/src/common/transporter/Multi_Transporter.hpp

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -143,9 +143,8 @@ class Multi_Transporter : public Transporter {
143143
* A client connects to the remote server
144144
* A server accepts any new connections
145145
*/
146-
bool connect_server_impl(ndb_socket_t sockfd) override;
147-
bool connect_client_impl(ndb_socket_t sockfd) override;
148-
bool connect_common(ndb_socket_t sockfd);
146+
bool connect_server_impl(NdbSocket & sockfd) override;
147+
bool connect_client_impl(NdbSocket & sockfd) override;
149148

150149
/**
151150
* Disconnects a TCP/IP node, possibly blocking.

storage/ndb/src/common/transporter/SHM_Transporter.cpp

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -321,13 +321,13 @@ SHM_Transporter::setupBuffers()
321321
}
322322

323323
bool
324-
SHM_Transporter::connect_server_impl(ndb_socket_t sockfd)
324+
SHM_Transporter::connect_server_impl(NdbSocket & sockfd)
325325
{
326326
DBUG_ENTER("SHM_Transporter::connect_server_impl");
327327
DEBUG_FPRINTF((stderr, "(%u)connect_server_impl(%u)\n",
328328
localNodeId, remoteNodeId));
329-
SocketOutputStream s_output(sockfd);
330-
SocketInputStream s_input(sockfd);
329+
SecureSocketOutputStream s_output(sockfd);
330+
SecureSocketInputStream s_input(sockfd);
331331

332332
// Create
333333
if (!_shmSegCreated)
@@ -399,7 +399,7 @@ SHM_Transporter::connect_server_impl(ndb_socket_t sockfd)
399399

400400
DEBUG_FPRINTF((stderr, "(%u)connect_common()(%u)\n",
401401
localNodeId, remoteNodeId));
402-
int r= connect_common(sockfd);
402+
int r= connect_common();
403403

404404
if (r)
405405
{
@@ -424,25 +424,25 @@ SHM_Transporter::connect_server_impl(ndb_socket_t sockfd)
424424
}
425425

426426
void
427-
SHM_Transporter::set_socket(ndb_socket_t sockfd)
427+
SHM_Transporter::set_socket(NdbSocket & sock)
428428
{
429-
set_get(sockfd, IPPROTO_TCP, TCP_NODELAY, "TCP_NODELAY", 1);
430-
set_get(sockfd, SOL_SOCKET, SO_KEEPALIVE, "SO_KEEPALIVE", 1);
431-
ndb_socket_nonblock(sockfd, true);
429+
set_get(sock.ndb_socket(), IPPROTO_TCP, TCP_NODELAY, "TCP_NODELAY", 1);
430+
set_get(sock.ndb_socket(), SOL_SOCKET, SO_KEEPALIVE, "SO_KEEPALIVE", 1);
431+
sock.set_nonblocking(true);
432432
get_callback_obj()->lock_transporter(remoteNodeId, m_transporter_index);
433-
theSocket.init_from_new(sockfd);
433+
NdbSocket::transfer(theSocket, sock);
434434
send_checksum_state.init();
435435
get_callback_obj()->unlock_transporter(remoteNodeId, m_transporter_index);
436436
}
437437

438438
bool
439-
SHM_Transporter::connect_client_impl(ndb_socket_t sockfd)
439+
SHM_Transporter::connect_client_impl(NdbSocket & sockfd)
440440
{
441441
DBUG_ENTER("SHM_Transporter::connect_client_impl");
442442
DEBUG_FPRINTF((stderr, "(%u)connect_client_impl(%u)\n",
443443
localNodeId, remoteNodeId));
444-
SocketInputStream s_input(sockfd);
445-
SocketOutputStream s_output(sockfd);
444+
SecureSocketInputStream s_input(sockfd);
445+
SecureSocketOutputStream s_output(sockfd);
446446
char buf[256];
447447

448448
// Wait for server to create and attach
@@ -522,7 +522,7 @@ SHM_Transporter::connect_client_impl(ndb_socket_t sockfd)
522522

523523
DEBUG_FPRINTF((stderr, "(%u)connect_common(%u)\n",
524524
localNodeId, remoteNodeId));
525-
int r = connect_common(sockfd);
525+
int r = connect_common();
526526

527527
if (r)
528528
{
@@ -557,7 +557,7 @@ SHM_Transporter::connect_client_impl(ndb_socket_t sockfd)
557557
}
558558

559559
bool
560-
SHM_Transporter::connect_common(ndb_socket_t)
560+
SHM_Transporter::connect_common()
561561
{
562562
if (!checkConnected())
563563
{

storage/ndb/src/common/transporter/SHM_Transporter.hpp

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ class SHM_Transporter : public Transporter {
111111
* i.e., both agrees that the other one has setup the segment.
112112
* Otherwise false.
113113
*/
114-
bool connect_server_impl(ndb_socket_t sockfd) override;
114+
bool connect_server_impl(NdbSocket &) override;
115115

116116
/**
117117
* Blocking
@@ -124,15 +124,15 @@ class SHM_Transporter : public Transporter {
124124
* i.e., both agrees that the other one has setup the segment.
125125
* Otherwise false.
126126
*/
127-
bool connect_client_impl(ndb_socket_t sockfd) override;
127+
bool connect_client_impl(NdbSocket &) override;
128128

129-
bool connect_common(ndb_socket_t sockfd);
129+
bool connect_common();
130130

131131
bool ndb_shm_create();
132132
bool ndb_shm_get();
133133
bool ndb_shm_attach();
134134
void ndb_shm_destroy();
135-
void set_socket(ndb_socket_t);
135+
void set_socket(NdbSocket &);
136136

137137
/**
138138
* Check if there are two processes attached to the segment (a connection)

storage/ndb/src/common/transporter/TCP_Transporter.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -201,25 +201,25 @@ TCP_Transporter::resetBuffers()
201201
send_checksum_state.init();
202202
}
203203

204-
bool TCP_Transporter::connect_server_impl(ndb_socket_t sockfd)
204+
bool TCP_Transporter::connect_server_impl(NdbSocket & socket)
205205
{
206206
DBUG_ENTER("TCP_Transpporter::connect_server_impl");
207-
DBUG_RETURN(connect_common(sockfd));
207+
DBUG_RETURN(connect_common(socket));
208208
}
209209

210-
bool TCP_Transporter::connect_client_impl(ndb_socket_t sockfd)
210+
bool TCP_Transporter::connect_client_impl(NdbSocket & socket)
211211
{
212212
DBUG_ENTER("TCP_Transpporter::connect_client_impl");
213-
DBUG_RETURN(connect_common(sockfd));
213+
DBUG_RETURN(connect_common(socket));
214214
}
215215

216-
bool TCP_Transporter::connect_common(ndb_socket_t sockfd)
216+
bool TCP_Transporter::connect_common(NdbSocket & socket)
217217
{
218-
setSocketOptions(sockfd);
219-
setSocketNonBlocking(sockfd);
218+
setSocketOptions(socket.ndb_socket());
219+
socket.set_nonblocking(true);
220220

221221
get_callback_obj()->lock_transporter(remoteNodeId, m_transporter_index);
222-
theSocket.init_from_new(sockfd);
222+
NdbSocket::transfer(theSocket, socket);
223223
send_checksum_state.init();
224224
get_callback_obj()->unlock_transporter(remoteNodeId, m_transporter_index);
225225

storage/ndb/src/common/transporter/TCP_Transporter.hpp

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -109,9 +109,9 @@ class TCP_Transporter : public Transporter {
109109
* A client connects to the remote server
110110
* A server accepts any new connections
111111
*/
112-
bool connect_server_impl(ndb_socket_t sockfd) override;
113-
bool connect_client_impl(ndb_socket_t sockfd) override;
114-
bool connect_common(ndb_socket_t sockfd);
112+
bool connect_server_impl(NdbSocket & sockfd) override;
113+
bool connect_client_impl(NdbSocket & sockfd) override;
114+
bool connect_common(NdbSocket & sockfd);
115115

116116
/**
117117
* Disconnects a TCP/IP node, possibly blocking.

storage/ndb/src/common/transporter/Transporter.cpp

Lines changed: 21 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -54,13 +54,13 @@ Transporter::Transporter(TransporterRegistry &t_reg,
5454
TrpId transporter_index,
5555
TransporterType _type,
5656
const char *lHostName,
57-
const char *rHostName,
57+
const char *rHostName,
5858
int s_port,
5959
bool _isMgmConnection,
6060
NodeId lNodeId,
6161
NodeId rNodeId,
6262
NodeId serverNodeId,
63-
int _byteorder,
63+
int _byteorder,
6464
bool _compression,
6565
bool _checksum,
6666
bool _signalId,
@@ -221,7 +221,7 @@ Transporter::update_connect_state(bool connected)
221221
}
222222

223223
bool
224-
Transporter::connect_server(ndb_socket_t sockfd,
224+
Transporter::connect_server(NdbSocket & sockfd,
225225
BaseString& msg) {
226226
// all initial negotiation is done in TransporterRegistry::connect_server
227227
DBUG_ENTER("Transporter::connect_server");
@@ -234,7 +234,7 @@ Transporter::connect_server(ndb_socket_t sockfd,
234234
}
235235

236236
// Cache the connect address
237-
ndb_socket_connect_address(sockfd, &m_connect_address);
237+
ndb_socket_connect_address(sockfd.ndb_socket(), &m_connect_address);
238238

239239
if (!connect_server_impl(sockfd))
240240
{
@@ -262,6 +262,7 @@ Transporter::connect_server(ndb_socket_t sockfd,
262262
bool
263263
Transporter::connect_client()
264264
{
265+
NdbSocket secureSocket;
265266
ndb_socket_t sockfd;
266267
DBUG_ENTER("Transporter::connect_client");
267268

@@ -284,8 +285,8 @@ Transporter::connect_client()
284285
if(isMgmConnection)
285286
{
286287
require(!isPartOfMultiTransporter());
287-
sockfd= m_transporter_registry.connect_ndb_mgmd(remoteHostName,
288-
port);
288+
sockfd= m_transporter_registry.connect_ndb_mgmd(remoteHostName, port);
289+
secureSocket.init_from_new(sockfd);
289290
}
290291
else
291292
{
@@ -313,15 +314,14 @@ Transporter::connect_client()
313314
}
314315
}
315316

316-
sockfd= m_socket_client->connect(remoteHostName,
317-
port);
317+
m_socket_client->connect(secureSocket, remoteHostName, port);
318318
}
319319

320-
DBUG_RETURN(connect_client(sockfd));
320+
DBUG_RETURN(connect_client(secureSocket));
321321
}
322322

323323
bool
324-
Transporter::connect_client(ndb_socket_t sockfd)
324+
Transporter::connect_client(NdbSocket & socket)
325325
{
326326
DBUG_ENTER("Transporter::connect_client(sockfd)");
327327

@@ -332,10 +332,10 @@ Transporter::connect_client(ndb_socket_t sockfd)
332332
DBUG_RETURN(true);
333333
}
334334

335-
if (!ndb_socket_valid(sockfd))
335+
if (! socket.is_valid())
336336
{
337337
DBUG_PRINT("error", ("Socket %s is not valid",
338-
ndb_socket_to_string(sockfd).c_str()));
338+
socket.to_string().c_str()));
339339
DEBUG_FPRINTF((stderr, "Socket not valid\n"));
340340
DBUG_RETURN(false);
341341
}
@@ -392,22 +392,22 @@ Transporter::connect_client(ndb_socket_t sockfd)
392392
DBUG_PRINT("info", ("Sending hello : %s", helloBuf));
393393
DEBUG_FPRINTF((stderr, "Sending hello : %s\n"));
394394

395-
SocketOutputStream s_output(sockfd);
395+
SecureSocketOutputStream s_output(socket);
396396
if (s_output.println("%s", helloBuf) < 0)
397397
{
398398
DBUG_PRINT("error", ("Send of 'hello' failed"));
399-
ndb_socket_close(sockfd);
399+
socket.close();
400400
DBUG_RETURN(false);
401401
}
402402

403403
// Read reply
404404
DBUG_PRINT("info", ("Reading reply"));
405405
char buf[256];
406-
SocketInputStream s_input(sockfd);
406+
SecureSocketInputStream s_input(socket);
407407
if (s_input.gets(buf, 256) == nullptr)
408408
{
409409
DBUG_PRINT("error", ("Failed to read reply"));
410-
ndb_socket_close(sockfd);
410+
socket.close();
411411
DBUG_RETURN(false);
412412
}
413413

@@ -419,7 +419,7 @@ Transporter::connect_client(ndb_socket_t sockfd)
419419
break;
420420
default:
421421
DBUG_PRINT("error", ("Failed to parse reply"));
422-
ndb_socket_close(sockfd);
422+
socket.close();
423423
DBUG_RETURN(false);
424424
}
425425

@@ -431,7 +431,7 @@ Transporter::connect_client(ndb_socket_t sockfd)
431431
{
432432
g_eventLogger->error("Connected to wrong nodeid: %d, expected: %d",
433433
nodeId, remoteNodeId);
434-
ndb_socket_close(sockfd);
434+
socket.close();
435435
DBUG_RETURN(false);
436436
}
437437

@@ -442,14 +442,14 @@ Transporter::connect_client(ndb_socket_t sockfd)
442442
g_eventLogger->error("Connection to node: %d uses different transporter "
443443
"type: %d, expected type: %d",
444444
nodeId, remote_transporter_type, m_type);
445-
ndb_socket_close(sockfd);
445+
socket.close();
446446
DBUG_RETURN(false);
447447
}
448448

449449
// Cache the connect address
450-
ndb_socket_connect_address(sockfd, &m_connect_address);
450+
ndb_socket_connect_address(socket.ndb_socket(), &m_connect_address);
451451

452-
if (!connect_client_impl(sockfd))
452+
if (! connect_client_impl(socket))
453453
{
454454
DBUG_RETURN(false);
455455
}

storage/ndb/src/common/transporter/Transporter.hpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -127,8 +127,12 @@ class Transporter {
127127
* Use isConnected() to check status
128128
*/
129129
virtual bool connect_client();
130-
bool connect_client(ndb_socket_t sockfd);
131-
bool connect_server(ndb_socket_t socket, BaseString& errormsg);
130+
bool connect_client(NdbSocket &);
131+
bool connect_client(ndb_socket_t fd) {
132+
NdbSocket socket(fd, NdbSocket::From::Existing);
133+
return connect_client(socket);
134+
}
135+
bool connect_server(NdbSocket & socket, BaseString& errormsg);
132136

133137
/**
134138
* Returns socket used (sockets are used for all transporters to ensure
@@ -241,8 +245,8 @@ class Transporter {
241245
* Blocking, for max timeOut milli seconds
242246
* Returns true if connect succeeded
243247
*/
244-
virtual bool connect_server_impl(ndb_socket_t) = 0;
245-
virtual bool connect_client_impl(ndb_socket_t) = 0;
248+
virtual bool connect_server_impl(NdbSocket &) = 0;
249+
virtual bool connect_client_impl(NdbSocket &) = 0;
246250
virtual int pre_connect_options(ndb_socket_t) { return 0;}
247251

248252
/**

storage/ndb/src/common/transporter/TransporterRegistry.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -783,7 +783,7 @@ TransporterRegistry::connect_server(NdbSocket & socket,
783783
// Setup transporter (transporter responsible for closing sockfd)
784784
DEBUG_FPRINTF((stderr, "connect_server for trp_id %u\n",
785785
t->getTransporterIndex()));
786-
DBUG_RETURN(t->connect_server(socket.ndb_socket(), msg)); // WL#15130 fix me soon
786+
DBUG_RETURN(t->connect_server(socket, msg));
787787
}
788788

789789
void

0 commit comments

Comments
 (0)