Documentation ¶
Overview ¶
Package bertybridge is the main gomobile entrypoint, used to generate iOS and Android frameworks.
Example ¶
// @FIXME(gfanton): auto relay can occasionally rise data race in some tests, // disabling race for now //go:build !race // +build !race package main import ( "encoding/base64" "fmt" "io/ioutil" "os" "github.com/gogo/protobuf/proto" "berty.tech/berty/v2/go/framework/bertybridge" "berty.tech/berty/v2/go/pkg/accounttypes" bridge_svc "berty.tech/berty/v2/go/pkg/bertybridge" "berty.tech/berty/v2/go/pkg/protocoltypes" ) func main() { tmpdir, err := ioutil.TempDir("", "example") checkErr(err) defer os.RemoveAll(tmpdir) // create and start the bridge var b *bertybridge.Bridge { config := bertybridge.NewConfig() if false { // disabled in example, but not commented to be sure that compiler performs various checks config.SetLifeCycleDriver(nil) config.SetLoggerDriver(nil) config.SetNotificationDriver(nil) } // set bridge root dir config.SetRootDir(tmpdir) b, err = bertybridge.NewBridge(config) checkErr(err) defer b.Close() fmt.Println("[+] initialized.") } args := []string{ "--log.filters=info+:bty*,-*.grpc warn+:*.grpc error+:*", "--log.format=console", "--node.display-name=", "--node.listeners=/ip4/127.0.0.1/tcp/0/grpcws", "--p2p.swarm-listeners=/ip4/127.0.0.1/tcp/0,/ip6/::1/tcp/0", "--p2p.mdns=false", "--p2p.webui-listener=:3000", "--store.dir=" + tmpdir, } var accountID string // create account { // create `CreateAccount` Input input := &accounttypes.CreateAccount_Request{} payload, err := proto.Marshal(input) checkErr(err) // Serialize request in := &bridge_svc.ClientInvokeUnary_Request{ MethodDesc: &bridge_svc.MethodDesc{ Name: "/berty.account.v1.AccountService/CreateAccount", }, Payload: payload, } reqb64, err := encodeProtoMessage(in) checkErr(err) // invoke through bridge client ret, err := b.InvokeBridgeMethod("/berty.bridge.v1.BridgeService/ClientInvokeUnary", reqb64) checkErr(err) // deserialize reply var output bridge_svc.ClientInvokeUnary_Reply err = decodeProtoMessage(ret, &output) checkErr(err) // deserialize reply var res accounttypes.CreateAccount_Reply err = proto.Unmarshal(output.Payload, &res) checkErr(err) accountID = res.GetAccountMetadata().GetAccountID() fmt.Println("[+] account created.") } // open account { // create `CreateAccount` Input input := &accounttypes.OpenAccount_Request{ AccountID: accountID, Args: args, } payload, err := proto.Marshal(input) checkErr(err) // Serialize request in := &bridge_svc.ClientInvokeUnary_Request{ MethodDesc: &bridge_svc.MethodDesc{ Name: "/berty.account.v1.AccountService/OpenAccount", }, Payload: payload, } reqb64, err := encodeProtoMessage(in) checkErr(err) // invoke through bridge client ret, err := b.InvokeBridgeMethod("/berty.bridge.v1.BridgeService/ClientInvokeUnary", reqb64) checkErr(err) // deserialize reply var output bridge_svc.ClientInvokeUnary_Reply err = decodeProtoMessage(ret, &output) checkErr(err) fmt.Println("[+] account opened.") } // check for GRPC listeners { // create `InstanceGetConfiguration` Input input := &accounttypes.GetGRPCListenerAddrs_Request{} payload, err := proto.Marshal(input) checkErr(err) // Serialize request in := &bridge_svc.ClientInvokeUnary_Request{ MethodDesc: &bridge_svc.MethodDesc{ Name: "/berty.account.v1.AccountService/GetGRPCListenerAddrs", }, Payload: payload, } reqb64, err := encodeProtoMessage(in) checkErr(err) // invoke through bridge client ret, err := b.InvokeBridgeMethod("/berty.bridge.v1.BridgeService/ClientInvokeUnary", reqb64) checkErr(err) var output bridge_svc.ClientInvokeUnary_Reply err = decodeProtoMessage(ret, &output) checkErr(err) // deserialize reply var res accounttypes.GetGRPCListenerAddrs_Reply err = proto.Unmarshal(output.Payload, &res) checkErr(err) hasGRPCWeb := false hasGRPCWebSocket := false for _, entry := range res.Entries { switch entry.Proto { case "ip4/tcp/grpcweb": hasGRPCWeb = true case "ip4/tcp/grpcws": hasGRPCWebSocket = true } } fmt.Println("[+] has grpc-web listener: ", hasGRPCWeb) // no, because `--node.listeners` does not contain grpcweb fmt.Println("[+] has websocket listener: ", hasGRPCWebSocket) // yes, because `--node.listeners`` contains grpcws } // make unary call to underlying `BertyMessenger` Service { // create `InstanceGetConfiguration` Input input := &protocoltypes.InstanceGetConfiguration_Request{} payload, err := proto.Marshal(input) checkErr(err) // Serialize request in := &bridge_svc.ClientInvokeUnary_Request{ MethodDesc: &bridge_svc.MethodDesc{ Name: "/berty.protocol.v1.ProtocolService/InstanceGetConfiguration", }, Payload: payload, } reqb64, err := encodeProtoMessage(in) checkErr(err) // invoke through bridge client ret, err := b.InvokeBridgeMethod("/berty.bridge.v1.BridgeService/ClientInvokeUnary", reqb64) checkErr(err) var output bridge_svc.ClientInvokeUnary_Reply err = decodeProtoMessage(ret, &output) checkErr(err) var res protocoltypes.InstanceGetConfiguration_Reply err = proto.Unmarshal(output.Payload, &res) checkErr(err) fmt.Println("[+] has more than one swarm listener:", len(res.Listeners) > 1) // log.Println("ret", godev.PrettyJSON(output)) } } func checkErr(err error) { if err != nil { fmt.Fprintf(os.Stderr, "%+v\n", err) panic(err) } } func decodeProtoMessage(input string, output proto.Message) error { dec, err := base64.StdEncoding.DecodeString(input) if err != nil { return err } return proto.Unmarshal(dec, output) } func encodeProtoMessage(input proto.Message) (string, error) { data, err := proto.Marshal(input) if err != nil { return "", err } return base64.StdEncoding.EncodeToString(data), nil }
Output: [+] initialized. [+] account created. [+] account opened. [+] has grpc-web listener: false [+] has websocket listener: true [+] has more than one swarm listener: true
Index ¶
- Constants
- func NewNativeDriverCore(core zapcore.Core, enc zapcore.Encoder, nlogger NativeLoggerDriver) zapcore.Core
- type Bridge
- func (b *Bridge) Close() error
- func (b *Bridge) HandleState(appstate int)
- func (b *Bridge) HandleTask() LifeCycleBackgroundTask
- func (b *Bridge) InvokeBridgeMethod(method string, b64message string) (string, error)
- func (b *Bridge) InvokeBridgeMethodWithPromiseBlock(promise PromiseBlock, method string, b64message string)
- func (b *Bridge) PushDecrypt(inputB64 string) (*FormatedPush, error)
- func (b *Bridge) WillTerminate()
- type Config
- func (c *Config) AppendCLIArg(arg string)
- func (c *Config) AppendPreferredLanguage(preferred string)
- func (c *Config) SetBleDriver(driver ProximityDriver)
- func (c *Config) SetKeystoreDriver(d NativeKeystoreDriver)
- func (c *Config) SetLifeCycleDriver(lc LifeCycleDriver)
- func (c *Config) SetLoggerDriver(dLogger NativeLoggerDriver)
- func (c *Config) SetMDNSLocker(driver NativeMDNSLockerDriver)
- func (c *Config) SetNBDriver(driver ProximityDriver)
- func (c *Config) SetNetDriver(driver NativeNetDriver)
- func (c *Config) SetNotificationDriver(driver NotificationDriver)
- func (c *Config) SetPreferredLanguages(preferred string)
- func (c *Config) SetRootDir(rootdir string)
- type DecryptedPush
- type FormatedPush
- type LifeCycleBackgroundTask
- type LifeCycleDriver
- type LifeCycleHandler
- type LocalNotification
- type NativeKeystoreDriver
- type NativeLoggerDriver
- type NativeMDNSLockerDriver
- type NativeNetDriver
- type NetAddrs
- type NetInterface
- type NetInterfaces
- type NotificationDriver
- type PromiseBlock
- type ProximityDriver
- type ProximityTransport
- type PushConfig
- type PushStandalone
Examples ¶
Constants ¶
View Source
const ( AppStateUnknown int = iota AppStateActive AppStateInactive AppStateBackground )
View Source
const ( NetFlagUp int = iota // interface is up NetFlagBroadcast // interface supports broadcast access capability NetFlagLoopback // interface is a loopback interface NetFlagPointToPoint // interface belongs to a point-to-point link NetFlagMulticast // interface supports multicast access capability )
View Source
const ( ServicePushPayloadKey = pushtypes.ServicePushPayloadKey StorageKeyName = accountutils.StorageKeyName )
Variables ¶
This section is empty.
Functions ¶
func NewNativeDriverCore ¶ added in v2.320.6
Types ¶
type Bridge ¶
type Bridge struct {
// contains filtered or unexported fields
}
func (*Bridge) HandleState ¶ added in v2.190.1
func (*Bridge) HandleTask ¶ added in v2.190.1
func (b *Bridge) HandleTask() LifeCycleBackgroundTask
func (*Bridge) InvokeBridgeMethod ¶ added in v2.121.0
func (*Bridge) InvokeBridgeMethodWithPromiseBlock ¶ added in v2.121.0
func (b *Bridge) InvokeBridgeMethodWithPromiseBlock(promise PromiseBlock, method string, b64message string)
func (*Bridge) PushDecrypt ¶ added in v2.319.0
func (b *Bridge) PushDecrypt(inputB64 string) (*FormatedPush, error)
func (*Bridge) WillTerminate ¶ added in v2.190.1
func (b *Bridge) WillTerminate()
type Config ¶
type Config struct { CLIArgs []string `json:"cliArgs"` RootDirPath string `json:"rootDir"` // contains filtered or unexported fields }
Config is used to build a bertybridge configuration using only simple types or types returned by the bertybridge package.
func (*Config) AppendCLIArg ¶ added in v2.190.1
func (*Config) AppendPreferredLanguage ¶ added in v2.327.0
func (*Config) SetBleDriver ¶ added in v2.260.0
func (c *Config) SetBleDriver(driver ProximityDriver)
func (*Config) SetKeystoreDriver ¶ added in v2.313.0
func (c *Config) SetKeystoreDriver(d NativeKeystoreDriver)
func (*Config) SetLifeCycleDriver ¶ added in v2.190.1
func (c *Config) SetLifeCycleDriver(lc LifeCycleDriver)
func (*Config) SetLoggerDriver ¶ added in v2.190.1
func (c *Config) SetLoggerDriver(dLogger NativeLoggerDriver)
func (*Config) SetMDNSLocker ¶ added in v2.337.0
func (c *Config) SetMDNSLocker(driver NativeMDNSLockerDriver)
func (*Config) SetNBDriver ¶ added in v2.269.0
func (c *Config) SetNBDriver(driver ProximityDriver)
func (*Config) SetNetDriver ¶ added in v2.337.0
func (c *Config) SetNetDriver(driver NativeNetDriver)
func (*Config) SetNotificationDriver ¶ added in v2.190.1
func (c *Config) SetNotificationDriver(driver NotificationDriver)
func (*Config) SetPreferredLanguages ¶ added in v2.327.0
func (*Config) SetRootDir ¶ added in v2.202.0
type DecryptedPush ¶ added in v2.319.0
type DecryptedPush pushtypes.DecryptedPush
type FormatedPush ¶ added in v2.327.0
type FormatedPush pushtypes.FormatedPush
type LifeCycleBackgroundTask ¶ added in v2.124.0
type LifeCycleBackgroundTask interface { Execute() (success bool) Cancel() }
type LifeCycleDriver ¶ added in v2.124.0
type LifeCycleDriver interface { GetCurrentState() int RegisterHandler(handler LifeCycleHandler) }
type LifeCycleHandler ¶ added in v2.124.0
type LifeCycleHandler interface { HandleState(appstate int) HandleTask() LifeCycleBackgroundTask WillTerminate() }
type LocalNotification ¶ added in v2.134.1
type NativeKeystoreDriver ¶ added in v2.313.0
type NativeKeystoreDriver interface { accountutils.NativeKeystore }
type NativeLoggerDriver ¶
type NativeMDNSLockerDriver ¶ added in v2.337.0
type NativeMDNSLockerDriver interface { Lock() Unlock() }
type NativeNetDriver ¶ added in v2.337.0
type NativeNetDriver interface { InterfaceAddrs() (*NetAddrs, error) Interfaces() (*NetInterfaces, error) }
type NetAddrs ¶ added in v2.337.0
type NetAddrs struct {
// contains filtered or unexported fields
}
func NewNetAddrs ¶ added in v2.337.0
func NewNetAddrs() *NetAddrs
func (*NetAddrs) AppendAddr ¶ added in v2.337.0
type NetInterface ¶ added in v2.346.0
type NetInterface struct { Index int // positive integer that starts at one, zero is never used MTU int // maximum transmission unit Name string // e.g., "en0", "lo0", "eth0.100" Addrs *NetAddrs // InterfaceAddresses // contains filtered or unexported fields }
func (*NetInterface) AddFlag ¶ added in v2.346.0
func (n *NetInterface) AddFlag(flag int) (err error)
func (*NetInterface) CopyHardwareAddr ¶ added in v2.346.0
func (n *NetInterface) CopyHardwareAddr(addr []byte)
func (*NetInterface) Interface ¶ added in v2.346.0
func (n *NetInterface) Interface() net.Interface
type NetInterfaces ¶ added in v2.346.0
type NetInterfaces struct {
// contains filtered or unexported fields
}
func (*NetInterfaces) Append ¶ added in v2.346.0
func (n *NetInterfaces) Append(i *NetInterface)
func (*NetInterfaces) Interfaces ¶ added in v2.346.0
func (n *NetInterfaces) Interfaces() []net.Interface
type NotificationDriver ¶ added in v2.134.1
type NotificationDriver interface {
Post(notif *LocalNotification) error
}
type PromiseBlock ¶ added in v2.121.0
type ProximityDriver ¶ added in v2.296.0
type ProximityDriver interface { proximity.ProximityDriver }
type ProximityTransport ¶ added in v2.260.0
type ProximityTransport interface { proximity.ProximityTransport }
func GetProximityTransport ¶ added in v2.260.0
func GetProximityTransport(protocolName string) ProximityTransport
type PushConfig ¶ added in v2.327.0
type PushConfig struct {
// contains filtered or unexported fields
}
func NewPushConfig ¶ added in v2.327.0
func NewPushConfig() *PushConfig
func (*PushConfig) SetDriverLogger ¶ added in v2.327.0
func (c *PushConfig) SetDriverLogger(logger NativeLoggerDriver)
func (*PushConfig) SetPreferredLanguages ¶ added in v2.327.0
func (c *PushConfig) SetPreferredLanguages(lang string)
type PushStandalone ¶ added in v2.327.0
type PushStandalone struct {
// contains filtered or unexported fields
}
func NewPushStandalone ¶ added in v2.327.0
func NewPushStandalone(c *PushConfig) *PushStandalone
func (*PushStandalone) Decrypt ¶ added in v2.327.0
func (s *PushStandalone) Decrypt(rootDir string, inputB64 string, ks NativeKeystoreDriver) (*FormatedPush, error)
Click to show internal directories.
Click to hide internal directories.