mirror of
https://github.com/schollz/croc.git
synced 2024-11-24 16:23:47 +03:00
add peer discovery
This commit is contained in:
parent
aa0c5acc60
commit
f7c22067d4
38
src/api.go
38
src/api.go
@ -1,5 +1,13 @@
|
|||||||
package croc
|
package croc
|
||||||
|
|
||||||
|
import (
|
||||||
|
"net"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
log "github.com/cihub/seelog"
|
||||||
|
"github.com/schollz/peerdiscovery"
|
||||||
|
)
|
||||||
|
|
||||||
func init() {
|
func init() {
|
||||||
SetLogLevel("debug")
|
SetLogLevel("debug")
|
||||||
}
|
}
|
||||||
@ -15,10 +23,40 @@ func (c *Croc) Relay() error {
|
|||||||
|
|
||||||
// Send will take an existing file or folder and send it through the croc relay
|
// Send will take an existing file or folder and send it through the croc relay
|
||||||
func (c *Croc) Send(fname string, codephrase string) (err error) {
|
func (c *Croc) Send(fname string, codephrase string) (err error) {
|
||||||
|
// start relay for listening
|
||||||
|
c.TcpPorts = []string{"27140,27141"}
|
||||||
|
c.ServerPort = "8140"
|
||||||
|
go c.Relay()
|
||||||
|
|
||||||
|
// start client
|
||||||
return c.client(0, codephrase, fname)
|
return c.client(0, codephrase, fname)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Receive will receive something through the croc relay
|
// Receive will receive something through the croc relay
|
||||||
func (c *Croc) Receive(codephrase string) (err error) {
|
func (c *Croc) Receive(codephrase string) (err error) {
|
||||||
|
// try to discovery codephrase and server through peer network
|
||||||
|
discovered, errDiscover := peerdiscovery.Discover(peerdiscovery.Settings{
|
||||||
|
Limit: 1,
|
||||||
|
TimeLimit: 1 * time.Second,
|
||||||
|
Delay: 50 * time.Millisecond,
|
||||||
|
Payload: []byte(codephrase),
|
||||||
|
})
|
||||||
|
if errDiscover != nil {
|
||||||
|
log.Debug(errDiscover)
|
||||||
|
}
|
||||||
|
if len(discovered) > 0 {
|
||||||
|
log.Debugf("discovered %s on %s", discovered[0].Payload, discovered[0].Address)
|
||||||
|
_, connectTimeout := net.DialTimeout("tcp", discovered[0].Address+":27001", 1*time.Second)
|
||||||
|
if connectTimeout == nil {
|
||||||
|
log.Debug("connected")
|
||||||
|
c.WebsocketAddress = "ws://" + discovered[0].Address + ":8140"
|
||||||
|
log.Debug(discovered[0].Address)
|
||||||
|
codephrase = string(discovered[0].Payload)
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
log.Debug("discovered no peers")
|
||||||
|
}
|
||||||
|
|
||||||
return c.client(1, codephrase)
|
return c.client(1, codephrase)
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@ import (
|
|||||||
"github.com/gorilla/websocket"
|
"github.com/gorilla/websocket"
|
||||||
"github.com/pkg/errors"
|
"github.com/pkg/errors"
|
||||||
"github.com/schollz/croc/src/pake"
|
"github.com/schollz/croc/src/pake"
|
||||||
|
"github.com/schollz/peerdiscovery"
|
||||||
"github.com/schollz/progressbar"
|
"github.com/schollz/progressbar"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -61,6 +62,17 @@ func (c *Croc) client(role int, codePhrase string, fname ...string) (err error)
|
|||||||
c.cs.Unlock()
|
c.cs.Unlock()
|
||||||
|
|
||||||
if role == 0 {
|
if role == 0 {
|
||||||
|
// start peer discovery
|
||||||
|
go func() {
|
||||||
|
log.Debug("listening for local croc relay...")
|
||||||
|
go peerdiscovery.Discover(peerdiscovery.Settings{
|
||||||
|
Limit: 1,
|
||||||
|
TimeLimit: 600 * time.Second,
|
||||||
|
Delay: 50 * time.Millisecond,
|
||||||
|
Payload: []byte(codePhrase),
|
||||||
|
})
|
||||||
|
}()
|
||||||
|
|
||||||
if len(fname) == 0 {
|
if len(fname) == 0 {
|
||||||
err = errors.New("must include filename")
|
err = errors.New("must include filename")
|
||||||
return
|
return
|
||||||
|
Loading…
Reference in New Issue
Block a user