Cleaning up bad connections
This commit is contained in:
parent
61a576eb93
commit
48c4b5ade0
3 changed files with 12 additions and 4 deletions
|
@ -44,7 +44,7 @@ int libp2p_session_context_free(struct SessionContext* context) {
|
||||||
if (context != NULL) {
|
if (context != NULL) {
|
||||||
if (context->default_stream != NULL)
|
if (context->default_stream != NULL)
|
||||||
context->default_stream->close(context);
|
context->default_stream->close(context);
|
||||||
//TODO: Be more intelligent
|
context->default_stream = NULL;
|
||||||
free(context);
|
free(context);
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -29,13 +29,20 @@ int multistream_default_timeout = 5;
|
||||||
*/
|
*/
|
||||||
int libp2p_net_multistream_close(void* stream_context) {
|
int libp2p_net_multistream_close(void* stream_context) {
|
||||||
struct SessionContext* secure_context = (struct SessionContext*)stream_context;
|
struct SessionContext* secure_context = (struct SessionContext*)stream_context;
|
||||||
struct Stream* stream = secure_context->insecure_stream;
|
struct Stream* stream = secure_context->default_stream;
|
||||||
|
if (stream == NULL || stream->socket_descriptor == NULL)
|
||||||
|
return 1;
|
||||||
int socket_descriptor = *((int*)stream->socket_descriptor);
|
int socket_descriptor = *((int*)stream->socket_descriptor);
|
||||||
close(socket_descriptor);
|
close(socket_descriptor);
|
||||||
free(stream->socket_descriptor);
|
free(stream->socket_descriptor);
|
||||||
|
stream->socket_descriptor = NULL;
|
||||||
if (stream->address != NULL)
|
if (stream->address != NULL)
|
||||||
multiaddress_free(stream->address);
|
multiaddress_free(stream->address);
|
||||||
|
stream->address = NULL;
|
||||||
free(stream);
|
free(stream);
|
||||||
|
secure_context->default_stream = NULL;
|
||||||
|
secure_context->insecure_stream = NULL;
|
||||||
|
secure_context->secure_stream = NULL;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -974,8 +974,10 @@ int libp2p_secio_handshake(struct SessionContext* local_session, struct RsaPriva
|
||||||
// receive Exchange packet
|
// receive Exchange packet
|
||||||
libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Reading exchange packet\n");
|
libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Reading exchange packet\n");
|
||||||
bytes_written = libp2p_secio_unencrypted_read(local_session, &results, &results_size, 10);
|
bytes_written = libp2p_secio_unencrypted_read(local_session, &results, &results_size, 10);
|
||||||
if (bytes_written == 0)
|
if (bytes_written == 0) {
|
||||||
|
libp2p_peer_handle_connection_error(remote_peer);
|
||||||
goto exit;
|
goto exit;
|
||||||
|
}
|
||||||
libp2p_secio_exchange_protobuf_decode(results, results_size, &exchange_in);
|
libp2p_secio_exchange_protobuf_decode(results, results_size, &exchange_in);
|
||||||
free(results);
|
free(results);
|
||||||
results = NULL;
|
results = NULL;
|
||||||
|
@ -1103,7 +1105,6 @@ int libp2p_secio_handshake(struct SessionContext* local_session, struct RsaPriva
|
||||||
libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Handshake success!\n");
|
libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Handshake success!\n");
|
||||||
} else {
|
} else {
|
||||||
libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Handshake returning false\n");
|
libp2p_logger_log("secio", LOGLEVEL_DEBUG, "Handshake returning false\n");
|
||||||
libp2p_peer_free(remote_peer);
|
|
||||||
}
|
}
|
||||||
return retVal;
|
return retVal;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue