Files
core/protocol/File Transfer.go
Akilan Selvacoumar ae5f1d2fd7 New features (#110)
* added upload status

* added changes for progress bar with more logs and bug fixes, Documentation yet to be added

* huge changes that need more doucmenting

* added possibility to get profile using NodeID

* added fix profile listing user profile information

* removed profile image from the explore reult struct

* saving current changes

* added filter to search based on NodeID

* Monday bug fixing

* updates to the profile

* changes for tracing the blockchain profile image not shown

* added condition to ensure TAG is not sent and removed debug prints

* updated webapi docs
2023-06-28 00:38:17 +01:00

50 lines
1.4 KiB
Go

/*
File Username: File Transfer.go
Copyright: 2021 Peernet s.r.o.
Author: Peter Kleissner
Encoding of file transfer protocol. Each transfer starts with a header:
Offset Size Info
0 8 Total File Size
8 8 Transfer Size
*/
package protocol
import (
"encoding/binary"
"errors"
"io"
)
// FileTransferWriteHeader starts writing the header for a file transfer.
func FileTransferWriteHeader(writer io.Writer, fileSize, transferSize uint64) (err error) {
// Send the header: Total File Size and Transfer Size.
header := make([]byte, 16)
binary.LittleEndian.PutUint64(header[0:8], fileSize)
binary.LittleEndian.PutUint64(header[8:16], transferSize)
if n, err := writer.Write(header); err != nil {
return err
} else if n != len(header) {
return errors.New("error sending header")
}
return nil
}
// FileTransferReadHeader starts reading the header for a file transfer. It will only read the header and keeps the connection open.
func FileTransferReadHeader(reader io.Reader) (fileSize, transferSize uint64, err error) {
// read the header
header := make([]byte, 16)
if n, err := reader.Read(header); err != nil {
return 0, 0, err
} else if n != len(header) {
return 0, 0, errors.New("error reading header")
}
fileSize = binary.LittleEndian.Uint64(header[0:8])
transferSize = binary.LittleEndian.Uint64(header[8:16])
return fileSize, transferSize, nil
}