Skip to content

Commit d680276

Browse files
committed
Remove AddSrvHandler
1 parent 8f18018 commit d680276

5 files changed

Lines changed: 47 additions & 58 deletions

File tree

handlers.go

Lines changed: 8 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -2,45 +2,31 @@ package pfcp_networking
22

33
import (
44
"fmt"
5-
"log"
65
"net"
76

87
"github.com/wmnsk/go-pfcp/ie"
98
"github.com/wmnsk/go-pfcp/message"
109
)
1110

12-
func handleHeartbeatRequest(entity *PFCPEntity, senderAddr net.Addr, msg message.Message) error {
13-
res := message.NewHeartbeatResponse(msg.Sequence(), entity.RecoveryTimeStamp)
11+
func handleHeartbeatRequest(entity PFCPEntityInterface, senderAddr net.Addr, msg message.Message) error {
12+
res := message.NewHeartbeatResponse(msg.Sequence(), entity.RecoveryTimeStamp())
1413
return entity.ReplyTo(senderAddr, msg, res)
1514
}
1615

17-
func handleAssociationSetupRequest(srv *PFCPServerEntity, senderAddr net.Addr, msg message.Message) error {
16+
func handleAssociationSetupRequest(entity PFCPEntityInterface, senderAddr net.Addr, msg message.Message) error {
1817
m, ok := msg.(*message.AssociationSetupRequest)
1918
if !ok {
2019
return fmt.Errorf("Issue with Association Setup Request")
2120
}
22-
peer, err := NewPFCPPeer(&srv.PFCPEntity, m.NodeID)
21+
peer, err := NewPFCPPeer(entity, m.NodeID)
2322
if err != nil {
2423
return err
2524
}
26-
association := NewAssociation(peer, srv)
27-
err = srv.CreatePFCPAssociation(&association)
25+
association := NewAssociation(peer, entity)
26+
err = entity.CreatePFCPAssociation(&association)
2827
if err != nil {
2928
return err
3029
}
31-
switch {
32-
case msg == nil:
33-
log.Println("msg is nil")
34-
fallthrough
35-
case srv == nil:
36-
log.Println("srv is nil")
37-
fallthrough
38-
case srv.NodeID == nil:
39-
log.Println("srv.NodeID is nil")
40-
fallthrough
41-
case srv.RecoveryTimeStamp == nil:
42-
log.Println("srv.RecoveryTimeStamp is nil")
43-
}
44-
res := message.NewAssociationSetupResponse(msg.Sequence(), srv.NodeID, ie.NewCause(ie.CauseRequestAccepted), srv.RecoveryTimeStamp)
45-
return srv.ReplyTo(senderAddr, msg, res)
30+
res := message.NewAssociationSetupResponse(msg.Sequence(), entity.NodeID(), ie.NewCause(ie.CauseRequestAccepted), entity.RecoveryTimeStamp())
31+
return entity.ReplyTo(senderAddr, msg, res)
4632
}

pfcp_client_entity.go

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ func NewPFCPClientEntity(nodeID string) PFCPClientEntity {
2020
associations: make(map[string]*PFCPAssociation),
2121
muAssociations: sync.Mutex{},
2222
}
23+
e.iface = e
2324
return e
2425
}
2526

2627
// Add an association to the association table
27-
func (e *PFCPClientEntity) createPFCPAssociation(association *PFCPAssociation) error {
28+
func (e PFCPClientEntity) CreatePFCPAssociation(association *PFCPAssociation) error {
2829
nid, err := association.NodeID.NodeID()
2930
if err != nil {
3031
return err
@@ -36,7 +37,7 @@ func (e *PFCPClientEntity) createPFCPAssociation(association *PFCPAssociation) e
3637
}
3738

3839
// Remove an association from the association table
39-
func (e *PFCPClientEntity) RemovePFCPAssociation(association *PFCPAssociation) error {
40+
func (e PFCPClientEntity) RemovePFCPAssociation(association *PFCPAssociation) error {
4041
nid, err := association.NodeID.NodeID()
4142
if err != nil {
4243
return err
@@ -49,7 +50,7 @@ func (e *PFCPClientEntity) RemovePFCPAssociation(association *PFCPAssociation) e
4950

5051
// Returns an existing PFCP Association
5152
func (e *PFCPClientEntity) GetPFCPAssociation(nodeID *ie.IE) (association *PFCPAssociation, err error) {
52-
nid, err := e.NodeID.NodeID()
53+
nid, err := e.NodeID().NodeID()
5354
if err != nil {
5455
return nil, err
5556
}
@@ -71,7 +72,7 @@ func (e *PFCPClientEntity) NewPFCPAssociation(peer *PFCPPeer) (association *PFCP
7172
if _, exists := e.associations[nid]; exists {
7273
return nil, fmt.Errorf("Only one association shall be setup between given pair of CP and UP functions.")
7374
}
74-
sar := message.NewAssociationSetupRequest(0, e.NodeID, e.RecoveryTimeStamp)
75+
sar := message.NewAssociationSetupRequest(0, e.NodeID(), e.RecoveryTimeStamp())
7576
resp, err := peer.Send(sar)
7677
if err != nil {
7778
return nil, err
@@ -87,7 +88,7 @@ func (e *PFCPClientEntity) NewPFCPAssociation(peer *PFCPPeer) (association *PFCP
8788
}
8889
if cause == ie.CauseRequestAccepted {
8990
a := &PFCPAssociation{PFCPPeer: peer, localEntity: e}
90-
e.createPFCPAssociation(a)
91+
e.CreatePFCPAssociation(a)
9192
return a, nil
9293
}
9394
return nil, fmt.Errorf("Associaton setup request rejected")

pfcp_entity.go

Lines changed: 25 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -13,10 +13,14 @@ import (
1313
)
1414

1515
type PFCPEntityInterface interface {
16+
NodeID() *ie.IE
17+
RecoveryTimeStamp() *ie.IE
18+
CreatePFCPAssociation(association *PFCPAssociation) error
1619
RemovePFCPAssociation(association *PFCPAssociation) error
20+
ReplyTo(ipAddress net.Addr, requestMessage message.Message, responseMessage message.Message) error
1721
}
1822

19-
func (entity *PFCPEntity) ReplyTo(ipAddress net.Addr, requestMessage message.Message, responseMessage message.Message) error {
23+
func (entity PFCPEntity) ReplyTo(ipAddress net.Addr, requestMessage message.Message, responseMessage message.Message) error {
2024
if !pfcputil.IsMessageTypeRequest(requestMessage.MessageType()) {
2125
return fmt.Errorf("requestMessage shall be a Request Message")
2226
}
@@ -40,14 +44,22 @@ func (entity *PFCPEntity) ReplyTo(ipAddress net.Addr, requestMessage message.Mes
4044
return nil
4145
}
4246

43-
type handler = func(entity *PFCPEntity, senderAddr net.Addr, msg message.Message) error
47+
type handler = func(entity PFCPEntityInterface, senderAddr net.Addr, msg message.Message) error
4448

4549
type PFCPEntity struct {
46-
NodeID *ie.IE
47-
RecoveryTimeStamp *ie.IE
50+
nodeID *ie.IE
51+
recoveryTimeStamp *ie.IE
4852
handlers map[pfcputil.MessageType]handler
4953
conn *net.UDPConn
5054
mu sync.Mutex
55+
iface PFCPEntityInterface
56+
}
57+
58+
func (e PFCPEntity) NodeID() *ie.IE {
59+
return e.nodeID
60+
}
61+
func (e PFCPEntity) RecoveryTimeStamp() *ie.IE {
62+
return e.recoveryTimeStamp
5163
}
5264

5365
func newDefaultPFCPEntityHandlers() map[pfcputil.MessageType]handler {
@@ -58,17 +70,21 @@ func newDefaultPFCPEntityHandlers() map[pfcputil.MessageType]handler {
5870

5971
func NewPFCPEntity(nodeID string) PFCPEntity {
6072
return PFCPEntity{
61-
NodeID: pfcputil.CreateNodeID(nodeID),
62-
RecoveryTimeStamp: nil,
73+
nodeID: pfcputil.CreateNodeID(nodeID),
74+
recoveryTimeStamp: nil,
6375
handlers: newDefaultPFCPEntityHandlers(),
6476
conn: nil,
6577
mu: sync.Mutex{},
78+
iface: nil,
6679
}
6780
}
6881

6982
func (e *PFCPEntity) Start() error {
70-
e.RecoveryTimeStamp = ie.NewRecoveryTimeStamp(time.Now())
71-
ipAddr, err := e.NodeID.NodeID()
83+
if e.iface == nil {
84+
return fmt.Errorf("PFCPEntity is incorrectly initialized")
85+
}
86+
e.recoveryTimeStamp = ie.NewRecoveryTimeStamp(time.Now())
87+
ipAddr, err := e.NodeID().NodeID()
7288
if err != nil {
7389
return err
7490
}
@@ -95,7 +111,7 @@ func (e *PFCPEntity) Start() error {
95111
continue
96112
}
97113
if f, exists := e.handlers[msg.MessageType()]; exists {
98-
err := f(e, addr, msg)
114+
err := f(e.iface, addr, msg)
99115
if err != nil {
100116
log.Println(err)
101117
}

pfcp_peer.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ type messageChan chan []byte
1515

1616
type PFCPPeer struct {
1717
NodeID *ie.IE
18-
Srv *PFCPEntity
18+
Srv PFCPEntityInterface
1919
conn *net.UDPConn
2020
udpAddr *net.UDPAddr
2121
seq uint32
@@ -24,7 +24,7 @@ type PFCPPeer struct {
2424
stop bool
2525
}
2626

27-
func NewPFCPPeer(srv *PFCPEntity, nodeID *ie.IE) (peer *PFCPPeer, err error) {
27+
func NewPFCPPeer(srv PFCPEntityInterface, nodeID *ie.IE) (peer *PFCPPeer, err error) {
2828
ipAddr, err := nodeID.NodeID()
2929
if err != nil {
3030
return nil, err
@@ -187,12 +187,12 @@ func (peer *PFCPPeer) Send(msg message.Message) (m message.Message, err error) {
187187

188188
// Send an Heartbeat request, return true if the PFCP peer is alive.
189189
func (peer *PFCPPeer) IsAlive() (res bool, err error) {
190-
if peer.Srv.RecoveryTimeStamp == nil {
190+
if peer.Srv.RecoveryTimeStamp() == nil {
191191
return false, fmt.Errorf("SMF is not started.")
192192
}
193193
hreq := message.NewHeartbeatRequest(
194194
0,
195-
peer.Srv.RecoveryTimeStamp,
195+
peer.Srv.RecoveryTimeStamp(),
196196
nil)
197197

198198
_, err = peer.Send(hreq)

pfcp_server_entity.go

Lines changed: 4 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,9 @@
11
package pfcp_networking
22

33
import (
4-
"fmt"
54
"net"
65
"sync"
76

8-
"github.com/louisroyer/go-pfcp-networking/pfcputil"
97
"github.com/wmnsk/go-pfcp/message"
108
)
119

@@ -22,29 +20,17 @@ func NewPFCPServerEntity(nodeID string) PFCPServerEntity {
2220
associations: make(map[string]*PFCPAssociation),
2321
muAssociations: sync.Mutex{},
2422
}
23+
e.iface = e
2524
e.initDefaultHandlers()
2625
return e
2726
}
2827

2928
func (e *PFCPServerEntity) initDefaultHandlers() error {
30-
return e.AddServerHandler(message.MsgTypeAssociationSetupRequest, handleAssociationSetupRequest)
31-
}
32-
33-
func (e *PFCPServerEntity) AddServerHandler(t pfcputil.MessageType, h serverHandler) error {
34-
f := func(entity *PFCPEntity, senderAddr net.Addr, msg message.Message) error {
35-
if e == nil {
36-
return fmt.Errorf("PFCPServerEntity is nil")
37-
}
38-
if e.RecoveryTimeStamp == nil {
39-
return fmt.Errorf("RecoveryTimestamp is nil")
40-
}
41-
return h(e, senderAddr, msg)
42-
}
43-
return e.AddHandler(t, f)
29+
return e.AddHandler(message.MsgTypeAssociationSetupRequest, handleAssociationSetupRequest)
4430
}
4531

4632
// Add an association to the association table
47-
func (e *PFCPServerEntity) CreatePFCPAssociation(association *PFCPAssociation) error {
33+
func (e PFCPServerEntity) CreatePFCPAssociation(association *PFCPAssociation) error {
4834
nid, err := association.NodeID.NodeID()
4935
if err != nil {
5036
return err
@@ -56,7 +42,7 @@ func (e *PFCPServerEntity) CreatePFCPAssociation(association *PFCPAssociation) e
5642
}
5743

5844
// Remove an association from the association table
59-
func (e *PFCPServerEntity) RemovePFCPAssociation(association *PFCPAssociation) error {
45+
func (e PFCPServerEntity) RemovePFCPAssociation(association *PFCPAssociation) error {
6046
nid, err := association.NodeID.NodeID()
6147
if err != nil {
6248
return err

0 commit comments

Comments
 (0)