/*
GoVPN -- simple secure free software virtual private network daemon
-Copyright (C) 2014-2016 Sergey Matveev <stargrave@stargrave.org>
+Copyright (C) 2014-2018 Sergey Matveev <stargrave@stargrave.org>
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
"encoding/json"
"log"
"net"
+ "sync"
"time"
)
RWTimeout = 10 * time.Second
)
-type KnownPeers map[string]**Peer
-
// StatsProcessor is assumed to be run in background. It accepts
// connection on statsPort, reads anything one send to them and show
// information about known peers in serialized JSON format. peers
// argument is a reference to the map with references to the peers as
// values. Map is used here because of ease of adding and removing
// elements in it.
-func StatsProcessor(statsPort net.Listener, peers *KnownPeers) {
+func StatsProcessor(statsPort net.Listener, peers *sync.Map) {
var conn net.Conn
var err error
var data []byte
conn.Read(buf)
conn.Write([]byte("HTTP/1.0 200 OK\r\nContent-Type: application/json\r\n\r\n"))
var peersList []*Peer
- for _, peer := range *peers {
- peersList = append(peersList, *peer)
- }
+ peers.Range(func(_, peerI interface{}) bool {
+ peersList = append(peersList, *peerI.(**Peer))
+ return true
+ })
data, err = json.Marshal(peersList)
if err != nil {
panic(err)