created standalone session manager

This commit is contained in:
Radu Ioan Fericean
2012-05-15 17:31:26 +03:00
parent 8362c9dfa0
commit ae47ab39de
3 changed files with 56 additions and 3 deletions

View File

@@ -0,0 +1,40 @@
/*
Rating system designed to be used in VoIP Carriers World
Copyright (C) 2012 Radu Ioan Fericean
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 <http://www.gnu.org/licenses/>
*/
package main
import (
"flag"
"github.com/rif/cgrates/sessionmanager"
"log"
)
var (
balancer = flag.String("balancer", "127.0.0.1:2000", "balancer address host:port")
freeswitchsrv = flag.String("freeswitchsrv", "localhost:8021", "freeswitch address host:port")
freeswitchpass = flag.String("freeswitchpass", "ClueCon", "freeswitch address host:port")
)
func main() {
flag.Parse()
sm := &sessionmanager.SessionManager{}
sm.Connect(new(sessionmanager.DirectSessionDelegate), *freeswitchsrv, *freeswitchpass)
waitChan := make(<-chan byte)
log.Print("Session manager!")
<-waitChan
}

View File

@@ -55,7 +55,14 @@ func (dsd *DirectSessionDelegate) OnHeartBeat(ev *Event) {
}
func (dsd *DirectSessionDelegate) OnChannelAnswer(ev *Event, s *Session) {
log.Print("direct answer")
s.callDescriptor.Amount = DEBIT_PERIOD.Seconds()
remainingSeconds, err := s.callDescriptor.GetMaxSessionTime()
if remainingSeconds == 0 || err != nil {
log.Print("No credit left: Disconnect!")
}
if remainingSeconds < DEBIT_PERIOD.Seconds() || err != nil {
log.Print("Not enough money for a debit period!")
}
}
func (dsd *DirectSessionDelegate) OnChannelHangupComplete(ev *Event, s *Session) {
@@ -69,7 +76,11 @@ func (dsd *DirectSessionDelegate) LoopAction(s *Session, cd *timespans.CallDescr
}
s.CallCosts = append(s.CallCosts, cc)
cd.Amount = DEBIT_PERIOD.Seconds()
if remainingSeconds, err := cd.GetMaxSessionTime(); remainingSeconds < DEBIT_PERIOD.Seconds() || err != nil {
remainingSeconds, err := cd.GetMaxSessionTime()
if remainingSeconds == 0 || err != nil {
log.Print("No credit left: Disconnect!")
}
if remainingSeconds < DEBIT_PERIOD.Seconds() || err != nil {
log.Print("Not enough money for another debit period!")
}
}

View File

@@ -113,7 +113,9 @@ func (sm *SessionManager) OnChannelHangupComplete(ev *Event) {
} else {
log.Print("HangupComplete")
}
s.Close()
if s != nil {
s.Close()
}
}
// Called on freeswitch's events not processed by the session manger,