package server import ( "context" firewall "github.com/netbirdio/netbird/client/firewall/types" "github.com/netbirdio/netbird/client/proto" ) func (s *Server) ForwardingRules(context.Context, *proto.EmptyRequest) (*proto.ForwardingRulesResponse, error) { s.mutex.Lock() defer s.mutex.Unlock() rules := s.statusRecorder.ForwardingRules() responseRules := make([]*proto.ForwardingRule, 0, len(rules)) for _, rule := range rules { respRule := &proto.ForwardingRule{ Protocol: string(rule.Protocol), DestinationPort: portToProto(rule.DestinationPort), TranslatedAddress: rule.TranslatedAddress.String(), TranslatedPort: portToProto(rule.TranslatedPort), } responseRules = append(responseRules, respRule) } return &proto.ForwardingRulesResponse{Rules: responseRules}, nil } func portToProto(port firewall.Port) *proto.PortInfo { var portInfo proto.PortInfo if !port.IsRange { portInfo.PortSelection = &proto.PortInfo_Port{Port: uint32(port.Values[0])} } else { portInfo.PortSelection = &proto.PortInfo_Range_{ Range: &proto.PortInfo_Range{ Start: uint32(port.Values[0]), End: uint32(port.Values[1]), }, } } return &portInfo }