Loading main.go +4 −2 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ func Client() { conn, err := net.Dial("tcp", "101.6.8.193:873") if err != nil { // TODO } defer conn.Close() Loading @@ -39,7 +39,9 @@ func Client() { // fmt.Println(readInteger(conn)) log.Println("HandShake OK") data := make(chan byte, 1024*1024) data := make(chan byte, 16 * 1024 * 1024) go rsync.DeMuxChan(conn, data) filelist := make(rsync.FileList, 0, 3072) Loading rsync/demultiplex.go +21 −19 Original line number Diff line number Diff line Loading @@ -3,10 +3,9 @@ package rsync import ( "bytes" "encoding/binary" "fmt" "github.com/minio/minio-go/v6" "golang.org/x/crypto/md4" "io" "github.com/minio/minio-go/v6" //"io/ioutil" "log" "net" Loading Loading @@ -44,6 +43,7 @@ func RunDeMuxer(conn net.Conn) *DeMuxer { } } // Deprecated func DeMuxBuf(conn net.Conn, buf *bytes.Buffer) { for { // socket read the multipex data & put them to channel Loading @@ -57,7 +57,7 @@ func DeMuxBuf(conn net.Conn, buf *bytes.Buffer) { tag := header[3] // Little Endian size := (binary.LittleEndian.Uint32(header) & 0xffffff) // TODO: zero? fmt.Println("TAG", tag, "SIZE", size) log.Println("TAG", tag, "SIZE", size) if tag == 7 { body := make([]byte, size) Loading @@ -77,7 +77,7 @@ func DeMuxBuf(conn net.Conn, buf *bytes.Buffer) { } } // Deprecated func DeMultiplex(conn net.Conn) error { // socket read the multipex data & put them to channel header := make([]byte, 4) // Header size: 4 bytes Loading @@ -90,7 +90,7 @@ func DeMultiplex(conn net.Conn) error { tag := header[3] // Little Endian size := (binary.LittleEndian.Uint32(header) & 0xffffff) // TODO: zero? fmt.Println("TAG", tag, "SIZE", size) log.Println("TAG", tag, "SIZE", size) if tag == 7 { body := make([]byte, size) Loading @@ -101,7 +101,7 @@ func DeMultiplex(conn net.Conn) error { return err } fmt.Println(body) log.Println(body) //if (body[size-1] | body[size-2] | body[size-3] | body[size-4] | body[size-5]) == 0 { // fmt.Println("END") Loading @@ -121,6 +121,7 @@ func DeMultiplex(conn net.Conn) error { return nil } // Goroutine: Demultiplex the package, and push them to channel // data: Buffered Channel func DeMuxChan(conn net.Conn, data chan byte) { for { Loading @@ -135,7 +136,7 @@ func DeMuxChan(conn net.Conn, data chan byte) { tag := header[3] // Little Endian size := (binary.LittleEndian.Uint32(header) & 0xffffff) // TODO: zero? fmt.Println("*****TAG", tag, "SIZE", size, "*****") log.Println("*****TAG", tag, "SIZE", size, "*****") if tag == 7 { // MUL_BASE + MSG_DATA body := make([]byte, size) Loading Loading @@ -205,7 +206,7 @@ func GetFiles(data chan byte, conn net.Conn, filelist *FileList) { if idx == -1 { return } fmt.Println(idx) log.Println("Server send the file: ", idx) // TODO: idx out of range? GetFile(data, &((*filelist)[idx]), filelist) Loading @@ -215,7 +216,7 @@ func GetFiles(data chan byte, conn net.Conn, filelist *FileList) { func lookup(size int64, filelist *FileList) { for i,f := range(*filelist) { if f.Size == size { fmt.Println("True File:", i, f) log.Println("True File:", i, f) } } } Loading @@ -229,11 +230,11 @@ func GetFile(data chan byte, info *FileInfo, filelist *FileList) { clen := GetInteger(data) /* checksum length */ remainder := GetInteger(data) /* block remainder */ fmt.Println(path, count, blen, clen, remainder, info.Size) log.Println(path, count, blen, clen, remainder, info.Size) buf := new(bytes.Buffer) for { token := GetInteger(data) fmt.Println("TOKEN", token) log.Println("TOKEN", token) if token == 0 { break } else if token < 0 { Loading @@ -241,11 +242,11 @@ func GetFile(data chan byte, info *FileInfo, filelist *FileList) { } else { ctx := make([]byte, token) GetBytes(data, ctx) fmt.Println("Buff size:", buf.Len()) log.Println("Buff size:", buf.Len()) buf.Write(ctx) } } fmt.Println("Buff Total size:", buf.Len()) log.Println("Buff Total size:", buf.Len()) lookup(int64(buf.Len()), filelist) //ioutil.WriteFile("temp.txt", buf.Bytes(), 0644) WriteOS(buf, path) Loading @@ -254,13 +255,14 @@ func GetFile(data chan byte, info *FileInfo, filelist *FileList) { lmd4.Write(buf.Bytes()) // Remote MD4 md4 := make([]byte, 16) GetBytes(data, md4) fmt.Println("MD4", md4) fmt.Println("Compute MD4", lmd4.Sum(nil)) rmd4 := make([]byte, 16) GetBytes(data, rmd4) log.Println("MD4", rmd4) log.Println("Compute MD4", lmd4.Sum(nil)) } func WriteOS(buf *bytes.Buffer, fname string) { // For test endpoint := "127.0.0.1:9000" accessKeyID := "minioadmin" secretAccessKey := "minioadmin" Loading @@ -274,7 +276,7 @@ func WriteOS(buf *bytes.Buffer, fname string) { // Make a new bucket called mymusic. bucketName := "test" //location := "cn" fmt.Println("MakeBucket") log.Println("Making Bucket: test") err = minioClient.MakeBucket(bucketName, "us-east-1") if err != nil { // Check to see if we already own this bucket (which happens if you run this twice) Loading @@ -288,7 +290,7 @@ func WriteOS(buf *bytes.Buffer, fname string) { log.Printf("Successfully created %s\n", bucketName) } fmt.Println("Update") log.Println("Updating") // Upload the zip file //objectName := "golden-oldies.zip" contentType := "application/x-rpm" Loading rsync/receiver.go +16 −12 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import ( "encoding/binary" "fmt" "io" "log" "net" "strings" ) Loading @@ -23,7 +24,7 @@ func HandShake(conn net.Conn) { var remote_protocol, remote_sub int fmt.Sscanf(version_str, "@RSYNCD: %d.%d", remote_protocol, remote_sub) fmt.Println(version_str) log.Println(version_str) // recv(version) // scanf(version, "@RSYNCD: %d.%d", ) Loading @@ -36,7 +37,7 @@ func HandShake(conn net.Conn) { for { // Wait for '@RSYNCD: OK': until \n, then add \0 res, _ := ReadLine(conn) fmt.Print(res) log.Print(res) if strings.HasPrefix(res, "@RSYNCD: OK") { break } Loading @@ -48,7 +49,7 @@ func HandShake(conn net.Conn) { // read int32 as seed bseed := ReadInteger(conn) fmt.Println("SEED", bseed) log.Println("SEED", bseed) // send filter_list, empty is 32-bit zero conn.Write([]byte("\x00\x00\x00\x00")) Loading Loading @@ -85,7 +86,7 @@ func GetFileList(ds chan byte, filelist *FileList) error { var partial, pathlen uint32 = 0, 0 fmt.Println(flags) log.Println(">>#{flags}<<") if flags == 0 { return io.EOF Loading @@ -100,7 +101,7 @@ func GetFileList(ds chan byte, filelist *FileList) error { */ if (0x20 & flags) != 0 { partial = uint32(GetByte(ds)) fmt.Println("Partical", partial) log.Println("Partical", partial) } /* Get the (possibly-remaining) filename length. */ Loading @@ -110,7 +111,7 @@ func GetFileList(ds chan byte, filelist *FileList) error { } else { pathlen = uint32(<-ds) } fmt.Println("PathLen", pathlen) log.Println("PathLen", pathlen) /* Allocate our full filename length. */ /* FIXME: maximum pathname length. */ Loading @@ -129,10 +130,10 @@ func GetFileList(ds chan byte, filelist *FileList) error { path = last.Path[0: partial] } path += string(p) fmt.Println("Path ", path) log.Println("Path ", path) size := GetVarint(ds) fmt.Println("Size ", size) log.Println("Size ", size) /* Read the modification time. */ var mtime int32 Loading @@ -142,7 +143,7 @@ func GetFileList(ds chan byte, filelist *FileList) error { } else { mtime = (*filelist)[len(*filelist) - 1].Mtime } fmt.Println("MTIME ", mtime) log.Println("MTIME ", mtime) /* Read the file mode. */ var mode int32 Loading @@ -152,14 +153,14 @@ func GetFileList(ds chan byte, filelist *FileList) error { } else { mode = (*filelist)[len(*filelist) - 1].Mode } fmt.Println("Mode", uint32(mode)) log.Println("Mode", uint32(mode)) // FIXME: Sym link if ((mode & 32768) != 0) && ((mode & 8192) != 0) { len := uint32(GetInteger(ds)) slink := make([]byte, len) GetBytes(ds, slink) fmt.Println("Symbolic Len", len, "CTX", slink) log.Println("Symbolic Len", len, "CTX", slink) } *filelist = append(*filelist, FileInfo{ Loading @@ -179,10 +180,13 @@ func Generate(conn net.Conn, filelist *FileList) { // Compare all local files with file list, pick up the files that has different size, mtime // Those files are `basis files` var idx int32 // TODO: Supports multi files // For test: here we request a file for i:=0; i < len(*filelist); i++ { if strings.Index((*filelist)[i].Path, "0ad-data-0.0.22-1.el7.src.rpm") != -1 { // 95533 SRPMS/Packages/z/zanata-python-client-1.5.1-1.el7.src.rpmSRPMS/Packages/0/0ad-0.0.22-1.el7.src.rpm idx = int32(i) fmt.Println("Pick:", (*filelist)[i], idx) log.Println("Pick:", (*filelist)[i], idx) break } } Loading Loading
main.go +4 −2 Original line number Diff line number Diff line Loading @@ -29,7 +29,7 @@ func Client() { conn, err := net.Dial("tcp", "101.6.8.193:873") if err != nil { // TODO } defer conn.Close() Loading @@ -39,7 +39,9 @@ func Client() { // fmt.Println(readInteger(conn)) log.Println("HandShake OK") data := make(chan byte, 1024*1024) data := make(chan byte, 16 * 1024 * 1024) go rsync.DeMuxChan(conn, data) filelist := make(rsync.FileList, 0, 3072) Loading
rsync/demultiplex.go +21 −19 Original line number Diff line number Diff line Loading @@ -3,10 +3,9 @@ package rsync import ( "bytes" "encoding/binary" "fmt" "github.com/minio/minio-go/v6" "golang.org/x/crypto/md4" "io" "github.com/minio/minio-go/v6" //"io/ioutil" "log" "net" Loading Loading @@ -44,6 +43,7 @@ func RunDeMuxer(conn net.Conn) *DeMuxer { } } // Deprecated func DeMuxBuf(conn net.Conn, buf *bytes.Buffer) { for { // socket read the multipex data & put them to channel Loading @@ -57,7 +57,7 @@ func DeMuxBuf(conn net.Conn, buf *bytes.Buffer) { tag := header[3] // Little Endian size := (binary.LittleEndian.Uint32(header) & 0xffffff) // TODO: zero? fmt.Println("TAG", tag, "SIZE", size) log.Println("TAG", tag, "SIZE", size) if tag == 7 { body := make([]byte, size) Loading @@ -77,7 +77,7 @@ func DeMuxBuf(conn net.Conn, buf *bytes.Buffer) { } } // Deprecated func DeMultiplex(conn net.Conn) error { // socket read the multipex data & put them to channel header := make([]byte, 4) // Header size: 4 bytes Loading @@ -90,7 +90,7 @@ func DeMultiplex(conn net.Conn) error { tag := header[3] // Little Endian size := (binary.LittleEndian.Uint32(header) & 0xffffff) // TODO: zero? fmt.Println("TAG", tag, "SIZE", size) log.Println("TAG", tag, "SIZE", size) if tag == 7 { body := make([]byte, size) Loading @@ -101,7 +101,7 @@ func DeMultiplex(conn net.Conn) error { return err } fmt.Println(body) log.Println(body) //if (body[size-1] | body[size-2] | body[size-3] | body[size-4] | body[size-5]) == 0 { // fmt.Println("END") Loading @@ -121,6 +121,7 @@ func DeMultiplex(conn net.Conn) error { return nil } // Goroutine: Demultiplex the package, and push them to channel // data: Buffered Channel func DeMuxChan(conn net.Conn, data chan byte) { for { Loading @@ -135,7 +136,7 @@ func DeMuxChan(conn net.Conn, data chan byte) { tag := header[3] // Little Endian size := (binary.LittleEndian.Uint32(header) & 0xffffff) // TODO: zero? fmt.Println("*****TAG", tag, "SIZE", size, "*****") log.Println("*****TAG", tag, "SIZE", size, "*****") if tag == 7 { // MUL_BASE + MSG_DATA body := make([]byte, size) Loading Loading @@ -205,7 +206,7 @@ func GetFiles(data chan byte, conn net.Conn, filelist *FileList) { if idx == -1 { return } fmt.Println(idx) log.Println("Server send the file: ", idx) // TODO: idx out of range? GetFile(data, &((*filelist)[idx]), filelist) Loading @@ -215,7 +216,7 @@ func GetFiles(data chan byte, conn net.Conn, filelist *FileList) { func lookup(size int64, filelist *FileList) { for i,f := range(*filelist) { if f.Size == size { fmt.Println("True File:", i, f) log.Println("True File:", i, f) } } } Loading @@ -229,11 +230,11 @@ func GetFile(data chan byte, info *FileInfo, filelist *FileList) { clen := GetInteger(data) /* checksum length */ remainder := GetInteger(data) /* block remainder */ fmt.Println(path, count, blen, clen, remainder, info.Size) log.Println(path, count, blen, clen, remainder, info.Size) buf := new(bytes.Buffer) for { token := GetInteger(data) fmt.Println("TOKEN", token) log.Println("TOKEN", token) if token == 0 { break } else if token < 0 { Loading @@ -241,11 +242,11 @@ func GetFile(data chan byte, info *FileInfo, filelist *FileList) { } else { ctx := make([]byte, token) GetBytes(data, ctx) fmt.Println("Buff size:", buf.Len()) log.Println("Buff size:", buf.Len()) buf.Write(ctx) } } fmt.Println("Buff Total size:", buf.Len()) log.Println("Buff Total size:", buf.Len()) lookup(int64(buf.Len()), filelist) //ioutil.WriteFile("temp.txt", buf.Bytes(), 0644) WriteOS(buf, path) Loading @@ -254,13 +255,14 @@ func GetFile(data chan byte, info *FileInfo, filelist *FileList) { lmd4.Write(buf.Bytes()) // Remote MD4 md4 := make([]byte, 16) GetBytes(data, md4) fmt.Println("MD4", md4) fmt.Println("Compute MD4", lmd4.Sum(nil)) rmd4 := make([]byte, 16) GetBytes(data, rmd4) log.Println("MD4", rmd4) log.Println("Compute MD4", lmd4.Sum(nil)) } func WriteOS(buf *bytes.Buffer, fname string) { // For test endpoint := "127.0.0.1:9000" accessKeyID := "minioadmin" secretAccessKey := "minioadmin" Loading @@ -274,7 +276,7 @@ func WriteOS(buf *bytes.Buffer, fname string) { // Make a new bucket called mymusic. bucketName := "test" //location := "cn" fmt.Println("MakeBucket") log.Println("Making Bucket: test") err = minioClient.MakeBucket(bucketName, "us-east-1") if err != nil { // Check to see if we already own this bucket (which happens if you run this twice) Loading @@ -288,7 +290,7 @@ func WriteOS(buf *bytes.Buffer, fname string) { log.Printf("Successfully created %s\n", bucketName) } fmt.Println("Update") log.Println("Updating") // Upload the zip file //objectName := "golden-oldies.zip" contentType := "application/x-rpm" Loading
rsync/receiver.go +16 −12 Original line number Diff line number Diff line Loading @@ -4,6 +4,7 @@ import ( "encoding/binary" "fmt" "io" "log" "net" "strings" ) Loading @@ -23,7 +24,7 @@ func HandShake(conn net.Conn) { var remote_protocol, remote_sub int fmt.Sscanf(version_str, "@RSYNCD: %d.%d", remote_protocol, remote_sub) fmt.Println(version_str) log.Println(version_str) // recv(version) // scanf(version, "@RSYNCD: %d.%d", ) Loading @@ -36,7 +37,7 @@ func HandShake(conn net.Conn) { for { // Wait for '@RSYNCD: OK': until \n, then add \0 res, _ := ReadLine(conn) fmt.Print(res) log.Print(res) if strings.HasPrefix(res, "@RSYNCD: OK") { break } Loading @@ -48,7 +49,7 @@ func HandShake(conn net.Conn) { // read int32 as seed bseed := ReadInteger(conn) fmt.Println("SEED", bseed) log.Println("SEED", bseed) // send filter_list, empty is 32-bit zero conn.Write([]byte("\x00\x00\x00\x00")) Loading Loading @@ -85,7 +86,7 @@ func GetFileList(ds chan byte, filelist *FileList) error { var partial, pathlen uint32 = 0, 0 fmt.Println(flags) log.Println(">>#{flags}<<") if flags == 0 { return io.EOF Loading @@ -100,7 +101,7 @@ func GetFileList(ds chan byte, filelist *FileList) error { */ if (0x20 & flags) != 0 { partial = uint32(GetByte(ds)) fmt.Println("Partical", partial) log.Println("Partical", partial) } /* Get the (possibly-remaining) filename length. */ Loading @@ -110,7 +111,7 @@ func GetFileList(ds chan byte, filelist *FileList) error { } else { pathlen = uint32(<-ds) } fmt.Println("PathLen", pathlen) log.Println("PathLen", pathlen) /* Allocate our full filename length. */ /* FIXME: maximum pathname length. */ Loading @@ -129,10 +130,10 @@ func GetFileList(ds chan byte, filelist *FileList) error { path = last.Path[0: partial] } path += string(p) fmt.Println("Path ", path) log.Println("Path ", path) size := GetVarint(ds) fmt.Println("Size ", size) log.Println("Size ", size) /* Read the modification time. */ var mtime int32 Loading @@ -142,7 +143,7 @@ func GetFileList(ds chan byte, filelist *FileList) error { } else { mtime = (*filelist)[len(*filelist) - 1].Mtime } fmt.Println("MTIME ", mtime) log.Println("MTIME ", mtime) /* Read the file mode. */ var mode int32 Loading @@ -152,14 +153,14 @@ func GetFileList(ds chan byte, filelist *FileList) error { } else { mode = (*filelist)[len(*filelist) - 1].Mode } fmt.Println("Mode", uint32(mode)) log.Println("Mode", uint32(mode)) // FIXME: Sym link if ((mode & 32768) != 0) && ((mode & 8192) != 0) { len := uint32(GetInteger(ds)) slink := make([]byte, len) GetBytes(ds, slink) fmt.Println("Symbolic Len", len, "CTX", slink) log.Println("Symbolic Len", len, "CTX", slink) } *filelist = append(*filelist, FileInfo{ Loading @@ -179,10 +180,13 @@ func Generate(conn net.Conn, filelist *FileList) { // Compare all local files with file list, pick up the files that has different size, mtime // Those files are `basis files` var idx int32 // TODO: Supports multi files // For test: here we request a file for i:=0; i < len(*filelist); i++ { if strings.Index((*filelist)[i].Path, "0ad-data-0.0.22-1.el7.src.rpm") != -1 { // 95533 SRPMS/Packages/z/zanata-python-client-1.5.1-1.el7.src.rpmSRPMS/Packages/0/0ad-0.0.22-1.el7.src.rpm idx = int32(i) fmt.Println("Pick:", (*filelist)[i], idx) log.Println("Pick:", (*filelist)[i], idx) break } } Loading