diff --git a/quic.go b/quic.go deleted file mode 100644 index 300843e..0000000 --- a/quic.go +++ /dev/null @@ -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"}, - } -} diff --git a/sysinfodarwin.go b/sysinfodarwin.go deleted file mode 100644 index 3054fb8..0000000 --- a/sysinfodarwin.go +++ /dev/null @@ -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() { -} diff --git a/sysinfolinux.go b/sysinfolinux.go deleted file mode 100644 index 686b7c0..0000000 --- a/sysinfolinux.go +++ /dev/null @@ -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() { -} diff --git a/sysinfowin.go b/sysinfowin.go deleted file mode 100644 index c8c99c1..0000000 --- a/sysinfowin.go +++ /dev/null @@ -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() - } -}