forked from notedit/janus-go
/
types.go
127 lines (108 loc) · 3.22 KB
/
types.go
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"`
}