mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-11 18:16:24 +05:00
integrate ips with sessions (incomplete)
This commit is contained in:
committed by
Dan Christian Bogos
parent
a66c472a36
commit
805ae5d916
@@ -85,7 +85,12 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context,
|
||||
utils.MetaResources); err != nil {
|
||||
return
|
||||
}
|
||||
if !attrS && !acntS && !resourceS && !routeS {
|
||||
var ipS bool
|
||||
if ipS, err = engine.GetBoolOpts(ctx, args.Tenant, dP, nil, sS.fltrS, sS.cfg.SessionSCfg().Opts.IPsAuthorize,
|
||||
utils.MetaIPs); err != nil {
|
||||
return
|
||||
}
|
||||
if !attrS && !acntS && !resourceS && !ipS && !routeS {
|
||||
return // Nothing to do
|
||||
}
|
||||
if args.APIOpts == nil {
|
||||
@@ -145,6 +150,23 @@ func (sS *SessionS) BiRPCv1AuthorizeEvent(ctx *context.Context,
|
||||
}
|
||||
authReply.ResourceAllocation = &allocMsg
|
||||
}
|
||||
if ipS {
|
||||
if len(sS.cfg.SessionSCfg().IPsConns) == 0 {
|
||||
return utils.NewErrNotConnected(utils.IPs)
|
||||
}
|
||||
originID, _ := args.FieldAsString(utils.OriginID)
|
||||
if originID == "" {
|
||||
originID = utils.UUIDSha1Prefix()
|
||||
}
|
||||
args.APIOpts[utils.OptsIPsUsageID] = originID
|
||||
args.APIOpts[utils.OptsIPsUnits] = 1
|
||||
var allocMsg string
|
||||
if err = sS.connMgr.Call(ctx, sS.cfg.SessionSCfg().IPsConns, utils.IPsV1AuthorizeIPs,
|
||||
args, &allocMsg); err != nil {
|
||||
return utils.NewErrIPs(err)
|
||||
}
|
||||
authReply.IPAllocation = &allocMsg
|
||||
}
|
||||
if routeS {
|
||||
routesReply, err := sS.getRoutes(ctx, args.Clone())
|
||||
if err != nil {
|
||||
@@ -287,7 +309,12 @@ func (sS *SessionS) BiRPCv1InitiateSession(ctx *context.Context,
|
||||
utils.MetaResources); err != nil {
|
||||
return
|
||||
}
|
||||
if !acntS && !resourceS {
|
||||
var ipS bool
|
||||
if ipS, err = engine.GetBoolOpts(ctx, args.Tenant, dP, nil, sS.fltrS, sS.cfg.SessionSCfg().Opts.IPsAllocate,
|
||||
utils.MetaIPs); err != nil {
|
||||
return
|
||||
}
|
||||
if !acntS && !resourceS && !ipS {
|
||||
return // Nothing to do
|
||||
}
|
||||
|
||||
@@ -355,6 +382,34 @@ func (sS *SessionS) BiRPCv1InitiateSession(ctx *context.Context,
|
||||
}
|
||||
}()
|
||||
|
||||
}
|
||||
if ipS {
|
||||
if len(sS.cfg.SessionSCfg().IPsConns) == 0 {
|
||||
return utils.NewErrNotConnected(utils.IPs)
|
||||
}
|
||||
if originID == utils.EmptyString {
|
||||
return utils.NewErrMandatoryIeMissing(utils.OriginID)
|
||||
}
|
||||
args.APIOpts[utils.OptsIPsUsageID] = originID
|
||||
args.APIOpts[utils.OptsIPsUnits] = 1
|
||||
var allocMessage string
|
||||
if err = sS.connMgr.Call(ctx, sS.cfg.SessionSCfg().IPsConns,
|
||||
utils.IPsV1AllocateIPs, args, &allocMessage); err != nil {
|
||||
return utils.NewErrIPs(err)
|
||||
}
|
||||
rply.IPAllocation = &allocMessage
|
||||
defer func() { // we need to release the IPs back in case of errors
|
||||
if err != nil {
|
||||
var reply string
|
||||
if err = sS.connMgr.Call(ctx, sS.cfg.SessionSCfg().IPsConns, utils.IPsV1ReleaseIPs,
|
||||
args, &reply); err != nil {
|
||||
utils.Logger.Warning(
|
||||
fmt.Sprintf("<%s> error: %s releasing IPs for event %+v.",
|
||||
utils.SessionS, err.Error(), args))
|
||||
}
|
||||
}
|
||||
}()
|
||||
|
||||
}
|
||||
if acntS {
|
||||
|
||||
|
||||
@@ -438,6 +438,7 @@ func (v1Rply *V1ProcessMessageReply) AsNavigableMap() map[string]*utils.DataNode
|
||||
type V1AuthorizeReply struct {
|
||||
Attributes *attributes.AttrSProcessEventReply `json:",omitempty"`
|
||||
ResourceAllocation *string `json:",omitempty"`
|
||||
IPAllocation *string `json:",omitempty"`
|
||||
MaxUsage *utils.Decimal `json:",omitempty"`
|
||||
RouteProfiles routes.SortedRoutesList `json:",omitempty"`
|
||||
ThresholdIDs *[]string `json:",omitempty"`
|
||||
@@ -514,6 +515,7 @@ type V1AuthorizeReplyWithDigest struct {
|
||||
type V1InitSessionReply struct {
|
||||
Attributes *attributes.AttrSProcessEventReply `json:",omitempty"`
|
||||
ResourceAllocation *string `json:",omitempty"`
|
||||
IPAllocation *string `json:",omitempty"`
|
||||
MaxUsage *time.Duration `json:",omitempty"`
|
||||
ThresholdIDs *[]string `json:",omitempty"`
|
||||
StatQueueIDs *[]string `json:",omitempty"`
|
||||
|
||||
@@ -368,6 +368,21 @@ func (sS *SessionS) forceSTerminate(ctx *context.Context, s *Session, extraUsage
|
||||
utils.SessionS, err.Error(), s.ID))
|
||||
}
|
||||
}
|
||||
// release the ips for the session
|
||||
if len(sS.cfg.SessionSCfg().IPsConns) != 0 {
|
||||
var reply string
|
||||
args := s.OriginCGREvent.Clone()
|
||||
args.ID = utils.UUIDSha1Prefix()
|
||||
args.APIOpts[utils.OptsIPsUsageID] = s.ID
|
||||
args.APIOpts[utils.OptsIPsUnits] = 1
|
||||
if err := sS.connMgr.Call(ctx, sS.cfg.SessionSCfg().IPsConns,
|
||||
utils.IPsV1ReleaseIPs,
|
||||
args, &reply); err != nil {
|
||||
utils.Logger.Warning(
|
||||
fmt.Sprintf("<%s> error: %s could not release IP %q",
|
||||
utils.SessionS, err.Error(), s.ID))
|
||||
}
|
||||
}
|
||||
sS.replicateSessions(ctx, s.ID, false, sS.cfg.SessionSCfg().ReplicationConns)
|
||||
if clntConn := sS.biJClnt(s.ClientConnID); clntConn != nil {
|
||||
go func() {
|
||||
|
||||
@@ -172,10 +172,15 @@ func NewErrServerError(err error) error {
|
||||
func NewErrNotConnected(serv string) error {
|
||||
return fmt.Errorf("NOT_CONNECTED: %s", serv)
|
||||
}
|
||||
|
||||
func NewErrResourceS(err error) error {
|
||||
return fmt.Errorf("RESOURCES_ERROR:%s", err)
|
||||
}
|
||||
|
||||
func NewErrIPs(err error) error {
|
||||
return fmt.Errorf("IPS_ERROR:%s", err)
|
||||
}
|
||||
|
||||
func NewErrRouteS(err error) error {
|
||||
return fmt.Errorf("ROUTES_ERROR:%s", err)
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user