Compare commits

...

1 commit

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

File diff suppressed because one or more lines are too long

View file

@ -284,6 +284,13 @@ func mkerr(response client_protocol.BasicResponse) error {
return err return err
} }
return result return result
case "UnsupportedGroupError":
result := UnsupportedGroupError{}
err := json.Unmarshal(response.Error, &result)
if err != nil {
return err
}
return result
case "UntrustedIdentityError": case "UntrustedIdentityError":
result := UntrustedIdentityError{} result := UntrustedIdentityError{}
err := json.Unmarshal(response.Error, &result) err := json.Unmarshal(response.Error, &result)
@ -645,6 +652,15 @@ func (e UnregisteredUserError) Error() string {
return e.Message return e.Message
} }
// UnsupportedGroupError: returned in response to use v1 groups, which are no longer supported
type UnsupportedGroupError struct {
Message string `json:"message,omitempty" yaml:"message,omitempty"`
}
func (e UnsupportedGroupError) Error() string {
return e.Message
}
type UntrustedIdentityError struct { type UntrustedIdentityError struct {
Identifier string `json:"identifier,omitempty" yaml:"identifier,omitempty"` Identifier string `json:"identifier,omitempty" yaml:"identifier,omitempty"`
IdentityKey **IdentityKey `json:"identity_key,omitempty" yaml:"identity_key,omitempty"` IdentityKey **IdentityKey `json:"identity_key,omitempty" yaml:"identity_key,omitempty"`

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 // Submit: approve a request to join a group
func (r *ApproveMembershipRequest) Submit(conn *signald.Signald) (response JsonGroupV2Info, err error) { func (r *ApproveMembershipRequest) Submit(conn *signald.Signald) (response JsonGroupV2Info, err error) {
r.Version = "v1" 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. // Submit: Determine whether an account identifier is registered on the Signal service.
func (r *IsIdentifierRegisteredRequest) Submit(conn *signald.Signald) (response BooleanMessage, err error) { func (r *IsIdentifierRegisteredRequest) Submit(conn *signald.Signald) (response BooleanMessage, err error) {
r.Version = "v1" 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 // Submit: send a mobilecoin payment
func (r *SendPaymentRequest) Submit(conn *signald.Signald) (response SendResponse, err error) { func (r *SendPaymentRequest) Submit(conn *signald.Signald) (response SendResponse, err error) {
r.Version = "v1" r.Version = "v1"

View file

@ -49,6 +49,16 @@ type AllIdentityKeyList struct {
IdentityKeys []*IdentityKeyList `json:"identity_keys,omitempty" yaml:"identity_keys,omitempty"` 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 { type AnswerMessage struct {
ID int64 `json:"id,omitempty" yaml:"id,omitempty"` ID int64 `json:"id,omitempty" yaml:"id,omitempty"`
Opaque string `json:"opaque,omitempty" yaml:"opaque,omitempty"` Opaque string `json:"opaque,omitempty" yaml:"opaque,omitempty"`
@ -263,7 +273,7 @@ type GroupLinkInfoRequest struct {
type GroupList struct { type GroupList struct {
Groups []*JsonGroupV2Info `json:"groups,omitempty" yaml:"groups,omitempty"` Groups []*JsonGroupV2Info `json:"groups,omitempty" yaml:"groups,omitempty"`
LegacyGroups []*JsonGroupInfo `json:"legacyGroups,omitempty" yaml:"legacyGroups,omitempty"` LegacyGroups []*JsonGroupInfo `json:"legacyGroups,omitempty" yaml:"legacyGroups,omitempty"` // list of legacy (v1) groups, no longer supported (will always be empty)
} }
type GroupMember struct { type GroupMember struct {
@ -284,6 +294,17 @@ type GroupRequestingMember struct {
UUID string `json:"uuid,omitempty" yaml:"uuid,omitempty"` 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 { type HangupMessage struct {
DeviceId int32 `json:"device_id,omitempty" yaml:"device_id,omitempty"` DeviceId int32 `json:"device_id,omitempty" yaml:"device_id,omitempty"`
ID int64 `json:"id,omitempty" yaml:"id,omitempty"` ID int64 `json:"id,omitempty" yaml:"id,omitempty"`
@ -293,7 +314,9 @@ type HangupMessage struct {
type IceUpdateMessage struct { type IceUpdateMessage struct {
ID int64 `json:"id,omitempty" yaml:"id,omitempty"` 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"` Sdp string `json:"sdp,omitempty" yaml:"sdp,omitempty"`
} }
@ -492,6 +515,7 @@ type JsonSentTranscriptMessage struct {
ExpirationStartTimestamp int64 `json:"expirationStartTimestamp,omitempty" yaml:"expirationStartTimestamp,omitempty"` ExpirationStartTimestamp int64 `json:"expirationStartTimestamp,omitempty" yaml:"expirationStartTimestamp,omitempty"`
IsRecipientUpdate bool `json:"isRecipientUpdate,omitempty" yaml:"isRecipientUpdate,omitempty"` IsRecipientUpdate bool `json:"isRecipientUpdate,omitempty" yaml:"isRecipientUpdate,omitempty"`
Message *JsonDataMessage `json:"message,omitempty" yaml:"message,omitempty"` Message *JsonDataMessage `json:"message,omitempty" yaml:"message,omitempty"`
Story *StoryMessage `json:"story,omitempty" yaml:"story,omitempty"`
Timestamp int64 `json:"timestamp,omitempty" yaml:"timestamp,omitempty"` Timestamp int64 `json:"timestamp,omitempty" yaml:"timestamp,omitempty"`
UnidentifiedStatus map[string]string `json:"unidentifiedStatus,omitempty" yaml:"unidentifiedStatus,omitempty"` UnidentifiedStatus map[string]string `json:"unidentifiedStatus,omitempty" yaml:"unidentifiedStatus,omitempty"`
} }
@ -599,7 +623,8 @@ type Profile struct {
Address *JsonAddress `json:"address,omitempty" yaml:"address,omitempty"` Address *JsonAddress `json:"address,omitempty" yaml:"address,omitempty"`
Avatar string `json:"avatar,omitempty" yaml:"avatar,omitempty"` // path to avatar on local disk Avatar string `json:"avatar,omitempty" yaml:"avatar,omitempty"` // path to avatar on local disk
Capabilities *Capabilities `json:"capabilities,omitempty" yaml:"capabilities,omitempty"` Capabilities *Capabilities `json:"capabilities,omitempty" yaml:"capabilities,omitempty"`
Color string `json:"color,omitempty" yaml:"color,omitempty"` // color of the chat with this user Color string `json:"color,omitempty" yaml:"color,omitempty"` // color of the chat with this user
ContactName string `json:"contact_name,omitempty" yaml:"contact_name,omitempty"` // The user's name from local contact names
Emoji string `json:"emoji,omitempty" yaml:"emoji,omitempty"` Emoji string `json:"emoji,omitempty" yaml:"emoji,omitempty"`
ExpirationTime int32 `json:"expiration_time,omitempty" yaml:"expiration_time,omitempty"` ExpirationTime int32 `json:"expiration_time,omitempty" yaml:"expiration_time,omitempty"`
InboxPosition int32 `json:"inbox_position,omitempty" yaml:"inbox_position,omitempty"` InboxPosition int32 `json:"inbox_position,omitempty" yaml:"inbox_position,omitempty"`
@ -716,6 +741,26 @@ type ResolveAddressRequest struct {
Partial *JsonAddress `json:"partial,omitempty" yaml:"partial,omitempty"` // The partial address, missing fields 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 // SendPaymentRequest: send a mobilecoin payment
type SendPaymentRequest struct { type SendPaymentRequest struct {
Request Request