Fixed bug with strtok

This commit is contained in:
Balazs Toldi 2019-11-28 09:58:38 +01:00
parent 66b2c5d47f
commit 937ecf249b
3 changed files with 22 additions and 3 deletions

View file

@ -9,6 +9,7 @@
int peer_ConnetctTo(char *ip, int port, PeerList *peerList, Node_data my, fd_set *fdSet) {
if(strcmp(ip,"0.0.0.0") == 0)
return 0;
struct sockaddr_in hint;
hint.sin_family = AF_INET;
hint.sin_port = htons(port);
@ -55,7 +56,12 @@ int peer_ConnetctTo(char *ip, int port, PeerList *peerList, Node_data my, fd_set
closesocket(sock);
return -1;
}
Map m = getPacketData(buf);
if(m.pairs == NULL){
free(m.pairs);
return -1;
}
Node_data node;
strcpy(node.ip, ip);
@ -63,6 +69,7 @@ int peer_ConnetctTo(char *ip, int port, PeerList *peerList, Node_data my, fd_set
char error[129];
sprintf(error, "Peer closed connection! Error: %s\n", map_getValue(m, "error"));
logger_log(error);
free(m.pairs);
closesocket(sock);
return -1;
}
@ -73,6 +80,7 @@ int peer_ConnetctTo(char *ip, int port, PeerList *peerList, Node_data my, fd_set
} else {
logger_log("Error: Invalid response!ID not found in handshake.");
sendErrorMSG("ID_NOT_FOUND",sock);
free(m.pairs);
closesocket(sock);
return -1;
}
@ -82,6 +90,7 @@ int peer_ConnetctTo(char *ip, int port, PeerList *peerList, Node_data my, fd_set
} else {
logger_log("Error: Invalid response!Port not found in handshake.");
sendErrorMSG("PORT_NOT_FOUND",sock);
free(m.pairs);
closesocket(sock);
return -1;
}
@ -99,18 +108,20 @@ int peer_ConnetctTo(char *ip, int port, PeerList *peerList, Node_data my, fd_set
peer_addTolist(peerList, p);
char *peers = map_getValue(m, "peers");
char *rest = peers;
if (peers != NULL) {
char *tmp = strtok(peers, ",");
while (tmp != NULL) {
char ip1[NI_MAXHOST];
int port1;
if (sscanf(tmp, "%[^:]:%d", ip1, &port1) != 2) {
tmp = strtok(NULL, ",");
tmp = strtok_s(NULL, ",",&rest);
continue;
}
if (!peer_IP_isFound(*peerList, ip1, port1))
if (!peer_IP_isFound(*peerList, ip, port))
peer_ConnetctTo(ip1, port1, peerList, my, fdSet);
tmp = strtok(NULL, ",");
tmp = strtok_s(NULL, ",",&rest);
}
}
free(m.pairs);
@ -160,6 +171,7 @@ int peer_HandleConnection(SOCKET listening, PeerList *peerList, Node_data my, fd
} else {
logger_log("Error: Invalid response!ID not found in handshake.");
sendErrorMSG("ID_NOT_FOUND", sock);
free(m.pairs);
closesocket(sock);
return -1;
}
@ -170,6 +182,7 @@ int peer_HandleConnection(SOCKET listening, PeerList *peerList, Node_data my, fd
} else {
logger_log("Error: Invalid response!Port not found in handshake.");
sendErrorMSG("PORT_NOT_FOUND", sock);
free(m.pairs);
closesocket(sock);
return -1;
}
@ -180,6 +193,7 @@ int peer_HandleConnection(SOCKET listening, PeerList *peerList, Node_data my, fd
if (peer_ID_isFound(*peerList, node.id)) {
logger_log("Handshake received, but the id sent is taken! Dropping peer...");
sendErrorMSG("ID_TAKEN", sock);
free(m.pairs);
closesocket(sock);
return -1;
}

View file

@ -34,5 +34,6 @@ Node_data construct_Mynodedata(Config cfg);
* @param[in] webIo A felhasználói felület adatstruktúrája
* @param[in] list A peerek listája
* @param[in] mynode Az az adatstruktúra amiben a saját adatainkat tároljuk
* @param[in,out] run Logikai érték pointere ami meghatározza hogy a ciklus fusson-e.
*/
void serverThread(SOCKET listening, fd_set* master, WebIO webIo, PeerList *list,Node_data mynode,bool* run);

View file

@ -16,6 +16,10 @@
#include <assert.h>
#include "lib/debugmalloc/debugmalloc.h"
#ifndef _WIN32
#define strtok_s(S,T,R) strtok_r(S,T,R)
#endif
//! (MAXIMUM) Ekkora mérető csomagokat küld el a program alapértelmezetten.
#define DEFAULT_BUFLEN 4096
/*!