Mercurial > mercurial > hgweb_rsearcher.cgi
view go/client.go @ 10:36811fd22bd2
v1.4
author | pyon@macmini |
---|---|
date | Thu, 08 Nov 2018 19:15:43 +0900 |
parents | 82f9af6aa7e4 |
children | 240752cbe11b |
line wrap: on
line source
/* client.go : client-program. Version : 1.2 Last Change: 2018-10-30 火 09:13:24. install to: rsearcher_root/ rsearcher_root/client.exe + grsearcher.exe + app.conf + verup.bat + auth.db ( temporary ) + hhs.db ( temporary ) + index.db ( 10 days ) + image/*.png, *.jpg + doc/ + .cache/* ( temporary ) $ client.exe -r 192.168.0.1:3910 # get new release $ client.exe -u 192.168.0.1:3910 # get new dbs $ client.exe 192.168.0.1:3910 0800012345 20171231 # get images $ client.exe -a 192.168.0.1:3910 upfile.txt # upload file */ package main import ( "archive/tar" "bytes" "compress/gzip" "flag" "fmt" "io" "io/ioutil" "log" "net/http" "os" "path/filepath" "regexp" "time" ) var version string func init() { version = "1.2" } func main() { var upgrade = flag.Bool( "r", false, "" ) // get grsearcher.exe, crypto.exe client.exe var update = flag.Bool( "u", false, "" ) // get auth.db, hhs.db, index.db(14,28) var upload = flag.Bool( "a", false, "" ) // post somefile var cnttime = flag.Bool( "t", false, "" ) // count time var printver = flag.Bool( "v", false, "" ) // print version flag.Parse() // print version if *printver { fmt.Println( "client [ ver", version, "]" ) os.Exit( 0 ) } st := time.Now() // start time // upload if *upload { if flag.NArg() != 2 { fmt.Fprintf( os.Stderr, "bad host or file.\n" ) os.Exit( 1 ) } host := flag.Args()[0] file := flag.Args()[1] fmt.Printf( "Sending %s...", file ) f, err := os.Open( file ) if err != nil { log.Fatal( err ) } defer f.Close() res, err := http.Post( "http://" + host + "/upload", "binary/octet-stream", f ) if err != nil { log.Fatal( err ) } defer res.Body.Close() message, _ := ioutil.ReadAll( res.Body ) fmt.Println( string( message ) ) if *cnttime { fmt.Println( "---", time.Now().Sub( st ) ) } os.Exit( 0 ) } // software upgrade if *upgrade { if flag.NArg() != 1 { fmt.Fprintf( os.Stderr, "bad remote host.\n" ) os.Exit( 1 ) } fmt.Print( "Getting grsearcher.exe..." ) host := flag.Args()[0] if _, err := get_file( host, "/release/grsearcher.exe", "grsearcher.exe" ); err != nil { log.Fatal( err ) } fmt.Print( "Getting crypto.exe..." ) if _, err := get_file( host, "/release/crypto.exe", "crypto.exe" ); err != nil { log.Fatal( err ) } fmt.Print( "Getting client.exe..." ) if _, err := get_file( host, "/release/client.exe", "client1.exe" ); err != nil { log.Fatal( err ) } if *cnttime { fmt.Println( "---", time.Now().Sub( st ) ) } os.Exit( 0 ) } // database update if *update { if flag.NArg() != 1 { fmt.Fprintf( os.Stderr, "bad remote host.\n" ) os.Exit( 1 ) } fmt.Print( "Getting auth.db..." ) host := flag.Args()[0] if _, err := get_file( host, "/db/auth.db", "auth.db" ); err != nil { log.Fatal( err ) } fmt.Print( "Getting hhs.db..." ) if _, err := get_file( host, "/db/hhs.db", "hhs.db" ); err != nil { log.Fatal( err ) } if time.Now().Day() % 14 == 0 { fmt.Print( "Getting index.db..." ) if _, err := get_file( host, "/db/index.db", "index.db" ); err != nil { log.Fatal( err ) } } if *cnttime { fmt.Println( "---", time.Now().Sub( st ) ) } os.Exit( 0 ) } // main : image download if flag.NArg() != 3 { fmt.Fprintf( os.Stderr, "bad argument.\n" ) os.Exit( 1 ) } host := flag.Args()[0] h := flag.Args()[1] d := flag.Args()[2] r, err := regexp.Compile( "^0[1238][0-9]{8}$" ) if err != nil { log.Fatal( err ) } m := r.FindString( h ) if len( m ) == 0 { fmt.Fprintf( os.Stderr, "bad hno.\n" ) os.Exit( 1 ) } rfile := "/images/" + d + "/" + h + ".tgz" b, err := get_file( host, rfile, "" ) if err != nil { log.Fatal( err ) } if err := untgz_images( d, b ); err != nil { log.Fatal( err ) } if *cnttime { fmt.Println( "---", time.Now().Sub( st ) ) } } /* Subroutines */ // HTTP GET func get_file( host, rfile, lfile string ) ( []byte, error ) { res, err := http.Get( "http://" + host + "/" + rfile ) if err != nil { return nil, err } fmt.Println( "\t[" + res.Status + "]" ) if res.StatusCode == http.StatusNotFound { return nil, nil } b, err := ioutil.ReadAll( res.Body ) res.Body.Close() if err != nil { return nil, err } if lfile != "" { if err := ioutil.WriteFile( lfile, b, 0644 ); err != nil { return nil, err } return nil, nil } return b, nil } // Un-Tar/Gzip func untgz_images( d string, b []byte ) error { br := bytes.NewReader( b ) zr, err := gzip.NewReader( br ) if err != nil { return err } tr := tar.NewReader( zr ) for i := 1; ; i++ { //hdr, err := tr.Next() _, err := tr.Next() if err == io.EOF { break // End of archive } if err != nil { return err } //f, _ := os.Create( hdr.Name ) fn := fmt.Sprintf( "%s_%d", d, i ) // 1.0a fn = filepath.Join( ".cache", fn ) f, _ := os.Create( fn ) if _, err := io.Copy( f, tr ); err != nil { return err } f.Close() } if err := zr.Close(); err != nil { return err } return nil }