rm rename
This commit is contained in:
@@ -1,151 +0,0 @@
|
|||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"context"
|
|
||||||
"crypto/rand"
|
|
||||||
"crypto/rsa"
|
|
||||||
"crypto/tls"
|
|
||||||
"crypto/x509"
|
|
||||||
"encoding/json"
|
|
||||||
"encoding/pem"
|
|
||||||
"fmt"
|
|
||||||
"io"
|
|
||||||
"math/big"
|
|
||||||
"net"
|
|
||||||
"sync"
|
|
||||||
"time"
|
|
||||||
|
|
||||||
"github.com/lucas-clemente/quic-go"
|
|
||||||
)
|
|
||||||
|
|
||||||
//quic.DialContext do not support version 44,disable it
|
|
||||||
var quicVersion []quic.VersionNumber
|
|
||||||
|
|
||||||
type quicConn struct {
|
|
||||||
listener quic.Listener
|
|
||||||
writeMtx *sync.Mutex
|
|
||||||
quic.Stream
|
|
||||||
quic.Session
|
|
||||||
}
|
|
||||||
|
|
||||||
func (conn *quicConn) ReadMessage() (*openP2PHeader, []byte, error) {
|
|
||||||
headBuf := make([]byte, openP2PHeaderSize)
|
|
||||||
_, err := io.ReadFull(conn, headBuf)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
head, err := decodeHeader(headBuf)
|
|
||||||
if err != nil {
|
|
||||||
return nil, nil, err
|
|
||||||
}
|
|
||||||
dataBuf := make([]byte, head.DataLen)
|
|
||||||
_, err = io.ReadFull(conn, dataBuf)
|
|
||||||
return head, dataBuf, err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (conn *quicConn) WriteBytes(mainType uint16, subType uint16, data []byte) error {
|
|
||||||
writeBytes := append(encodeHeader(mainType, subType, uint32(len(data))), data...)
|
|
||||||
conn.writeMtx.Lock()
|
|
||||||
_, err := conn.Write(writeBytes)
|
|
||||||
conn.writeMtx.Unlock()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (conn *quicConn) WriteBuffer(data []byte) error {
|
|
||||||
conn.writeMtx.Lock()
|
|
||||||
_, err := conn.Write(data)
|
|
||||||
conn.writeMtx.Unlock()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (conn *quicConn) WriteMessage(mainType uint16, subType uint16, packet interface{}) error {
|
|
||||||
// TODO: call newMessage
|
|
||||||
data, err := json.Marshal(packet)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
writeBytes := append(encodeHeader(mainType, subType, uint32(len(data))), data...)
|
|
||||||
conn.writeMtx.Lock()
|
|
||||||
_, err = conn.Write(writeBytes)
|
|
||||||
conn.writeMtx.Unlock()
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
|
|
||||||
func (conn *quicConn) Close() error {
|
|
||||||
conn.Stream.CancelRead(1)
|
|
||||||
conn.Session.CloseWithError(0, "")
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
func (conn *quicConn) CloseListener() {
|
|
||||||
if conn.listener != nil {
|
|
||||||
conn.listener.Close()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
func (conn *quicConn) Accept() error {
|
|
||||||
ctx, cancel := context.WithTimeout(context.Background(), time.Second*10)
|
|
||||||
defer cancel()
|
|
||||||
sess, err := conn.listener.Accept(ctx)
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
stream, err := sess.AcceptStream(context.Background())
|
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
conn.Stream = stream
|
|
||||||
conn.Session = sess
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func listenQuic(addr string, idleTimeout time.Duration) (*quicConn, error) {
|
|
||||||
gLog.Println(LevelDEBUG, "quic listen on ", addr)
|
|
||||||
listener, err := quic.ListenAddr(addr, generateTLSConfig(),
|
|
||||||
&quic.Config{Versions: quicVersion, MaxIdleTimeout: idleTimeout, DisablePathMTUDiscovery: true})
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("quic.ListenAddr error:%s", err)
|
|
||||||
}
|
|
||||||
return &quicConn{listener: listener, writeMtx: &sync.Mutex{}}, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func dialQuic(conn *net.UDPConn, remoteAddr *net.UDPAddr, idleTimeout time.Duration) (*quicConn, error) {
|
|
||||||
tlsConf := &tls.Config{
|
|
||||||
InsecureSkipVerify: true,
|
|
||||||
NextProtos: []string{"openp2pv1"},
|
|
||||||
}
|
|
||||||
session, err := quic.DialContext(context.Background(), conn, remoteAddr, conn.LocalAddr().String(), tlsConf,
|
|
||||||
&quic.Config{Versions: quicVersion, MaxIdleTimeout: idleTimeout, DisablePathMTUDiscovery: true})
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("quic.DialContext error:%s", err)
|
|
||||||
}
|
|
||||||
stream, err := session.OpenStreamSync(context.Background())
|
|
||||||
if err != nil {
|
|
||||||
return nil, fmt.Errorf("OpenStreamSync error:%s", err)
|
|
||||||
}
|
|
||||||
qConn := &quicConn{nil, &sync.Mutex{}, stream, session}
|
|
||||||
return qConn, nil
|
|
||||||
}
|
|
||||||
|
|
||||||
// Setup a bare-bones TLS config for the server
|
|
||||||
func generateTLSConfig() *tls.Config {
|
|
||||||
key, err := rsa.GenerateKey(rand.Reader, 1024)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
template := x509.Certificate{SerialNumber: big.NewInt(1)}
|
|
||||||
certDER, err := x509.CreateCertificate(rand.Reader, &template, &template, &key.PublicKey, key)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
keyPEM := pem.EncodeToMemory(&pem.Block{Type: "RSA PRIVATE KEY", Bytes: x509.MarshalPKCS1PrivateKey(key)})
|
|
||||||
certPEM := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: certDER})
|
|
||||||
|
|
||||||
tlsCert, err := tls.X509KeyPair(certPEM, keyPEM)
|
|
||||||
if err != nil {
|
|
||||||
panic(err)
|
|
||||||
}
|
|
||||||
return &tls.Config{
|
|
||||||
Certificates: []tls.Certificate{tlsCert},
|
|
||||||
NextProtos: []string{"openp2pv1"},
|
|
||||||
}
|
|
||||||
}
|
|
||||||
@@ -1,35 +0,0 @@
|
|||||||
//go:build darwin
|
|
||||||
// +build darwin
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"strings"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
defaultInstallPath = "/usr/local/openp2p"
|
|
||||||
defaultBinName = "openp2p"
|
|
||||||
)
|
|
||||||
|
|
||||||
func getOsName() (osName string) {
|
|
||||||
output := execOutput("sw_vers", "-productVersion")
|
|
||||||
osName = "Mac OS X " + strings.TrimSpace(output)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func setRLimit() error {
|
|
||||||
var limit syscall.Rlimit
|
|
||||||
if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
limit.Cur = 10240
|
|
||||||
if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setFirewall() {
|
|
||||||
}
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
//go:build linux
|
|
||||||
// +build linux
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"bufio"
|
|
||||||
"bytes"
|
|
||||||
"io/ioutil"
|
|
||||||
"os"
|
|
||||||
"strings"
|
|
||||||
"syscall"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
defaultInstallPath = "/usr/local/openp2p"
|
|
||||||
defaultBinName = "openp2p"
|
|
||||||
)
|
|
||||||
|
|
||||||
func getOsName() (osName string) {
|
|
||||||
var sysnamePath string
|
|
||||||
sysnamePath = "/etc/redhat-release"
|
|
||||||
_, err := os.Stat(sysnamePath)
|
|
||||||
if err != nil && os.IsNotExist(err) {
|
|
||||||
str := "PRETTY_NAME="
|
|
||||||
f, err := os.Open("/etc/os-release")
|
|
||||||
if err != nil && os.IsNotExist(err) {
|
|
||||||
str = "DISTRIB_ID="
|
|
||||||
f, err = os.Open("/etc/openwrt_release")
|
|
||||||
}
|
|
||||||
if err == nil {
|
|
||||||
buf := bufio.NewReader(f)
|
|
||||||
for {
|
|
||||||
line, err := buf.ReadString('\n')
|
|
||||||
if err == nil {
|
|
||||||
line = strings.TrimSpace(line)
|
|
||||||
pos := strings.Count(line, str)
|
|
||||||
if pos > 0 {
|
|
||||||
len1 := len([]rune(str)) + 1
|
|
||||||
rs := []rune(line)
|
|
||||||
osName = string(rs[len1 : (len(rs))-1])
|
|
||||||
break
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
break
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
buff, err := ioutil.ReadFile(sysnamePath)
|
|
||||||
if err == nil {
|
|
||||||
osName = string(bytes.TrimSpace(buff))
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if osName == "" {
|
|
||||||
osName = "Linux"
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func setRLimit() error {
|
|
||||||
var limit syscall.Rlimit
|
|
||||||
if err := syscall.Getrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
limit.Max = 1024 * 1024
|
|
||||||
limit.Cur = limit.Max
|
|
||||||
if err := syscall.Setrlimit(syscall.RLIMIT_NOFILE, &limit); err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setFirewall() {
|
|
||||||
}
|
|
||||||
@@ -1,56 +0,0 @@
|
|||||||
//go:build windows
|
|
||||||
// +build windows
|
|
||||||
|
|
||||||
package main
|
|
||||||
|
|
||||||
import (
|
|
||||||
"fmt"
|
|
||||||
"os"
|
|
||||||
"os/exec"
|
|
||||||
"path/filepath"
|
|
||||||
"strings"
|
|
||||||
|
|
||||||
"golang.org/x/sys/windows/registry"
|
|
||||||
)
|
|
||||||
|
|
||||||
const (
|
|
||||||
defaultInstallPath = "C:\\Program Files\\OpenP2P"
|
|
||||||
defaultBinName = "openp2p.exe"
|
|
||||||
)
|
|
||||||
|
|
||||||
func getOsName() (osName string) {
|
|
||||||
k, err := registry.OpenKey(registry.LOCAL_MACHINE, `SOFTWARE\Microsoft\Windows NT\CurrentVersion`, registry.QUERY_VALUE|registry.WOW64_64KEY)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
defer k.Close()
|
|
||||||
pn, _, err := k.GetStringValue("ProductName")
|
|
||||||
if err == nil {
|
|
||||||
osName = pn
|
|
||||||
}
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
func setRLimit() error {
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
|
|
||||||
func setFirewall() {
|
|
||||||
fullPath, err := filepath.Abs(os.Args[0])
|
|
||||||
if err != nil {
|
|
||||||
gLog.Println(LevelERROR, "add firewall error:", err)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
isXP := false
|
|
||||||
osName := getOsName()
|
|
||||||
if strings.Contains(osName, "XP") || strings.Contains(osName, "2003") {
|
|
||||||
isXP = true
|
|
||||||
}
|
|
||||||
if isXP {
|
|
||||||
exec.Command("cmd.exe", `/c`, fmt.Sprintf(`netsh firewall del allowedprogram "%s"`, fullPath)).Run()
|
|
||||||
exec.Command("cmd.exe", `/c`, fmt.Sprintf(`netsh firewall add allowedprogram "%s" "%s" ENABLE`, ProducnName, fullPath)).Run()
|
|
||||||
} else { // win7 or later
|
|
||||||
exec.Command("cmd.exe", `/c`, fmt.Sprintf(`netsh advfirewall firewall del rule name="%s"`, ProducnName)).Run()
|
|
||||||
exec.Command("cmd.exe", `/c`, fmt.Sprintf(`netsh advfirewall firewall add rule name="%s" dir=in action=allow program="%s" enable=yes`, ProducnName, fullPath)).Run()
|
|
||||||
}
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user