Skip to content

Commit

Permalink
vray
Browse files Browse the repository at this point in the history
  • Loading branch information
DarienRaymond committed Sep 9, 2015
1 parent f09d65b commit 1c618e9
Show file tree
Hide file tree
Showing 4 changed files with 67 additions and 17 deletions.
11 changes: 7 additions & 4 deletions net/freedom/freedom.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ package tcp
import (
"io"
"net"

"github.com/v2ray/v2ray-core"
)

type VFreeConnection struct {
Expand All @@ -17,18 +19,19 @@ func NewVFreeConnection(network string, address string) *VFreeConnection {
return conn
}

func (vconn *VFreeConnection) Start(input <-chan []byte) chan<- []byte {
output := make(chan []byte, 128)
func (vconn *VFreeConnection) Start(vRay core.OutboundVRay) error {
input := vRay.OutboundInput()
output := vRay.OutboundOutput()
conn, err := net.Dial(vconn.network, vconn.address)
if err != nil {
panic(err)
return err
}

finish := make(chan bool, 2)
go vconn.DumpInput(conn, input, finish)
go vconn.DumpOutput(conn, output, finish)
go vconn.CloseConn(conn, finish)
return output
return nil
}

func (vconn *VFreeConnection) DumpInput(conn net.Conn, input <-chan []byte, finish chan<- bool) {
Expand Down
25 changes: 21 additions & 4 deletions vpoint.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@ import (

// VPoint is an single server in V2Ray system.
type VPoint struct {
config VConfig
connHandler ConnectionHandler
config VConfig
ichFactory InboundConnectionHandlerFactory
ochFactory OutboundConnectionHandlerFactory
}

// NewVPoint returns a new VPoint server based on given configuration.
Expand All @@ -18,16 +19,32 @@ func NewVPoint(config *VConfig) (*VPoint, error) {
return vpoint, nil
}

type ConnectionHandler interface {
type InboundConnectionHandlerFactory interface {
Create(vPoint *VPoint) (InboundConnectionHandler, error)
}

type InboundConnectionHandler interface {
Listen(port uint16) error
}

type OutboundConnectionHandlerFactory interface {
Create(vPoint *VPoint) (OutboundConnectionHandler, error)
}

type OutboundConnectionHandler interface {
Start(vray *OutboundVRay) error
}

// Start starts the VPoint server, and return any error during the process.
// In the case of any errors, the state of the server is unpredicatable.
func (vp *VPoint) Start() error {
if vp.config.Port <= 0 {
return fmt.Errorf("Invalid port %d", vp.config.Port)
}
vp.connHandler.Listen(vp.config.Port)
inboundConnectionHandler, err := vp.ichFactory.Create(vp)
if err != nil {
return err
}
err = inboundConnectionHandler.Listen(vp.config.Port)
return nil
}
39 changes: 39 additions & 0 deletions vray.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package core

type VRay struct {
Input chan []byte
Output chan []byte
}

func NewVRay() *VRay {
ray := new(VRay)
ray.Input = make(chan []byte, 128)
ray.Output = make(chan []byte, 128)
return ray
}

type OutboundVRay interface {
OutboundInput() <-chan []byte
OutboundOutput() chan<- []byte
}

type InboundVRay interface {
InboundInput() chan<- []byte
OutboundOutput() <-chan []byte
}

func (ray *VRay) OutboundInput() <-chan []byte {
return ray.Input
}

func (ray *VRay) OutboundOutput() chan<- []byte {
return ray.Output
}

func (ray *VRay) InboundInput() chan<- []byte {
return ray.Input
}

func (ray *VRay) InboundOutput() <-chan []byte {
return ray.Output
}
9 changes: 0 additions & 9 deletions vsegment.go

This file was deleted.

0 comments on commit 1c618e9

Please sign in to comment.