@ -2,16 +2,20 @@ package main
import (
import (
// _ "net/http/pprof"
// _ "net/http/pprof"
"bufio"
"encoding/json"
"os"
"os"
"os/signal"
"os/signal"
"regexp"
"strings"
"sync"
"syscall"
"time"
"time"
"unsafe"
"github.com/subgraph/fw-daemon/Godeps/_workspace/src/github.com/op/go-logging"
"github.com/subgraph/fw-daemon/Godeps/_workspace/src/github.com/op/go-logging"
"github.com/subgraph/fw-daemon/nfqueue"
"github.com/subgraph/fw-daemon/nfqueue"
"github.com/subgraph/fw-daemon/proc"
"github.com/subgraph/fw-daemon/proc"
"sync"
"syscall"
"unsafe"
)
)
var log = logging . MustGetLogger ( "sgfw" )
var log = logging . MustGetLogger ( "sgfw" )
@ -138,7 +142,52 @@ func (fw *Firewall) runFilter() {
}
}
}
}
type SocksJsonConfig struct {
SocksListener string
TorSocks string
}
var commentRegexp = regexp . MustCompile ( "^[ \t]*#" )
func loadConfiguration ( configFilePath string ) ( * SocksJsonConfig , error ) {
config := SocksJsonConfig { }
file , err := os . Open ( configFilePath )
if err != nil {
return nil , err
}
scanner := bufio . NewScanner ( file )
bs := ""
for scanner . Scan ( ) {
line := scanner . Text ( )
if ! commentRegexp . MatchString ( line ) {
bs += line + "\n"
}
}
if err := json . Unmarshal ( [ ] byte ( bs ) , & config ) ; err != nil {
return nil , err
}
return & config , nil
}
func main ( ) {
func main ( ) {
config , err := loadConfiguration ( "/etc/fw-daemon-socks.json" )
if err != nil {
panic ( err )
}
// XXX
fields := strings . Split ( config . TorSocks , ":" )
torSocksNet := fields [ 0 ]
torSocksAddr := fields [ 1 ]
fields = strings . Split ( config . SocksListener , ":" )
socksListenNet := fields [ 0 ]
socksListenAddr := fields [ 1 ]
socksConfig := SocksChainConfig {
TargetSocksNet : torSocksNet ,
TargetSocksAddr : torSocksAddr ,
ListenSocksNet : socksListenNet ,
ListenSocksAddr : socksListenAddr ,
}
logBackend := setupLoggerBackend ( )
logBackend := setupLoggerBackend ( )
log . SetBackend ( logBackend )
log . SetBackend ( logBackend )
proc . SetLogger ( log )
proc . SetLogger ( log )
@ -175,12 +224,6 @@ func main() {
} ( )
} ( )
* /
* /
socksConfig := SocksChainConfig {
TargetSocksNet : "tcp" ,
TargetSocksAddr : "127.0.0.1:9050" ,
ListenSocksNet : "tcp" ,
ListenSocksAddr : "127.0.0.1:8850" ,
}
wg := sync . WaitGroup { }
wg := sync . WaitGroup { }
InitSocksListener ( & socksConfig , & wg )
InitSocksListener ( & socksConfig , & wg )
fw . runFilter ( )
fw . runFilter ( )