diff --git a/functionality/filesharing/filesharing_functionality.go b/functionality/filesharing/filesharing_functionality.go index a034302..c336c90 100644 --- a/functionality/filesharing/filesharing_functionality.go +++ b/functionality/filesharing/filesharing_functionality.go @@ -77,12 +77,14 @@ func (f *Functionality) ShareFile(filepath string, profile peer.CwtchPeer, handl wrapperJSON, _ := json.Marshal(wrapper) key := fmt.Sprintf("%x.%x", manifest.RootHash, nonce) serializedManifest, _ := json.Marshal(manifest) - profile.ShareFile(key, string(serializedManifest)) + // Store the size of the manifest (in chunks) as part of the public scope so contacts who we share the file with // can fetch the manifest as if it were a file. profile.SetAttribute(attr.GetPublicScope(fmt.Sprintf("%s.manifest.size", key)), strconv.Itoa(int(math.Ceil(float64(len(serializedManifest))/float64(files.DefaultChunkSize))))) + profile.ShareFile(key, string(serializedManifest)) + profile.SendMessageToPeer(handle, string(wrapperJSON)) return nil diff --git a/protocol/files/filesharing_subsystem.go b/protocol/files/filesharing_subsystem.go index 3380ef7..7fa33d3 100644 --- a/protocol/files/filesharing_subsystem.go +++ b/protocol/files/filesharing_subsystem.go @@ -80,8 +80,8 @@ func (fsss *FileSharingSubSystem) RequestManifestParts(fileKey string) []model.P serializedManifest := manifest.Serialize() log.Debugf("found serialized manifest: %s", serializedManifest) for i := 0; i < len(serializedManifest); i += DefaultChunkSize { - offset := i * DefaultChunkSize - end := (i + 1) * DefaultChunkSize + offset := i + end := (i + 1) + DefaultChunkSize // truncate end if end > len(serializedManifest) { end = len(serializedManifest) diff --git a/testing/file_sharing_integration_test.go b/testing/file_sharing_integration_test.go index 305ba00..2bc704c 100644 --- a/testing/file_sharing_integration_test.go +++ b/testing/file_sharing_integration_test.go @@ -108,7 +108,7 @@ func TestFileSharing(t *testing.T) { err := json.Unmarshal([]byte(messageWrapper.Data), &fileMessageOverlay) if err == nil { - filesharingFunctionality.DownloadFile(bob, alice.GetOnion(), "cwtch.out.png", fmt.Sprintf("%x.%x", fileMessageOverlay.Hash, fileMessageOverlay.Nonce)) + filesharingFunctionality.DownloadFile(bob, alice.GetOnion(), "cwtch.out.png", fmt.Sprintf("%s.%s", fileMessageOverlay.Hash, fileMessageOverlay.Nonce)) } }