diff options
Diffstat (limited to 'vendor/go.mau.fi/whatsmeow/call.go')
-rw-r--r-- | vendor/go.mau.fi/whatsmeow/call.go | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/vendor/go.mau.fi/whatsmeow/call.go b/vendor/go.mau.fi/whatsmeow/call.go new file mode 100644 index 00000000..e48e791c --- /dev/null +++ b/vendor/go.mau.fi/whatsmeow/call.go @@ -0,0 +1,73 @@ +// Copyright (c) 2021 Tulir Asokan +// +// This Source Code Form is subject to the terms of the Mozilla Public +// License, v. 2.0. If a copy of the MPL was not distributed with this +// file, You can obtain one at http://mozilla.org/MPL/2.0/. + +package whatsmeow + +import ( + "time" + + waBinary "go.mau.fi/whatsmeow/binary" + "go.mau.fi/whatsmeow/types" + "go.mau.fi/whatsmeow/types/events" +) + +func (cli *Client) handleCallEvent(node *waBinary.Node) { + go cli.sendAck(node) + + if len(node.GetChildren()) != 1 { + cli.dispatchEvent(&events.UnknownCallEvent{Node: node}) + return + } + ag := node.AttrGetter() + child := node.GetChildren()[0] + cag := child.AttrGetter() + basicMeta := types.BasicCallMeta{ + From: ag.JID("from"), + Timestamp: time.Unix(ag.Int64("t"), 0), + CallCreator: cag.JID("call-creator"), + CallID: cag.String("call-id"), + } + switch child.Tag { + case "offer": + cli.dispatchEvent(&events.CallOffer{ + BasicCallMeta: basicMeta, + CallRemoteMeta: types.CallRemoteMeta{ + RemotePlatform: ag.String("platform"), + RemoteVersion: ag.String("version"), + }, + Data: &child, + }) + case "offer_notice": + cli.dispatchEvent(&events.CallOfferNotice{ + BasicCallMeta: basicMeta, + Media: cag.String("media"), + Type: cag.String("type"), + Data: &child, + }) + case "relaylatency": + cli.dispatchEvent(&events.CallRelayLatency{ + BasicCallMeta: basicMeta, + Data: &child, + }) + case "accept": + cli.dispatchEvent(&events.CallAccept{ + BasicCallMeta: basicMeta, + CallRemoteMeta: types.CallRemoteMeta{ + RemotePlatform: ag.String("platform"), + RemoteVersion: ag.String("version"), + }, + Data: &child, + }) + case "terminate": + cli.dispatchEvent(&events.CallTerminate{ + BasicCallMeta: basicMeta, + Reason: cag.String("reason"), + Data: &child, + }) + default: + cli.dispatchEvent(&events.UnknownCallEvent{Node: node}) + } +} |