diff go/server.go @ 15:c262e17de9b1

db download skip-mode.
author pyon@macmini
date Sat, 08 Jun 2019 15:50:59 +0900
parents c1dc1fcee7fe
children b651aa41b9d4
line wrap: on
line diff
--- a/go/server.go	Sun Dec 09 14:38:15 2018 +0900
+++ b/go/server.go	Sat Jun 08 15:50:59 2019 +0900
@@ -1,7 +1,7 @@
 /*
  server.go  : server-program.
- Version    : 1.4
- Last Change: 2018-12-05 水 08:08:02.
+ Version    : 1.5
+ Last Change: 2019-05-29 水 08:58:19.
 
  install to: server_root/
 
@@ -22,6 +22,7 @@
     "net/http"
 	"os"
     "path/filepath"
+	"strings"
 	"time"
 )
 
@@ -36,25 +37,28 @@
 )
 
 func init() {
-	version = "1.4"	// piece-image version
+	version = "1.5"	// piece-image version
 	port = ":3910"
-    server_root = filepath.Dir( os.Args[0] )
-	logfile = filepath.Join( server_root, "rsearcher.log" )
+    server_root = filepath.Dir(os.Args[0])
+	logfile = filepath.Join(server_root, "rsearcher.log")
 	wlfile = "rsearcher.whitelist"
 }
 
 func main() {
 
-    flag.BoolVar( &not_ac, "d", false, "no access control ( for debug )" )
+    flag.BoolVar(&not_ac, "d", false, "no access control ( for debug )")
 	flag.Parse()
 
 	// setting IP-Address & Port
 	addrs, err := net.InterfaceAddrs()
 	if err != nil {
-		log.Fatal( err )
+		log.Fatal(err)
 	}
 	for _, a := range addrs {
-		if ipnet, ok := a.( *net.IPNet ); ok && !ipnet.IP.IsLoopback() {
+		if ipnet, ok := a.(*net.IPNet); ok && !ipnet.IP.IsLoopback() {
+			if strings.HasPrefix(ipnet.IP.String(), "169.254") {
+				continue
+			}
 			if ipnet.IP.To4() != nil {
 				server = ipnet.IP.String() + port
 			}
@@ -62,92 +66,92 @@
 	}
 
 	// start Web-server
-	fmt.Println( "server start [", server, "] ( program version", version, ")" )
-	http.HandleFunc( "/",        handler        )
-	http.HandleFunc( "/upload/", upload_handler )
-	http.HandleFunc( "/mngdb/",  mngdb_handler  )
-	log.Fatal( http.ListenAndServe( server, nil ) )
+	fmt.Println("server start [", server, "] ( program version", version, ")")
+	http.HandleFunc("/",        handler       )
+	http.HandleFunc("/upload/", upload_handler)
+	http.HandleFunc("/mngdb/",  mngdb_handler )
+	log.Fatal(http.ListenAndServe(server, nil))
 }
 
-func handler( w http.ResponseWriter, r *http.Request ) {
-	if !not_ac && !is_valid_host( r.RemoteAddr ) {
-		http.NotFound( w, r )
+func handler(w http.ResponseWriter, r *http.Request) {
+	if !not_ac && !is_valid_host(r.RemoteAddr) {
+		http.NotFound(w, r)
 		return
 	}
 
-	file := filepath.Join( server_root, filepath.FromSlash( r.URL.Path ) )
-	img := r.URL.Query().Get( "q" )
+	file := filepath.Join(server_root, filepath.FromSlash(r.URL.Path))
+	//img := r.URL.Query().Get("q")
 
-	fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", file )
-	fmt.Println( "--", img , "--")
-	write_log( "[access] " + r.RemoteAddr + " " + file )
+	fmt.Println("[access]", r.RemoteAddr, "|", time.Now().Format("2006-01-02 15:04"), "|", file)
+	//fmt.Println("--", img , "--")
+	write_log("[access] " + r.RemoteAddr + " " + file)
 
-	f, err := os.Open( file )
+	f, err := os.Open(file)
 	if err != nil {
-		http.NotFound( w, r )
+		http.NotFound(w, r)
 		return
 	}
 	defer f.Close()
 
 	fi, _ := f.Stat()
 
-	w.Header().Set( "Content-Type",   "rsearcher/octet-stream" )
-	w.Header().Set( "Content-Length", fmt.Sprintf( "%d", fi.Size() ) )
-	io.Copy( w, f )
+	w.Header().Set("Content-Type",   "rsearcher/octet-stream")
+	w.Header().Set("Content-Length", fmt.Sprintf("%d", fi.Size()))
+	io.Copy(w, f)
 }
 
-func upload_handler( w http.ResponseWriter, r *http.Request ) {
-	if !not_ac && !is_valid_host( r.RemoteAddr ) {
-		http.NotFound( w, r )
+func upload_handler(w http.ResponseWriter, r *http.Request) {
+	if !not_ac && !is_valid_host(r.RemoteAddr) {
+		http.NotFound(w, r)
 		return
 	}
 
-	fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/upload" )
-	now := time.Now().Format( "20060102_150405" )
-	file := filepath.Join( server_root, "upload", now )
-	f, err := os.Create( file )
+	fmt.Println("[access]", r.RemoteAddr, "|", time.Now().Format("2006-01-02 15:04"), "|", "/upload")
+	now := time.Now().Format("20060102_150405")
+	file := filepath.Join(server_root, "upload", now)
+	f, err := os.Create(file)
 	if err != nil {
-		http.NotFound( w, r )
+		http.NotFound(w, r)
 		return
 	}
-	n, err := io.Copy( f, r.Body )
+	n, err := io.Copy(f, r.Body)
 	if err != nil {
-		http.NotFound( w, r )
+		http.NotFound(w, r)
 		return
 	}
 	f.Close()
-	w.Write( []byte( fmt.Sprintf( "%d bytes are recieved.\n", n ) ) )
+	w.Write([]byte(fmt.Sprintf("%d bytes are recieved.\n", n)))
 }
 
-func mngdb_handler( w http.ResponseWriter, r *http.Request ) {
-	if !not_ac && !is_valid_host( r.RemoteAddr ) {
-		http.NotFound( w, r )
+func mngdb_handler(w http.ResponseWriter, r *http.Request) {
+	if !not_ac && !is_valid_host(r.RemoteAddr) {
+		http.NotFound(w, r)
 		return
 	}
 
-	fmt.Println( "[access]", r.RemoteAddr, "|", time.Now().Format( "2006-01-02 15:04" ), "|", "/mngdb" )
-	write_log( "[access] " + r.RemoteAddr + "manage-db" )
-	db := r.URL.Path[ len( "/mngdb/" ): ]
+	fmt.Println("[access]", r.RemoteAddr, "|", time.Now().Format("2006-01-02 15:04" ), "|", "/mngdb")
+	write_log("[access] " + r.RemoteAddr + "manage-db")
+	db := r.URL.Path[len("/mngdb/"):]
 
-	file := filepath.Join( server_root, "db", db )
+	file := filepath.Join(server_root, "db", db)
 
-	f, err := os.Create( file )
+	f, err := os.Create(file)
 	if err != nil {
-		http.NotFound( w, r )
+		http.NotFound(w, r)
 		return
 	}
-	_, err = io.Copy( f, r.Body )
+	_, err = io.Copy(f, r.Body)
 	if err != nil {
-		http.NotFound( w, r )
+		http.NotFound(w, r)
 		return
 	}
 	f.Close()
 }
 
-func is_valid_host( host string ) bool {
-	f, _ := os.Open( wlfile )
+func is_valid_host(host string) bool {
+	f, _ := os.Open(wlfile)
 	defer f.Close()
-	input := bufio.NewScanner( f )
+	input := bufio.NewScanner(f)
 	for input.Scan() {
 		if input.Text() == host {
 			return true
@@ -156,14 +160,14 @@
 	return false
 }
 
-func write_log( msg string ) {
-	f, err := os.OpenFile( logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644 )
+func write_log(msg string) {
+	f, err := os.OpenFile(logfile, os.O_APPEND|os.O_CREATE|os.O_WRONLY, 0644)
 	if err != nil {
-		log.Fatal( err )
+		log.Fatal(err)
 	}
 	defer f.Close()
 
-	logger := log.New( f, "", log.LstdFlags )
-	logger.Println( msg )
+	logger := log.New(f, "", log.LstdFlags)
+	logger.Println(msg)
 }