-
Notifications
You must be signed in to change notification settings - Fork 14
/
signal_channel.go
109 lines (96 loc) · 3.19 KB
/
signal_channel.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
package controllers
import (
"strings"
log "github.com/sirupsen/logrus"
"github.com/nttdots/go-dots/dots_common"
"github.com/nttdots/go-dots/dots_server/models"
"github.com/nttdots/go-dots/libcoap"
)
/*
* Parent controller for the mitigationRequest and sessionConfiguration APIs
*/
type SignalChannel struct {
Controller
}
/*
* Select child controller to handle request based on uri prefix
* prefix = 'mitigate' -> invoke MitigationRequest controller
* prefix = 'config' -> invoke MitigationRequest controller
*/
func (p *SignalChannel) forward(req Request, customer *models.Customer) (res Response, err error) {
log.Debug("[forward] SignalChannel")
log.Debugf("req.Uri=%+v, req.Type=%+v", req.Uri, req.Type)
var controller ControllerInterface
// Select controller based on prefix
for i := range req.Uri {
if strings.HasPrefix(req.Uri[i], "mitigate") {
log.Debug("Call MitigationRequest controller")
controller = &MitigationRequest{}
break;
} else if strings.HasPrefix(req.Uri[i], "config") {
log.Debug("Call SessionConfig controller")
controller = &SessionConfiguration{}
break;
} else if strings.HasPrefix(req.Uri[i], "tm-setup") {
log.Debug("Call TelemetrySetupRequest controller")
controller = &TelemetrySetupRequest{}
break;
} else if strings.HasPrefix(req.Uri[i], "tm") {
log.Debug("Call TelemetryPreMitigationRequest controller")
controller = &TelemetryPreMitigationRequest{}
break;
}
}
if (controller == nil) {
log.Debug ("No controller supports this kind of request")
return Response{
Code: dots_common.NotFound,
Type: dots_common.NonConfirmable,
}, nil
}
// Invoke controller service method to process request
switch req.Code {
case libcoap.RequestGet:
return controller.HandleGet(req, customer)
case libcoap.RequestPost:
return controller.HandlePost(req, customer)
case libcoap.RequestPut:
return controller.HandlePut(req, customer)
case libcoap.RequestDelete:
return controller.HandleDelete(req, customer)
default:
log.Debug ("No controller supports this type of request")
return Response{
Code: dots_common.NotFound,
Type: dots_common.NonConfirmable,
}, nil
}
}
/*
* Handles mitigationRequest, sessionConfiguration GET requests.
*/
func (p *SignalChannel) HandleGet(req Request, customer *models.Customer) (res Response, err error) {
log.Debug("[HandleGet] SignalChannel")
return p.forward(req, customer)
}
/*
* Handles mitigationRequest, sessionConfiguration POST requests.
*/
func (p *SignalChannel) HandlePost(req Request, customer *models.Customer) (res Response, err error) {
log.Debug("[HandlePost] SignalChannel")
return p.forward(req, customer)
}
/*
* Handles mitigationRequest, sessionConfiguration DELETE requests.
*/
func (p *SignalChannel) HandleDelete(req Request, customer *models.Customer) (res Response, err error) {
log.Debug("[HandleDelete] SignalChannel")
return p.forward(req, customer)
}
/*
* Handles mitigationRequest, sessionConfiguration PUT requests.
*/
func (p *SignalChannel) HandlePut(req Request, customer *models.Customer) (res Response, err error) {
log.Debug("[HandlePut] SignalChannel")
return p.forward(req, customer)
}