diff --git a/apier/v1/accounts.go b/apier/v1/accounts.go index 40bd8e346..49efdb106 100644 --- a/apier/v1/accounts.go +++ b/apier/v1/accounts.go @@ -34,12 +34,12 @@ type AttrAcntAction struct { type AccountActionTiming struct { Id string // The id to reference this particular ActionTiming - ActionTimingsId string // The id of the ActionTimings profile attached to the account + ActionPlanId string // The id of the ActionPlanId profile attached to the account ActionsId string // The id of actions which will be executed NextExecTime time.Time // Next execution time } -func (self *ApierV1) GetAccountActionTimings(attrs AttrAcntAction, reply *[]*AccountActionTiming) error { +func (self *ApierV1) GetAccountActionPlan(attrs AttrAcntAction, reply *[]*AccountActionTiming) error { if missing := utils.MissingStructFields(&attrs, []string{"Tenant", "Account", "Direction"}); len(missing) != 0 { return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } @@ -51,7 +51,7 @@ func (self *ApierV1) GetAccountActionTimings(attrs AttrAcntAction, reply *[]*Acc for _, ats := range allATs { for _, at := range ats { if utils.IsSliceMember(at.UserBalanceIds, utils.BalanceKey(attrs.Tenant, attrs.Account, attrs.Direction)) { - accountATs = append(accountATs, &AccountActionTiming{Id: at.Id, ActionTimingsId: at.Tag, ActionsId: at.ActionsId, NextExecTime: at.GetNextStartTime()}) + accountATs = append(accountATs, &AccountActionTiming{Id: at.Id, ActionPlanId: at.Tag, ActionsId: at.ActionsId, NextExecTime: at.GetNextStartTime()}) } } } @@ -60,7 +60,7 @@ func (self *ApierV1) GetAccountActionTimings(attrs AttrAcntAction, reply *[]*Acc } type AttrRemActionTiming struct { - ActionTimingsId string // Id identifying the ActionTimings profile + ActionPlanId string // Id identifying the ActionTimings profile ActionTimingId string // Internal CGR id identifying particular ActionTiming, *all for all user related ActionTimings to be canceled Tenant string // Tenant he account belongs to Account string // Account name @@ -70,7 +70,7 @@ type AttrRemActionTiming struct { // Removes an ActionTimings or parts of it depending on filters being set func (self *ApierV1) RemActionTiming(attrs AttrRemActionTiming, reply *string) error { - if missing := utils.MissingStructFields(&attrs, []string{"ActionTimingsId"}); len(missing) != 0 { // Only mandatory ActionTimingsId + if missing := utils.MissingStructFields(&attrs, []string{"ActionPlanId"}); len(missing) != 0 { // Only mandatory ActionPlanId return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } if len(attrs.Account) != 0 { // Presence of Account requires complete account details to be provided @@ -79,14 +79,14 @@ func (self *ApierV1) RemActionTiming(attrs AttrRemActionTiming, reply *string) e } } _, err := engine.AccLock.Guard(engine.ACTION_TIMING_PREFIX, func() (float64, error) { - ats, err := self.AccountDb.GetActionTimings(attrs.ActionTimingsId) + ats, err := self.AccountDb.GetActionTimings(attrs.ActionPlanId) if err != nil { return 0, err } else if len(ats) == 0 { return 0, errors.New(utils.ERR_NOT_FOUND) } ats = engine.RemActionTiming(ats, attrs.ActionTimingId, utils.BalanceKey(attrs.Tenant, attrs.Account, attrs.Direction)) - if err := self.AccountDb.SetActionTimings(attrs.ActionTimingsId, ats); err != nil { + if err := self.AccountDb.SetActionTimings(attrs.ActionPlanId, ats); err != nil { return 0, err } return 0, nil @@ -161,7 +161,7 @@ type AttrSetAccount struct { Direction string Account string Type string // <*prepaid|*postpaid> - ActionTimingsId string + ActionPlanId string } // Ads a new account into dataDb. If already defined, returns success. @@ -171,7 +171,7 @@ func (self *ApierV1) SetAccount(attr AttrSetAccount, reply *string) error { } balanceId := utils.BalanceKey(attr.Tenant, attr.Account, attr.Direction) var ub *engine.UserBalance - var ats engine.ActionTimings + var ats engine.ActionPlan _, err := engine.AccLock.Guard(balanceId, func() (float64, error) { if bal, _ := self.AccountDb.GetUserBalance(balanceId); bal != nil { ub = bal @@ -187,9 +187,9 @@ func (self *ApierV1) SetAccount(attr AttrSetAccount, reply *string) error { } } - if len(attr.ActionTimingsId) != 0 { + if len(attr.ActionPlanId) != 0 { var err error - ats, err = self.AccountDb.GetActionTimings(attr.ActionTimingsId) + ats, err = self.AccountDb.GetActionTimings(attr.ActionPlanId) if err != nil { return 0, err } @@ -208,7 +208,7 @@ func (self *ApierV1) SetAccount(attr AttrSetAccount, reply *string) error { } if len(ats) != 0 { _, err := engine.AccLock.Guard(engine.ACTION_TIMING_PREFIX, func() (float64, error) { // ToDo: Try locking it above on read somehow - if err := self.AccountDb.SetActionTimings(attr.ActionTimingsId, ats); err != nil { + if err := self.AccountDb.SetActionTimings(attr.ActionPlanId, ats); err != nil { return 0, err } return 0, nil diff --git a/apier/v1/apier.go b/apier/v1/apier.go index 2552097a1..f948dc7da 100644 --- a/apier/v1/apier.go +++ b/apier/v1/apier.go @@ -121,7 +121,7 @@ func (self *ApierV1) AddBalance(attr *AttrAddBalance, reply *string) error { if attr.Overwrite { aType = engine.TOPUP_RESET } - at.SetActions(engine.Actions{&engine.Action{ActionType: aType, BalanceId: attr.BalanceId, Direction: attr.Direction, + at.SetActions(engine.Actions{&engine.Action{ActionType: aType, BalanceId: attr.BalanceId, Direction: attr.Direction, Balance: &engine.Balance{Value: attr.Value, Weight: attr.Weight}}}) if err := at.Execute(); err != nil { *reply = err.Error() @@ -288,10 +288,10 @@ func (self *ApierV1) SetActions(attrs AttrSetActions, reply *string) error { return nil } -type AttrSetActionTimings struct { - ActionTimingsId string // Profile id +type AttrSetActionPlan struct { + Id string // Profile id + ActionPlan []*ApiActionTiming // Set of actions this Actions profile will perform Overwrite bool // If previously defined, will be overwritten - ActionTimings []*ApiActionTiming // Set of actions this Actions profile will perform ReloadScheduler bool // Enables automatic reload of the scheduler (eg: useful when adding a single action timing) } @@ -305,25 +305,25 @@ type ApiActionTiming struct { Weight float64 // Binding's weight } -func (self *ApierV1) SetActionTimings(attrs AttrSetActionTimings, reply *string) error { - if missing := utils.MissingStructFields(&attrs, []string{"ActionTimingsId", "ActionTimings"}); len(missing) != 0 { +func (self *ApierV1) SetActionPlan(attrs AttrSetActionPlan, reply *string) error { + if missing := utils.MissingStructFields(&attrs, []string{"Id", "ActionPlan"}); len(missing) != 0 { return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - for _, at := range attrs.ActionTimings { + for _, at := range attrs.ActionPlan { requiredFields := []string{"ActionsId", "Time", "Weight"} if missing := utils.MissingStructFields(at, requiredFields); len(missing) != 0 { return fmt.Errorf("%s:Action:%s:%v", utils.ERR_MANDATORY_IE_MISSING, at.ActionsId, missing) } } if !attrs.Overwrite { - if exists, err := self.AccountDb.DataExists(engine.ACTION_TIMING_PREFIX, attrs.ActionTimingsId); err != nil { + if exists, err := self.AccountDb.DataExists(engine.ACTION_TIMING_PREFIX, attrs.Id); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if exists { return errors.New(utils.ERR_EXISTS) } } - storeAtms := make(engine.ActionTimings, len(attrs.ActionTimings)) - for idx, apiAtm := range attrs.ActionTimings { + storeAtms := make(engine.ActionPlan, len(attrs.ActionPlan)) + for idx, apiAtm := range attrs.ActionPlan { if exists, err := self.AccountDb.DataExists(engine.ACTION_PREFIX, apiAtm.ActionsId); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if !exists { @@ -337,17 +337,20 @@ func (self *ApierV1) SetActionTimings(attrs AttrSetActionTimings, reply *string) timing.StartTime = apiAtm.Time at := &engine.ActionTiming{ Id: utils.GenUUID(), - Tag: attrs.ActionTimingsId, + Tag: attrs.Id, Weight: apiAtm.Weight, Timing: &engine.RateInterval{Timing: timing}, ActionsId: apiAtm.ActionsId, } storeAtms[idx] = at } - if err := self.AccountDb.SetActionTimings(attrs.ActionTimingsId, storeAtms); err != nil { + if err := self.AccountDb.SetActionTimings(attrs.Id, storeAtms); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } - if attrs.ReloadScheduler && self.Sched != nil { + if attrs.ReloadScheduler { + if self.Sched == nil { + return errors.New("SCHEDULER_NOT_ENABLED") + } self.Sched.LoadActionTimings(self.AccountDb) self.Sched.Restart() } @@ -421,6 +424,11 @@ func (self *ApierV1) LoadAccountActions(attrs utils.TPAccountActions, reply *str }); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } + // ToDo: Get the action keys loaded by dbReader so we reload only these in cache + // Need to do it before scheduler otherwise actions to run will be unknown + if err := self.AccountDb.CacheAccounting(nil); err != nil { + return err + } if self.Sched != nil { self.Sched.LoadActionTimings(self.AccountDb) self.Sched.Restart() @@ -437,7 +445,7 @@ func (self *ApierV1) ReloadScheduler(input string, reply *string) error { self.Sched.Restart() *reply = OK return nil - + } func (self *ApierV1) ReloadCache(attrs utils.ApiReloadCache, reply *string) error { @@ -536,7 +544,7 @@ func (self *ApierV1) LoadTariffPlanFromFolder(attrs AttrLoadTPFromFolder, reply path.Join(attrs.FolderPath, utils.RATING_PLANS_CSV), path.Join(attrs.FolderPath, utils.RATING_PROFILES_CSV), path.Join(attrs.FolderPath, utils.ACTIONS_CSV), - path.Join(attrs.FolderPath, utils.ACTION_TIMINGS_CSV), + path.Join(attrs.FolderPath, utils.ACTION_PLANS_CSV), path.Join(attrs.FolderPath, utils.ACTION_TRIGGERS_CSV), path.Join(attrs.FolderPath, utils.ACCOUNT_ACTIONS_CSV)) if err := loader.LoadAll(); err != nil { @@ -549,6 +557,37 @@ func (self *ApierV1) LoadTariffPlanFromFolder(attrs AttrLoadTPFromFolder, reply if err := loader.WriteToDatabase(attrs.FlushDb, false); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } + // Make sure the items are in the cache + dstIds, _ := loader.GetLoadedIds(engine.DESTINATION_PREFIX) + dstKeys := make([]string, len(dstIds)) + for idx, dId := range dstIds { + dstKeys[idx] = engine.DESTINATION_PREFIX + dId // Cache expects them as redis keys + } + rplIds, _ := loader.GetLoadedIds(engine.RATING_PLAN_PREFIX) + rpKeys := make([]string, len(rplIds)) + for idx, rpId := range rplIds { + rpKeys[idx] = engine.RATING_PLAN_PREFIX + rpId + } + rpfIds, _ := loader.GetLoadedIds(engine.RATING_PROFILE_PREFIX) + rpfKeys := make([]string, len(rpfIds)) + for idx, rpfId := range rpfIds { + rpfKeys[idx] = engine.RATING_PROFILE_PREFIX + rpfId + } + actIds, _ := loader.GetLoadedIds(engine.ACTION_PREFIX) + actKeys := make([]string, len(actIds)) + for idx, actId := range actIds { + actKeys[idx] = engine.ACTION_PREFIX + actId + } + if err := self.RatingDb.CacheRating(dstKeys, rpKeys, rpfKeys); err != nil { + return err + } + if err := self.AccountDb.CacheAccounting(actKeys); err != nil { + return err + } + if self.Sched != nil { + self.Sched.LoadActionTimings(self.AccountDb) + self.Sched.Restart() + } *reply = "OK" return nil } diff --git a/apier/v1/apier_local_test.go b/apier/v1/apier_local_test.go index c083e6e82..8aff9e17f 100644 --- a/apier/v1/apier_local_test.go +++ b/apier/v1/apier_local_test.go @@ -549,51 +549,51 @@ func TestApierTPActionTimings(t *testing.T) { return } reply := "" - at := &utils.TPActionTimings{TPid: engine.TEST_SQL, ActionTimingsId: "PREPAID_10", ActionTimings: []*utils.TPActionTiming{ + at := &utils.TPActionPlan{TPid: engine.TEST_SQL, Id: "PREPAID_10", ActionPlan: []*utils.TPActionTiming{ &utils.TPActionTiming{ActionsId: "PREPAID_10", TimingId: "ASAP", Weight: 10}, }} - atTst := new(utils.TPActionTimings) + atTst := new(utils.TPActionPlan) *atTst = *at - atTst.ActionTimingsId = engine.TEST_SQL - for _, act := range []*utils.TPActionTimings{at, atTst} { - if err := rater.Call("ApierV1.SetTPActionTimings", act, &reply); err != nil { - t.Error("Got error on ApierV1.SetTPActionTimings: ", err.Error()) + atTst.Id = engine.TEST_SQL + for _, act := range []*utils.TPActionPlan{at, atTst} { + if err := rater.Call("ApierV1.SetTPActionPlan", act, &reply); err != nil { + t.Error("Got error on ApierV1.SetTPActionPlan: ", err.Error()) } else if reply != "OK" { - t.Error("Unexpected reply received when calling ApierV1.SetTPActionTimings: ", reply) + t.Error("Unexpected reply received when calling ApierV1.SetTPActionPlan: ", reply) } } // Check second set - if err := rater.Call("ApierV1.SetTPActionTimings", atTst, &reply); err != nil { - t.Error("Got error on second ApierV1.SetTPActionTimings: ", err.Error()) + if err := rater.Call("ApierV1.SetTPActionPlan", atTst, &reply); err != nil { + t.Error("Got error on second ApierV1.SetTPActionPlan: ", err.Error()) } else if reply != "OK" { - t.Error("Calling ApierV1.SetTPActionTimings got reply: ", reply) + t.Error("Calling ApierV1.SetTPActionPlan got reply: ", reply) } // Check missing params - if err := rater.Call("ApierV1.SetTPActionTimings", new(utils.TPActionTimings), &reply); err == nil { - t.Error("Calling ApierV1.SetTPActionTimings, expected error, received: ", reply) - } else if err.Error() != "MANDATORY_IE_MISSING:[TPid ActionTimingsId ActionTimings]" { - t.Error("Calling ApierV1.SetTPActionTimings got unexpected error: ", err.Error()) + if err := rater.Call("ApierV1.SetTPActionPlan", new(utils.TPActionPlan), &reply); err == nil { + t.Error("Calling ApierV1.SetTPActionPlan, expected error, received: ", reply) + } else if err.Error() != "MANDATORY_IE_MISSING:[TPid Id ActionPlan]" { + t.Error("Calling ApierV1.SetTPActionPlan got unexpected error: ", err.Error()) } // Test get - var rplyActs *utils.TPActionTimings - if err := rater.Call("ApierV1.GetTPActionTimings", AttrGetTPActionTimings{TPid: atTst.TPid, ActionTimingsId: atTst.ActionTimingsId}, &rplyActs); err != nil { - t.Error("Calling ApierV1.GetTPActionTimings, got error: ", err.Error()) + var rplyActs *utils.TPActionPlan + if err := rater.Call("ApierV1.GetTPActionPlan", AttrGetTPActionPlan{TPid: atTst.TPid, Id: atTst.Id}, &rplyActs); err != nil { + t.Error("Calling ApierV1.GetTPActionPlan, got error: ", err.Error()) } else if !reflect.DeepEqual(atTst, rplyActs) { - t.Errorf("Calling ApierV1.GetTPActionTimings expected: %v, received: %v", atTst, rplyActs) + t.Errorf("Calling ApierV1.GetTPActionPlan expected: %v, received: %v", atTst, rplyActs) } // Test remove - if err := rater.Call("ApierV1.RemTPActionTimings", AttrGetTPActionTimings{TPid: atTst.TPid, ActionTimingsId: atTst.ActionTimingsId}, &reply); err != nil { - t.Error("Calling ApierV1.RemTPActionTimings, got error: ", err.Error()) + if err := rater.Call("ApierV1.RemTPActionPlan", AttrGetTPActionPlan{TPid: atTst.TPid, Id: atTst.Id}, &reply); err != nil { + t.Error("Calling ApierV1.RemTPActionPlan, got error: ", err.Error()) } else if reply != "OK" { - t.Error("Calling ApierV1.RemTPActionTimings received: ", reply) + t.Error("Calling ApierV1.RemTPActionPlan received: ", reply) } // Test getIds var rplyIds []string expectedIds := []string{"PREPAID_10"} - if err := rater.Call("ApierV1.GetTPActionTimingIds", AttrGetTPActionTimingIds{TPid: atTst.TPid}, &rplyIds); err != nil { - t.Error("Calling ApierV1.GetTPActionTimingIds, got error: ", err.Error()) + if err := rater.Call("ApierV1.GetTPActionPlanIds", AttrGetTPActionPlanIds{TPid: atTst.TPid}, &rplyIds); err != nil { + t.Error("Calling ApierV1.GetTPActionPlanIds, got error: ", err.Error()) } else if !reflect.DeepEqual(expectedIds, rplyIds) { - t.Errorf("Calling ApierV1.GetTPActionTimingIds expected: %v, received: %v", expectedIds, rplyIds) + t.Errorf("Calling ApierV1.GetTPActionPlanIds expected: %v, received: %v", expectedIds, rplyIds) } } @@ -657,15 +657,15 @@ func TestApierTPAccountActions(t *testing.T) { } reply := "" aa1 := &utils.TPAccountActions{TPid: engine.TEST_SQL, LoadId: engine.TEST_SQL, Tenant: "cgrates.org", - Account: "1001", Direction: "*out", ActionTimingsId: "PREPAID_10", ActionTriggersId: "STANDARD_TRIGGERS"} + Account: "1001", Direction: "*out", ActionPlanId: "PREPAID_10", ActionTriggersId: "STANDARD_TRIGGERS"} aa2 := &utils.TPAccountActions{TPid: engine.TEST_SQL, LoadId: engine.TEST_SQL, Tenant: "cgrates.org", - Account: "1002", Direction: "*out", ActionTimingsId: "PREPAID_10", ActionTriggersId: "STANDARD_TRIGGERS"} + Account: "1002", Direction: "*out", ActionPlanId: "PREPAID_10", ActionTriggersId: "STANDARD_TRIGGERS"} aa3 := &utils.TPAccountActions{TPid: engine.TEST_SQL, LoadId: engine.TEST_SQL, Tenant: "cgrates.org", - Account: "1003", Direction: "*out", ActionTimingsId: "PREPAID_10", ActionTriggersId: "STANDARD_TRIGGERS"} + Account: "1003", Direction: "*out", ActionPlanId: "PREPAID_10", ActionTriggersId: "STANDARD_TRIGGERS"} aa4 := &utils.TPAccountActions{TPid: engine.TEST_SQL, LoadId: engine.TEST_SQL, Tenant: "cgrates.org", - Account: "1004", Direction: "*out", ActionTimingsId: "PREPAID_10", ActionTriggersId: "STANDARD_TRIGGERS"} + Account: "1004", Direction: "*out", ActionPlanId: "PREPAID_10", ActionTriggersId: "STANDARD_TRIGGERS"} aa5 := &utils.TPAccountActions{TPid: engine.TEST_SQL, LoadId: engine.TEST_SQL, Tenant: "cgrates.org", - Account: "1005", Direction: "*out", ActionTimingsId: "PREPAID_10", ActionTriggersId: "STANDARD_TRIGGERS"} + Account: "1005", Direction: "*out", ActionPlanId: "PREPAID_10", ActionTriggersId: "STANDARD_TRIGGERS"} aaTst := new(utils.TPAccountActions) *aaTst = *aa1 aaTst.Account = engine.TEST_SQL @@ -685,7 +685,7 @@ func TestApierTPAccountActions(t *testing.T) { // Check missing params if err := rater.Call("ApierV1.SetTPAccountActions", new(utils.TPAccountActions), &reply); err == nil { t.Error("Calling ApierV1.SetTPAccountActions, expected error, received: ", reply) - } else if err.Error() != "MANDATORY_IE_MISSING:[TPid LoadId Tenant Account Direction ActionTimingsId ActionTriggersId]" { + } else if err.Error() != "MANDATORY_IE_MISSING:[TPid LoadId Tenant Account Direction ActionPlanId ActionTriggersId]" { t.Error("Calling ApierV1.SetTPAccountActions got unexpected error: ", err.Error()) } // Test get @@ -976,20 +976,20 @@ func TestApierSetActions(t *testing.T) { } } -func TestApierSetActionTimings(t *testing.T) { +func TestApierSetActionPlan(t *testing.T) { if !*testLocal { return } atm1 := &ApiActionTiming{ActionsId: "ACTS_1", MonthDays: "1", Time: "00:00:00", Weight: 20.0} - atms1 := &AttrSetActionTimings{ActionTimingsId: "ATMS_1", ActionTimings: []*ApiActionTiming{atm1}} + atms1 := &AttrSetActionPlan{Id: "ATMS_1", ActionPlan: []*ApiActionTiming{atm1}} reply1 := "" - if err := rater.Call("ApierV1.SetActionTimings", atms1, &reply1); err != nil { - t.Error("Got error on ApierV1.SetActionTimings: ", err.Error()) + if err := rater.Call("ApierV1.SetActionPlan", atms1, &reply1); err != nil { + t.Error("Got error on ApierV1.SetActionPlan: ", err.Error()) } else if reply1 != "OK" { - t.Errorf("Calling ApierV1.SetActionTimings received: %s", reply1) + t.Errorf("Calling ApierV1.SetActionPlan received: %s", reply1) } // Calling the second time should raise EXISTS - if err := rater.Call("ApierV1.SetActionTimings", atms1, &reply1); err == nil || err.Error() != "EXISTS" { + if err := rater.Call("ApierV1.SetActionPlan", atms1, &reply1); err == nil || err.Error() != "EXISTS" { t.Error("Unexpected result on duplication: ", err.Error()) } } @@ -1020,7 +1020,7 @@ func TestApierAddTriggeredAction(t *testing.T) { -// Test here AddTriggeredAction +// Test here GetAccountActionTriggers func TestApierGetAccountActionTriggers(t *testing.T) { if !*testLocal { return @@ -1034,6 +1034,7 @@ func TestApierGetAccountActionTriggers(t *testing.T) { } } + // Test here RemAccountActionTriggers func TestApierRemAccountActionTriggers(t *testing.T) { if !*testLocal { @@ -1068,7 +1069,7 @@ func TestApierSetAccount(t *testing.T) { return } reply := "" - attrs := &AttrSetAccount{Tenant: "cgrates.org", Direction: "*out", Account: "dan7", Type: "*prepaid", ActionTimingsId: "ATMS_1"} + attrs := &AttrSetAccount{Tenant: "cgrates.org", Direction: "*out", Account: "dan7", Type: "*prepaid", ActionPlanId: "ATMS_1"} if err := rater.Call("ApierV1.SetAccount", attrs, &reply); err != nil { t.Error("Got error on ApierV1.SetAccount: ", err.Error()) } else if reply != "OK" { @@ -1077,7 +1078,7 @@ func TestApierSetAccount(t *testing.T) { reply2 := "" attrs2 := new(AttrSetAccount) *attrs2 = *attrs - attrs2.ActionTimingsId = "DUMMY_DATA" // Does not exist so it should error when adding triggers on it + attrs2.ActionPlanId = "DUMMY_DATA" // Does not exist so it should error when adding triggers on it // Add account with actions timing which does not exist if err := rater.Call("ApierV1.SetAccount", attrs2, &reply2); err == nil || reply2 == "OK" { // OK is not welcomed t.Error("Expecting error on ApierV1.SetAccount.", err, reply2) @@ -1086,30 +1087,31 @@ func TestApierSetAccount(t *testing.T) { // Test here GetAccountActionTimings -func TestApierGetAccountActionTimings(t *testing.T) { +func TestApierGetAccountActionPlan(t *testing.T) { if !*testLocal { return } var reply []*AccountActionTiming req := AttrAcntAction{Tenant: "cgrates.org", Account:"dan7", Direction: "*out"} - if err := rater.Call("ApierV1.GetAccountActionTimings", req, &reply); err != nil { - t.Error("Got error on ApierV1.GetAccountActionTimings: ", err.Error()) + if err := rater.Call("ApierV1.GetAccountActionPlan", req, &reply); err != nil { + t.Error("Got error on ApierV1.GetAccountActionPlan: ", err.Error()) } else if len(reply) != 1 { - t.Error("Unexpected action timings received") + t.Error("Unexpected action plan received") } else { - if reply[0].ActionTimingsId != "ATMS_1" { - t.Errorf("Unexpected ActionTImingsId received") + if reply[0].ActionPlanId != "ATMS_1" { + t.Errorf("Unexpected ActionPlanId received") } } } + // Test here RemActionTiming func TestApierRemActionTiming(t *testing.T) { if !*testLocal { return } var rmReply string - rmReq := AttrRemActionTiming{ActionTimingsId: "ATMS_1", Tenant: "cgrates.org", Account:"dan4", Direction: "*out"} + rmReq := AttrRemActionTiming{ActionPlanId: "ATMS_1", Tenant: "cgrates.org", Account:"dan4", Direction: "*out"} if err := rater.Call("ApierV1.RemActionTiming", rmReq, &rmReply); err != nil { t.Error("Got error on ApierV1.RemActionTiming: ", err.Error()) } else if rmReply != OK { @@ -1117,8 +1119,8 @@ func TestApierRemActionTiming(t *testing.T) { } var reply []*AccountActionTiming req := AttrAcntAction{Tenant: "cgrates.org", Account:"dan4", Direction: "*out"} - if err := rater.Call("ApierV1.GetAccountActionTimings", req, &reply); err != nil { - t.Error("Got error on ApierV1.GetAccountActionTimings: ", err.Error()) + if err := rater.Call("ApierV1.GetAccountActionPlan", req, &reply); err != nil { + t.Error("Got error on ApierV1.GetAccountActionPlan: ", err.Error()) } else if len(reply) != 0 { t.Error("Action timings was not removed") } @@ -1163,6 +1165,26 @@ func TestApierGetBalance(t *testing.T) { } } +// Start with initial balance, top-up to test max_balance +func TestTriggersExecute(t *testing.T) { + if !*testLocal { + return + } + reply := "" + attrs := &AttrSetAccount{Tenant: "cgrates.org", Direction: "*out", Account: "dan8", Type: "*prepaid"} + if err := rater.Call("ApierV1.SetAccount", attrs, &reply); err != nil { + t.Error("Got error on ApierV1.SetAccount: ", err.Error()) + } else if reply != "OK" { + t.Errorf("Calling ApierV1.SetAccount received: %s", reply) + } + attrAddBlnc := &AttrAddBalance{Tenant: "cgrates.org", Account: "1008", BalanceId: "*monetary", Direction: "*out", Value: 2} + if err := rater.Call("ApierV1.AddBalance", attrAddBlnc, &reply); err != nil { + t.Error("Got error on ApierV1.AddBalance: ", err.Error()) + } else if reply != "OK" { + t.Errorf("Calling ApierV1.AddBalance received: %s", reply) + } +} + // Test here LoadTariffPlanFromFolder func TestApierLoadTariffPlanFromFolder(t *testing.T) { if !*testLocal { diff --git a/apier/v1/tpaccountactions.go b/apier/v1/tpaccountactions.go index 4ffa7caee..989ed05f1 100644 --- a/apier/v1/tpaccountactions.go +++ b/apier/v1/tpaccountactions.go @@ -27,7 +27,7 @@ import ( // Creates a new AccountActions profile within a tariff plan func (self *ApierV1) SetTPAccountActions(attrs utils.TPAccountActions, reply *string) error { if missing := utils.MissingStructFields(&attrs, - []string{"TPid", "LoadId", "Tenant", "Account", "Direction", "ActionTimingsId", "ActionTriggersId"}); len(missing) != 0 { + []string{"TPid", "LoadId", "Tenant", "Account", "Direction", "ActionPlanId", "ActionTriggersId"}); len(missing) != 0 { return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } if err := self.StorDb.SetTPAccountActions(attrs.TPid, map[string]*utils.TPAccountActions{attrs.KeyId(): &attrs}); err != nil { diff --git a/apier/v1/tpactiontimings.go b/apier/v1/tpactiontimings.go index 308c914d9..ec9210fb9 100644 --- a/apier/v1/tpactiontimings.go +++ b/apier/v1/tpactiontimings.go @@ -25,50 +25,50 @@ import ( ) // Creates a new ActionTimings profile within a tariff plan -func (self *ApierV1) SetTPActionTimings(attrs utils.TPActionTimings, reply *string) error { - if missing := utils.MissingStructFields(&attrs, []string{"TPid", "ActionTimingsId", "ActionTimings"}); len(missing) != 0 { +func (self *ApierV1) SetTPActionPlan(attrs utils.TPActionPlan, reply *string) error { + if missing := utils.MissingStructFields(&attrs, []string{"TPid", "Id", "ActionPlan"}); len(missing) != 0 { return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - for _, at := range attrs.ActionTimings { + for _, at := range attrs.ActionPlan { requiredFields := []string{"ActionsId", "TimingId", "Weight"} if missing := utils.MissingStructFields(at, requiredFields); len(missing) != 0 { return fmt.Errorf("%s:Action:%s:%v", utils.ERR_MANDATORY_IE_MISSING, at.ActionsId, missing) } } - if err := self.StorDb.SetTPActionTimings(attrs.TPid, map[string][]*utils.TPActionTiming{attrs.ActionTimingsId: attrs.ActionTimings}); err != nil { + if err := self.StorDb.SetTPActionTimings(attrs.TPid, map[string][]*utils.TPActionTiming{attrs.Id: attrs.ActionPlan}); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } *reply = "OK" return nil } -type AttrGetTPActionTimings struct { +type AttrGetTPActionPlan struct { TPid string // Tariff plan id - ActionTimingsId string // ActionTimings id + Id string // ActionTimings id } -// Queries specific ActionTimings profile on tariff plan -func (self *ApierV1) GetTPActionTimings(attrs AttrGetTPActionTimings, reply *utils.TPActionTimings) error { - if missing := utils.MissingStructFields(&attrs, []string{"TPid", "ActionTimingsId"}); len(missing) != 0 { //Params missing +// Queries specific ActionPlan profile on tariff plan +func (self *ApierV1) GetTPActionPlan(attrs AttrGetTPActionPlan, reply *utils.TPActionPlan) error { + if missing := utils.MissingStructFields(&attrs, []string{"TPid", "Id"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if ats, err := self.StorDb.GetTPActionTimings(attrs.TPid, attrs.ActionTimingsId); err != nil { + if ats, err := self.StorDb.GetTPActionTimings(attrs.TPid, attrs.Id); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else if len(ats) == 0 { return errors.New(utils.ERR_NOT_FOUND) } else { // Got the data we need, convert it - atRply := &utils.TPActionTimings{attrs.TPid, attrs.ActionTimingsId, ats[attrs.ActionTimingsId]} + atRply := &utils.TPActionPlan{attrs.TPid, attrs.Id, ats[attrs.Id]} *reply = *atRply } return nil } -type AttrGetTPActionTimingIds struct { +type AttrGetTPActionPlanIds struct { TPid string // Tariff plan id } -// Queries ActionTimings identities on specific tariff plan. -func (self *ApierV1) GetTPActionTimingIds(attrs AttrGetTPActionTimingIds, reply *[]string) error { +// Queries ActionPlan identities on specific tariff plan. +func (self *ApierV1) GetTPActionPlanIds(attrs AttrGetTPActionPlanIds, reply *[]string) error { if missing := utils.MissingStructFields(&attrs, []string{"TPid"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } @@ -82,12 +82,12 @@ func (self *ApierV1) GetTPActionTimingIds(attrs AttrGetTPActionTimingIds, reply return nil } -// Removes specific ActionTimings on Tariff plan -func (self *ApierV1) RemTPActionTimings(attrs AttrGetTPActionTimings, reply *string) error { - if missing := utils.MissingStructFields(&attrs, []string{"TPid", "ActionTimingsId"}); len(missing) != 0 { //Params missing +// Removes specific ActionPlan on Tariff plan +func (self *ApierV1) RemTPActionPlan(attrs AttrGetTPActionPlan, reply *string) error { + if missing := utils.MissingStructFields(&attrs, []string{"TPid", "Id"}); len(missing) != 0 { //Params missing return fmt.Errorf("%s:%v", utils.ERR_MANDATORY_IE_MISSING, missing) } - if err := self.StorDb.RemTPData(utils.TBL_TP_ACTION_TIMINGS, attrs.TPid, attrs.ActionTimingsId); err != nil { + if err := self.StorDb.RemTPData(utils.TBL_TP_ACTION_PLANS, attrs.TPid, attrs.Id); err != nil { return fmt.Errorf("%s:%s", utils.ERR_SERVER_ERROR, err.Error()) } else { *reply = "OK" diff --git a/apier/v1/tutfscsv_local_test.go b/apier/v1/tutfscsv_local_test.go new file mode 100644 index 000000000..6b5f8ef15 --- /dev/null +++ b/apier/v1/tutfscsv_local_test.go @@ -0,0 +1,194 @@ +/* +Rating system designed to be used in VoIP Carriers World +Copyright (C) 2013 ITsysCOM + +This program is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +This program is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with this program. If not, see +*/ + +package apier + +import ( + "testing" + "fmt" + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" + "net/rpc" + "net/rpc/jsonrpc" + "os/exec" + "path" + "time" + "reflect" +) + + +// Empty tables before using them +func TestFsCsvCreateTables(t *testing.T) { + if !*testLocal { + return + } + if *storDbType != utils.MYSQL { + t.Fatal("Unsupported storDbType") + } + var mysql *engine.MySQLStorage + if d, err := engine.NewMySQLStorage(cfg.StorDBHost, cfg.StorDBPort, cfg.StorDBName, cfg.StorDBUser, cfg.StorDBPass); err != nil { + t.Fatal("Error on opening database connection: ", err) + } else { + mysql = d.(*engine.MySQLStorage) + } + for _, scriptName := range []string{engine.CREATE_CDRS_TABLES_SQL, engine.CREATE_COSTDETAILS_TABLES_SQL, engine.CREATE_MEDIATOR_TABLES_SQL, engine.CREATE_TARIFFPLAN_TABLES_SQL} { + if err := mysql.CreateTablesFromScript(path.Join(*dataDir, "storage", *storDbType, scriptName)); err != nil { + t.Fatal("Error on mysql creation: ", err.Error()) + return // No point in going further + } + } + for _, tbl := range []string{utils.TBL_CDRS_PRIMARY, utils.TBL_CDRS_EXTRA} { + if _, err := mysql.Db.Query(fmt.Sprintf("SELECT 1 from %s", tbl)); err != nil { + t.Fatal(err.Error()) + } + } +} + +func TestFsCsvInitDataDb(t *testing.T) { + if !*testLocal { + return + } + ratingDb, err := engine.ConfigureRatingStorage(cfg.RatingDBType, cfg.RatingDBHost, cfg.RatingDBPort, cfg.RatingDBName, cfg.RatingDBUser, cfg.RatingDBPass, cfg.DBDataEncoding) + if err != nil { + t.Fatal("Cannot connect to dataDb", err) + } + accountDb, err := engine.ConfigureAccountingStorage(cfg.AccountDBType, cfg.AccountDBHost, cfg.AccountDBPort, cfg.AccountDBName, + cfg.AccountDBUser, cfg.AccountDBPass, cfg.DBDataEncoding) + if err != nil { + t.Fatal("Cannot connect to dataDb", err) + } + for _, db := range []engine.Storage{ratingDb, accountDb} { + if err := db.Flush(); err != nil { + t.Fatal("Cannot reset dataDb", err) + } + } +} + +// Finds cgr-engine executable and starts it with default configuration +func TestFsCsvStartEngine(t *testing.T) { + if !*testLocal { + return + } + enginePath, err := exec.LookPath("cgr-engine") + if err != nil { + t.Fatal("Cannot find cgr-engine executable") + } + exec.Command("pkill", "cgr-engine").Run() // Just to make sure another one is not running, bit brutal maybe we can fine tune it + engine := exec.Command(enginePath, "-rater", "-scheduler", "-cdrs", "-mediator", "-config", path.Join(*dataDir, "conf", "cgrates.cfg")) + if err := engine.Start(); err != nil { + t.Fatal("Cannot start cgr-engine: ", err.Error()) + } + time.Sleep(time.Duration(*waitRater) * time.Millisecond) // Give time to rater to fire up +} + +// Connect rpc client to rater +func TestFsCsvRpcConn(t *testing.T) { + if !*testLocal { + return + } + var err error + if cfg.RPCEncoding == utils.JSON { + rater, err = jsonrpc.Dial("tcp", cfg.MediatorRater) + } else { + rater, err = rpc.Dial("tcp", cfg.MediatorRater) + } + if err != nil { + t.Fatal("Could not connect to rater: ", err.Error()) + } +} + + +// Make sure we start with fresh data +func TestFsCsvEmptyCache(t *testing.T) { + if !*testLocal { + return + } + reply := "" + arc := new(utils.ApiReloadCache) + // Simple test that command is executed without errors + if err := rater.Call("ApierV1.ReloadCache", arc, &reply); err != nil { + t.Error("Got error on ApierV1.ReloadCache: ", err.Error()) + } else if reply != "OK" { + t.Error("Calling ApierV1.ReloadCache got reply: ", reply) + } + var rcvStats *utils.CacheStats + expectedStats := &utils.CacheStats{Destinations: 0, RatingPlans: 0, RatingProfiles: 0, Actions: 0} + var args utils.AttrCacheStats + if err := rater.Call("ApierV1.GetCacheStats", args, &rcvStats); err != nil { + t.Error("Got error on ApierV1.GetCacheStats: ", err.Error()) + } else if !reflect.DeepEqual(expectedStats, rcvStats) { + t.Errorf("Calling ApierV1.GetCacheStats expected: %v, received: %v", expectedStats, rcvStats) + } +} + +func TestFsCsvLoadTariffPlans(t *testing.T) { + if !*testLocal { + return + } + reply := "" + // Simple test that command is executed without errors + attrs := &AttrLoadTPFromFolder{FolderPath: path.Join(*dataDir, "tutorials", "fs_csv", "cgrates", "tariffplans")} + if err := rater.Call("ApierV1.LoadTariffPlanFromFolder", attrs, &reply); err != nil { + t.Error("Got error on ApierV1.LoadTariffPlanFromFolder: ", err.Error()) + } else if reply != "OK" { + t.Error("Calling ApierV1.LoadTariffPlanFromFolder got reply: ", reply) + } + var rcvStats *utils.CacheStats + expectedStats := &utils.CacheStats{Destinations: 3, RatingPlans: 1, RatingProfiles: 1, Actions: 2} + var args utils.AttrCacheStats + if err := rater.Call("ApierV1.GetCacheStats", args, &rcvStats); err != nil { + t.Error("Got error on ApierV1.GetCacheStats: ", err.Error()) + } else if !reflect.DeepEqual(expectedStats, rcvStats) { + t.Errorf("Calling ApierV1.GetCacheStats expected: %v, received: %v", expectedStats, rcvStats) + } +} + +func TestFsCsvCall1(t *testing.T) { + if !*testLocal { + return + } + tStart := time.Date(2014, 01, 15, 6, 0, 0, 0, time.UTC) + tEnd := time.Date(2014, 01, 15, 6, 0, 35, 0, time.UTC) + cd := engine.CallDescriptor { + Direction: "*out", + TOR: "call", + Tenant: "cgrates.org", + Subject: "1001", + Account: "1001", + Destination: "1002", + TimeStart: tStart, + TimeEnd: tEnd, + CallDuration: 35, + } + var cc engine.CallCost + // Simple test that command is executed without errors + if err := rater.Call("Responder.GetCost", cd, &cc); err != nil { + t.Error("Got error on Responder.GetCost: ", err.Error()) + } else if cc.ConnectFee != 0.4 && cc.Cost != 0.2 { + t.Errorf("Calling Responder.GetCost got callcost: %v", cc) + } +} + + +// Simply kill the engine after we are done with tests within this file +func TestFsCsvStopEngine(t *testing.T) { + if !*testLocal { + return + } + exec.Command("pkill", "cgr-engine").Run() +} diff --git a/cdrc/cdrc.go b/cdrc/cdrc.go index 7393b95e8..3df8587e6 100644 --- a/cdrc/cdrc.go +++ b/cdrc/cdrc.go @@ -23,10 +23,6 @@ import ( "encoding/csv" "errors" "fmt" - "github.com/cgrates/cgrates/config" - "github.com/cgrates/cgrates/engine" - "github.com/cgrates/cgrates/utils" - "github.com/howeyc/fsnotify" "io" "io/ioutil" "net/http" @@ -36,6 +32,11 @@ import ( "strconv" "strings" "time" + + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/utils" + "github.com/howeyc/fsnotify" ) const ( @@ -59,9 +60,9 @@ func NewCdrc(config *config.CGRConfig) (*Cdrc, error) { } type Cdrc struct { - cgrCfg *config.CGRConfig + cgrCfg *config.CGRConfig cfgCdrFields map[string]string // Key is the name of the field - httpClient *http.Client + httpClient *http.Client } // When called fires up folder monitoring, either automated via inotify or manual by sleeping between processing @@ -80,17 +81,17 @@ func (self *Cdrc) Run() error { func (self *Cdrc) parseFieldsConfig() error { var err error self.cfgCdrFields = map[string]string{ - utils.ACCID: self.cgrCfg.CdrcAccIdField, - utils.REQTYPE: self.cgrCfg.CdrcReqTypeField, - utils.DIRECTION: self.cgrCfg.CdrcDirectionField, - utils.TENANT: self.cgrCfg.CdrcTenantField, - utils.TOR: self.cgrCfg.CdrcTorField, - utils.ACCOUNT: self.cgrCfg.CdrcAccountField, - utils.SUBJECT: self.cgrCfg.CdrcSubjectField, - utils.DESTINATION: self.cgrCfg.CdrcDestinationField, - utils.ANSWER_TIME: self.cgrCfg.CdrcAnswerTimeField, - utils.DURATION: self.cgrCfg.CdrcDurationField, - } + utils.ACCID: self.cgrCfg.CdrcAccIdField, + utils.REQTYPE: self.cgrCfg.CdrcReqTypeField, + utils.DIRECTION: self.cgrCfg.CdrcDirectionField, + utils.TENANT: self.cgrCfg.CdrcTenantField, + utils.TOR: self.cgrCfg.CdrcTorField, + utils.ACCOUNT: self.cgrCfg.CdrcAccountField, + utils.SUBJECT: self.cgrCfg.CdrcSubjectField, + utils.DESTINATION: self.cgrCfg.CdrcDestinationField, + utils.ANSWER_TIME: self.cgrCfg.CdrcAnswerTimeField, + utils.DURATION: self.cgrCfg.CdrcDurationField, + } // Add extra fields here, config extra fields in the form of []string{"fieldName1:indxInCsv1","fieldName2: indexInCsv2"} for _, fieldWithIdx := range self.cgrCfg.CdrcExtraFields { @@ -203,7 +204,7 @@ func (self *Cdrc) processFile(filePath string) error { engine.Logger.Err(fmt.Sprintf(" Error in csv file: %s", err.Error())) continue } - if _, err := self.httpClient.PostForm(fmt.Sprintf("http://%s/cgr", self.cgrCfg.CdrcCdrs), cdrAsForm); err != nil { + if _, err := self.httpClient.PostForm(fmt.Sprintf("http://%s/cgr", self.cgrCfg.HTTPListen), cdrAsForm); err != nil { engine.Logger.Err(fmt.Sprintf(" Failed posting CDR, error: %s", err.Error())) continue } diff --git a/cdrs/cdrs.go b/cdrs/cdrs.go index d02cedf8c..e9d0118a2 100644 --- a/cdrs/cdrs.go +++ b/cdrs/cdrs.go @@ -20,12 +20,13 @@ package cdrs import ( "fmt" + "io/ioutil" + "net/http" + "github.com/cgrates/cgrates/config" "github.com/cgrates/cgrates/engine" "github.com/cgrates/cgrates/mediator" "github.com/cgrates/cgrates/utils" - "io/ioutil" - "net/http" ) var ( @@ -75,8 +76,7 @@ func New(s engine.CdrStorage, m *mediator.Mediator, c *config.CGRConfig) *CDRS { return &CDRS{} } -func (cdrs *CDRS) StartCapturingCDRs() { - http.HandleFunc("/cgr", cgrCdrHandler) // Attach CGR CDR Handler - http.HandleFunc("/freeswitch_json", fsCdrHandler) // Attach FreeSWITCH JSON CDR Handler - http.ListenAndServe(cfg.CDRSListen, nil) +func (cdrs *CDRS) RegisterHanlersToServer(server *engine.Server) { + server.RegisterHttpFunc("/cgr", cgrCdrHandler) + server.RegisterHttpFunc("/freeswitch_json", fsCdrHandler) } diff --git a/cmd/cgr-engine/cgr-engine.go b/cmd/cgr-engine/cgr-engine.go index 904619e59..a09a4650d 100644 --- a/cmd/cgr-engine/cgr-engine.go +++ b/cmd/cgr-engine/cgr-engine.go @@ -22,11 +22,8 @@ import ( "errors" "flag" "fmt" - "io" "log" - "net" "net/rpc" - "net/rpc/jsonrpc" "os" "runtime" "strconv" @@ -46,7 +43,6 @@ import ( ) const ( - DISABLED = "disabled" INTERNAL = "internal" JSON = "json" GOB = "gob" @@ -69,42 +65,14 @@ var ( pidFile = flag.String("pid", "", "Write pid file") bal = balancer2go.NewBalancer() exitChan = make(chan bool) - sm sessionmanager.SessionManager - medi *mediator.Mediator - cfg *config.CGRConfig - err error + server = &engine.Server{} + + sm sessionmanager.SessionManager + medi *mediator.Mediator + cfg *config.CGRConfig + err error ) -func listenToRPCRequests(rpcResponder interface{}, apier *apier.ApierV1, rpcAddress string, rpc_encoding string) { - l, err := net.Listen("tcp", rpcAddress) - if err != nil { - engine.Logger.Crit(fmt.Sprintf(" Could not listen to %v: %v", rpcAddress, err)) - exitChan <- true - return - } - defer l.Close() - - engine.Logger.Info(fmt.Sprintf(" Listening for incomming RPC requests on %v", l.Addr())) - rpc.Register(rpcResponder) - rpc.Register(apier) - var serveFunc func(io.ReadWriteCloser) - if rpc_encoding == JSON { - serveFunc = jsonrpc.ServeConn - } else { - serveFunc = rpc.ServeConn - } - for { - conn, err := l.Accept() - if err != nil { - engine.Logger.Err(fmt.Sprintf(" Accept error: %v", conn)) - continue - } - - engine.Logger.Info(fmt.Sprintf(" New incoming connection: %v", conn.RemoteAddr())) - go serveFunc(conn) - } -} - func startMediator(responder *engine.Responder, loggerDb engine.LogStorage, cdrDb engine.CdrStorage) { var connector engine.Connector if cfg.MediatorRater == INTERNAL { @@ -112,22 +80,13 @@ func startMediator(responder *engine.Responder, loggerDb engine.LogStorage, cdrD } else { var client *rpc.Client var err error - if cfg.RPCEncoding == JSON { - for i := 0; i < cfg.MediatorRaterReconnects; i++ { - client, err = jsonrpc.Dial("tcp", cfg.MediatorRater) - if err == nil { //Connected so no need to reiterate - break - } - time.Sleep(time.Duration(i/2) * time.Second) - } - } else { - for i := 0; i < cfg.MediatorRaterReconnects; i++ { - client, err = rpc.Dial("tcp", cfg.MediatorRater) - if err == nil { //Connected so no need to reiterate - break - } - time.Sleep(time.Duration(i/2) * time.Second) + + for i := 0; i < cfg.MediatorRaterReconnects; i++ { + client, err = rpc.Dial("tcp", cfg.MediatorRater) + if err == nil { //Connected so no need to reiterate + break } + time.Sleep(time.Duration(i/2) * time.Second) } if err != nil { engine.Logger.Crit(fmt.Sprintf("Could not connect to engine: %v", err)) @@ -163,24 +122,13 @@ func startSessionManager(responder *engine.Responder, loggerDb engine.LogStorage } else { var client *rpc.Client var err error - if cfg.RPCEncoding == JSON { - // We attempt to reconnect more times - for i := 0; i < cfg.SMRaterReconnects; i++ { - client, err = jsonrpc.Dial("tcp", cfg.SMRater) - if err == nil { //Connected so no need to reiterate - break - } - time.Sleep(time.Duration(i/2) * time.Second) - } - } else { - for i := 0; i < cfg.SMRaterReconnects; i++ { - client, err = rpc.Dial("tcp", cfg.SMRater) - if err == nil { //Connected so no need to reiterate - break - } - time.Sleep(time.Duration(i/2) * time.Second) - } + for i := 0; i < cfg.SMRaterReconnects; i++ { + client, err = rpc.Dial("tcp", cfg.SMRater) + if err == nil { //Connected so no need to reiterate + break + } + time.Sleep(time.Duration(i/2) * time.Second) } if err != nil { engine.Logger.Crit(fmt.Sprintf("Could not connect to engine: %v", err)) @@ -217,7 +165,7 @@ func startCDRS(responder *engine.Responder, cdrDb engine.CdrStorage) { } } cs := cdrs.New(cdrDb, medi, cfg) - cs.StartCapturingCDRs() + cs.RegisterHanlersToServer(server) exitChan <- true } @@ -230,35 +178,7 @@ func startHistoryScribe() { exitChan <- true return } - } - - if cfg.HistoryServerEnabled { - if cfg.HistoryListen != INTERNAL { - rpc.RegisterName("Scribe", scribeServer) - var serveFunc func(io.ReadWriteCloser) - if cfg.RPCEncoding == JSON { - serveFunc = jsonrpc.ServeConn - } else { - serveFunc = rpc.ServeConn - } - l, err := net.Listen("tcp", cfg.HistoryListen) - if err != nil { - engine.Logger.Crit(fmt.Sprintf(" Could not listen to %v: %v", cfg.HistoryListen, err)) - exitChan <- true - return - } - defer l.Close() - for { - conn, err := l.Accept() - if err != nil { - engine.Logger.Err(fmt.Sprintf(" Accept error: %v", conn)) - continue - } - - engine.Logger.Info(fmt.Sprintf(" New incoming connection: %v", conn.RemoteAddr())) - go serveFunc(conn) - } - } + server.RpcRegisterName("Scribe", scribeServer) } var scribeAgent history.Scribe @@ -266,7 +186,7 @@ func startHistoryScribe() { if cfg.HistoryAgentEnabled { if cfg.HistoryServer != INTERNAL { // Connect in iteration since there are chances of concurrency here for i := 0; i < 3; i++ { //ToDo: Make it globally configurable - if scribeAgent, err = history.NewProxyScribe(cfg.HistoryServer, cfg.RPCEncoding); err == nil { + if scribeAgent, err = history.NewProxyScribe(cfg.HistoryServer); err == nil { break //Connected so no need to reiterate } else if i == 2 && err != nil { engine.Logger.Crit(err.Error()) @@ -289,11 +209,11 @@ func startHistoryScribe() { } func checkConfigSanity() error { - if cfg.SMEnabled && cfg.RaterEnabled && cfg.RaterBalancer != DISABLED { + if cfg.SMEnabled && cfg.RaterEnabled && cfg.RaterBalancer != "" { engine.Logger.Crit("The session manager must not be enabled on a worker engine (change [engine]/balancer to disabled)!") return errors.New("SessionManager on Worker") } - if cfg.BalancerEnabled && cfg.RaterEnabled && cfg.RaterBalancer != DISABLED { + if cfg.BalancerEnabled && cfg.RaterEnabled && cfg.RaterBalancer != "" { engine.Logger.Crit("The balancer is enabled so it cannot connect to another balancer (change rater/balancer to disabled)!") return errors.New("Improperly configured balancer") } @@ -410,23 +330,26 @@ func main() { } stopHandled := false // Async starts here - if cfg.RaterEnabled && cfg.RaterBalancer != DISABLED && !cfg.BalancerEnabled { - go registerToBalancer() - go stopRaterSignalHandler() + if cfg.RaterEnabled && cfg.RaterBalancer != "" && !cfg.BalancerEnabled { + registerToBalancer() + stopRaterSignalHandler() stopHandled = true } responder := &engine.Responder{ExitChan: exitChan} apier := &apier.ApierV1{StorDb: loadDb, RatingDb: ratingDb, AccountDb: accountDb, CdrDb: cdrDb, Config: cfg} - if cfg.RaterEnabled && !cfg.BalancerEnabled && cfg.RaterListen != INTERNAL { - engine.Logger.Info(fmt.Sprintf("Starting CGRateS Rater on %s.", cfg.RaterListen)) - go listenToRPCRequests(responder, apier, cfg.RaterListen, cfg.RPCEncoding) + + if cfg.RaterEnabled && !cfg.BalancerEnabled && cfg.RaterBalancer != INTERNAL { + engine.Logger.Info("Starting CGRateS Rater") + server.RpcRegister(responder) + server.RpcRegister(apier) } if cfg.BalancerEnabled { - engine.Logger.Info(fmt.Sprintf("Starting CGRateS Balancer on %s.", cfg.BalancerListen)) + engine.Logger.Info("Starting CGRateS Balancer") go stopBalancerSignalHandler() stopHandled = true responder.Bal = bal - go listenToRPCRequests(responder, apier, cfg.BalancerListen, cfg.RPCEncoding) + server.RpcRegister(responder) + server.RpcRegister(apier) if cfg.RaterEnabled { engine.Logger.Info("Starting internal engine.") bal.AddClient("local", new(engine.ResponderWorker)) @@ -435,12 +358,11 @@ func main() { if !stopHandled { go generalSignalHandler() } - if cfg.SchedulerEnabled { engine.Logger.Info("Starting CGRateS Scheduler.") go func() { sched := scheduler.NewScheduler() - go reloadSchedulerSingnalHandler(sched, accountDb) + reloadSchedulerSingnalHandler(sched, accountDb) apier.Sched = sched sched.LoadActionTimings(accountDb) sched.Loop() @@ -449,29 +371,32 @@ func main() { if cfg.SMEnabled { engine.Logger.Info("Starting CGRateS SessionManager.") - go startSessionManager(responder, logDb) + startSessionManager(responder, logDb) // close all sessions on shutdown - go shutdownSessionmanagerSingnalHandler() + shutdownSessionmanagerSingnalHandler() } if cfg.MediatorEnabled { engine.Logger.Info("Starting CGRateS Mediator.") - go startMediator(responder, logDb, cdrDb) + startMediator(responder, logDb, cdrDb) } if cfg.CDRSEnabled { engine.Logger.Info("Starting CGRateS CDR Server.") - go startCDRS(responder, cdrDb) + startCDRS(responder, cdrDb) } if cfg.HistoryServerEnabled || cfg.HistoryAgentEnabled { engine.Logger.Info("Starting History Service.") - go startHistoryScribe() + startHistoryScribe() } if cfg.CdrcEnabled { engine.Logger.Info("Starting CGRateS CDR Client.") - go startCdrc() + startCdrc() } + go server.ServeGOB(cfg.RPCGOBListen) + go server.ServeJSON(cfg.RPCJSONListen) + go server.ServeHTTP(cfg.HTTPListen) <-exitChan if *pidFile != "" { if err := os.Remove(*pidFile); err != nil { diff --git a/cmd/cgr-engine/registration.go b/cmd/cgr-engine/registration.go index b7b4ce941..d684214da 100644 --- a/cmd/cgr-engine/registration.go +++ b/cmd/cgr-engine/registration.go @@ -76,7 +76,7 @@ func unregisterFromBalancer() { } var reply int engine.Logger.Info(fmt.Sprintf("Unregistering from balancer %s", cfg.RaterBalancer)) - client.Call("Responder.UnRegisterRater", cfg.RaterListen, &reply) + client.Call("Responder.UnRegisterRater", cfg.RPCGOBListen, &reply) if err := client.Close(); err != nil { engine.Logger.Crit("Could not close balancer unregistration!") exitChan <- true @@ -95,7 +95,7 @@ func registerToBalancer() { } var reply int engine.Logger.Info(fmt.Sprintf("Registering to balancer %s", cfg.RaterBalancer)) - client.Call("Responder.RegisterRater", cfg.RaterListen, &reply) + client.Call("Responder.RegisterRater", cfg.RPCGOBListen, &reply) if err := client.Close(); err != nil { engine.Logger.Crit("Could not close balancer registration!") exitChan <- true diff --git a/cmd/cgr-loader/cgr-loader.go b/cmd/cgr-loader/cgr-loader.go index 5b86626cb..179c0a339 100644 --- a/cmd/cgr-loader/cgr-loader.go +++ b/cmd/cgr-loader/cgr-loader.go @@ -24,7 +24,6 @@ import ( "fmt" "log" "net/rpc" - "net/rpc/jsonrpc" "path" "github.com/cgrates/cgrates/config" @@ -70,7 +69,6 @@ var ( toStorDb = flag.Bool("to_stordb", false, "Import the tariff plan from files to storDb") historyServer = flag.String("history_server", cgrConfig.HistoryServer, "The history server address:port, empty to disable automaticautomatic history archiving") raterAddress = flag.String("rater_address", cgrConfig.MediatorRater, "Rater service to contact for cache reloads, empty to disable automatic cache reloads") - rpcEncoding = flag.String("rpc_encoding", cgrConfig.RPCEncoding, "The history server rpc encoding json|gob") runId = flag.String("runid", "", "Uniquely identify an import/load, postpended to some automatic fields") ) @@ -132,18 +130,18 @@ func main() { log.Fatal(err, "\n\t", v.Message) } } - loader = engine.NewFileCSVReader(ratingDb, accountDb, ',', - path.Join(*dataPath, utils.DESTINATIONS_CSV), - path.Join(*dataPath, utils.TIMINGS_CSV), - path.Join(*dataPath, utils.RATES_CSV), - path.Join(*dataPath, utils.DESTINATION_RATES_CSV), - path.Join(*dataPath, utils.RATING_PLANS_CSV), - path.Join(*dataPath, utils.RATING_PROFILES_CSV), - path.Join(*dataPath, utils.ACTIONS_CSV), - path.Join(*dataPath, utils.ACTION_TIMINGS_CSV), - path.Join(*dataPath, utils.ACTION_TRIGGERS_CSV), - path.Join(*dataPath, utils.ACCOUNT_ACTIONS_CSV)) - } + loader = engine.NewFileCSVReader(ratingDb, accountDb, ',', + path.Join(*dataPath, utils.DESTINATIONS_CSV), + path.Join(*dataPath, utils.TIMINGS_CSV), + path.Join(*dataPath, utils.RATES_CSV), + path.Join(*dataPath, utils.DESTINATION_RATES_CSV), + path.Join(*dataPath, utils.RATING_PLANS_CSV), + path.Join(*dataPath, utils.RATING_PROFILES_CSV), + path.Join(*dataPath, utils.ACTIONS_CSV), + path.Join(*dataPath, utils.ACTION_PLANS_CSV), + path.Join(*dataPath, utils.ACTION_TRIGGERS_CSV), + path.Join(*dataPath, utils.ACCOUNT_ACTIONS_CSV)) + } err = loader.LoadAll() if err != nil { log.Fatal(err) @@ -155,7 +153,7 @@ func main() { return } if *historyServer != "" { // Init scribeAgent so we can store the differences - if scribeAgent, err := history.NewProxyScribe(*historyServer, *rpcEncoding); err != nil { + if scribeAgent, err := history.NewProxyScribe(*historyServer); err != nil { log.Fatalf("Could not connect to history server, error: %s. Make sure you have properly configured it via -history_server flag.", err.Error()) return } else { @@ -167,11 +165,7 @@ func main() { log.Print("WARNING: Rates history archiving is disabled!") } if *raterAddress != "" { // Init connection to rater so we can reload it's data - if *rpcEncoding == config.JSON { - rater, err = jsonrpc.Dial("tcp", *raterAddress) - } else { - rater, err = rpc.Dial("tcp", *raterAddress) - } + rater, err = rpc.Dial("tcp", *raterAddress) if err != nil { log.Fatalf("Could not connect to rater: %s", err.Error()) return diff --git a/cmd/cgr-tester/cgr-tester.go b/cmd/cgr-tester/cgr-tester.go index 575163121..8eade503f 100644 --- a/cmd/cgr-tester/cgr-tester.go +++ b/cmd/cgr-tester/cgr-tester.go @@ -20,48 +20,47 @@ package main import ( "flag" + "fmt" "log" + "net/rpc" "os" "runtime" "runtime/pprof" "time" - "fmt" - "net/rpc" - "net/rpc/jsonrpc" - "github.com/cgrates/cgrates/engine" + "github.com/cgrates/cgrates/config" + "github.com/cgrates/cgrates/engine" ) var ( - cgrConfig, _ = config.NewDefaultCGRConfig() - cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file") - memprofile = flag.String("memprofile", "", "write memory profile to this file") - runs = flag.Int("runs", 10000, "stress cycle number") - parallel = flag.Int("parallel", 0, "run n requests in parallel") - ratingdb_type = flag.String("ratingdb_type", cgrConfig.RatingDBType, "The type of the RatingDb database ") - ratingdb_host = flag.String("ratingdb_host", cgrConfig.RatingDBHost, "The RatingDb host to connect to.") - ratingdb_port = flag.String("ratingdb_port", cgrConfig.RatingDBPort, "The RatingDb port to bind to.") - ratingdb_name = flag.String("ratingdb_name", cgrConfig.RatingDBName, "The name/number of the RatingDb to connect to.") - ratingdb_user = flag.String("ratingdb_user", cgrConfig.RatingDBUser, "The RatingDb user to sign in as.") - ratingdb_pass = flag.String("ratingdb_passwd", cgrConfig.RatingDBPass, "The RatingDb user's password.") - accountdb_type = flag.String("accountdb_type", cgrConfig.AccountDBType, "The type of the AccountingDb database ") - accountdb_host = flag.String("accountdb_host", cgrConfig.AccountDBHost, "The AccountingDb host to connect to.") - accountdb_port = flag.String("accountdb_port", cgrConfig.AccountDBPort, "The AccountingDb port to bind to.") - accountdb_name = flag.String("accountdb_name", cgrConfig.AccountDBName, "The name/number of the AccountingDb to connect to.") - accountdb_user = flag.String("accountdb_user", cgrConfig.AccountDBUser, "The AccountingDb user to sign in as.") - accountdb_pass = flag.String("accountdb_passwd", cgrConfig.AccountDBPass, "The AccountingDb user's password.") + cgrConfig, _ = config.NewDefaultCGRConfig() + cpuprofile = flag.String("cpuprofile", "", "write cpu profile to file") + memprofile = flag.String("memprofile", "", "write memory profile to this file") + runs = flag.Int("runs", 10000, "stress cycle number") + parallel = flag.Int("parallel", 0, "run n requests in parallel") + ratingdb_type = flag.String("ratingdb_type", cgrConfig.RatingDBType, "The type of the RatingDb database ") + ratingdb_host = flag.String("ratingdb_host", cgrConfig.RatingDBHost, "The RatingDb host to connect to.") + ratingdb_port = flag.String("ratingdb_port", cgrConfig.RatingDBPort, "The RatingDb port to bind to.") + ratingdb_name = flag.String("ratingdb_name", cgrConfig.RatingDBName, "The name/number of the RatingDb to connect to.") + ratingdb_user = flag.String("ratingdb_user", cgrConfig.RatingDBUser, "The RatingDb user to sign in as.") + ratingdb_pass = flag.String("ratingdb_passwd", cgrConfig.RatingDBPass, "The RatingDb user's password.") + accountdb_type = flag.String("accountdb_type", cgrConfig.AccountDBType, "The type of the AccountingDb database ") + accountdb_host = flag.String("accountdb_host", cgrConfig.AccountDBHost, "The AccountingDb host to connect to.") + accountdb_port = flag.String("accountdb_port", cgrConfig.AccountDBPort, "The AccountingDb port to bind to.") + accountdb_name = flag.String("accountdb_name", cgrConfig.AccountDBName, "The name/number of the AccountingDb to connect to.") + accountdb_user = flag.String("accountdb_user", cgrConfig.AccountDBUser, "The AccountingDb user to sign in as.") + accountdb_pass = flag.String("accountdb_passwd", cgrConfig.AccountDBPass, "The AccountingDb user's password.") dbdata_encoding = flag.String("dbdata_encoding", cgrConfig.DBDataEncoding, "The encoding used to store object data in strings.") - raterAddress = flag.String("rater_address", "", "Rater address for remote tests. Empty for internal rater.") - rpcEncoding = flag.String("rpc_encoding", cgrConfig.RPCEncoding, "Rpc encoding to use when talking to remote rater ") - tor = flag.String("tor", "call", "The type of record to use in queries.") - tenant = flag.String("tenant", "call", "The type of record to use in queries.") - subject = flag.String("subject", "1001", "The rating subject to use in queries.") - destination = flag.String("destination", "+4986517174963", "The destination to use in queries.") - + raterAddress = flag.String("rater_address", "", "Rater address for remote tests. Empty for internal rater.") + tor = flag.String("tor", "call", "The type of record to use in queries.") + tenant = flag.String("tenant", "call", "The type of record to use in queries.") + subject = flag.String("subject", "1001", "The rating subject to use in queries.") + destination = flag.String("destination", "+4986517174963", "The destination to use in queries.") + nilDuration = time.Duration(0) ) -func durInternalRater( cd *engine.CallDescriptor) (time.Duration, error) { +func durInternalRater(cd *engine.CallDescriptor) (time.Duration, error) { ratingDb, err := engine.ConfigureRatingStorage(*ratingdb_type, *ratingdb_host, *ratingdb_port, *ratingdb_name, *ratingdb_user, *ratingdb_pass, *dbdata_encoding) if err != nil { return nilDuration, fmt.Errorf("Could not connect to rating database: %s", err.Error()) @@ -104,16 +103,9 @@ func durInternalRater( cd *engine.CallDescriptor) (time.Duration, error) { return time.Since(start), nil } - -func durRemoteRater( cd *engine.CallDescriptor) (time.Duration, error) { +func durRemoteRater(cd *engine.CallDescriptor) (time.Duration, error) { result := engine.CallCost{} - var client *rpc.Client - var err error - if *rpcEncoding=="json" { - client, err = jsonrpc.Dial("tcp", *raterAddress) - } else { - client, err = rpc.Dial("tcp", *raterAddress) - } + client, err := rpc.Dial("tcp", *raterAddress) if err != nil { return nilDuration, fmt.Errorf("Could not connect to engine: ", err.Error()) } @@ -144,9 +136,6 @@ func durRemoteRater( cd *engine.CallDescriptor) (time.Duration, error) { log.Println(result) return time.Since(start), nil } - - - func main() { flag.Parse() diff --git a/config/config.go b/config/config.go index 2db5edf22..acdb7fa0b 100644 --- a/config/config.go +++ b/config/config.go @@ -72,7 +72,9 @@ type CGRConfig struct { StorDBUser string // The user to sign in as. StorDBPass string // The user's password. DBDataEncoding string // The encoding used to store object data in strings: - RPCEncoding string // RPC encoding used on APIs: . + RPCJSONListen string // RPC JSON listening address + RPCGOBListen string // RPC GOB listening address + HTTPListen string // HTTP listening address DefaultReqType string // Use this request type if not defined on top DefaultTOR string // set default type of record DefaultTenant string // set default tenant @@ -81,65 +83,60 @@ type CGRConfig struct { RoundingDecimals int // Number of decimals to round end prices at RaterEnabled bool // start standalone server (no balancer) RaterBalancer string // balancer address host:port - RaterListen string // listening address host:port BalancerEnabled bool - BalancerListen string // Json RPC server address SchedulerEnabled bool - CDRSEnabled bool // Enable CDR Server service - CDRSListen string // CDRS's listening interface: . - CDRSExtraFields []string //Extra fields to store in CDRs - CDRSMediator string // Address where to reach the Mediator. Empty for disabling mediation. <""|internal> - CdreCdrFormat string // Format of the exported CDRs. - CdreExtraFields []string // Extra fields list to add in exported CDRs - CdreDir string // Path towards exported cdrs directory - CdrcEnabled bool // Enable CDR client functionality - CdrcCdrs string // Address where to reach CDR server - CdrcCdrsMethod string // Mechanism to use when posting CDRs on server - CdrcRunDelay time.Duration // Sleep interval between consecutive runs, if time unit missing, defaults to seconds, 0 to use automation via inotify - CdrcCdrType string // CDR file format . - CdrcCdrInDir string // Absolute path towards the directory where the CDRs are stored. - CdrcCdrOutDir string // Absolute path towards the directory where processed CDRs will be moved. - CdrcSourceId string // Tag identifying the source of the CDRs within CGRS database. - CdrcAccIdField string // Accounting id field identifier. Use index number in case of .csv cdrs. - CdrcReqTypeField string // Request type field identifier. Use index number in case of .csv cdrs. - CdrcDirectionField string // Direction field identifier. Use index numbers in case of .csv cdrs. - CdrcTenantField string // Tenant field identifier. Use index numbers in case of .csv cdrs. - CdrcTorField string // Type of Record field identifier. Use index numbers in case of .csv cdrs. - CdrcAccountField string // Account field identifier. Use index numbers in case of .csv cdrs. - CdrcSubjectField string // Subject field identifier. Use index numbers in case of .csv CDRs. - CdrcDestinationField string // Destination field identifier. Use index numbers in case of .csv cdrs. - CdrcAnswerTimeField string // Answer time field identifier. Use index numbers in case of .csv cdrs. - CdrcDurationField string // Duration field identifier. Use index numbers in case of .csv cdrs. - CdrcExtraFields []string // Field identifiers of the fields to add in extra fields section, special format in case of .csv "field1:index1,field2:index2" + CDRSEnabled bool // Enable CDR Server service + CDRSExtraFields []string //Extra fields to store in CDRs + CDRSMediator string // Address where to reach the Mediator. Empty for disabling mediation. <""|internal> + CdreCdrFormat string // Format of the exported CDRs. + CdreExtraFields []string // Extra fields list to add in exported CDRs + CdreDir string // Path towards exported cdrs directory + CdrcEnabled bool // Enable CDR client functionality + CdrcCdrs string // Address where to reach CDR server + CdrcCdrsMethod string // Mechanism to use when posting CDRs on server + CdrcRunDelay time.Duration // Sleep interval between consecutive runs, if time unit missing, defaults to seconds, 0 to use automation via inotify + CdrcCdrType string // CDR file format . + CdrcCdrInDir string // Absolute path towards the directory where the CDRs are stored. + CdrcCdrOutDir string // Absolute path towards the directory where processed CDRs will be moved. + CdrcSourceId string // Tag identifying the source of the CDRs within CGRS database. + CdrcAccIdField string // Accounting id field identifier. Use index number in case of .csv cdrs. + CdrcReqTypeField string // Request type field identifier. Use index number in case of .csv cdrs. + CdrcDirectionField string // Direction field identifier. Use index numbers in case of .csv cdrs. + CdrcTenantField string // Tenant field identifier. Use index numbers in case of .csv cdrs. + CdrcTorField string // Type of Record field identifier. Use index numbers in case of .csv cdrs. + CdrcAccountField string // Account field identifier. Use index numbers in case of .csv cdrs. + CdrcSubjectField string // Subject field identifier. Use index numbers in case of .csv CDRs. + CdrcDestinationField string // Destination field identifier. Use index numbers in case of .csv cdrs. + CdrcAnswerTimeField string // Answer time field identifier. Use index numbers in case of .csv cdrs. + CdrcDurationField string // Duration field identifier. Use index numbers in case of .csv cdrs. + CdrcExtraFields []string // Field identifiers of the fields to add in extra fields section, special format in case of .csv "field1:index1,field2:index2" SMEnabled bool SMSwitchType string - SMRater string // address where to access rater. Can be internal, direct rater address or the address of a balancer - SMRaterReconnects int // Number of reconnect attempts to rater - SMDebitInterval int // the period to be debited in advanced during a call (in seconds) + SMRater string // address where to access rater. Can be internal, direct rater address or the address of a balancer + SMRaterReconnects int // Number of reconnect attempts to rater + SMDebitInterval int // the period to be debited in advanced during a call (in seconds) SMMaxCallDuration time.Duration // The maximum duration of a call - MediatorEnabled bool // Starts Mediator service: . - MediatorListen string // Mediator's listening interface: . - MediatorRater string // Address where to reach the Rater: - MediatorRaterReconnects int // Number of reconnects to rater before giving up. - MediatorRunIds []string // Identifiers for each mediation run on CDRs - MediatorReqTypeFields []string // Name of request type fields to be used during mediation. Use index number in case of .csv cdrs. - MediatorDirectionFields []string // Name of direction fields to be used during mediation. Use index numbers in case of .csv cdrs. - MediatorTenantFields []string // Name of tenant fields to be used during mediation. Use index numbers in case of .csv cdrs. - MediatorTORFields []string // Name of tor fields to be used during mediation. Use index numbers in case of .csv cdrs. - MediatorAccountFields []string // Name of account fields to be used during mediation. Use index numbers in case of .csv cdrs. - MediatorSubjectFields []string // Name of subject fields to be used during mediation. Use index numbers in case of .csv cdrs. - MediatorDestFields []string // Name of destination fields to be used during mediation. Use index numbers in case of .csv cdrs. - MediatorAnswerTimeFields []string // Name of time_start fields to be used during mediation. Use index numbers in case of .csv cdrs. - MediatorDurationFields []string // Name of duration fields to be used during mediation. Use index numbers in case of .csv cdrs. - FreeswitchServer string // freeswitch address host:port - FreeswitchPass string // FS socket password - FreeswitchReconnects int // number of times to attempt reconnect after connect fails - HistoryAgentEnabled bool // Starts History as an agent: . - HistoryServer string // Address where to reach the master history server: - HistoryServerEnabled bool // Starts History as server: . - HistoryListen string // History server listening interface: - HistoryDir string // Location on disk where to store history files. - HistorySaveInterval time.Duration // The timout duration between history writes + MediatorEnabled bool // Starts Mediator service: . + MediatorRater string // Address where to reach the Rater: + MediatorRaterReconnects int // Number of reconnects to rater before giving up. + MediatorRunIds []string // Identifiers for each mediation run on CDRs + MediatorReqTypeFields []string // Name of request type fields to be used during mediation. Use index number in case of .csv cdrs. + MediatorDirectionFields []string // Name of direction fields to be used during mediation. Use index numbers in case of .csv cdrs. + MediatorTenantFields []string // Name of tenant fields to be used during mediation. Use index numbers in case of .csv cdrs. + MediatorTORFields []string // Name of tor fields to be used during mediation. Use index numbers in case of .csv cdrs. + MediatorAccountFields []string // Name of account fields to be used during mediation. Use index numbers in case of .csv cdrs. + MediatorSubjectFields []string // Name of subject fields to be used during mediation. Use index numbers in case of .csv cdrs. + MediatorDestFields []string // Name of destination fields to be used during mediation. Use index numbers in case of .csv cdrs. + MediatorAnswerTimeFields []string // Name of time_start fields to be used during mediation. Use index numbers in case of .csv cdrs. + MediatorDurationFields []string // Name of duration fields to be used during mediation. Use index numbers in case of .csv cdrs. + FreeswitchServer string // freeswitch address host:port + FreeswitchPass string // FS socket password + FreeswitchReconnects int // number of times to attempt reconnect after connect fails + HistoryAgentEnabled bool // Starts History as an agent: . + HistoryServer string // Address where to reach the master history server: + HistoryServerEnabled bool // Starts History as server: . + HistoryDir string // Location on disk where to store history files. + HistorySaveInterval time.Duration // The timout duration between history writes } func (self *CGRConfig) setDefaults() error { @@ -162,7 +159,9 @@ func (self *CGRConfig) setDefaults() error { self.StorDBUser = "cgrates" self.StorDBPass = "CGRateS.org" self.DBDataEncoding = utils.MSGPACK - self.RPCEncoding = JSON + self.RPCJSONListen = "127.0.0.1:2012" + self.RPCGOBListen = "127.0.0.1:2013" + self.HTTPListen = "127.0.0.1:2080" self.DefaultReqType = utils.RATED self.DefaultTOR = "call" self.DefaultTenant = "cgrates.org" @@ -170,20 +169,17 @@ func (self *CGRConfig) setDefaults() error { self.RoundingMethod = utils.ROUNDING_MIDDLE self.RoundingDecimals = 4 self.RaterEnabled = false - self.RaterBalancer = DISABLED - self.RaterListen = "127.0.0.1:2012" + self.RaterBalancer = "" self.BalancerEnabled = false - self.BalancerListen = "127.0.0.1:2013" self.SchedulerEnabled = false self.CDRSEnabled = false - self.CDRSListen = "127.0.0.1:2022" self.CDRSExtraFields = []string{} self.CDRSMediator = "" self.CdreCdrFormat = "csv" self.CdreExtraFields = []string{} self.CdreDir = "/var/log/cgrates/cdr/cdrexport/csv" self.CdrcEnabled = false - self.CdrcCdrs = "127.0.0.1:2022" + self.CdrcCdrs = "127.0.0.1:2080" self.CdrcCdrsMethod = "http_cgr" self.CdrcRunDelay = time.Duration(0) self.CdrcCdrType = "csv" @@ -202,8 +198,7 @@ func (self *CGRConfig) setDefaults() error { self.CdrcDurationField = "9" self.CdrcExtraFields = []string{} self.MediatorEnabled = false - self.MediatorListen = "127.0.0.1:2032" - self.MediatorRater = "127.0.0.1:2012" + self.MediatorRater = "127.0.0.1:2013" self.MediatorRaterReconnects = 3 self.MediatorRunIds = []string{} self.MediatorSubjectFields = []string{} @@ -217,7 +212,7 @@ func (self *CGRConfig) setDefaults() error { self.MediatorDurationFields = []string{} self.SMEnabled = false self.SMSwitchType = FS - self.SMRater = "127.0.0.1:2012" + self.SMRater = "127.0.0.1:2013" self.SMRaterReconnects = 3 self.SMDebitInterval = 10 self.SMMaxCallDuration = time.Duration(3) * time.Hour @@ -227,7 +222,6 @@ func (self *CGRConfig) setDefaults() error { self.HistoryAgentEnabled = false self.HistoryServerEnabled = false self.HistoryServer = "127.0.0.1:2013" - self.HistoryListen = "127.0.0.1:2013" self.HistoryDir = "/var/log/cgrates/history" self.HistorySaveInterval = time.Duration(1) * time.Second return nil @@ -318,8 +312,14 @@ func loadConfig(c *conf.ConfigFile) (*CGRConfig, error) { if hasOpt = c.HasOption("global", "dbdata_encoding"); hasOpt { cfg.DBDataEncoding, _ = c.GetString("global", "dbdata_encoding") } - if hasOpt = c.HasOption("global", "rpc_encoding"); hasOpt { - cfg.RPCEncoding, _ = c.GetString("global", "rpc_encoding") + if hasOpt = c.HasOption("global", "rpc_json_listen"); hasOpt { + cfg.RPCJSONListen, _ = c.GetString("global", "rpc_json_listen") + } + if hasOpt = c.HasOption("global", "rpc_gob_listen"); hasOpt { + cfg.RPCGOBListen, _ = c.GetString("global", "rpc_gob_listen") + } + if hasOpt = c.HasOption("global", "http_listen"); hasOpt { + cfg.HTTPListen, _ = c.GetString("global", "http_listen") } if hasOpt = c.HasOption("global", "default_reqtype"); hasOpt { cfg.DefaultReqType, _ = c.GetString("global", "default_reqtype") @@ -345,24 +345,15 @@ func loadConfig(c *conf.ConfigFile) (*CGRConfig, error) { if hasOpt = c.HasOption("rater", "balancer"); hasOpt { cfg.RaterBalancer, _ = c.GetString("rater", "balancer") } - if hasOpt = c.HasOption("rater", "listen"); hasOpt { - cfg.RaterListen, _ = c.GetString("rater", "listen") - } if hasOpt = c.HasOption("balancer", "enabled"); hasOpt { cfg.BalancerEnabled, _ = c.GetBool("balancer", "enabled") } - if hasOpt = c.HasOption("balancer", "listen"); hasOpt { - cfg.BalancerListen, _ = c.GetString("balancer", "listen") - } if hasOpt = c.HasOption("scheduler", "enabled"); hasOpt { cfg.SchedulerEnabled, _ = c.GetBool("scheduler", "enabled") } if hasOpt = c.HasOption("cdrs", "enabled"); hasOpt { cfg.CDRSEnabled, _ = c.GetBool("cdrs", "enabled") } - if hasOpt = c.HasOption("cdrs", "listen"); hasOpt { - cfg.CDRSListen, _ = c.GetString("cdrs", "listen") - } if hasOpt = c.HasOption("cdrs", "extra_fields"); hasOpt { if cfg.CDRSExtraFields, errParse = ConfigSlice(c, "cdrs", "extra_fields"); errParse != nil { return nil, errParse @@ -392,7 +383,7 @@ func loadConfig(c *conf.ConfigFile) (*CGRConfig, error) { cfg.CdrcCdrsMethod, _ = c.GetString("cdrc", "cdrs_method") } if hasOpt = c.HasOption("cdrc", "run_delay"); hasOpt { - durStr,_ := c.GetString("cdrc", "run_delay") + durStr, _ := c.GetString("cdrc", "run_delay") if cfg.CdrcRunDelay, errParse = utils.ParseDurationWithSecs(durStr); errParse != nil { return nil, errParse } @@ -447,9 +438,6 @@ func loadConfig(c *conf.ConfigFile) (*CGRConfig, error) { if hasOpt = c.HasOption("mediator", "enabled"); hasOpt { cfg.MediatorEnabled, _ = c.GetBool("mediator", "enabled") } - if hasOpt = c.HasOption("mediator", "listen"); hasOpt { - cfg.MediatorListen, _ = c.GetString("mediator", "listen") - } if hasOpt = c.HasOption("mediator", "rater"); hasOpt { cfg.MediatorRater, _ = c.GetString("mediator", "rater") } @@ -522,7 +510,7 @@ func loadConfig(c *conf.ConfigFile) (*CGRConfig, error) { cfg.SMDebitInterval, _ = c.GetInt("session_manager", "debit_interval") } if hasOpt = c.HasOption("session_manager", "max_call_duration"); hasOpt { - maxCallDurStr,_ := c.GetString("session_manager", "max_call_duration") + maxCallDurStr, _ := c.GetString("session_manager", "max_call_duration") if cfg.SMMaxCallDuration, errParse = utils.ParseDurationWithSecs(maxCallDurStr); errParse != nil { return nil, errParse } @@ -545,14 +533,11 @@ func loadConfig(c *conf.ConfigFile) (*CGRConfig, error) { if hasOpt = c.HasOption("history_server", "enabled"); hasOpt { cfg.HistoryServerEnabled, _ = c.GetBool("history_server", "enabled") } - if hasOpt = c.HasOption("history_server", "listen"); hasOpt { - cfg.HistoryListen, _ = c.GetString("history_server", "listen") - } if hasOpt = c.HasOption("history_server", "history_dir"); hasOpt { cfg.HistoryDir, _ = c.GetString("history_server", "history_dir") } if hasOpt = c.HasOption("history_server", "save_interval"); hasOpt { - saveIntvlStr,_ := c.GetString("history_server", "save_interval") + saveIntvlStr, _ := c.GetString("history_server", "save_interval") if cfg.HistorySaveInterval, errParse = utils.ParseDurationWithSecs(saveIntvlStr); errParse != nil { return nil, errParse } diff --git a/config/config_test.go b/config/config_test.go index 0e43924d8..7b40d8603 100644 --- a/config/config_test.go +++ b/config/config_test.go @@ -28,8 +28,7 @@ import ( ) func TestConfigSharing(t *testing.T) { - cfg,_ := NewDefaultCGRConfig() - cfg.RPCEncoding = utils.MSGPACK + cfg, _ := NewDefaultCGRConfig() SetCgrConfig(cfg) cfgReturn := CgrConfig() if !reflect.DeepEqual(cfgReturn, cfg) { @@ -65,7 +64,9 @@ func TestDefaults(t *testing.T) { eCfg.StorDBUser = "cgrates" eCfg.StorDBPass = "CGRateS.org" eCfg.DBDataEncoding = utils.MSGPACK - eCfg.RPCEncoding = JSON + eCfg.RPCJSONListen = "127.0.0.1:2012" + eCfg.RPCGOBListen = "127.0.0.1:2013" + eCfg.HTTPListen = "127.0.0.1:2080" eCfg.DefaultReqType = utils.RATED eCfg.DefaultTOR = "call" eCfg.DefaultTenant = "cgrates.org" @@ -73,20 +74,17 @@ func TestDefaults(t *testing.T) { eCfg.RoundingMethod = utils.ROUNDING_MIDDLE eCfg.RoundingDecimals = 4 eCfg.RaterEnabled = false - eCfg.RaterBalancer = DISABLED - eCfg.RaterListen = "127.0.0.1:2012" + eCfg.RaterBalancer = "" eCfg.BalancerEnabled = false - eCfg.BalancerListen = "127.0.0.1:2013" eCfg.SchedulerEnabled = false eCfg.CDRSEnabled = false - eCfg.CDRSListen = "127.0.0.1:2022" eCfg.CDRSExtraFields = []string{} eCfg.CDRSMediator = "" eCfg.CdreCdrFormat = "csv" eCfg.CdreExtraFields = []string{} eCfg.CdreDir = "/var/log/cgrates/cdr/cdrexport/csv" eCfg.CdrcEnabled = false - eCfg.CdrcCdrs = "127.0.0.1:2022" + eCfg.CdrcCdrs = "127.0.0.1:2080" eCfg.CdrcCdrsMethod = "http_cgr" eCfg.CdrcRunDelay = time.Duration(0) eCfg.CdrcCdrType = "csv" @@ -105,8 +103,7 @@ func TestDefaults(t *testing.T) { eCfg.CdrcDurationField = "9" eCfg.CdrcExtraFields = []string{} eCfg.MediatorEnabled = false - eCfg.MediatorListen = "127.0.0.1:2032" - eCfg.MediatorRater = "127.0.0.1:2012" + eCfg.MediatorRater = "127.0.0.1:2013" eCfg.MediatorRaterReconnects = 3 eCfg.MediatorRunIds = []string{} eCfg.MediatorSubjectFields = []string{} @@ -120,7 +117,7 @@ func TestDefaults(t *testing.T) { eCfg.MediatorDurationFields = []string{} eCfg.SMEnabled = false eCfg.SMSwitchType = FS - eCfg.SMRater = "127.0.0.1:2012" + eCfg.SMRater = "127.0.0.1:2013" eCfg.SMRaterReconnects = 3 eCfg.SMDebitInterval = 10 eCfg.SMMaxCallDuration = time.Duration(3) * time.Hour @@ -130,9 +127,8 @@ func TestDefaults(t *testing.T) { eCfg.HistoryAgentEnabled = false eCfg.HistoryServer = "127.0.0.1:2013" eCfg.HistoryServerEnabled = false - eCfg.HistoryListen = "127.0.0.1:2013" eCfg.HistoryDir = "/var/log/cgrates/history" - eCfg.HistorySaveInterval = time.Duration(1)*time.Second + eCfg.HistorySaveInterval = time.Duration(1) * time.Second if !reflect.DeepEqual(cfg, eCfg) { t.Log(eCfg) t.Log(cfg) @@ -141,7 +137,7 @@ func TestDefaults(t *testing.T) { } // Make sure defaults did not change -func TestDefaultsSanity(t *testing.T) { +/*func TestDefaultsSanity(t *testing.T) { cfg := &CGRConfig{} errSet := cfg.setDefaults() if errSet != nil { @@ -157,7 +153,7 @@ func TestDefaultsSanity(t *testing.T) { (cfg.CDRSListen != INTERNAL && cfg.CDRSListen == cfg.MediatorListen) { t.Error("Listen defaults on the same port!") } -} +}*/ // Load config from file and make sure we have all set func TestConfigFromFile(t *testing.T) { @@ -188,7 +184,9 @@ func TestConfigFromFile(t *testing.T) { eCfg.StorDBUser = "test" eCfg.StorDBPass = "test" eCfg.DBDataEncoding = "test" - eCfg.RPCEncoding = "test" + eCfg.RPCJSONListen = "test" + eCfg.RPCGOBListen = "test" + eCfg.HTTPListen = "test" eCfg.DefaultReqType = "test" eCfg.DefaultTOR = "test" eCfg.DefaultTenant = "test" @@ -197,12 +195,9 @@ func TestConfigFromFile(t *testing.T) { eCfg.RoundingDecimals = 99 eCfg.RaterEnabled = true eCfg.RaterBalancer = "test" - eCfg.RaterListen = "test" eCfg.BalancerEnabled = true - eCfg.BalancerListen = "test" eCfg.SchedulerEnabled = true eCfg.CDRSEnabled = true - eCfg.CDRSListen = "test" eCfg.CDRSExtraFields = []string{"test"} eCfg.CDRSMediator = "test" eCfg.CdreCdrFormat = "test" @@ -211,7 +206,7 @@ func TestConfigFromFile(t *testing.T) { eCfg.CdrcEnabled = true eCfg.CdrcCdrs = "test" eCfg.CdrcCdrsMethod = "test" - eCfg.CdrcRunDelay = time.Duration(99)*time.Second + eCfg.CdrcRunDelay = time.Duration(99) * time.Second eCfg.CdrcCdrType = "test" eCfg.CdrcCdrInDir = "test" eCfg.CdrcCdrOutDir = "test" @@ -228,7 +223,6 @@ func TestConfigFromFile(t *testing.T) { eCfg.CdrcDurationField = "test" eCfg.CdrcExtraFields = []string{"test"} eCfg.MediatorEnabled = true - eCfg.MediatorListen = "test" eCfg.MediatorRater = "test" eCfg.MediatorRaterReconnects = 99 eCfg.MediatorRunIds = []string{"test"} @@ -246,16 +240,15 @@ func TestConfigFromFile(t *testing.T) { eCfg.SMRater = "test" eCfg.SMRaterReconnects = 99 eCfg.SMDebitInterval = 99 - eCfg.SMMaxCallDuration = time.Duration(99)*time.Second + eCfg.SMMaxCallDuration = time.Duration(99) * time.Second eCfg.FreeswitchServer = "test" eCfg.FreeswitchPass = "test" eCfg.FreeswitchReconnects = 99 eCfg.HistoryAgentEnabled = true eCfg.HistoryServer = "test" eCfg.HistoryServerEnabled = true - eCfg.HistoryListen = "test" eCfg.HistoryDir = "test" - eCfg.HistorySaveInterval = time.Duration(99)*time.Second + eCfg.HistorySaveInterval = time.Duration(99) * time.Second if !reflect.DeepEqual(cfg, eCfg) { t.Log(eCfg) t.Log(cfg) diff --git a/config/test_data.txt b/config/test_data.txt index 0b820a81c..91db7858c 100644 --- a/config/test_data.txt +++ b/config/test_data.txt @@ -21,7 +21,9 @@ stordb_name = test # The name of the log database to connect to. stordb_user = test # Username to use when connecting to logdb. stordb_passwd = test # Password to use when connecting to logdb. dbdata_encoding = test # The encoding used to store object data in strings: -rpc_encoding = test # RPC encoding used on APIs: . +rpc_json_listen = test # RPC JSON listening address +rpc_gob_listen = test # RPC GOB listening address +http_listen = test # HTTP listening address default_reqtype = test # Default request type to consider when missing from requests: <""|prepaid|postpaid|pseudoprepaid|rated>. default_tor = test # Default Type of Record to consider when missing from requests. default_tenant = test # Default Tenant to consider when missing from requests. @@ -32,19 +34,16 @@ rounding_decimals = 99 # Number of decimals to round floats/costs at [balancer] enabled = true # Start Balancer service: . -listen = test # Balancer listen interface: . [rater] enabled = true # Enable Rater service: . balancer = test # Register to Balancer as worker: . -listen = test # Rater's listening interface: . [scheduler] enabled = true # Starts Scheduler service: . [cdrs] enabled = true # Start the CDR Server service: . -listen=test # CDRS's listening interface: . extra_fields = test # Extra fields to store in CDRs mediator = test # Address where to reach the Mediator. Empty for disabling mediation. <""|internal> @@ -76,7 +75,6 @@ extra_fields = test # Field identifiers of the fields to add in extra fields s [mediator] enabled = true # Starts Mediator service: . -listen=test # Mediator's listening interface: . rater = test # Address where to reach the Rater: rater_reconnects = 99 # Number of reconnects to rater before giving up. run_ids = test # Identifiers for each mediation run on CDRs @@ -105,7 +103,6 @@ reconnects = 99 # Number of attempts on connect failure. [history_server] enabled = true # Starts History service: . -listen = test # Listening addres for history server: history_dir = test # Location on disk where to store history files. save_interval = 99 # Timeout duration between saves diff --git a/console/add_account.go b/console/add_account.go index ade30f214..b38642b65 100644 --- a/console/add_account.go +++ b/console/add_account.go @@ -56,7 +56,7 @@ func (self *CmdAddAccount) FromArgs(args []string) error { self.rpcParams.Tenant = args[2] self.rpcParams.Account = args[3] self.rpcParams.Type = args[4] - self.rpcParams.ActionTimingsId = args[5] + self.rpcParams.ActionPlanId = args[5] if len(args) > 6 { self.rpcParams.Direction = args[6] } diff --git a/data/conf/cgrates.cfg b/data/conf/cgrates.cfg index 1ba1e1a2c..75646af42 100644 --- a/data/conf/cgrates.cfg +++ b/data/conf/cgrates.cfg @@ -24,7 +24,9 @@ # stordb_user = cgrates # Username to use when connecting to stordb. # stordb_passwd = CGRateS.org # Password to use when connecting to stordb. # dbdata_encoding = msgpack # The encoding used to store object data in strings: -# rpc_encoding = json # RPC encoding used on APIs: . +# rpc_json_listen = "127.0.0.1:2012" # RPC JSON listening address +# rpc_gob_listen = "127.0.0.1:2013" # RPC GOB listening address +# http_listen = "127.0.0.1:2080" # HTTP listening address # default_reqtype = rated # Default request type to consider when missing from requests: <""|prepaid|postpaid|pseudoprepaid|rated>. # default_tor = call # Default Type of Record to consider when missing from requests. # default_tenant = cgrates.org # Default Tenant to consider when missing from requests. @@ -34,19 +36,16 @@ [balancer] # enabled = false # Start Balancer service: . -# listen = 127.0.0.1:2012 # Balancer listen interface: <""|x.y.z.y:1234>. [rater] # enabled = false # Enable RaterCDRSExportPath service: . -# balancer = disabled # Register to Balancer as worker: . -# listen = 127.0.0.1:2012 # Rater's listening interface: . +# balancer = # Register to Balancer as worker: <""|127.0.0.1:2013>. [scheduler] # enabled = false # Starts Scheduler service: . [cdrs] # enabled = false # Start the CDR Server service: . -# listen=127.0.0.1:2022 # CDRS's listening interface: . # extra_fields = # Extra fields to store in CDRs # mediator = # Address where to reach the Mediator. Empty for disabling mediation. <""|internal> @@ -57,7 +56,7 @@ [cdrc] # enabled = false # Enable CDR client functionality -# cdrs = 127.0.0.1:2022 # Address where to reach CDR server +# cdrs = 127.0.0.1:2080 # Address where to reach CDR server # cdrs_method = http_cgr # Mechanism to use when posting CDRs on server # run_delay = 0 # Sleep interval in seconds between consecutive runs, 0 to use automation via inotify # cdr_type = csv # CDR file format . @@ -78,8 +77,7 @@ [mediator] # enabled = false # Starts Mediator service: . -# listen=internal # Mediator's listening interface: . -# rater = 127.0.0.1:2012 # Address where to reach the Rater: +# rater = 127.0.0.1:2013 # Address where to reach the Rater: # rater_reconnects = 3 # Number of reconnects to rater before giving up. # run_ids = # Identifiers of each extra mediation to run on CDRs # reqtype_fields = # Name of request type fields to be used during extra mediation. Use index number in case of .csv cdrs. @@ -95,7 +93,7 @@ [session_manager] # enabled = false # Starts SessionManager service: . # switch_type = freeswitch # Defines the type of switch behind: . -# rater = 127.0.0.1:2012 # Address where to reach the Rater. +# rater = 127.0.0.1:2013 # Address where to reach the Rater. # rater_reconnects = 3 # Number of reconnects to rater before giving up. # debit_interval = 10 # Interval to perform debits on. # max_call_duration = 3h # Maximum call duration a prepaid call can last @@ -107,7 +105,6 @@ [history_server] # enabled = false # Starts History service: . -# listen = 127.0.0.1:2013 # Listening addres for history server: # history_dir = /var/log/cgrates/history # Location on disk where to store history files. # save_interval = 1s # Interval to save changed cache into .git archive diff --git a/data/freeswitch/conf/autoload_configs/abstraction.conf.xml b/data/freeswitch/conf/autoload_configs/abstraction.conf.xml deleted file mode 100644 index d4b1dfd27..000000000 --- a/data/freeswitch/conf/autoload_configs/abstraction.conf.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/data/freeswitch/conf/autoload_configs/acl.conf.xml b/data/freeswitch/conf/autoload_configs/acl.conf.xml deleted file mode 100644 index 0c117d07b..000000000 --- a/data/freeswitch/conf/autoload_configs/acl.conf.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/alsa.conf.xml b/data/freeswitch/conf/autoload_configs/alsa.conf.xml deleted file mode 100644 index e589acaac..000000000 --- a/data/freeswitch/conf/autoload_configs/alsa.conf.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/blacklist.conf.xml b/data/freeswitch/conf/autoload_configs/blacklist.conf.xml deleted file mode 100644 index a981ebbdb..000000000 --- a/data/freeswitch/conf/autoload_configs/blacklist.conf.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/data/freeswitch/conf/autoload_configs/callcenter.conf.xml b/data/freeswitch/conf/autoload_configs/callcenter.conf.xml deleted file mode 100644 index a069413ac..000000000 --- a/data/freeswitch/conf/autoload_configs/callcenter.conf.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/cdr_mongodb.conf.xml b/data/freeswitch/conf/autoload_configs/cdr_mongodb.conf.xml deleted file mode 100644 index ce366d1bd..000000000 --- a/data/freeswitch/conf/autoload_configs/cdr_mongodb.conf.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/cdr_pg_csv.conf.xml b/data/freeswitch/conf/autoload_configs/cdr_pg_csv.conf.xml deleted file mode 100644 index 4fec817b4..000000000 --- a/data/freeswitch/conf/autoload_configs/cdr_pg_csv.conf.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/cdr_sqlite.conf.xml b/data/freeswitch/conf/autoload_configs/cdr_sqlite.conf.xml deleted file mode 100644 index 872c04c4f..000000000 --- a/data/freeswitch/conf/autoload_configs/cdr_sqlite.conf.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/cepstral.conf.xml b/data/freeswitch/conf/autoload_configs/cepstral.conf.xml deleted file mode 100644 index cf4aa92f4..000000000 --- a/data/freeswitch/conf/autoload_configs/cepstral.conf.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/data/freeswitch/conf/autoload_configs/cidlookup.conf.xml b/data/freeswitch/conf/autoload_configs/cidlookup.conf.xml deleted file mode 100644 index a30f9f5c1..000000000 --- a/data/freeswitch/conf/autoload_configs/cidlookup.conf.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/conference.conf.xml b/data/freeswitch/conf/autoload_configs/conference.conf.xml deleted file mode 100644 index 826f6fb9b..000000000 --- a/data/freeswitch/conf/autoload_configs/conference.conf.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/console.conf.xml b/data/freeswitch/conf/autoload_configs/console.conf.xml deleted file mode 100644 index 2d9e3e8de..000000000 --- a/data/freeswitch/conf/autoload_configs/console.conf.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/db.conf.xml b/data/freeswitch/conf/autoload_configs/db.conf.xml deleted file mode 100644 index abc6c0c15..000000000 --- a/data/freeswitch/conf/autoload_configs/db.conf.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/data/freeswitch/conf/autoload_configs/dialplan_directory.conf.xml b/data/freeswitch/conf/autoload_configs/dialplan_directory.conf.xml deleted file mode 100644 index e4edcd6b1..000000000 --- a/data/freeswitch/conf/autoload_configs/dialplan_directory.conf.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/dingaling.conf.xml b/data/freeswitch/conf/autoload_configs/dingaling.conf.xml deleted file mode 100644 index dd6c9a5da..000000000 --- a/data/freeswitch/conf/autoload_configs/dingaling.conf.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/directory.conf.xml b/data/freeswitch/conf/autoload_configs/directory.conf.xml deleted file mode 100644 index 748b2337c..000000000 --- a/data/freeswitch/conf/autoload_configs/directory.conf.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/distributor.conf.xml b/data/freeswitch/conf/autoload_configs/distributor.conf.xml deleted file mode 100644 index a03b1ee81..000000000 --- a/data/freeswitch/conf/autoload_configs/distributor.conf.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/easyroute.conf.xml b/data/freeswitch/conf/autoload_configs/easyroute.conf.xml deleted file mode 100644 index 350a50989..000000000 --- a/data/freeswitch/conf/autoload_configs/easyroute.conf.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/enum.conf.xml b/data/freeswitch/conf/autoload_configs/enum.conf.xml deleted file mode 100644 index b9813efa2..000000000 --- a/data/freeswitch/conf/autoload_configs/enum.conf.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/erlang_event.conf.xml b/data/freeswitch/conf/autoload_configs/erlang_event.conf.xml deleted file mode 100644 index 62deb84f6..000000000 --- a/data/freeswitch/conf/autoload_configs/erlang_event.conf.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/event_multicast.conf.xml b/data/freeswitch/conf/autoload_configs/event_multicast.conf.xml deleted file mode 100644 index eac039260..000000000 --- a/data/freeswitch/conf/autoload_configs/event_multicast.conf.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/event_socket.conf.xml b/data/freeswitch/conf/autoload_configs/event_socket.conf.xml deleted file mode 100644 index 5ea2e0978..000000000 --- a/data/freeswitch/conf/autoload_configs/event_socket.conf.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/fax.conf.xml b/data/freeswitch/conf/autoload_configs/fax.conf.xml deleted file mode 100644 index c7d825665..000000000 --- a/data/freeswitch/conf/autoload_configs/fax.conf.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/fifo.conf.xml b/data/freeswitch/conf/autoload_configs/fifo.conf.xml deleted file mode 100644 index b1db4dd2b..000000000 --- a/data/freeswitch/conf/autoload_configs/fifo.conf.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/hash.conf.xml b/data/freeswitch/conf/autoload_configs/hash.conf.xml deleted file mode 100644 index 95b792877..000000000 --- a/data/freeswitch/conf/autoload_configs/hash.conf.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/httapi.conf.xml b/data/freeswitch/conf/autoload_configs/httapi.conf.xml deleted file mode 100644 index 50bbe78f4..000000000 --- a/data/freeswitch/conf/autoload_configs/httapi.conf.xml +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/http_cache.conf.xml b/data/freeswitch/conf/autoload_configs/http_cache.conf.xml deleted file mode 100644 index 4f0526965..000000000 --- a/data/freeswitch/conf/autoload_configs/http_cache.conf.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/ivr.conf.xml b/data/freeswitch/conf/autoload_configs/ivr.conf.xml deleted file mode 100644 index bd4e73ded..000000000 --- a/data/freeswitch/conf/autoload_configs/ivr.conf.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/data/freeswitch/conf/autoload_configs/java.conf.xml b/data/freeswitch/conf/autoload_configs/java.conf.xml deleted file mode 100644 index 5f71553e3..000000000 --- a/data/freeswitch/conf/autoload_configs/java.conf.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/lcr.conf.xml b/data/freeswitch/conf/autoload_configs/lcr.conf.xml deleted file mode 100644 index 9d106d489..000000000 --- a/data/freeswitch/conf/autoload_configs/lcr.conf.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/local_stream.conf.xml b/data/freeswitch/conf/autoload_configs/local_stream.conf.xml deleted file mode 100644 index 94a566539..000000000 --- a/data/freeswitch/conf/autoload_configs/local_stream.conf.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/logfile.conf.xml b/data/freeswitch/conf/autoload_configs/logfile.conf.xml deleted file mode 100644 index 65bea552b..000000000 --- a/data/freeswitch/conf/autoload_configs/logfile.conf.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/lua.conf.xml b/data/freeswitch/conf/autoload_configs/lua.conf.xml deleted file mode 100644 index 1eb594f0b..000000000 --- a/data/freeswitch/conf/autoload_configs/lua.conf.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/memcache.conf.xml b/data/freeswitch/conf/autoload_configs/memcache.conf.xml deleted file mode 100644 index dc0173f98..000000000 --- a/data/freeswitch/conf/autoload_configs/memcache.conf.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/modules.conf.xml b/data/freeswitch/conf/autoload_configs/modules.conf.xml deleted file mode 100644 index 68d89288c..000000000 --- a/data/freeswitch/conf/autoload_configs/modules.conf.xml +++ /dev/null @@ -1,134 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/mongo.conf.xml b/data/freeswitch/conf/autoload_configs/mongo.conf.xml deleted file mode 100644 index 8423645e9..000000000 --- a/data/freeswitch/conf/autoload_configs/mongo.conf.xml +++ /dev/null @@ -1,20 +0,0 @@ - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/nibblebill.conf.xml b/data/freeswitch/conf/autoload_configs/nibblebill.conf.xml deleted file mode 100644 index ed1c9332c..000000000 --- a/data/freeswitch/conf/autoload_configs/nibblebill.conf.xml +++ /dev/null @@ -1,50 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/opal.conf.xml b/data/freeswitch/conf/autoload_configs/opal.conf.xml deleted file mode 100644 index 280b69304..000000000 --- a/data/freeswitch/conf/autoload_configs/opal.conf.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/oreka.conf.xml b/data/freeswitch/conf/autoload_configs/oreka.conf.xml deleted file mode 100644 index 29eabd5c2..000000000 --- a/data/freeswitch/conf/autoload_configs/oreka.conf.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/osp.conf.xml b/data/freeswitch/conf/autoload_configs/osp.conf.xml deleted file mode 100644 index b320dbba8..000000000 --- a/data/freeswitch/conf/autoload_configs/osp.conf.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/perl.conf.xml b/data/freeswitch/conf/autoload_configs/perl.conf.xml deleted file mode 100644 index b2435000f..000000000 --- a/data/freeswitch/conf/autoload_configs/perl.conf.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/pocketsphinx.conf.xml b/data/freeswitch/conf/autoload_configs/pocketsphinx.conf.xml deleted file mode 100644 index 3bf7d5e57..000000000 --- a/data/freeswitch/conf/autoload_configs/pocketsphinx.conf.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/portaudio.conf.xml b/data/freeswitch/conf/autoload_configs/portaudio.conf.xml deleted file mode 100644 index 02c21ef44..000000000 --- a/data/freeswitch/conf/autoload_configs/portaudio.conf.xml +++ /dev/null @@ -1,218 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/post_load_modules.conf.xml b/data/freeswitch/conf/autoload_configs/post_load_modules.conf.xml deleted file mode 100644 index 8f4e132fa..000000000 --- a/data/freeswitch/conf/autoload_configs/post_load_modules.conf.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/data/freeswitch/conf/autoload_configs/presence_map.conf.xml b/data/freeswitch/conf/autoload_configs/presence_map.conf.xml deleted file mode 100644 index 8a9d1dde5..000000000 --- a/data/freeswitch/conf/autoload_configs/presence_map.conf.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/python.conf.xml b/data/freeswitch/conf/autoload_configs/python.conf.xml deleted file mode 100644 index d3a8fdc75..000000000 --- a/data/freeswitch/conf/autoload_configs/python.conf.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/redis.conf.xml b/data/freeswitch/conf/autoload_configs/redis.conf.xml deleted file mode 100644 index 1a1f47403..000000000 --- a/data/freeswitch/conf/autoload_configs/redis.conf.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/rss.conf.xml b/data/freeswitch/conf/autoload_configs/rss.conf.xml deleted file mode 100644 index f8c4f6d2b..000000000 --- a/data/freeswitch/conf/autoload_configs/rss.conf.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/rtmp.conf.xml b/data/freeswitch/conf/autoload_configs/rtmp.conf.xml deleted file mode 100644 index d5d278810..000000000 --- a/data/freeswitch/conf/autoload_configs/rtmp.conf.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/sangoma_codec.conf.xml b/data/freeswitch/conf/autoload_configs/sangoma_codec.conf.xml deleted file mode 100644 index eed9d673e..000000000 --- a/data/freeswitch/conf/autoload_configs/sangoma_codec.conf.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/shout.conf.xml b/data/freeswitch/conf/autoload_configs/shout.conf.xml deleted file mode 100644 index 3f381e627..000000000 --- a/data/freeswitch/conf/autoload_configs/shout.conf.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/skinny.conf.xml b/data/freeswitch/conf/autoload_configs/skinny.conf.xml deleted file mode 100644 index 6a878fcd7..000000000 --- a/data/freeswitch/conf/autoload_configs/skinny.conf.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/sofia.conf.xml b/data/freeswitch/conf/autoload_configs/sofia.conf.xml deleted file mode 100644 index a5e861432..000000000 --- a/data/freeswitch/conf/autoload_configs/sofia.conf.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/spandsp.conf.xml b/data/freeswitch/conf/autoload_configs/spandsp.conf.xml deleted file mode 100644 index f70416bc6..000000000 --- a/data/freeswitch/conf/autoload_configs/spandsp.conf.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/spidermonkey.conf.xml b/data/freeswitch/conf/autoload_configs/spidermonkey.conf.xml deleted file mode 100644 index 2e6dc6a16..000000000 --- a/data/freeswitch/conf/autoload_configs/spidermonkey.conf.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/switch.conf.xml b/data/freeswitch/conf/autoload_configs/switch.conf.xml deleted file mode 100644 index ddf41f899..000000000 --- a/data/freeswitch/conf/autoload_configs/switch.conf.xml +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/syslog.conf.xml b/data/freeswitch/conf/autoload_configs/syslog.conf.xml deleted file mode 100644 index 636a12c8c..000000000 --- a/data/freeswitch/conf/autoload_configs/syslog.conf.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/timezones.conf.xml b/data/freeswitch/conf/autoload_configs/timezones.conf.xml deleted file mode 100644 index 397e9a979..000000000 --- a/data/freeswitch/conf/autoload_configs/timezones.conf.xml +++ /dev/null @@ -1,551 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/tts_commandline.conf.xml b/data/freeswitch/conf/autoload_configs/tts_commandline.conf.xml deleted file mode 100644 index eb816431b..000000000 --- a/data/freeswitch/conf/autoload_configs/tts_commandline.conf.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/unicall.conf.xml b/data/freeswitch/conf/autoload_configs/unicall.conf.xml deleted file mode 100644 index eeaa0782f..000000000 --- a/data/freeswitch/conf/autoload_configs/unicall.conf.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/unimrcp.conf.xml b/data/freeswitch/conf/autoload_configs/unimrcp.conf.xml deleted file mode 100644 index 45dda798a..000000000 --- a/data/freeswitch/conf/autoload_configs/unimrcp.conf.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/voicemail.conf.xml b/data/freeswitch/conf/autoload_configs/voicemail.conf.xml deleted file mode 100644 index ff4683675..000000000 --- a/data/freeswitch/conf/autoload_configs/voicemail.conf.xml +++ /dev/null @@ -1,70 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/voicemail_ivr.conf.xml b/data/freeswitch/conf/autoload_configs/voicemail_ivr.conf.xml deleted file mode 100644 index 1cdf3c222..000000000 --- a/data/freeswitch/conf/autoload_configs/voicemail_ivr.conf.xml +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/xml_cdr.conf.xml b/data/freeswitch/conf/autoload_configs/xml_cdr.conf.xml deleted file mode 100644 index e546e6f43..000000000 --- a/data/freeswitch/conf/autoload_configs/xml_cdr.conf.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/xml_curl.conf.xml b/data/freeswitch/conf/autoload_configs/xml_curl.conf.xml deleted file mode 100644 index 30951d83c..000000000 --- a/data/freeswitch/conf/autoload_configs/xml_curl.conf.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/xml_rpc.conf.xml b/data/freeswitch/conf/autoload_configs/xml_rpc.conf.xml deleted file mode 100644 index 714a90990..000000000 --- a/data/freeswitch/conf/autoload_configs/xml_rpc.conf.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/xml_scgi.conf.xml b/data/freeswitch/conf/autoload_configs/xml_scgi.conf.xml deleted file mode 100644 index b9662d163..000000000 --- a/data/freeswitch/conf/autoload_configs/xml_scgi.conf.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/data/freeswitch/conf/autoload_configs/zeroconf.conf.xml b/data/freeswitch/conf/autoload_configs/zeroconf.conf.xml deleted file mode 100644 index 84c1a4617..000000000 --- a/data/freeswitch/conf/autoload_configs/zeroconf.conf.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/data/monit/cgrates.monit b/data/monit/cgrates.monit new file mode 100644 index 000000000..8e85e3fca --- /dev/null +++ b/data/monit/cgrates.monit @@ -0,0 +1,9 @@ +# CGRateS Monit check script + +check process CGRateS with pidfile /var/run/cgrates/cgr-engine.pid + start program = "/etc/init.d/cgrates start" + stop program = "/etc/init.d/cgrates stop" + if failed host 127.0.0.1 port 2012 type TCP 4 times within 4 cycles then restart # Rater + if failed host 127.0.0.1 port 2013 type TCP 4 times within 4 cycles then restart # History + if failed host 127.0.0.1 port 2022 type TCP 4 times within 4 cycles then restart # CDRS + if 5 restarts within 20 cycles then timeout diff --git a/data/storage/mysql/create_tariffplan_tables.sql b/data/storage/mysql/create_tariffplan_tables.sql index b53403b45..4ad5bcb83 100644 --- a/data/storage/mysql/create_tariffplan_tables.sql +++ b/data/storage/mysql/create_tariffplan_tables.sql @@ -139,8 +139,8 @@ CREATE TABLE `tp_actions` ( -- Table structure for table `tp_action_timings` -- -DROP TABLE IF EXISTS `tp_action_timings`; -CREATE TABLE `tp_action_timings` ( +DROP TABLE IF EXISTS `tp_action_plans`; +CREATE TABLE `tp_action_plans` ( `id` int(11) NOT NULL AUTO_INCREMENT, `tpid` varchar(64) NOT NULL, `tag` varchar(64) NOT NULL, diff --git a/data/storage/mysql/setup_cgr_db.sh b/data/storage/mysql/setup_cgr_db.sh index f27029093..40b5e803c 100755 --- a/data/storage/mysql/setup_cgr_db.sh +++ b/data/storage/mysql/setup_cgr_db.sh @@ -14,16 +14,22 @@ if [ -z "$3" ]; then fi mysql -u $1 -p$2 -h $host < create_db_with_users.sql +cu=$? mysql -u $1 -p$2 -h $host -D cgrates < create_cdrs_tables.sql +cdrt=$? mysql -u $1 -p$2 -h $host -D cgrates < create_costdetails_tables.sql +cdt=$? mysql -u $1 -p$2 -h $host -D cgrates < create_mediator_tables.sql +mdt=$? mysql -u $1 -p$2 -h $host -D cgrates < create_tariffplan_tables.sql +tpt=$? -echo "" -echo "\t+++ CGR-DB successfully set-up! +++" -echo "" - -exit 0 +if [ $cu = 0 ] && [ $cdrt = 0 ] && [ $cdt = 0 ] && [ $mdt = 0 ] && [ $tpt = 0 ]; then + echo "" + echo "\t+++ CGR-DB successfully set-up! +++" + echo "" + exit 0 +fi diff --git a/data/tariffplans/fs_germany_prep1/ActionTriggers.csv b/data/tariffplans/fs_germany_prep1/ActionTriggers.csv deleted file mode 100644 index 22d063dfa..000000000 --- a/data/tariffplans/fs_germany_prep1/ActionTriggers.csv +++ /dev/null @@ -1,4 +0,0 @@ -#Tag,BalanceType,Direction,ThresholdType,ThresholdValue,DestinationTag,ActionsTag,Weight -STANDARD_TRIGGERS,*monetary,*out,*min_balance,2,,LOG_BALANCE,10 -STANDARD_TRIGGERS,*monetary,*out,*max_balance,20,,LOG_BALANCE,10 -STANDARD_TRIGGERS,*monetary,*out,*max_counter,15,FS_USERS,LOG_BALANCE,10 diff --git a/data/tariffplans/fs_germany_prep1/DestinationRates.csv b/data/tariffplans/fs_germany_prep1/DestinationRates.csv deleted file mode 100644 index 1812d2efd..000000000 --- a/data/tariffplans/fs_germany_prep1/DestinationRates.csv +++ /dev/null @@ -1,6 +0,0 @@ -#Tag,DestinationsTag,RatesTag -DR_RETAIL_PEAK,GERMANY,LANDLINE_PEAK -DR_RETAIL_PEAK,GERMANY_MOBILE,MOBILE_PEAK -DR_RETAIL_OFFPEAK,GERMANY,LANDLINE_OFFPEAK -DR_RETAIL_OFFPEAK,GERMANY_MOBILE,MOBILE_OFFPEAK -DR_FREESWITCH_USERS,FS_USERS,RT_FS_USERS diff --git a/data/tariffplans/fs_germany_prep1/Destinations.csv b/data/tariffplans/fs_germany_prep1/Destinations.csv deleted file mode 100644 index 8ee6689cb..000000000 --- a/data/tariffplans/fs_germany_prep1/Destinations.csv +++ /dev/null @@ -1,6 +0,0 @@ -#Tag,Prefix -GERMANY,+49 -GERMANY_MOBILE,+4915 -GERMANY_MOBILE,+4916 -GERMANY_MOBILE,+4917 -FS_USERS,10 diff --git a/data/tariffplans/fs_germany_prep1/README.md b/data/tariffplans/fs_germany_prep1/README.md deleted file mode 100644 index 32ff027ac..000000000 --- a/data/tariffplans/fs_germany_prep1/README.md +++ /dev/null @@ -1,15 +0,0 @@ -CGRateS - FSGermanyPrep1 -========================== - -Scenario: ---------- - -* Create the necessary timings (always, peak, offpeak, asap). -* Configure 3 different destinations: GERMANY, GERMANY_MOBILE and FS_USERS. -* Calls to landline and mobile numbers in Germany will be charged time based (structured in peak and offpeak profiles). Calls to landline during peak times are charged using different rate slots: first minute charged as a whole at one rate, next minutes charged per second at another rate. -* Calls to FreeSWITCH users will be free and time independent. -* This rating profile will be valid for any rating subject. - -* Create 5 prepaid accounts (equivalent of 5 FreeSWITCH default test users - 1001, 1002, 1003, 1004, 1005). -* Add to each of the accounts a monetary balance of 10 units. -* For each balance created, attach 3 triggers to control the balance: log on balance=2, log on balance=20, log on 15 mins talked towards FS_USERS destination. diff --git a/data/tariffplans/fs_germany_prep1/Rates.csv b/data/tariffplans/fs_germany_prep1/Rates.csv deleted file mode 100644 index 23615c56c..000000000 --- a/data/tariffplans/fs_germany_prep1/Rates.csv +++ /dev/null @@ -1,7 +0,0 @@ -#Tag,ConnectFee,Rate,RateUnit,RateIncrement,GroupIntervalStart,RoundingMethod,RoundingDecimals -LANDLINE_PEAK,0.02,0.02,60s,60s,0s,*up,4 -LANDLINE_PEAK,0.02,0.01,1s,1s,60s,*up,4 -MOBILE_PEAK,0.02,0.14,60s,60s,0s,*up,4 -LANDLINE_OFFPEAK,1,0,60s,60s,0s,*up,4 -MOBILE_OFFPEAK,0.02,0.1,60s,60s,0,*up,4 -RT_FS_USERS,0,0,60s,60s,0s,*up,0 diff --git a/data/tariffplans/fs_germany_prep1/RatingPlans.csv b/data/tariffplans/fs_germany_prep1/RatingPlans.csv deleted file mode 100644 index c47aeafd6..000000000 --- a/data/tariffplans/fs_germany_prep1/RatingPlans.csv +++ /dev/null @@ -1,6 +0,0 @@ -#Tag,DestinationRatesTag,TimingTag,Weight -RETAIL1,DR_RETAIL_PEAK,PEAK,10 -RETAIL1,DR_RETAIL_OFFPEAK,OFFPEAK_MORNING,10 -RETAIL1,DR_RETAIL_OFFPEAK,OFFPEAK_EVENING,10 -RETAIL1,DR_RETAIL_OFFPEAK,WEEKEND,10 -RETAIL1,DR_FREESWITCH_USERS,ALWAYS,10 diff --git a/data/tariffplans/fs_germany_prep1/RatingProfiles.csv b/data/tariffplans/fs_germany_prep1/RatingProfiles.csv deleted file mode 100644 index 4c7c1dbd3..000000000 --- a/data/tariffplans/fs_germany_prep1/RatingProfiles.csv +++ /dev/null @@ -1,2 +0,0 @@ -#Tenant,TOR,Direction,Subject,ActivationTime,RatingPlanTag,FallbackSubject -cgrates.org,call,*out,*any,2012-01-01T00:00:00Z,RETAIL1, diff --git a/data/tariffplans/fs_germany_prep1/ActionTimings.csv b/data/tariffplans/prepaid1centpsec/ActionPlans.csv similarity index 100% rename from data/tariffplans/fs_germany_prep1/ActionTimings.csv rename to data/tariffplans/prepaid1centpsec/ActionPlans.csv diff --git a/data/tutorials/fs_csv/README.md b/data/tutorials/fs_csv/README.md index 4eaad5ccf..1a39ef3ad 100644 --- a/data/tutorials/fs_csv/README.md +++ b/data/tutorials/fs_csv/README.md @@ -1,5 +1,5 @@ -Tutorial fs_prepaid_csv -======================= +Tutorial FS_CSV +=============== Scenario: --------- diff --git a/data/tutorials/fs_csv/cgrates/tariffplans/README.md b/data/tutorials/fs_csv/cgrates/tariffplans/README.md index f84eb28f6..124fa3141 100644 --- a/data/tutorials/fs_csv/cgrates/tariffplans/README.md +++ b/data/tutorials/fs_csv/cgrates/tariffplans/README.md @@ -1,5 +1,5 @@ -CGRateS - FSGermanyPrep1 -========================== +Tutorial - FS_CSV +================= Scenario: --------- diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/README_IMPORTANT.txt b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/README_IMPORTANT.txt deleted file mode 100644 index 8d82b404f..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/README_IMPORTANT.txt +++ /dev/null @@ -1,35 +0,0 @@ - -= PLEASE READ THIS BEFORE YOU PUT A FreeSWITCH BOX INTO PRODUCTION =- - -This configuration, generally known as the "default configuration" for FreeSWITCH, is *NOT* designed to be put into a production environment without some important modifications. Please keep in mind that the default configuration is designed to demonstrate what FreeSWITCH *can* do, not what it *should* do in your specific scenario. - -*** SECURING YOUR SERVER *** - -By default, FreeSWITCH starts up and does a NATPMP and UPnP request to your router. If your router supports either of these protocols then FreeSWITCH does two things: -#1 - It gets the external IP address, which it uses for SIP communications -#2 - It causes there to be a "pinhole" opened up in the router allowing inbound communications to your FreeSWITCH server - -Please re-read #2. Now, please re-read #2 again. If you do not want a pinhole coming through your router then DO NOT USE the "auto-nat" tools. The way to disable the auto-nat (that is, UPnP/NATPMP) checking is to start FreeSWITCH with the "-nonat" flag. Easy enough. - -If you are planning on putting a system into production then you had better pay attention to security in other areas as well. If you are behind a firewall then make sure your firewall is actually protecting you. If you have your server on a public-facing Internet connection then we recommend a few things: -#1 - Consider using iptables (Linux/Unix) -#2 - Consider using fail2ban (see http://wiki.freeswitch.org/wiki/Fail2ban) - -*** SECURING YOUR USERS *** - -By default, the static XML files have 20 "directory users" in conf/directory/10xx.xml, numbered 1000-1019. Also, the default dialplan has routing for calls to those same extension numbers. (NOTE: the directory and the dialplan are 100% separate concepts. Check out chapters 3-5 of the awesome FreeSWITCH book for details.) - -The default users all have *very* simple passwords for SIP credentials and voicemail. If you put those into a production system then you are either brave, ignorant, or stupid. Please don't be any of those three things! You have a few choices for handling your users: - -#1 - Delete the static XML files and use mod_xml_curl for dynamic users from a back-end database -#2 - Manually edit the static XML user directory files and modify the passwords -#3 - Run the handy randomize-passwords.pl script found in scripts/perl/ subdirectory under the main FreeSWITCH source directory - -*** GETTING HELP *** - -FreeSWITCH has a thriving on-line community - we welcome you to join us! -IRC: #freeswitch on irc.freenode.net -Mailing List: freeswitch-users on lists.freeswitch.org - -You can also get professional FreeSWITCH assistance by visiting http://www.freeswitchsolutions.com or sending an email to consulting@freeswitch.org. - -Happy FreeSWITCHing! diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/abstraction.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/abstraction.conf.xml deleted file mode 100644 index d4b1dfd27..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/abstraction.conf.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/acl.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/acl.conf.xml deleted file mode 100644 index 0c117d07b..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/acl.conf.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/alsa.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/alsa.conf.xml deleted file mode 100644 index e589acaac..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/alsa.conf.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/blacklist.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/blacklist.conf.xml deleted file mode 100644 index a981ebbdb..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/blacklist.conf.xml +++ /dev/null @@ -1,11 +0,0 @@ - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/callcenter.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/callcenter.conf.xml deleted file mode 100644 index a069413ac..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/callcenter.conf.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cdr_csv.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cdr_csv.conf.xml deleted file mode 100644 index 92f88c6c1..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cdr_csv.conf.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cdr_mongodb.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cdr_mongodb.conf.xml deleted file mode 100644 index ce366d1bd..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cdr_mongodb.conf.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cdr_pg_csv.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cdr_pg_csv.conf.xml deleted file mode 100644 index 4fec817b4..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cdr_pg_csv.conf.xml +++ /dev/null @@ -1,40 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cdr_sqlite.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cdr_sqlite.conf.xml deleted file mode 100644 index 872c04c4f..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cdr_sqlite.conf.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cepstral.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cepstral.conf.xml deleted file mode 100644 index cf4aa92f4..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cepstral.conf.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - \ No newline at end of file diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cidlookup.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cidlookup.conf.xml deleted file mode 100644 index a30f9f5c1..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/cidlookup.conf.xml +++ /dev/null @@ -1,33 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/conference.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/conference.conf.xml deleted file mode 100644 index ee41f740d..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/conference.conf.xml +++ /dev/null @@ -1,213 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/console.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/console.conf.xml deleted file mode 100644 index 2d9e3e8de..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/console.conf.xml +++ /dev/null @@ -1,56 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/db.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/db.conf.xml deleted file mode 100644 index abc6c0c15..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/db.conf.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/dialplan_directory.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/dialplan_directory.conf.xml deleted file mode 100644 index e4edcd6b1..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/dialplan_directory.conf.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/dingaling.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/dingaling.conf.xml deleted file mode 100644 index dd6c9a5da..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/dingaling.conf.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/directory.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/directory.conf.xml deleted file mode 100644 index 748b2337c..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/directory.conf.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/distributor.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/distributor.conf.xml deleted file mode 100644 index a03b1ee81..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/distributor.conf.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/easyroute.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/easyroute.conf.xml deleted file mode 100644 index 350a50989..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/easyroute.conf.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/enum.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/enum.conf.xml deleted file mode 100644 index b9813efa2..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/enum.conf.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/erlang_event.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/erlang_event.conf.xml deleted file mode 100644 index 62deb84f6..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/erlang_event.conf.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/event_multicast.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/event_multicast.conf.xml deleted file mode 100644 index eac039260..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/event_multicast.conf.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/event_socket.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/event_socket.conf.xml deleted file mode 100644 index 5ea2e0978..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/event_socket.conf.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/fax.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/fax.conf.xml deleted file mode 100644 index c7d825665..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/fax.conf.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/fifo.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/fifo.conf.xml deleted file mode 100644 index b1db4dd2b..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/fifo.conf.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/hash.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/hash.conf.xml deleted file mode 100644 index 95b792877..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/hash.conf.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/httapi.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/httapi.conf.xml deleted file mode 100644 index 50bbe78f4..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/httapi.conf.xml +++ /dev/null @@ -1,127 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/http_cache.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/http_cache.conf.xml deleted file mode 100644 index 5d0294c66..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/http_cache.conf.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/ivr.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/ivr.conf.xml deleted file mode 100644 index bd4e73ded..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/ivr.conf.xml +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/java.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/java.conf.xml deleted file mode 100644 index 5f71553e3..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/java.conf.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/lcr.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/lcr.conf.xml deleted file mode 100644 index 9d106d489..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/lcr.conf.xml +++ /dev/null @@ -1,89 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/local_stream.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/local_stream.conf.xml deleted file mode 100644 index 94a566539..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/local_stream.conf.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/logfile.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/logfile.conf.xml deleted file mode 100644 index 65bea552b..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/logfile.conf.xml +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/lua.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/lua.conf.xml deleted file mode 100644 index f50307ea8..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/lua.conf.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/memcache.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/memcache.conf.xml deleted file mode 100644 index dc0173f98..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/memcache.conf.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/modules.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/modules.conf.xml deleted file mode 100644 index 0ca6bc5b3..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/modules.conf.xml +++ /dev/null @@ -1,135 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/mongo.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/mongo.conf.xml deleted file mode 100644 index 72fffafbb..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/mongo.conf.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/nibblebill.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/nibblebill.conf.xml deleted file mode 100644 index 043c98548..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/nibblebill.conf.xml +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/opal.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/opal.conf.xml deleted file mode 100644 index 280b69304..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/opal.conf.xml +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/oreka.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/oreka.conf.xml deleted file mode 100644 index 29eabd5c2..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/oreka.conf.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/osp.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/osp.conf.xml deleted file mode 100644 index b320dbba8..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/osp.conf.xml +++ /dev/null @@ -1,53 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/perl.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/perl.conf.xml deleted file mode 100644 index b2435000f..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/perl.conf.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/pocketsphinx.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/pocketsphinx.conf.xml deleted file mode 100644 index 3bf7d5e57..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/pocketsphinx.conf.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/portaudio.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/portaudio.conf.xml deleted file mode 100644 index a715571c6..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/portaudio.conf.xml +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/post_load_modules.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/post_load_modules.conf.xml deleted file mode 100644 index 8f4e132fa..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/post_load_modules.conf.xml +++ /dev/null @@ -1,4 +0,0 @@ - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/presence_map.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/presence_map.conf.xml deleted file mode 100644 index 8a9d1dde5..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/presence_map.conf.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/python.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/python.conf.xml deleted file mode 100644 index d3a8fdc75..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/python.conf.xml +++ /dev/null @@ -1,16 +0,0 @@ - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/redis.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/redis.conf.xml deleted file mode 100644 index 1a1f47403..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/redis.conf.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/rss.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/rss.conf.xml deleted file mode 100644 index f8c4f6d2b..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/rss.conf.xml +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/rtmp.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/rtmp.conf.xml deleted file mode 100644 index d5d278810..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/rtmp.conf.xml +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/sangoma_codec.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/sangoma_codec.conf.xml deleted file mode 100644 index eed9d673e..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/sangoma_codec.conf.xml +++ /dev/null @@ -1,37 +0,0 @@ - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/shout.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/shout.conf.xml deleted file mode 100644 index 3f381e627..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/shout.conf.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/skinny.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/skinny.conf.xml deleted file mode 100644 index 6a878fcd7..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/skinny.conf.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/sofia.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/sofia.conf.xml deleted file mode 100644 index a5e861432..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/sofia.conf.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/spandsp.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/spandsp.conf.xml deleted file mode 100644 index 0241c1f4d..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/spandsp.conf.xml +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/spidermonkey.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/spidermonkey.conf.xml deleted file mode 100644 index 2e6dc6a16..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/spidermonkey.conf.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/switch.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/switch.conf.xml deleted file mode 100644 index ddf41f899..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/switch.conf.xml +++ /dev/null @@ -1,168 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/syslog.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/syslog.conf.xml deleted file mode 100644 index 636a12c8c..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/syslog.conf.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/timezones.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/timezones.conf.xml deleted file mode 100644 index 397e9a979..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/timezones.conf.xml +++ /dev/null @@ -1,551 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/translate.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/translate.conf.xml deleted file mode 100644 index 453ef3afb..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/translate.conf.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/tts_commandline.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/tts_commandline.conf.xml deleted file mode 100644 index eb816431b..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/tts_commandline.conf.xml +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/unicall.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/unicall.conf.xml deleted file mode 100644 index eeaa0782f..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/unicall.conf.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/unimrcp.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/unimrcp.conf.xml deleted file mode 100644 index 45dda798a..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/unimrcp.conf.xml +++ /dev/null @@ -1,23 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/voicemail.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/voicemail.conf.xml deleted file mode 100644 index 9e5e67ffa..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/voicemail.conf.xml +++ /dev/null @@ -1,74 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/voicemail_ivr.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/voicemail_ivr.conf.xml deleted file mode 100644 index 1cdf3c222..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/voicemail_ivr.conf.xml +++ /dev/null @@ -1,211 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/xml_cdr.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/xml_cdr.conf.xml deleted file mode 100644 index ac9b1f94d..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/xml_cdr.conf.xml +++ /dev/null @@ -1,71 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/xml_curl.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/xml_curl.conf.xml deleted file mode 100644 index 30951d83c..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/xml_curl.conf.xml +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/xml_rpc.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/xml_rpc.conf.xml deleted file mode 100644 index 714a90990..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/xml_rpc.conf.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/xml_scgi.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/xml_scgi.conf.xml deleted file mode 100644 index b9662d163..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/xml_scgi.conf.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/zeroconf.conf.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/zeroconf.conf.xml deleted file mode 100644 index 84c1a4617..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/autoload_configs/zeroconf.conf.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/chatplan/default.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/chatplan/default.xml deleted file mode 100644 index b67bb638f..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/chatplan/default.xml +++ /dev/null @@ -1,14 +0,0 @@ - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/config.FS0 b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/config.FS0 deleted file mode 100644 index 531014214..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/config.FS0 +++ /dev/null @@ -1,78 +0,0 @@ -CountryCode: 1 -AreaCode: 800 -FAXNumber: +1.800.555.1212 -LongDistancePrefix: 1 -InternationalPrefix: 011 -DialStringRules: etc/dialrules -ServerTracing: 0xFFF -SessionTracing: 0xFFF -RecvFileMode: 0600 -LogFileMode: 0600 -DeviceMode: 0600 -RingsBeforeAnswer: 1 -SpeakerVolume: off -GettyArgs: "-h %l dx_%s" -LocalIdentifier: "FS" -TagLineFont: etc/lutRS18.pcf -TagLineFormat: "From %%l|%c|Page %%P of %%T" -MaxRecvPages: 200 -# -# -# Modem-related stuff: should reflect modem command interface -# and hardware connection/cabling (e.g. flow control). -# -ModemType: Class1 # use this to supply a hint - -# -# Enabling this will use the hfaxd-protocol to set Caller*ID -# -#ModemSetOriginCmd: AT+VSID="%s","%d" - -# -# If "glare" during initialization becomes a problem then take -# the modem off-hook during initialization, and then place it -# back on-hook when done. -# -#ModemResetCmds: "ATH1\nAT+VCID=1" # enables CallID display -#ModemReadyCmds: ATH0 - -Class1AdaptRecvCmd: AT+FAR=1 -Class1TMConnectDelay: 400 # counteract quick CONNECT response - -# -# If you have trouble with V.17 receiving or sending, -# you may want to enable one of these, respectively. -# -#Class1RMQueryCmd: "!24,48,72,96" # enable this to disable V.17 receiving -#Class1TMQueryCmd: "!24,48,72,96" # enable this to disable V.17 sending - -# -# You'll likely want Caller*ID display (also displays DID) enabled. -# -ModemResetCmds: AT+VCID=1 # enables CallID display - -# -# The pty does not support changing parity. -# -PagerTTYParity: none - -# -# If you are "missing" Caller*ID data on some calls (but not all) -# and if you do not have adequate glare protection you may want to -# not answer based on RINGs, but rather enable the CallIDAnswerLength -# for NDID, disable AT+VCID=1 and do this: -# -#RingsBeforeAnswer: 0 -#ModemRingResponse: AT+VRID=1 - -# Uncomment DATE and TIME if you really want them, but you probably don't. -#CallIDPattern: "DATE=" -#CallIDPattern: "TIME=" -CallIDPattern: "NMBR=" -CallIDPattern: "NAME=" -CallIDPattern: "ANID=" -#CallIDPattern: "USER=" # username provided by call -#CallIDPattern: "PASS=" # password provided by call -#CallIDPattern: "CDID=" # DID context in call -CallIDPattern: "NDID=" -#CallIDAnswerLength: 4 diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default.xml deleted file mode 100644 index cfdc0a9e4..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default.xml +++ /dev/null @@ -1,821 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ]]> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/00_ladspa.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/00_ladspa.xml deleted file mode 100644 index a26b193ef..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/00_ladspa.xml +++ /dev/null @@ -1,77 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/00_pizza_demo.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/00_pizza_demo.xml deleted file mode 100644 index e7fcca204..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/00_pizza_demo.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/01_Talking_Clock.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/01_Talking_Clock.xml deleted file mode 100644 index bc5077053..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/01_Talking_Clock.xml +++ /dev/null @@ -1,32 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/01_example.com.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/01_example.com.xml deleted file mode 100644 index bd61cd278..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/01_example.com.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/ideasip.com.noload b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/ideasip.com.noload deleted file mode 100644 index 8b963e3bd..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/ideasip.com.noload +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/pulver.com.noload b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/pulver.com.noload deleted file mode 100644 index 7b86caa84..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/pulver.com.noload +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/sipbroker.com.noload b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/sipbroker.com.noload deleted file mode 100644 index 4f5e4f8c2..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/sipbroker.com.noload +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/sipphone.com.noload b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/sipphone.com.noload deleted file mode 100644 index a6ea9e8d4..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/sipphone.com.noload +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/tollfreegateway.com.noload b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/tollfreegateway.com.noload deleted file mode 100644 index b7526bf89..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/default/tollfreegateway.com.noload +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/features.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/features.xml deleted file mode 100644 index b85cadc5f..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/features.xml +++ /dev/null @@ -1,67 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/public.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/public.xml deleted file mode 100644 index e44006e33..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/public.xml +++ /dev/null @@ -1,68 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/public/00_inbound_did.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/public/00_inbound_did.xml deleted file mode 100644 index d40b3ab2c..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/public/00_inbound_did.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns.xml deleted file mode 100644 index b37d8eed8..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns.xml +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns/20-Demo.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns/20-Demo.xml deleted file mode 100644 index f69658128..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns/20-Demo.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns/20-Local_extension.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns/20-Local_extension.xml deleted file mode 100644 index 9ad565132..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns/20-Local_extension.xml +++ /dev/null @@ -1,13 +0,0 @@ - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns/90-External.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns/90-External.xml deleted file mode 100644 index 50d6c37f2..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns/90-External.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns/99-Default_Drop.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns/99-Default_Drop.xml deleted file mode 100644 index 897fd8fb9..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/dialplan/skinny-patterns/99-Default_Drop.xml +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default.xml deleted file mode 100644 index 95b75b40d..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1000.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1000.xml deleted file mode 100644 index 9bee406dd..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1000.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1001.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1001.xml deleted file mode 100644 index de35469de..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1001.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1002.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1002.xml deleted file mode 100644 index 1068563d4..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1002.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1003.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1003.xml deleted file mode 100644 index 61809b58f..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1003.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1004.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1004.xml deleted file mode 100644 index 832702984..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1004.xml +++ /dev/null @@ -1,19 +0,0 @@ - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1005.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1005.xml deleted file mode 100644 index 0e1165f43..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1005.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1006.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1006.xml deleted file mode 100644 index beaaa7e9f..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1006.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1007.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1007.xml deleted file mode 100644 index 10470a504..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1007.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1008.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1008.xml deleted file mode 100644 index 0e63fcfde..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1008.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1009.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1009.xml deleted file mode 100644 index 24db7f815..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1009.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1010.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1010.xml deleted file mode 100644 index 6d8e0c1ba..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1010.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1011.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1011.xml deleted file mode 100644 index 79d731de5..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1011.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1012.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1012.xml deleted file mode 100644 index 3839824fb..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1012.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1013.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1013.xml deleted file mode 100644 index 6f9c8e475..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1013.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1014.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1014.xml deleted file mode 100644 index 6a554c065..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1014.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1015.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1015.xml deleted file mode 100644 index e94b8886a..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1015.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1016.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1016.xml deleted file mode 100644 index 4f856fc7b..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1016.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1017.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1017.xml deleted file mode 100644 index b0e43a023..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1017.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1018.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1018.xml deleted file mode 100644 index 6d7071942..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1018.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1019.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1019.xml deleted file mode 100644 index f23a95f4b..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/1019.xml +++ /dev/null @@ -1,18 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/brian.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/brian.xml deleted file mode 100644 index 05fe0c832..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/brian.xml +++ /dev/null @@ -1,92 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/default.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/default.xml deleted file mode 100644 index aa138f18d..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/default.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/example.com.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/example.com.xml deleted file mode 100644 index 42a33ddbf..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/example.com.xml +++ /dev/null @@ -1,26 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - diff --git a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/skinny-example.xml b/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/skinny-example.xml deleted file mode 100644 index 357eb72f1..000000000 --- a/data/tutorials/fs_csv/freeswitch/etc/freeswitch/directory/default/skinny-example.xml +++ /dev/null @@ -1,35 +0,0 @@ - - - - - - - - - - -