Skip to content
This repository has been archived by the owner on Oct 20, 2024. It is now read-only.

Commit

Permalink
chore: Manages messages centrally
Browse files Browse the repository at this point in the history
  • Loading branch information
gruyaume committed Jan 8, 2024
1 parent db505d5 commit fb83a84
Show file tree
Hide file tree
Showing 10 changed files with 84 additions and 119 deletions.
4 changes: 2 additions & 2 deletions messages/heartbeat.go
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ func (msg HeartbeatResponse) GetMessageTypeString() string {
return "Heartbeat Response"
}

func DeserializeHeartbeatRequest(data []byte) (PFCPMessage, error) {
func DeserializeHeartbeatRequest(data []byte) (HeartbeatRequest, error) {
ies, err := ie.ParseInformationElements(data)
var recoveryTimeStamp ie.RecoveryTimeStamp
var sourceIPAddress ie.SourceIPAddress
Expand All @@ -62,7 +62,7 @@ func DeserializeHeartbeatRequest(data []byte) (PFCPMessage, error) {
}, err
}

func DeserializeHeartbeatResponse(data []byte) (PFCPMessage, error) {
func DeserializeHeartbeatResponse(data []byte) (HeartbeatResponse, error) {
ies, err := ie.ParseInformationElements(data)
var recoveryTimeStamp ie.RecoveryTimeStamp
for _, elem := range ies {
Expand Down
49 changes: 0 additions & 49 deletions messages/messages.go
Original file line number Diff line number Diff line change
@@ -1,8 +1,6 @@
package messages

import (
"fmt"

"github.com/dot-5g/pfcp/ie"
)

Expand Down Expand Up @@ -32,50 +30,3 @@ type PFCPMessage interface {
GetMessageType() MessageType
GetMessageTypeString() string
}

type DeserializerFunc func([]byte) (PFCPMessage, error)

var messageTypeDeserializers = map[MessageType]DeserializerFunc{
HeartbeatRequestMessageType: DeserializeHeartbeatRequest,
HeartbeatResponseMessageType: DeserializeHeartbeatResponse,
PFCPAssociationSetupRequestMessageType: DeserializePFCPAssociationSetupRequest,
PFCPAssociationSetupResponseMessageType: DeserializePFCPAssociationSetupResponse,
PFCPAssociationUpdateRequestMessageType: DeserializePFCPAssociationUpdateRequest,
PFCPAssociationUpdateResponseMessageType: DeserializePFCPAssociationUpdateResponse,
PFCPAssociationReleaseRequestMessageType: DeserializePFCPAssociationReleaseRequest,
PFCPAssociationReleaseResponseMessageType: DeserializePFCPAssociationReleaseResponse,
PFCPNodeReportRequestMessageType: DeserializePFCPNodeReportRequest,
PFCPNodeReportResponseMessageType: DeserializePFCPNodeReportResponse,
PFCPSessionEstablishmentRequestMessageType: DeserializePFCPSessionEstablishmentRequest,
PFCPSessionEstablishmentResponseMessageType: DeserializePFCPSessionEstablishmentResponse,
PFCPSessionDeletionRequestMessageType: DeserializePFCPSessionDeletionRequest,
PFCPSessionDeletionResponseMessageType: DeserializePFCPSessionDeletionResponse,
PFCPSessionReportRequestMessageType: DeserializePFCPSessionReportRequest,
PFCPSessionReportResponseMessageType: DeserializePFCPSessionReportResponse,
}

func DeserializePFCPMessage(payload []byte) (Header, PFCPMessage, error) {
header, err := DeserializeHeader(payload)
if err != nil {
return header, nil, err
}

payloadOffset := 8
if header.S {
payloadOffset = 16
}

if len(payload) < payloadOffset {
return header, nil, fmt.Errorf("insufficient data for payload message")
}
payloadMessage := payload[payloadOffset:]
if deserializer, exists := messageTypeDeserializers[header.MessageType]; exists {
msg, err := deserializer(payloadMessage)
if err != nil {
return header, nil, fmt.Errorf("error deserializing payload message: %v", err)
}
return header, msg, nil
}

return header, nil, fmt.Errorf("unsupported message type: %d", header.MessageType)
}
4 changes: 2 additions & 2 deletions messages/pfcp_association_release.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func (msg PFCPAssociationReleaseResponse) GetMessageTypeString() string {
return "PFCP Association Release Response"
}

func DeserializePFCPAssociationReleaseRequest(data []byte) (PFCPMessage, error) {
func DeserializePFCPAssociationReleaseRequest(data []byte) (PFCPAssociationReleaseRequest, error) {
ies, err := ie.ParseInformationElements(data)
var nodeID ie.NodeID
for _, elem := range ies {
Expand All @@ -50,7 +50,7 @@ func DeserializePFCPAssociationReleaseRequest(data []byte) (PFCPMessage, error)
}, err
}

func DeserializePFCPAssociationReleaseResponse(data []byte) (PFCPMessage, error) {
func DeserializePFCPAssociationReleaseResponse(data []byte) (PFCPAssociationReleaseResponse, error) {
ies, err := ie.ParseInformationElements(data)
var nodeID ie.NodeID
var cause ie.Cause
Expand Down
4 changes: 2 additions & 2 deletions messages/pfcp_association_setup.go
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,7 @@ func (msg PFCPAssociationSetupResponse) GetMessageTypeString() string {
return "PFCP Association Setup Response"
}

func DeserializePFCPAssociationSetupRequest(data []byte) (PFCPMessage, error) {
func DeserializePFCPAssociationSetupRequest(data []byte) (PFCPAssociationSetupRequest, error) {
ies, err := ie.ParseInformationElements(data)
var nodeID ie.NodeID
var recoveryTimeStamp ie.RecoveryTimeStamp
Expand All @@ -73,7 +73,7 @@ func DeserializePFCPAssociationSetupRequest(data []byte) (PFCPMessage, error) {
}, err
}

func DeserializePFCPAssociationSetupResponse(data []byte) (PFCPMessage, error) {
func DeserializePFCPAssociationSetupResponse(data []byte) (PFCPAssociationSetupResponse, error) {
ies, err := ie.ParseInformationElements(data)
var nodeID ie.NodeID
var cause ie.Cause
Expand Down
4 changes: 2 additions & 2 deletions messages/pfcp_association_update.go
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ func (msg PFCPAssociationUpdateResponse) GetMessageTypeString() string {
return "PFCP Association Update Response"
}

func DeserializePFCPAssociationUpdateRequest(data []byte) (PFCPMessage, error) {
func DeserializePFCPAssociationUpdateRequest(data []byte) (PFCPAssociationUpdateRequest, error) {
ies, err := ie.ParseInformationElements(data)
var nodeID ie.NodeID
for _, elem := range ies {
Expand All @@ -50,7 +50,7 @@ func DeserializePFCPAssociationUpdateRequest(data []byte) (PFCPMessage, error) {
}, err
}

func DeserializePFCPAssociationUpdateResponse(data []byte) (PFCPMessage, error) {
func DeserializePFCPAssociationUpdateResponse(data []byte) (PFCPAssociationUpdateResponse, error) {
ies, err := ie.ParseInformationElements(data)
var nodeID ie.NodeID
var cause ie.Cause
Expand Down
4 changes: 2 additions & 2 deletions messages/pfcp_node_report.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func (msg PFCPNodeReportResponse) GetMessageTypeString() string {
return "PFCP Node Report Response"
}

func DeserializePFCPNodeReportRequest(data []byte) (PFCPMessage, error) {
func DeserializePFCPNodeReportRequest(data []byte) (PFCPNodeReportRequest, error) {
ies, err := ie.ParseInformationElements(data)
var nodeID ie.NodeID
var nodeReportType ie.NodeReportType
Expand All @@ -59,7 +59,7 @@ func DeserializePFCPNodeReportRequest(data []byte) (PFCPMessage, error) {
}, err
}

func DeserializePFCPNodeReportResponse(data []byte) (PFCPMessage, error) {
func DeserializePFCPNodeReportResponse(data []byte) (PFCPNodeReportResponse, error) {
ies, err := ie.ParseInformationElements(data)
var nodeID ie.NodeID
var cause ie.Cause
Expand Down
10 changes: 7 additions & 3 deletions messages/pfcp_session_deletion.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,12 +32,16 @@ func (msg PFCPSessionDeletionResponse) GetMessageTypeString() string {
return "PFCP Session Deletion Response"
}

func DeserializePFCPSessionDeletionRequest(data []byte) (PFCPMessage, error) {
func DeserializePFCPSessionDeletionRequest(data []byte) (PFCPSessionDeletionRequest, error) {
return PFCPSessionDeletionRequest{}, nil
}

func DeserializePFCPSessionDeletionResponse(data []byte) (PFCPMessage, error) {
func DeserializePFCPSessionDeletionResponse(data []byte) (PFCPSessionDeletionResponse, error) {
ies, err := ie.ParseInformationElements(data)
if err != nil {
return PFCPSessionDeletionResponse{}, err
}

var cause ie.Cause
for _, elem := range ies {
if causeIE, ok := elem.(ie.Cause); ok {
Expand All @@ -48,5 +52,5 @@ func DeserializePFCPSessionDeletionResponse(data []byte) (PFCPMessage, error) {

return PFCPSessionDeletionResponse{
Cause: cause,
}, err
}, nil
}
4 changes: 2 additions & 2 deletions messages/pfcp_session_establishment.go
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ func (msg PFCPSessionEstablishmentResponse) GetMessageTypeString() string {
return "PFCP Session Establishment Response"
}

func DeserializePFCPSessionEstablishmentRequest(data []byte) (PFCPMessage, error) {
func DeserializePFCPSessionEstablishmentRequest(data []byte) (PFCPSessionEstablishmentRequest, error) {
ies, err := ie.ParseInformationElements(data)
var nodeID ie.NodeID
var controlPlaneFSEID ie.FSEID
Expand Down Expand Up @@ -73,7 +73,7 @@ func DeserializePFCPSessionEstablishmentRequest(data []byte) (PFCPMessage, error
}, err
}

func DeserializePFCPSessionEstablishmentResponse(data []byte) (PFCPMessage, error) {
func DeserializePFCPSessionEstablishmentResponse(data []byte) (PFCPSessionEstablishmentResponse, error) {
ies, err := ie.ParseInformationElements(data)
var nodeID ie.NodeID
var cause ie.Cause
Expand Down
4 changes: 2 additions & 2 deletions messages/pfcp_session_report.go
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ func (msg PFCPSessionReportResponse) GetMessageTypeString() string {
return "PFCP Session Report Response"
}

func DeserializePFCPSessionReportRequest(data []byte) (PFCPMessage, error) {
func DeserializePFCPSessionReportRequest(data []byte) (PFCPSessionReportRequest, error) {
ies, err := ie.ParseInformationElements(data)
var reportType ie.ReportType

Expand All @@ -51,7 +51,7 @@ func DeserializePFCPSessionReportRequest(data []byte) (PFCPMessage, error) {
}, err
}

func DeserializePFCPSessionReportResponse(data []byte) (PFCPMessage, error) {
func DeserializePFCPSessionReportResponse(data []byte) (PFCPSessionReportResponse, error) {
ies, err := ie.ParseInformationElements(data)
var cause ie.Cause

Expand Down
Loading

0 comments on commit fb83a84

Please sign in to comment.