You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
77 lines
2.1 KiB
Go
77 lines
2.1 KiB
Go
package icssessionmanager
|
|
|
|
import (
|
|
"strings"
|
|
|
|
"gitlab.com/cinnamon/voiceagent/icserror"
|
|
"gitlab.com/cinnamon/voiceagent/icslog"
|
|
"gitlab.com/cinnamon/voiceagent/icspacketparser"
|
|
"gitlab.com/cinnamon/voiceagent/icssvc"
|
|
"gitlab.com/cinnamon/voiceagent/recorddata"
|
|
)
|
|
|
|
func (s *IcsSession) analyzeRTP(rtp *icspacketparser.RTP) *icserror.IcsError {
|
|
l := icslog.GetIcsLog()
|
|
|
|
RPT := rtp.GetPayloadType()
|
|
SPT := s.GetPayloadType()
|
|
if SPT == RPT {
|
|
if s.VoiceNeter == nil {
|
|
l.Print(icslog.LOG_LEVEL_ERROR, s.ID, icserror.ICSERRNETNotConnectError.GetMessage())
|
|
return icserror.ICSERRNETNotConnectError
|
|
}
|
|
|
|
voicedata := recorddata.NewVoiceData()
|
|
svc := icssvc.GetServiceStatus()
|
|
conf := svc.GetIcsConfig()
|
|
if strings.Compare(conf.HTTPConfig.SrcIP, rtp.SrcAddr.IPv4String) == 0 { //RX
|
|
//if strings.Compare(conf.PbxConfig.PbxIp, rtp.SrcAddr.IPv4String) == 0 { //RX
|
|
/*//////////////////
|
|
s.rxFile.Write(rtp.Payload)
|
|
*/ //////////////////
|
|
pcm, err := s.RxConverter.Decode(rtp.Payload)
|
|
if err != nil {
|
|
l.Print(icslog.LOG_LEVEL_ERROR, s.ID, err.GetMessage())
|
|
return err
|
|
}
|
|
|
|
if s.rxSeq == -1 {
|
|
s.rxSeq = int(rtp.Seq)
|
|
}
|
|
|
|
voicedata.SetData(s.ServerID, s.Station, int32(rtp.Seq-uint16(s.rxSeq)), s.StartTimeStamp, "0", "0", pcm)
|
|
|
|
wsize, err := s.VoiceNeter.Write(voicedata.GetData())
|
|
if wsize == -1 || err != nil {
|
|
l.Printf(icslog.LOG_LEVEL_ERROR, s.ID, "RTP send error-%v", err.GetError())
|
|
return err
|
|
}
|
|
} else { //TX
|
|
/*//////////////////
|
|
s.txFile.Write(rtp.Payload)
|
|
*/ //////////////////
|
|
pcm, err := s.TxConverter.Decode(rtp.Payload)
|
|
if err != nil {
|
|
l.Print(icslog.LOG_LEVEL_ERROR, s.ID, err.GetMessage())
|
|
return err
|
|
}
|
|
|
|
if s.txSeq == -1 {
|
|
s.txSeq = int(rtp.Seq)
|
|
}
|
|
|
|
voicedata.SetData(s.ServerID, s.Station, int32(rtp.Seq-uint16(s.txSeq)), s.StartTimeStamp, "1", "0", pcm)
|
|
|
|
wsize, err := s.VoiceNeter.Write(voicedata.GetData())
|
|
if wsize == -1 || err != nil {
|
|
//l.Printf(icslog.LOG_LEVEL_ERROR, s.ID, "RTP send error-%v", err.GetError())
|
|
return err
|
|
}
|
|
}
|
|
} else {
|
|
l.Print(icslog.LOG_LEVEL_ERROR, s.ID, "NO same payload type!!!")
|
|
}
|
|
|
|
return nil
|
|
}
|