1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
// Msg Types
//
// All messages received from the gateway are first decoded to the BaseMsg
// type. The BaseMsg type extracts the following JSON from the message:
// {
// "janus": <Type>,
// "transaction": <ID>,
// "session_id": <Session>,
// "sender": <Handle>
// }
// The Type field is inspected to determine which concrete type
// to decode the message to, while the other fields (ID/Session/Handle) are
// inspected to determine where the message should be delivered. Messages
// with an ID field defined are considered responses to previous requests, and
// will be passed directly to requester. Messages without an ID field are
// considered unsolicited events from the gateway and are expected to have
// both Session and Handle fields defined. They will be passed to the Events
// channel of the related Handle and can be read from there.
package janus
var msgtypes = map[string]func() interface{}{
"error": func() interface{} { return &ErrorMsg{} },
"success": func() interface{} { return &SuccessMsg{} },
"detached": func() interface{} { return &DetachedMsg{} },
"server_info": func() interface{} { return &InfoMsg{} },
"ack": func() interface{} { return &AckMsg{} },
"event": func() interface{} { return &EventMsg{} },
"webrtcup": func() interface{} { return &WebRTCUpMsg{} },
"media": func() interface{} { return &MediaMsg{} },
"hangup": func() interface{} { return &HangupMsg{} },
"slowlink": func() interface{} { return &SlowLinkMsg{} },
"timeout": func() interface{} { return &TimeoutMsg{} },
}
type BaseMsg struct {
Type string `json:"janus"`
ID string `json:"transaction"`
Session uint64 `json:"session_id"`
Handle uint64 `json:"sender"`
}
type ErrorMsg struct {
Err ErrorData `json:"error"`
}
type ErrorData struct {
Code int
Reason string
}
func (err *ErrorMsg) Error() string {
return err.Err.Reason
}
type SuccessMsg struct {
Data SuccessData
PluginData PluginData
Session uint64 `json:"session_id"`
Handle uint64 `json:"sender"`
}
type SuccessData struct {
ID uint64
}
type DetachedMsg struct{}
type InfoMsg struct {
Name string
Version int
VersionString string `json:"version_string"`
Author string
DataChannels bool `json:"data_channels"`
IPv6 bool `json:"ipv6"`
LocalIP string `json:"local-ip"`
IceTCP bool `json:"ice-tcp"`
Transports map[string]PluginInfo
Plugins map[string]PluginInfo
}
type PluginInfo struct {
Name string
Author string
Description string
Version int
VersionString string `json:"version_string"`
}
type AckMsg struct{}
type EventMsg struct {
Plugindata PluginData
Jsep map[string]interface{}
Session uint64 `json:"session_id"`
Handle uint64 `json:"sender"`
}
type PluginData struct {
Plugin string
Data map[string]interface{}
}
type WebRTCUpMsg struct {
Session uint64 `json:"session_id"`
Handle uint64 `json:"sender"`
}
type TimeoutMsg struct {
Session uint64 `json:"session_id"`
}
type SlowLinkMsg struct {
Uplink bool
Lost int64
}
type MediaMsg struct {
Type string
Receiving bool
}
type HangupMsg struct {
Reason string
Session uint64 `json:"session_id"`
Handle uint64 `json:"sender"`
}
|