Merge branch 'master' into hapool

This commit is contained in:
Radu Ioan Fericean
2015-12-03 15:24:49 +02:00
9 changed files with 485 additions and 499 deletions

View File

@@ -201,7 +201,7 @@ func TestDmtAgentSendCCRInit(t *testing.T) {
time.Sleep(time.Duration(100) * time.Millisecond)
var acnt *engine.Account
attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"}
eAcntVal := 9.5
eAcntVal := 9.484
if err := apierRpc.Call("ApierV2.GetAccount", attrs, &acnt); err != nil {
t.Error(err)
} else if acnt.BalanceMap[utils.MONETARY].GetTotalValue() != eAcntVal {
@@ -232,7 +232,7 @@ func TestDmtAgentSendCCRUpdate(t *testing.T) {
time.Sleep(time.Duration(100) * time.Millisecond)
var acnt *engine.Account
attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"}
eAcntVal := 9.25
eAcntVal := 9.214
if err := apierRpc.Call("ApierV2.GetAccount", attrs, &acnt); err != nil {
t.Error(err)
} else if acnt.BalanceMap[utils.MONETARY].GetTotalValue() != eAcntVal {
@@ -263,7 +263,7 @@ func TestDmtAgentSendCCRUpdate2(t *testing.T) {
time.Sleep(time.Duration(100) * time.Millisecond)
var acnt *engine.Account
attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"}
eAcntVal := 9.0
eAcntVal := 8.944
if err := apierRpc.Call("ApierV2.GetAccount", attrs, &acnt); err != nil {
t.Error(err)
} else if acnt.BalanceMap[utils.MONETARY].GetTotalValue() != eAcntVal {
@@ -293,7 +293,7 @@ func TestDmtAgentSendCCRTerminate(t *testing.T) {
time.Sleep(time.Duration(100) * time.Millisecond)
var acnt *engine.Account
attrs := &utils.AttrGetAccount{Tenant: "cgrates.org", Account: "1001"}
eAcntVal := 9.2416
eAcntVal := 9.205
if err := apierRpc.Call("ApierV2.GetAccount", attrs, &acnt); err != nil {
t.Error(err)
} else if acnt.BalanceMap[utils.MONETARY].GetTotalValue() != eAcntVal { // Should also consider derived charges which double the cost of 6m10s - 2x0.7584

View File

@@ -229,19 +229,11 @@ func (self *CCR) AsDiameterMessage() (*diam.Message, error) {
if _, err := m.NewAVP("Event-Timestamp", avp.Mbit, 0, datatype.Time(self.EventTimestamp)); err != nil {
return nil, err
}
subscriptionIdType, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "Subscription-Id-Type")
if err != nil {
return nil, err
}
subscriptionIdData, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "Subscription-Id-Data")
if err != nil {
return nil, err
}
for _, subscriptionId := range self.SubscriptionId {
if _, err := m.NewAVP("Subscription-Id", avp.Mbit, 0, &diam.GroupedAVP{
AVP: []*diam.AVP{
diam.NewAVP(subscriptionIdType.Code, avp.Mbit, 0, datatype.Enumerated(subscriptionId.SubscriptionIdType)),
diam.NewAVP(subscriptionIdData.Code, avp.Mbit, 0, datatype.UTF8String(subscriptionId.SubscriptionIdData)),
diam.NewAVP(450, avp.Mbit, 0, datatype.Enumerated(subscriptionId.SubscriptionIdType)), // Subscription-Id-Type
diam.NewAVP(444, avp.Mbit, 0, datatype.UTF8String(subscriptionId.SubscriptionIdData)), // Subscription-Id-Data
}}); err != nil {
return nil, err
}
@@ -249,83 +241,27 @@ func (self *CCR) AsDiameterMessage() (*diam.Message, error) {
if _, err := m.NewAVP("Service-Identifier", avp.Mbit, 0, datatype.Unsigned32(self.ServiceIdentifier)); err != nil {
return nil, err
}
ccTimeAvp, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "CC-Time")
if err != nil {
return nil, err
}
if _, err := m.NewAVP("Requested-Service-Unit", avp.Mbit, 0, &diam.GroupedAVP{
AVP: []*diam.AVP{
diam.NewAVP(ccTimeAvp.Code, avp.Mbit, 0, datatype.Unsigned32(self.RequestedServiceUnit.CCTime))}}); err != nil {
diam.NewAVP(420, avp.Mbit, 0, datatype.Unsigned32(self.RequestedServiceUnit.CCTime))}}); err != nil { // CC-Time
return nil, err
}
inInformation, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "IN-Information")
if err != nil {
return nil, err
}
callingPartyAddress, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "Calling-Party-Address")
if err != nil {
return nil, err
}
calledPartyAddress, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "Called-Party-Address")
if err != nil {
return nil, err
}
realCalledNumber, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "Real-Called-Number")
if err != nil {
return nil, err
}
chargeFlowType, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "Charge-Flow-Type")
if err != nil {
return nil, err
}
callingVlrNumber, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "Calling-Vlr-Number")
if err != nil {
return nil, err
}
callingCellIdOrSai, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "Calling-CellID-Or-SAI")
if err != nil {
return nil, err
}
bearerCapability, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "Bearer-Capability")
if err != nil {
return nil, err
}
callReferenceNumber, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "Call-Reference-Number")
if err != nil {
return nil, err
}
mscAddress, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "MSC-Address")
if err != nil {
return nil, err
}
timeZone, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "Time-Zone")
if err != nil {
return nil, err
}
calledPartyNP, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "Called-Party-NP")
if err != nil {
return nil, err
}
sspTime, err := m.Dictionary().FindAVP(m.Header.ApplicationID, "SSP-Time")
if err != nil {
return nil, err
}
if _, err := m.NewAVP("Service-Information", avp.Mbit, 0, &diam.GroupedAVP{
if _, err := m.NewAVP("Service-Information", avp.Mbit, 10415, &diam.GroupedAVP{
AVP: []*diam.AVP{
diam.NewAVP(inInformation.Code, avp.Mbit, 0, &diam.GroupedAVP{
diam.NewAVP(20300, avp.Mbit, 20300, &diam.GroupedAVP{
AVP: []*diam.AVP{
diam.NewAVP(callingPartyAddress.Code, avp.Mbit, 0, datatype.UTF8String(self.ServiceInformation.INInformation.CallingPartyAddress)),
diam.NewAVP(calledPartyAddress.Code, avp.Mbit, 0, datatype.UTF8String(self.ServiceInformation.INInformation.CalledPartyAddress)),
diam.NewAVP(realCalledNumber.Code, avp.Mbit, 0, datatype.UTF8String(self.ServiceInformation.INInformation.RealCalledNumber)),
diam.NewAVP(chargeFlowType.Code, avp.Mbit, 0, datatype.Unsigned32(self.ServiceInformation.INInformation.ChargeFlowType)),
diam.NewAVP(callingVlrNumber.Code, avp.Mbit, 0, datatype.UTF8String(self.ServiceInformation.INInformation.CallingVlrNumber)),
diam.NewAVP(callingCellIdOrSai.Code, avp.Mbit, 0, datatype.UTF8String(self.ServiceInformation.INInformation.CallingCellIDOrSAI)),
diam.NewAVP(bearerCapability.Code, avp.Mbit, 0, datatype.UTF8String(self.ServiceInformation.INInformation.BearerCapability)),
diam.NewAVP(callReferenceNumber.Code, avp.Mbit, 0, datatype.UTF8String(self.ServiceInformation.INInformation.CallReferenceNumber)),
diam.NewAVP(mscAddress.Code, avp.Mbit, 0, datatype.UTF8String(self.ServiceInformation.INInformation.MSCAddress)),
diam.NewAVP(timeZone.Code, avp.Mbit, 0, datatype.UTF8String(self.ServiceInformation.INInformation.TimeZone)),
diam.NewAVP(calledPartyNP.Code, avp.Mbit, 0, datatype.UTF8String(self.ServiceInformation.INInformation.CalledPartyNP)),
diam.NewAVP(sspTime.Code, avp.Mbit, 0, datatype.UTF8String(self.ServiceInformation.INInformation.SSPTime)),
diam.NewAVP(831, avp.Mbit, 10415, datatype.UTF8String(self.ServiceInformation.INInformation.CallingPartyAddress)), // Calling-Party-Address
diam.NewAVP(832, avp.Mbit, 10415, datatype.UTF8String(self.ServiceInformation.INInformation.CalledPartyAddress)), // Called-Party-Address
diam.NewAVP(20327, avp.Mbit, 20300, datatype.UTF8String(self.ServiceInformation.INInformation.RealCalledNumber)), // Real-Called-Number
diam.NewAVP(20339, avp.Mbit, 20300, datatype.Unsigned32(self.ServiceInformation.INInformation.ChargeFlowType)), // Charge-Flow-Type
diam.NewAVP(20302, avp.Mbit, 20300, datatype.UTF8String(self.ServiceInformation.INInformation.CallingVlrNumber)), // Calling-Vlr-Number
diam.NewAVP(20303, avp.Mbit, 20300, datatype.UTF8String(self.ServiceInformation.INInformation.CallingCellIDOrSAI)), // Calling-CellID-Or-SAI
diam.NewAVP(20313, avp.Mbit, 20300, datatype.UTF8String(self.ServiceInformation.INInformation.BearerCapability)), // Bearer-Capability
diam.NewAVP(20321, avp.Mbit, 20300, datatype.UTF8String(self.ServiceInformation.INInformation.CallReferenceNumber)), // Call-Reference-Number
diam.NewAVP(20322, avp.Mbit, 20300, datatype.UTF8String(self.ServiceInformation.INInformation.MSCAddress)), // MSC-Address
diam.NewAVP(20324, avp.Mbit, 20300, datatype.Unsigned32(self.ServiceInformation.INInformation.TimeZone)), // Time-Zone
diam.NewAVP(20385, avp.Mbit, 20300, datatype.UTF8String(self.ServiceInformation.INInformation.CalledPartyNP)), // Called-Party-NP
diam.NewAVP(20386, avp.Mbit, 20300, datatype.UTF8String(self.ServiceInformation.INInformation.SSPTime)), // SSP-Time
},
}),
}}); err != nil {
@@ -375,7 +311,7 @@ func (self *CCR) eventFieldValue(fldTpl utils.RSRFields) string {
for i, val := range hierarchyPath {
hpIf[i] = val
}
matchingAvps, err := self.diamMessage.FindAVPsWithPath(hpIf)
matchingAvps, err := self.diamMessage.FindAVPsWithPath(hpIf, dict.UndefinedVendorID)
if err != nil || len(matchingAvps) == 0 {
utils.Logger.Warning(fmt.Sprintf("<Diameter> Cannot find AVP for field template with id: %s, ignoring.", rsrTpl.Id))
continue // Filter not matching

View File

@@ -489,9 +489,9 @@ func startCDRS(internalCdrSChan chan *engine.CdrServer, logDb engine.LogStorage,
}
func startScheduler(internalSchedulerChan chan *scheduler.Scheduler, cacheDoneChan chan struct{}, ratingDb engine.RatingStorage, exitChan chan bool) {
// Wait for cache to load data before starting
cacheDone := <- cacheDoneChan
cacheDoneChan <- cacheDone
// Wait for cache to load data before starting
cacheDone := <-cacheDoneChan
cacheDoneChan <- cacheDone
utils.Logger.Info("Starting CGRateS Scheduler.")
sched := scheduler.NewScheduler()
go reloadSchedulerSingnalHandler(sched, ratingDb)

File diff suppressed because it is too large Load Diff

View File

@@ -2,7 +2,7 @@
<diameter>
<application id="4">
<vendor id="2011" name="Huawei" />
<avp name="IN-Information" code="20300" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="IN-Information" code="20300" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="Grouped">
<rule avp="Calling-Party-Address" required="false" max="1" />
<rule avp="Called-Party-Address" required="false" max="1" />
@@ -28,7 +28,7 @@
<rule avp="Final-Unit-Tone-Indicator" required="false" max="1" />
</data>
</avp>
<avp name="MC-Information" code="29000" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="MC-Information" code="29000" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="Grouped">
<rule avp="TransactionId" required="false" max="1" />
<rule avp="TransparentData" required="false" max="1" />
@@ -36,89 +36,89 @@
<rule avp="Recipient-Address" required="false" max="1" />
</data>
</avp>
<avp name="CallingPartyAddress" code="20336" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="CallingPartyAddress" code="20336" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="CalledPartyAddress" code="20337" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="CalledPartyAddress" code="20337" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="Real-Called-Number" code="20327" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Real-Called-Number" code="20327" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="Connect-Called-Number" code="20373" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Connect-Called-Number" code="20373" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="Called-Party-NP" code="20385" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Called-Party-NP" code="20385" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="SSP-Time" code="20386" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="SSP-Time" code="20386" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="SSP-Time" code="20386" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="SSP-Time" code="20386" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="Calling-Vlr-Number" code="20302" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Calling-Vlr-Number" code="20302" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="Calling-CellID-Or-SAI" code="20303" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Calling-CellID-Or-SAI" code="20303" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="Called-Vlr-Number" code="20305" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Called-Vlr-Number" code="20305" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="Called-CellID-Or-SAI" code="20306" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Called-CellID-Or-SAI" code="20306" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="Original-Called-Party-Id" code="20310" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Original-Called-Party-Id" code="20310" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="Redirecting-Party-Id" code="20316" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Redirecting-Party-Id" code="20316" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="Redirection-Reason" code="20363" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Redirection-Reason" code="20363" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="Unsigned32" />
</avp>
<avp name="MSC-Address" code="20322" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="MSC-Address" code="20322" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="Time-Zone" code="20324" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Time-Zone" code="20324" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="Integer32" />
</avp>
<avp name="Bearer-Capability" code="20313" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Bearer-Capability" code="20313" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="OctetString" />
</avp>
<avp name="Charge-Flow-Type" code="20339" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Charge-Flow-Type" code="20339" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="Unsigned32" />
</avp>
<avp name="Call-Reference-Number" code="20321" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Call-Reference-Number" code="20321" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="OctetString" />
</avp>
<avp name="Final-Unit-Tone-Indicator" code="20939" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Final-Unit-Tone-Indicator" code="20939" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="Enumerated">
<item code="0" name="NO_TONE" />
<item code="1" name="TONE" />
</data>
</avp>
<avp name="Announcement-Data" code="20931" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Announcement-Data" code="20931" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="Grouped">
<rule avp="Announcement-Order" required="false" max="1" />
<rule avp="Announcement-Id" required="false" max="1" />
<rule avp="Announcement-Parameter" required="false" max="1" />
</data>
</avp>
<avp name="Announcement-Order" code="20932" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Announcement-Order" code="20932" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="Unsigned32" />
</avp>
<avp name="Announcement-Id" code="20933" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Announcement-Id" code="20933" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="Unsigned32" />
</avp>
<avp name="Announcement-Parameter" code="20934" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Announcement-Parameter" code="20934" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="Grouped">
<rule avp="Announcement-Parameter-Type" required="false" max="1" />
<rule avp="Announcement-Parameter-Value" required="false" max="1" />
</data>
</avp>
<avp name="Announcement-Parameter-Type" code="20935" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Announcement-Parameter-Type" code="20935" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="Enumerated">
<item code="0" name="integer" />
<item code="1" name="number" />
@@ -127,19 +127,19 @@
<item code="4" name="price" />
</data>
</avp>
<avp name="Announcement-Parameter-Value" code="20936" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Announcement-Parameter-Value" code="20936" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="Re-Routing-Number" code="20937" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Re-Routing-Number" code="20937" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="HighLayerCharacteristics" code="29001" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="HighLayerCharacteristics" code="29001" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="OctetString" />
</avp>
<avp name="MC-Service-Id" code="29002" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="MC-Service-Id" code="29002" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
<avp name="TransparentData" code="29003" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="TransparentData" code="29003" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="20300">
<data type="UTF8String" />
</avp>
</application>

View File

@@ -872,4 +872,4 @@
<data type="Unsigned32" />
</avp>
</application>
</diameter>
</diameter>

View File

@@ -2,8 +2,8 @@
<diameter>
<application id="4">
<vendor id="94" name="Nokia" />
<avp name="Session-Start-Indicator" code="5105" must="V" may="P,M" must-not="-" may-encrypt="N">
<avp name="Session-Start-Indicator" code="5105" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="94">
<data type="UTF8String" />
</avp>
</application>
</diameter>
</diameter>

View File

@@ -0,0 +1,50 @@
<?xml version="1.0" encoding="UTF-8"?>
<diameter>
<application id="4">
<vendor id="12645" name="Vodafone" />
<avp name="Reporting-Reason" code="261" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="12645">
<data type="Enumerated">
<item code="0" name="THRESHOLD" />
<item code="1" name="QHT" />
<item code="2" name="FINAL" />
<item code="3" name="QUOTA_EXHAUSTED" />
<item code="4" name="VALIDITY_TIME" />
<item code="5" name="OTHER_QUOTA_TYPE" />
<item code="6" name="RATING_CONDITION_CHANGE" />
<item code="7" name="FORCED_REAUTHORISATION" />
<item code="8" name="POOL_EXHAUSTED" />
</data>
</avp>
<avp name="Quota-Holding-Time" code="258" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="12645">
<data type="Unsigned32" />
</avp>
<avp name="Quota-Consumption-Time" code="257" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="12645">
<data type="Unsigned32" />
</avp>
<avp name="Rulebase-Id" code="262" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="12645">
<data type="UTF8String" />
</avp>
<avp name="Context-Type" code="256" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="12645">
<data type="Enumerated">
<item code="0" name="PRIMARY" />
<item code="1" name="SECONDARY" />
</data>
</avp>
<avp name="Radio-Access-Technology" code="260" must="V" may="P,M" must-not="-" may-encrypt="N" vendor-id="12645">
<data type="Enumerated">
<item code="1" name="UTRAN" />
<item code="2" name="GERAN" />
<item code="3" name="WLAN" />
</data>
</avp>
<avp name="User-Location-Information" code="267" must="M,V" may="-" must-not="-" may-encrypt="Y" vendor-id="12645">
<data type="OctetString" />
</avp>
<avp name="Time-Of-First-Usage" code="263" must="M,V" may="-" must-not="-" may-encrypt="Y" vendor-id="12645">
<data type="Time" />
</avp>
<avp name="Time-Of-Last-Usage" code="266" must="M,V" may="-" must-not="-" may-encrypt="Y" vendor-id="12645">
<data type="Time" />
</avp>
</application>
</diameter>

View File

@@ -955,7 +955,7 @@ func (ms *MongoStorage) GetLoadHistory(limit int, skipCache bool) (loadInsts []*
cache2go.RemKey(utils.LOADINST_KEY)
cache2go.Cache(utils.LOADINST_KEY, loadInsts)
}
return loadInsts, err
return loadInsts, nil
}
// Adds a single load instance to load history