Skip to content
This repository has been archived by the owner on Apr 26, 2024. It is now read-only.

Commit

Permalink
Add generic relayer interface
Browse files Browse the repository at this point in the history
  • Loading branch information
bzEq committed Apr 26, 2024
1 parent 5b22507 commit b8cce0c
Showing 1 changed file with 47 additions and 0 deletions.
47 changes: 47 additions & 0 deletions relayer/relayer.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
// Copyright (c) 2024 Kai Luo <[email protected]>. All rights reserved.

package relayer

import (
"log"
"net"

"github.com/bzEq/bx/core"
)

type Options struct {
LocalAddr string
NextHops []string
}

type Relayer struct {
fe Frontend
be Backend
}

type Frontend interface {
Accept() (core.Port, net.Addr, error)
}

type Backend interface {
Dial(addr net.Addr) (core.Port, error)
}

func (self *Relayer) Relay() error {
for {
fp, addr, err := self.fe.Accept()
if err != nil {
return err
}
go func(fp core.Port, addr net.Addr) {
defer fp.Close()
bp, err := self.be.Dial(addr)
if err != nil {
log.Println(err)
return
}
defer bp.Close()
core.RunSimpleSwitch(fp, bp)
}(fp, addr)
}
}

0 comments on commit b8cce0c

Please sign in to comment.