storj/lib/uplinkc/project.go

72 lines
1.7 KiB
Go
Raw Normal View History

// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package main
// #include "uplink_definitions.h"
import "C"
import (
"unsafe"
2019-06-15 12:23:12 +01:00
libuplink "storj.io/storj/lib/uplink"
"storj.io/storj/pkg/storj"
)
// Project is a scoped uplink.Project
type Project struct {
scope
2019-06-15 12:23:12 +01:00
*libuplink.Project
}
//export open_project
// open_project opens project using uplink
func open_project(uplinkHandle C.UplinkRef, satelliteAddr *C.char, apikeyHandle C.APIKeyRef, cProjectOpts *C.ProjectOptions, cerr **C.char) C.ProjectRef {
2019-06-15 12:23:12 +01:00
uplink, ok := universe.Get(uplinkHandle._handle).(*Uplink)
if !ok {
*cerr = C.CString("invalid uplink")
2019-06-15 12:23:12 +01:00
return C.ProjectRef{}
}
2019-06-15 12:23:12 +01:00
apikey, ok := universe.Get(apikeyHandle._handle).(libuplink.APIKey)
if !ok {
*cerr = C.CString("invalid apikey")
2019-06-15 12:23:12 +01:00
return C.ProjectRef{}
}
2019-06-15 12:23:12 +01:00
scope := uplink.scope.child()
var opts *libuplink.ProjectOptions
if unsafe.Pointer(cProjectOpts) != nil {
opts = &libuplink.ProjectOptions{}
opts.Volatile.EncryptionKey = new(storj.Key)
for i := range cProjectOpts.key {
opts.Volatile.EncryptionKey[i] = byte(cProjectOpts.key[i])
}
}
project, err := uplink.OpenProject(scope.ctx, C.GoString(satelliteAddr), apikey, opts)
if err != nil {
*cerr = C.CString(err.Error())
2019-06-15 12:23:12 +01:00
return C.ProjectRef{}
}
2019-06-15 12:23:12 +01:00
return C.ProjectRef{universe.Add(&Project{scope, project})}
}
//export close_project
// close_project closes the project.
2019-06-15 12:23:12 +01:00
func close_project(projectHandle C.ProjectRef, cerr **C.char) {
project, ok := universe.Get(projectHandle._handle).(*Project)
if !ok {
2019-06-15 12:23:12 +01:00
*cerr = C.CString("invalid project")
return
}
universe.Del(projectHandle._handle)
defer project.cancel()
if err := project.Close(); err != nil {
*cerr = C.CString(err.Error())
return
}
}