keeping track of max socket fd
This commit is contained in:
parent
3137d9efa6
commit
5a91c5bbe8
3 changed files with 66 additions and 0 deletions
|
@ -3,6 +3,7 @@
|
||||||
#include "multiaddr/multiaddr.h"
|
#include "multiaddr/multiaddr.h"
|
||||||
#include "libp2p/net/stream.h"
|
#include "libp2p/net/stream.h"
|
||||||
#include "libp2p/crypto/rsa.h"
|
#include "libp2p/crypto/rsa.h"
|
||||||
|
#include "libp2p/conn/session.h"
|
||||||
|
|
||||||
struct Peerstore;
|
struct Peerstore;
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ struct PeerEntry {
|
||||||
* improve performance, but will wait.
|
* improve performance, but will wait.
|
||||||
*/
|
*/
|
||||||
struct Peerstore {
|
struct Peerstore {
|
||||||
|
int max_socket_fd;
|
||||||
struct Libp2pLinkedList* head_entry;
|
struct Libp2pLinkedList* head_entry;
|
||||||
struct Libp2pLinkedList* last_entry;
|
struct Libp2pLinkedList* last_entry;
|
||||||
};
|
};
|
||||||
|
@ -87,3 +88,19 @@ struct Libp2pPeer* libp2p_peerstore_get_peer(struct Peerstore* peerstore, const
|
||||||
*/
|
*/
|
||||||
struct Libp2pPeer* libp2p_peerstore_get_or_add_peer(struct Peerstore* peerstore, const struct Libp2pPeer* in);
|
struct Libp2pPeer* libp2p_peerstore_get_or_add_peer(struct Peerstore* peerstore, const struct Libp2pPeer* in);
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Look for a peer by id. If not found, add it to the peerstore
|
||||||
|
* @param peerstore the Peerstore
|
||||||
|
* @param peer_id the peer id
|
||||||
|
* @param peer_id_size the size of peer_id
|
||||||
|
* @returns a Peer struct, or NULL if error
|
||||||
|
*/
|
||||||
|
struct Libp2pPeer* libp2p_peerstore_get_or_add_peer_by_id(struct Peerstore* peerstore, const unsigned char* peer_id, size_t peer_id_size);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the max socket fd
|
||||||
|
* @param peerstore the Peerstore
|
||||||
|
* @param newVal the new val (will be added if > oldVal)
|
||||||
|
* @returns the lastest peerstore max_socket_fd
|
||||||
|
*/
|
||||||
|
int libp2p_peerstore_update_socket_fd(struct Peerstore* peerstore, int newVal);
|
||||||
|
|
|
@ -52,6 +52,7 @@ struct PeerEntry* libp2p_peer_entry_copy(struct PeerEntry* in) {
|
||||||
struct Peerstore* libp2p_peerstore_new(const struct Libp2pPeer* local_peer) {
|
struct Peerstore* libp2p_peerstore_new(const struct Libp2pPeer* local_peer) {
|
||||||
struct Peerstore* out = (struct Peerstore*)malloc(sizeof(struct Peerstore));
|
struct Peerstore* out = (struct Peerstore*)malloc(sizeof(struct Peerstore));
|
||||||
if (out != NULL) {
|
if (out != NULL) {
|
||||||
|
out->max_socket_fd = 0;
|
||||||
out->head_entry = NULL;
|
out->head_entry = NULL;
|
||||||
out->last_entry = NULL;
|
out->last_entry = NULL;
|
||||||
// now add this peer as the first entry
|
// now add this peer as the first entry
|
||||||
|
@ -138,6 +139,11 @@ int libp2p_peerstore_add_peer(struct Peerstore* peerstore, const struct Libp2pPe
|
||||||
if (peer_entry->peer == NULL)
|
if (peer_entry->peer == NULL)
|
||||||
return 0;
|
return 0;
|
||||||
retVal = libp2p_peerstore_add_peer_entry(peerstore, peer_entry);
|
retVal = libp2p_peerstore_add_peer_entry(peerstore, peer_entry);
|
||||||
|
// recalculate max_session_fd
|
||||||
|
if (peer->sessionContext != NULL && peer->sessionContext->default_stream != NULL) {
|
||||||
|
int sd = *((int*)peer->sessionContext->default_stream->socket_descriptor);
|
||||||
|
libp2p_peerstore_update_socket_fd(peerstore, sd);
|
||||||
|
}
|
||||||
libp2p_logger_debug("peerstore", "Adding peer %s to peerstore was a success\n", peer->id);
|
libp2p_logger_debug("peerstore", "Adding peer %s to peerstore was a success\n", peer->id);
|
||||||
}
|
}
|
||||||
return retVal;
|
return retVal;
|
||||||
|
@ -181,6 +187,35 @@ struct Libp2pPeer* libp2p_peerstore_get_peer(struct Peerstore* peerstore, const
|
||||||
return entry->peer;
|
return entry->peer;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***
|
||||||
|
* Look for a peer by id. If not found, add it to the peerstore
|
||||||
|
* @param peerstore the Peerstore
|
||||||
|
* @param peer_id the peer id
|
||||||
|
* @param peer_id_size the size of peer_id
|
||||||
|
* @returns a Peer struct, or NULL if error
|
||||||
|
*/
|
||||||
|
struct Libp2pPeer* libp2p_peerstore_get_or_add_peer_by_id(struct Peerstore* peerstore, const unsigned char* peer_id, size_t peer_id_size) {
|
||||||
|
if (peer_id_size == 0)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
struct PeerEntry* entry = libp2p_peerstore_get_peer_entry(peerstore, peer_id, peer_id_size);
|
||||||
|
if (entry == NULL) {
|
||||||
|
// add it
|
||||||
|
struct Libp2pPeer* temp_peer = libp2p_peer_new();
|
||||||
|
temp_peer->id_size = peer_id_size;
|
||||||
|
temp_peer->id = (char*)peer_id;
|
||||||
|
libp2p_peerstore_add_peer(peerstore, temp_peer);
|
||||||
|
libp2p_peer_free(temp_peer);
|
||||||
|
entry = libp2p_peerstore_get_peer_entry(peerstore, peer_id, peer_id_size);
|
||||||
|
}
|
||||||
|
if (entry == NULL)
|
||||||
|
return NULL;
|
||||||
|
return entry->peer;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Look for this peer in the peerstore. If it is found, return a reference to that object.
|
* Look for this peer in the peerstore. If it is found, return a reference to that object.
|
||||||
* If it is not found, add it, and return a reference to the new copy
|
* If it is not found, add it, and return a reference to the new copy
|
||||||
|
@ -198,3 +233,16 @@ struct Libp2pPeer* libp2p_peerstore_get_or_add_peer(struct Peerstore* peerstore,
|
||||||
|
|
||||||
return libp2p_peerstore_get_peer(peerstore, (unsigned char*)in->id, in->id_size);
|
return libp2p_peerstore_get_peer(peerstore, (unsigned char*)in->id, in->id_size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Update the max socket fd
|
||||||
|
* @param peerstore the Peerstore
|
||||||
|
* @param newVal the new val (will be added if > oldVal)
|
||||||
|
* @returns the latest peerstore->max_socket_fd
|
||||||
|
*/
|
||||||
|
int libp2p_peerstore_update_socket_fd(struct Peerstore* peerstore, int newVal) {
|
||||||
|
if (newVal > peerstore->max_socket_fd)
|
||||||
|
peerstore->max_socket_fd = newVal;
|
||||||
|
return peerstore->max_socket_fd;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue