get ports from tcp server

This commit is contained in:
Zack Scholl 2019-04-30 17:39:36 -06:00
parent 2c2c3f58ac
commit 4be02ad249
1 changed files with 15 additions and 5 deletions

View File

@ -278,6 +278,7 @@ func (c *Client) Send(options TransferOptions) (err error) {
c.conn[0] = conn c.conn[0] = conn
log.Debug("exchanged header message") log.Debug("exchanged header message")
c.Options.RelayAddress = "localhost" c.Options.RelayAddress = "localhost"
c.Options.RelayPorts = strings.Split(banner, ",")
errchan <- c.transfer(options) errchan <- c.transfer(options)
}() }()
} }
@ -300,6 +301,7 @@ func (c *Client) Send(options TransferOptions) (err error) {
} }
c.conn[0] = conn c.conn[0] = conn
c.Options.RelayPorts = strings.Split(banner, ",")
log.Debug("exchanged header message") log.Debug("exchanged header message")
errchan <- c.transfer(options) errchan <- c.transfer(options)
}() }()
@ -311,7 +313,6 @@ func (c *Client) Send(options TransferOptions) (err error) {
func (c *Client) Receive() (err error) { func (c *Client) Receive() (err error) {
// look for peers first // look for peers first
if !c.Options.DisableLocal { if !c.Options.DisableLocal {
discoveries, err := peerdiscovery.Discover(peerdiscovery.Settings{ discoveries, err := peerdiscovery.Discover(peerdiscovery.Settings{
Limit: 1, Limit: 1,
Payload: []byte("ok"), Payload: []byte("ok"),
@ -331,6 +332,7 @@ func (c *Client) Receive() (err error) {
} }
log.Debugf("connection established: %+v", c.conn[0]) log.Debugf("connection established: %+v", c.conn[0])
c.conn[0].Send([]byte("handshake")) c.conn[0].Send([]byte("handshake"))
c.Options.RelayPorts = strings.Split(banner, ",")
log.Debug("exchanged header message") log.Debug("exchanged header message")
return c.transfer(TransferOptions{}) return c.transfer(TransferOptions{})
} }
@ -404,22 +406,29 @@ func (c *Client) processMessage(payload []byte) (done bool, err error) {
} }
if c.Pake.IsVerified() { if c.Pake.IsVerified() {
if c.Options.IsSender { if c.Options.IsSender {
log.Debug("generating salt")
salt := make([]byte, 8) salt := make([]byte, 8)
rand.Read(salt) rand.Read(salt)
err = message.Send(c.conn[0], c.Key, message.Message{ err = message.Send(c.conn[0], c.Key, message.Message{
Type: "salt", Type: "salt",
Bytes: salt, Bytes: salt,
}) })
if err != nil {
return
}
} }
// connects to the other ports of the server for transfer // connects to the other ports of the server for transfer
var wg sync.WaitGroup var wg sync.WaitGroup
wg.Add(len(c.Options.RelayPorts)) wg.Add(len(c.Options.RelayPorts))
for i := 0; i < len(c.Options.RelayPorts); i++ { for i := 0; i < len(c.Options.RelayPorts); i++ {
log.Debugf("port: [%s]", c.Options.RelayPorts[i])
go func(j int) { go func(j int) {
defer wg.Done() defer wg.Done()
c.conn[j], _, err = tcp.ConnectToTCPServer( server := fmt.Sprintf("%s:%s", strings.Split(c.Options.RelayAddress, ":")[0], c.Options.RelayPorts[j])
fmt.Sprintf("%s:%s", c.Options.RelayAddress, c.Options.RelayPorts[j]), log.Debugf("connecting to %s", server)
c.conn[j+1], _, err = tcp.ConnectToTCPServer(
server,
fmt.Sprintf("%s-%d", utils.SHA256(c.Options.SharedSecret)[:7], j), fmt.Sprintf("%s-%d", utils.SHA256(c.Options.SharedSecret)[:7], j),
) )
if err != nil { if err != nil {
@ -433,6 +442,7 @@ func (c *Client) processMessage(payload []byte) (done bool, err error) {
wg.Wait() wg.Wait()
} }
case "salt": case "salt":
log.Debug("received salt")
if !c.Options.IsSender { if !c.Options.IsSender {
err = message.Send(c.conn[0], c.Key, message.Message{ err = message.Send(c.conn[0], c.Key, message.Message{
Type: "salt", Type: "salt",
@ -668,7 +678,7 @@ func (c *Client) setBar() {
func (c *Client) receiveData(i int) { func (c *Client) receiveData(i int) {
for { for {
log.Debug("waiting for data") log.Debug("waiting for data")
data, err := c.conn[i].Receive() data, err := c.conn[i+1].Receive()
if err != nil { if err != nil {
break break
} }
@ -768,7 +778,7 @@ func (c *Client) sendData(i int) {
panic(err) panic(err)
} }
err = c.conn[i].Send(dataToSend) err = c.conn[i+1].Send(dataToSend)
if err != nil { if err != nil {
panic(err) panic(err)
} }