Implemented allocation and release of identify structure.

This commit is contained in:
Jose Marcial Vieira Bisneto 2017-11-09 22:57:11 -03:00
parent c137aa04fe
commit 5291cb7a9a
No known key found for this signature in database
GPG key ID: 103E935E7E6E831E
2 changed files with 53 additions and 0 deletions

View file

@ -73,6 +73,54 @@ int libp2p_identify_receive_protocol(struct Stream* stream) {
return 1; return 1;
} }
/**
* Create a Identify struct
* @returns the newly allocated record struct
*/
Identify* libp2p_identify_new() {
Identify* out = (Identify*)malloc(sizeof(Identify));
if (out != NULL) {
out->PublicKey = NULL;
out->ListenAddrs = NULL;
out->Protocols = NULL;
out->ObservedAddr = NULL;
out->ProtocolVersion = IDENTIFY_PROTOCOL_VERSION;
out->AgentVersion = IDENTIFY_AGENT_VERSION;
out->XXX_unrecognized = NULL;
}
return out;
}
/**
* Free the resources from a identify struct
* @param in the struct to free
*/
void libp2p_identify_free(Identify* in) {
int i;
if (in != NULL) {
if (in->PublicKey != NULL)
free(in->PublicKey);
if (in->ListenAddrs != NULL) {
// free every item
for (i = 0 ; in->ListenAddrs[i] ; i++)
free(in->ListenAddrs[i]);
// free array
free(in->ListenAddrs);
}
if (in->Protocols != NULL) {
for (i = 0 ; in->Protocols[i] ; i++)
free(in->Protocols[i]);
free(in->Protocols);
}
if (in->ObservedAddr != NULL)
free(in->ObservedAddr);
if (in->XXX_unrecognized != NULL)
free(in->XXX_unrecognized);
free(in);
}
}
/** /**
* A remote node is attempting to send us an Identify message * A remote node is attempting to send us an Identify message
* @param msg the message sent * @param msg the message sent

View file

@ -2,6 +2,9 @@
#include "libp2p/utils/vector.h" #include "libp2p/utils/vector.h"
#define IDENTIFY_PROTOCOL_VERSION "ipfs/0.1.0"
#define IDENTIFY_AGENT_VERSION "c-ipfs/1.0"
typedef struct { typedef struct {
// publicKey is this node's public key (which also gives its node.ID) // publicKey is this node's public key (which also gives its node.ID)
// - may not need to be sent, as secure channel implies it has been sent. // - may not need to be sent, as secure channel implies it has been sent.
@ -31,6 +34,8 @@ struct IdentifyContext {
int libp2p_identify_can_handle(const struct StreamMessage* msg); int libp2p_identify_can_handle(const struct StreamMessage* msg);
int libp2p_identify_send_protocol(struct Stream* stream); int libp2p_identify_send_protocol(struct Stream* stream);
int libp2p_identify_receive_protocol(struct Stream* stream); int libp2p_identify_receive_protocol(struct Stream* stream);
Identify* libp2p_identify_new();
void libp2p_identify_free(Identify* in);
int libp2p_identify_handle_message(const struct StreamMessage* msg, struct Stream* stream, void* protocol_context); int libp2p_identify_handle_message(const struct StreamMessage* msg, struct Stream* stream, void* protocol_context);
int libp2p_identify_shutdown(void* protocol_context); int libp2p_identify_shutdown(void* protocol_context);
struct Libp2pProtocolHandler* libp2p_identify_build_protocol_handler(struct Libp2pVector* handlers); struct Libp2pProtocolHandler* libp2p_identify_build_protocol_handler(struct Libp2pVector* handlers);