peers propagation working fine, started to implement serverCA

This commit is contained in:
arnaucode
2017-11-26 12:25:28 +01:00
parent d9f2bca34c
commit f56763d48e
30 changed files with 1123 additions and 26 deletions

View File

@@ -70,3 +70,4 @@ Needs the config.json file:
- endpoint to get if the address is in the blockchain (to verify users)
- parameters Date or LastUpdate on the structs needs to be updated values
- implement rsa encryption between peers
- store blockchain in a .data file

View File

@@ -26,15 +26,6 @@ func acceptPeers(peer Peer) {
newPeer.IP = getIPFromConn(conn)
newPeer.Port = getPortFromConn(conn)
newPeer.Conn = conn
/*
//ask to the peer, for the peer ID
resp, err := http.Get("http://" + newPeer.IP + ":" + newPeer.Port)
check(err)
color.Red("-----")
fmt.Println(resp)
//newPeer.ID = resp
*/
//incomingPeersList.Peers = append(incomingPeersList.Peers, newPeer)
incomingPeersList = appendPeerIfNoExist(incomingPeersList, newPeer)
go handleConn(conn, newPeer)
}
@@ -48,7 +39,6 @@ func connectToPeer(peer Peer) {
return
}
peer.Conn = conn
//outcomingPeersList.Peers = append(outcomingPeersList.Peers, peer)
outcomingPeersList = appendPeerIfNoExist(outcomingPeersList, peer)
go handleConn(conn, peer)
}
@@ -73,12 +63,7 @@ func handleConn(conn net.Conn, connPeer Peer) {
log.Println(err)
connRunning = false
} else {
/*
fmt.Println(buffer)
fmt.Println(bytesRead)
*/
var msg Msg
//color.Blue(string(buffer[0:bytesRead]))
//msg = msg.createFromBytes([]byte(string(buffer[0:bytesRead])))
msg = msg.createFromBytes([]byte(newmsg))
messageHandler(connPeer, msg)
@@ -87,7 +72,7 @@ func handleConn(conn net.Conn, connPeer Peer) {
//TODO add that if the peer closed is the p2p server, show a warning message at the peer
log.Println("Peer: " + conn.RemoteAddr().String() + " connection closed")
conn.Close()
//TODO delete the peer from the outcomingPeersList
//TODO delete the peer from the outcomingPeersList --> DONE
deletePeerFromPeersList(connPeer, &outcomingPeersList)
color.Yellow("peer deleted, current peerList:")
printPeersList()

View File

@@ -39,8 +39,7 @@ func main() {
runningPeer.ID = hashPeer(runningPeer)
runningPeer.Role = "client"
go runRestServer()
//TODO clean and reorder the following lines (43 to 62)
//read flags, to know if is runned as p2p server
if len(os.Args) > 1 {
if os.Args[1] == "server" {
@@ -50,7 +49,19 @@ func main() {
runningPeer.ID = hashPeer(runningPeer)
//runningPeer.ID = "0"
}
if len(os.Args) > 3 {
config.Port = os.Args[2]
config.RESTPort = os.Args[3]
runningPeer.Port = os.Args[2]
runningPeer.RESTPort = os.Args[3]
if os.Args[1] == "server" {
runningPeer.Port = config.ServerPort
}
runningPeer.ID = hashPeer(runningPeer)
}
}
go runRestServer()
thisPeerID = runningPeer.ID
outcomingPeersList.PeerID = runningPeer.ID
fmt.Println(runningPeer)
@@ -67,9 +78,9 @@ func main() {
serverPeer.Port = config.ServerPort
serverPeer.ID = hashPeer(serverPeer)
serverPeer.Role = "server"
go acceptPeers(runningPeer)
connectToPeer(serverPeer)
reconstructBlockchainFromBlock("http://"+config.IP+":"+config.ServerRESTPort, blockchain.GenesisBlock)
go acceptPeers(runningPeer)
}
for running {

View File

@@ -30,21 +30,24 @@ func messageHandler(peer Peer, msg Msg) {
case "PeersList":
color.Blue("newPeerslist")
fmt.Println(msg.PeersList)
color.Red("PeersList")
//time.Sleep(1000 * time.Millisecond)
updateNetworkPeersList(peer.Conn, msg.PeersList)
propagatePeersList(peer)
printPeersList()
break
case "PeersList_Response":
color.Blue("newPeerslist")
//for the moment is not beeing used
color.Blue("newPeerslist, from PeersList_Response")
fmt.Println(msg.PeersList)
color.Red("PeersList_Response")
//time.Sleep(1000 * time.Millisecond)
updateNetworkPeersList(peer.Conn, msg.PeersList)
propagatePeersList(peer)
printPeersList()
break
case "Block":
//TODO check if the block is signed by an autorized emitter
if !blockchain.blockExists(msg.Block) {
blockchain.addBlock(msg.Block)
propagateBlock(msg.Block)

BIN
peer/peer

Binary file not shown.

View File

@@ -23,6 +23,7 @@ a future option is to put:
type PeersList struct {
Incoming PeersList
Outcoming PeersList
Network PeersList
}
*/
@@ -75,7 +76,7 @@ func searchPeerAndUpdate(p Peer) {
}
}
//send the outcomingPeersList to all the peers except the peer that has send the outcomingPeersList
//send the outcomingPeersList to all the peers except the peer p that has send the outcomingPeersList
func propagatePeersList(p Peer) {
for _, peer := range networkPeersList.Peers {
if peer.Conn != nil {
@@ -88,7 +89,16 @@ func propagatePeersList(p Peer) {
_, err := peer.Conn.Write(msgB)
check(err)
} else {
/*
for the moment, this is not being called, due that in the IncomingPeersList,
there is no peer.ID, so in the comparation wih the peer that has send the
peersList, is comparing ID with "", so nevere enters this 'else' section
maybe it's not needed. TODO check if it's needed the PeerList_Response
For the moment is working without it
*/
//to the peer that has sent the peerList, we send our PeersList
var msg Msg
msg.construct("PeersList_Response", "here my outcomingPeersList")
msg.PeersList = outcomingPeersList
@@ -100,6 +110,7 @@ func propagatePeersList(p Peer) {
//connect to peer
if peer.ID != p.ID && peer.ID != runningPeer.ID {
if peerIsInPeersList(peer, outcomingPeersList.Peers) == -1 {
color.Red("no connection, connecting to peer: " + peer.Port)
connectToPeer(peer)
}
}

View File

@@ -31,9 +31,6 @@ func randInt(min int, max int) int {
return r
}
func hashPeer(p Peer) string {
/*peerJson, err := json.Marshal(p)
check(err)
peerString := string(peerJson)*/
peerString := p.IP + ":" + p.Port
h := sha256.New()