Compare commits

..

1 commit

Author SHA1 Message Date
finn
4e7a2fe7c7 Update protocol to call-signaling branch 2022-08-11 15:38:59 -07:00
9 changed files with 284 additions and 119 deletions

View file

@ -62,22 +62,27 @@ test sqlite to postgres:
.build-deb:
stage: build
image: debian:buster
before_script:
script:
- echo deb http://deb.debian.org/debian buster-backports main > /etc/apt/sources.list.d/backports.list
- apt-get update
- apt-get install -y -t buster-backports git-buildpackage dh-golang bash-completion golang-any golang-github-spf13-cobra-dev golang-github-spf13-viper-dev golang-github-google-uuid-dev golang-github-mattn-go-sqlite3-dev golang-github-lib-pq-dev golang-github-satori-go.uuid-dev wget unzip
- wget -O golang-github-mdp-qrterminal.zip --quiet "https://gitlab.com/api/v4/projects/signald%2Flibraries%2Fgolang-github-mdp-qrterminal/jobs/artifacts/master/download?job=build"
- wget -O golang-github-jedib0t-go-pretty.zip --quiet "https://gitlab.com/api/v4/projects/signald%2Flibraries%2Fgolang-github-jedib0t-go-pretty/jobs/artifacts/master/download?job=build"
- for z in *.zip; do unzip $z; done
- apt-get install -y -t buster-backports git-buildpackage dh-golang bash-completion golang-any golang-github-spf13-cobra-dev golang-github-spf13-viper-dev golang-github-google-uuid-dev golang-github-mattn-go-sqlite3-dev golang-github-lib-pq-dev golang-github-satori-go.uuid-dev
- apt-get install -y ./*.deb && rm -vf *.deb
script:
- 'sed -i "s/^Architecture:.*/Architecture: ${ARCH}/g" debian/control'
- go run ./cmd/signaldctl doc -o man
- go run ./cmd/signaldctl completion bash > debian/package.bash-completion
- ls *.1 > debian/manpages
- gbp dch --ignore-branch --debian-tag="%(version)s" --git-author --new-version="$(./version.sh | cut -c2-)"
- gbp dch --ignore-branch --debian-tag="%(version)s" --git-author --new-version="$(./version.sh)"
- dpkg-buildpackage -us -uc -b
- mv ../*.deb .
needs:
- project: signald/libraries/golang-github-mdp-qrterminal
job: build
ref: master
artifacts: true
- project: signald/libraries/golang-github-jedib0t-go-pretty
job: build
ref: master
artifacts: true
variables:
SIGNALDCTL_PUBLIC_DOC_MODE: "on"
artifacts:

View file

@ -34,7 +34,6 @@ import (
var (
testing bool
deviceName string
overwrite bool
LinkAccountCmd = &cobra.Command{
Use: "link",
@ -81,7 +80,6 @@ var (
finishReq := v1.FinishLinkRequest{
DeviceName: deviceName,
SessionId: response.SessionId,
Overwrite: overwrite,
}
_, err = finishReq.Submit(common.Signald)
@ -101,5 +99,4 @@ func init() {
}
LinkAccountCmd.Flags().BoolVarP(&testing, "testing", "t", false, "use the Signal testing server")
LinkAccountCmd.Flags().StringVarP(&deviceName, "device-name", "n", name, "the name of this device. shown to other devices on the signal account")
LinkAccountCmd.Flags().BoolVar(&overwrite, "overwrite", false, "if an account with the same id already exists in signald's database, delete it before linking")
}

View file

@ -27,14 +27,10 @@ import (
var (
account string
name string
avatar string
emoji string
about string
SetProfileCmd = &cobra.Command{
Use: "set-profile [name]",
Short: "update an account's profile data",
Use: "set-profile name",
Short: "updates the profile data with a new name",
PreRun: func(cmd *cobra.Command, args []string) {
if account == "" {
account = config.Config.DefaultAccount
@ -43,19 +39,16 @@ var (
common.Must(cmd.Help())
log.Fatal("No account specified. Please specify with --account or set a default")
}
if len(args) > 0 {
name = args[0]
if len(args) != 1 {
common.Must(cmd.Help())
log.Fatal("must specify a name")
}
},
Run: func(_ *cobra.Command, _ []string) {
Run: func(_ *cobra.Command, args []string) {
go common.Signald.Listen(nil)
req := v1.SetProfile{
Account: account,
Name: name,
AvatarFile: avatar,
Emoji: emoji,
About: about,
Name: args[0],
}
err := req.Submit(common.Signald)
if err != nil {
@ -68,7 +61,4 @@ var (
func init() {
SetProfileCmd.Flags().StringVarP(&account, "account", "a", "", "the signald account to use")
SetProfileCmd.Flags().StringVarP(&avatar, "avatar", "A", "", "path to avatar file")
SetProfileCmd.Flags().StringVar(&emoji, "emoji", "", "an emoji to be shown next to the about section")
SetProfileCmd.Flags().StringVar(&about, "about", "", "profile about section")
}

View file

@ -33,7 +33,6 @@ var (
{InstalledRank: 4, Version: "14", Description: "multiple identity keys per account", Script: "V14__multiple_identity_keys_per_account.sql", Checksum: -1635788950},
{InstalledRank: 5, Version: "15", Description: "profiles tables", Script: "V15__profiles_tables.sql", Checksum: 809686180},
{InstalledRank: 6, Version: "16", Description: "destination uuid in envelope", Script: "V16__destination_uuid_in_envelope.sql", Checksum: 357656854},
{InstalledRank: 7, Version: "17", Description: "update server ca", Script: "V17__update_server_ca.sql", Checksum: 1647934070},
}
sqlitePath string
@ -61,7 +60,7 @@ var (
}
return nil
},
RunE: func(cmd *cobra.Command, args []string) (err error) {
RunE: func(cmd *cobra.Command, args []string) error {
source, err := sql.Open("sqlite3", sqlitePath)
if err != nil {
return err
@ -94,37 +93,107 @@ var (
}
log.Println("created schema")
migrate := func(fn func(*sql.DB, *sql.DB) error, targetName string) {
if err = fn(source, dest); err != nil {
log.Println("error moving", targetName)
panic(err)
if err := moveAccounts(source, dest); err != nil {
log.Println("error moving accounts table")
return err
}
log.Println("moved", targetName)
}
defer func() {
if r := recover(); r != nil && r != err {
// If r is something other than the error returned via the named return, re-panic it
panic(r)
}
}()
log.Println("moved accounts table")
migrate(moveAccounts, "accounts table")
migrate(moveRecipients, "recipients table")
migrate(movePrekeys, "prekeys table")
migrate(moveSessions, "sessions table")
migrate(moveSignedPrekeys, "signed prekeys table")
migrate(moveIdentityKeys, "identity keys table")
migrate(moveAccountData, "account data")
migrate(movePendingAccountData, "pending account data table")
migrate(moveSenderKeys, "sender keys table")
migrate(moveSenderKeyShared, "sender key shared table")
migrate(moveGroups, "groups table")
migrate(moveGroupCredentials, "group credentials table")
migrate(moveContacts, "contacts table")
migrate(moveProfileKeys, "profile keys table")
migrate(moveProfiles, "profiles tables")
migrate(moveProfileCapabilities, "profile capabilities tables")
migrate(moveProfileBadges, "profile badges tables")
if err := moveRecipients(source, dest); err != nil {
log.Println("error moving recipients table")
return err
}
log.Println("moved recipients table")
if err := movePrekeys(source, dest); err != nil {
log.Println("error moving prekeys table")
return err
}
log.Println("moved prekeys table")
if err := moveSessions(source, dest); err != nil {
log.Println("error moving sessions table")
return err
}
log.Println("moved sessions table")
if err := moveSignedPrekeys(source, dest); err != nil {
log.Println("error moving signed prekeys table")
return err
}
log.Println("moved signed prekeys table")
if err := moveIdentityKeys(source, dest); err != nil {
log.Println("error moving identity keys table")
return err
}
log.Println("moved identity keys table")
if err := moveAccountData(source, dest); err != nil {
log.Println("error moving account data")
return err
}
log.Println("moved account data table")
if err := movePendingAccountData(source, dest); err != nil {
log.Println("error moving pending account data tabe")
return err
}
log.Println("moved pending account data table")
if err := moveSenderKeys(source, dest); err != nil {
log.Println("error moving sender keys table")
return err
}
log.Println("moved sender keys table")
if err := moveSenderKeyShared(source, dest); err != nil {
log.Println("error moving sender key shared table")
return err
}
log.Println("moved sender key shared table")
if err := moveGroups(source, dest); err != nil {
log.Println("error moving groups table")
return err
}
log.Println("moved groups table")
if err := moveGroupCredentials(source, dest); err != nil {
log.Println("error moving group credentials table")
return err
}
log.Println("moved group credentials table")
if err := moveContacts(source, dest); err != nil {
log.Println("error moving group credentials table")
return err
}
log.Println("moved contacts table")
if err := moveProfileKeys(source, dest); err != nil {
log.Println("error moving profile keys table")
return err
}
log.Println("moved profile keys table")
if err := moveProfiles(source, dest); err != nil {
log.Println("error moving profiles tables")
return err
}
log.Println("moved profiles tables")
if err := moveProfileCapabilities(source, dest); err != nil {
log.Println("error moving profile capabilities tables")
return err
}
log.Println("moved profile capabilities tables")
if err := moveProfileBadges(source, dest); err != nil {
log.Println("error moving profile badges tables")
return err
}
log.Println("moved profile badges tables")
if err := os.Remove(sqlitePath); err != nil {
log.Println("error deleting sqlite file")
@ -210,9 +279,7 @@ func moveAccounts(source *sql.DB, dest *sql.DB) error {
}
func moveRecipients(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT rowid, account_uuid, uuid, e164, registered FROM recipients" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)",
)
rows, err := source.Query("SELECT rowid, account_uuid, uuid, e164, registered FROM recipients")
if err != nil {
return err
}
@ -252,9 +319,7 @@ func moveRecipients(source *sql.DB, dest *sql.DB) error {
}
func movePrekeys(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, id, record FROM prekeys" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)",
)
rows, err := source.Query("SELECT account_uuid, id, record FROM prekeys")
if err != nil {
return err
}
@ -279,10 +344,7 @@ func movePrekeys(source *sql.DB, dest *sql.DB) error {
}
func moveSessions(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, recipient, device_id, record FROM sessions" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)" +
" AND recipient IN (SELECT DISTINCT rowid FROM recipients)",
)
rows, err := source.Query("SELECT account_uuid, recipient, device_id, record FROM sessions")
if err != nil {
return err
}
@ -317,9 +379,7 @@ func moveSessions(source *sql.DB, dest *sql.DB) error {
}
func moveSignedPrekeys(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, id, record FROM signed_prekeys" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)",
)
rows, err := source.Query("SELECT account_uuid, id, record FROM signed_prekeys")
if err != nil {
return err
}
@ -344,9 +404,7 @@ func moveSignedPrekeys(source *sql.DB, dest *sql.DB) error {
}
func moveIdentityKeys(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, recipient, identity_key, trust_level, added FROM identity_keys" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)",
)
rows, err := source.Query("SELECT account_uuid, recipient, identity_key, trust_level, added FROM identity_keys")
if err != nil {
return err
}
@ -373,9 +431,7 @@ func moveIdentityKeys(source *sql.DB, dest *sql.DB) error {
}
func moveAccountData(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, key, value FROM account_data" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)",
)
rows, err := source.Query("SELECT account_uuid, key, value FROM account_data")
if err != nil {
return err
}
@ -425,9 +481,7 @@ func movePendingAccountData(source *sql.DB, dest *sql.DB) error {
}
func moveSenderKeys(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, address, device, distribution_id, record, created_at FROM sender_keys" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)",
)
rows, err := source.Query("SELECT account_uuid, address, device, distribution_id, record, created_at FROM sender_keys")
if err != nil {
return err
}
@ -463,9 +517,7 @@ func moveSenderKeys(source *sql.DB, dest *sql.DB) error {
}
func moveSenderKeyShared(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, distribution_id, address, device FROM sender_key_shared" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)",
)
rows, err := source.Query("SELECT account_uuid, distribution_id, address, device FROM sender_key_shared")
if err != nil {
return err
}
@ -501,9 +553,7 @@ func moveSenderKeyShared(source *sql.DB, dest *sql.DB) error {
}
func moveGroups(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT rowid, account_uuid, group_id, master_key, revision, last_avatar_fetch, distribution_id, group_info FROM groups" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)",
)
rows, err := source.Query("SELECT rowid, account_uuid, group_id, master_key, revision, last_avatar_fetch, distribution_id, group_info FROM groups")
if err != nil {
return err
}
@ -539,10 +589,7 @@ func moveGroups(source *sql.DB, dest *sql.DB) error {
}
func moveGroupCredentials(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, date, max(credential) FROM group_credentials" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)" +
" GROUP BY account_uuid, date",
)
rows, err := source.Query("SELECT account_uuid, date, credential FROM group_credentials")
if err != nil {
return err
}
@ -567,10 +614,7 @@ func moveGroupCredentials(source *sql.DB, dest *sql.DB) error {
}
func moveContacts(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, recipient, name, color, profile_key, message_expiration_time, inbox_position FROM contacts" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)" +
" AND recipient IN (SELECT DISTINCT rowid FROM recipients)",
)
rows, err := source.Query("SELECT account_uuid, recipient, name, color, profile_key, message_expiration_time, inbox_position FROM contacts")
if err != nil {
return err
}
@ -603,10 +647,7 @@ func moveContacts(source *sql.DB, dest *sql.DB) error {
}
func moveProfileKeys(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, recipient, profile_key, profile_key_credential, request_pending, unidentified_access_mode FROM profile_keys" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)" +
" AND recipient IN (SELECT DISTINCT rowid FROM recipients)",
)
rows, err := source.Query("SELECT account_uuid, recipient, profile_key, profile_key_credential, request_pending, unidentified_access_mode FROM profile_keys")
if err != nil {
return err
}
@ -638,10 +679,7 @@ func moveProfileKeys(source *sql.DB, dest *sql.DB) error {
}
func moveProfiles(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, recipient, last_update, given_name, family_name, about, emoji, payment_address, badges FROM profiles" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)" +
" AND recipient IN (SELECT DISTINCT rowid FROM recipients)",
)
rows, err := source.Query("SELECT account_uuid, recipient, last_update, given_name, family_name, about, emoji, payment_address, badges FROM profiles")
if err != nil {
return err
}
@ -676,10 +714,7 @@ func moveProfiles(source *sql.DB, dest *sql.DB) error {
}
func moveProfileCapabilities(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, recipient, storage, gv1_migration, sender_key, announcement_group, change_number, stories FROM profile_capabilities" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)" +
" AND recipient IN (SELECT DISTINCT rowid FROM recipients)",
)
rows, err := source.Query("SELECT account_uuid, recipient, storage, gv1_migration, sender_key, announcement_group, change_number, stories FROM profile_capabilities")
if err != nil {
return err
}
@ -713,9 +748,7 @@ func moveProfileCapabilities(source *sql.DB, dest *sql.DB) error {
}
func moveProfileBadges(source *sql.DB, dest *sql.DB) error {
rows, err := source.Query("SELECT account_uuid, id, category, name, description, sprite6 FROM profile_badges" +
" WHERE account_uuid IN (SELECT DISTINCT uuid FROM accounts)",
)
rows, err := source.Query("SELECT account_uuid, id, category, name, description, sprite6 FROM profile_badges")
if err != nil {
return err
}

View file

@ -15,6 +15,7 @@
package session
import (
"github.com/spf13/cobra"
)

File diff suppressed because one or more lines are too long

View file

@ -98,6 +98,30 @@ func (r *AddServerRequest) Submit(conn *signald.Signald) (response string, err e
}
func (r *AnswerCallRequest) Submit(conn *signald.Signald) (err error) {
r.Version = "v1"
r.Type = "answer_call"
if r.ID == "" {
r.ID = signald.GenerateID()
}
responseChannel := conn.GetResponseListener(r.ID)
defer conn.CloseResponseListener(r.ID)
err = conn.RawRequest(r)
if err != nil {
log.Println("signald-go: error submitting request to signald")
return
}
rawResponse := <-responseChannel
if rawResponse.Error != nil {
err = mkerr(rawResponse)
return
}
return err
}
// Submit: approve a request to join a group
func (r *ApproveMembershipRequest) Submit(conn *signald.Signald) (response JsonGroupV2Info, err error) {
r.Version = "v1"
@ -593,6 +617,30 @@ func (r *GroupLinkInfoRequest) Submit(conn *signald.Signald) (response JsonGroup
}
func (r *HangupCallRequest) Submit(conn *signald.Signald) (err error) {
r.Version = "v1"
r.Type = "hangup_call"
if r.ID == "" {
r.ID = signald.GenerateID()
}
responseChannel := conn.GetResponseListener(r.ID)
defer conn.CloseResponseListener(r.ID)
err = conn.RawRequest(r)
if err != nil {
log.Println("signald-go: error submitting request to signald")
return
}
rawResponse := <-responseChannel
if rawResponse.Error != nil {
err = mkerr(rawResponse)
return
}
return err
}
// Submit: Determine whether an account identifier is registered on the Signal service.
func (r *IsIdentifierRegisteredRequest) Submit(conn *signald.Signald) (response BooleanMessage, err error) {
r.Version = "v1"
@ -1079,6 +1127,54 @@ func (r *SendRequest) Submit(conn *signald.Signald) (response SendResponse, err
}
func (r *SendCallOfferRequest) Submit(conn *signald.Signald) (err error) {
r.Version = "v1"
r.Type = "send_call_offer"
if r.ID == "" {
r.ID = signald.GenerateID()
}
responseChannel := conn.GetResponseListener(r.ID)
defer conn.CloseResponseListener(r.ID)
err = conn.RawRequest(r)
if err != nil {
log.Println("signald-go: error submitting request to signald")
return
}
rawResponse := <-responseChannel
if rawResponse.Error != nil {
err = mkerr(rawResponse)
return
}
return err
}
func (r *SendIceUpdatesRequest) Submit(conn *signald.Signald) (err error) {
r.Version = "v1"
r.Type = "send_ice_updates"
if r.ID == "" {
r.ID = signald.GenerateID()
}
responseChannel := conn.GetResponseListener(r.ID)
defer conn.CloseResponseListener(r.ID)
err = conn.RawRequest(r)
if err != nil {
log.Println("signald-go: error submitting request to signald")
return
}
rawResponse := <-responseChannel
if rawResponse.Error != nil {
err = mkerr(rawResponse)
return
}
return err
}
// Submit: send a mobilecoin payment
func (r *SendPaymentRequest) Submit(conn *signald.Signald) (response SendResponse, err error) {
r.Version = "v1"

View file

@ -49,6 +49,16 @@ type AllIdentityKeyList struct {
IdentityKeys []*IdentityKeyList `json:"identity_keys,omitempty" yaml:"identity_keys,omitempty"`
}
type AnswerCallRequest struct {
Request
Account string `json:"account,omitempty" yaml:"account,omitempty"` // the local account to use
CallId int64 `json:"call_id,omitempty" yaml:"call_id,omitempty"` // the id of the call
DestinationDeviceId int32 `json:"destination_device_id,omitempty" yaml:"destination_device_id,omitempty"`
Multiring bool `json:"multiring,omitempty" yaml:"multiring,omitempty"`
Recipient *JsonAddress `json:"recipient,omitempty" yaml:"recipient,omitempty"` // the address of the caller
Sdp string `json:"sdp,omitempty" yaml:"sdp,omitempty"`
}
type AnswerMessage struct {
ID int64 `json:"id,omitempty" yaml:"id,omitempty"`
Opaque string `json:"opaque,omitempty" yaml:"opaque,omitempty"`
@ -284,6 +294,17 @@ type GroupRequestingMember struct {
UUID string `json:"uuid,omitempty" yaml:"uuid,omitempty"`
}
type HangupCallRequest struct {
Request
Account string `json:"account,omitempty" yaml:"account,omitempty"` // the local account to use
CallId int64 `json:"call_id,omitempty" yaml:"call_id,omitempty"` // the id of the call
DestinationDeviceId int32 `json:"destination_device_id,omitempty" yaml:"destination_device_id,omitempty"`
DeviceId int32 `json:"device_id,omitempty" yaml:"device_id,omitempty"`
Multiring bool `json:"multiring,omitempty" yaml:"multiring,omitempty"`
Recipient *JsonAddress `json:"recipient,omitempty" yaml:"recipient,omitempty"` // the address of the caller
Type string `json:"type,omitempty" yaml:"type,omitempty"` // hangup type, options are: normal, accepted, declined, busy, need_permission
}
type HangupMessage struct {
DeviceId int32 `json:"device_id,omitempty" yaml:"device_id,omitempty"`
ID int64 `json:"id,omitempty" yaml:"id,omitempty"`
@ -293,7 +314,9 @@ type HangupMessage struct {
type IceUpdateMessage struct {
ID int64 `json:"id,omitempty" yaml:"id,omitempty"`
Opaque string `json:"opaque,omitempty" yaml:"opaque,omitempty"`
Line int32 `json:"line,omitempty" yaml:"line,omitempty"`
Mid string `json:"mid,omitempty" yaml:"mid,omitempty"`
Opaque string `json:"opaque,omitempty" yaml:"opaque,omitempty"` // the base64 encoded protobuf value.
Sdp string `json:"sdp,omitempty" yaml:"sdp,omitempty"`
}
@ -718,6 +741,26 @@ type ResolveAddressRequest struct {
Partial *JsonAddress `json:"partial,omitempty" yaml:"partial,omitempty"` // The partial address, missing fields
}
type SendCallOfferRequest struct {
Request
Account string `json:"account,omitempty" yaml:"account,omitempty"` // the local account to use
CallId int64 `json:"call_id,omitempty" yaml:"call_id,omitempty"` // the id of the call
CallType string `json:"call_type,omitempty" yaml:"call_type,omitempty"` // must be one of 'audio_call' or 'video_call'
DestinationDeviceId int32 `json:"destination_device_id,omitempty" yaml:"destination_device_id,omitempty"`
Multring bool `json:"multring,omitempty" yaml:"multring,omitempty"`
Recipient *JsonAddress `json:"recipient,omitempty" yaml:"recipient,omitempty"` // the address of the caller
Sdp string `json:"sdp,omitempty" yaml:"sdp,omitempty"`
}
type SendIceUpdatesRequest struct {
Request
Account string `json:"account,omitempty" yaml:"account,omitempty"` // the local account to use
DestinationDeviceId int32 `json:"destination_device_id,omitempty" yaml:"destination_device_id,omitempty"`
Multiring bool `json:"multiring,omitempty" yaml:"multiring,omitempty"`
Recipient *JsonAddress `json:"recipient,omitempty" yaml:"recipient,omitempty"` // the address of the caller
Updates []*IceUpdateMessage `json:"updates,omitempty" yaml:"updates,omitempty"`
}
// SendPaymentRequest: send a mobilecoin payment
type SendPaymentRequest struct {
Request

View file

@ -99,12 +99,13 @@ func (s *Signald) connect() error {
return nil
}
func (s *Signald) Close() error {
return s.socket.Close()
}
// Listen listens for events from signald
func (s *Signald) Listen(c chan client_protocol.BasicResponse) error {
func (s *Signald) Listen(c chan client_protocol.BasicResponse) {
for {
msg, err := s.readNext()
if err == io.EOF {
@ -112,11 +113,7 @@ func (s *Signald) Listen(c chan client_protocol.BasicResponse) error {
if c != nil {
close(c)
}
return nil
}
if err != nil {
return err
return
}
if msg.Type == "unexpected_error" {
@ -178,6 +175,9 @@ func (s *Signald) readNext() (b client_protocol.BasicResponse, err error) {
} else {
err = json.NewDecoder(s.socket).Decode(&b)
}
if err != nil {
log.Println("signald-go: error decoding message from signald:", err)
return
}
return
}