mirror of
https://github.com/cgrates/cgrates.git
synced 2026-02-24 08:38:45 +05:00
CDRC XML initial files
This commit is contained in:
35
cdrc/xml.go
Normal file
35
cdrc/xml.go
Normal file
@@ -0,0 +1,35 @@
|
||||
/*
|
||||
Real-time Charging System for Telecom & ISP environments
|
||||
Copyright (C) ITsysCOM GmbH
|
||||
|
||||
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 cdrc
|
||||
|
||||
//import
|
||||
import (
|
||||
"github.com/cgrates/cgrates/engine"
|
||||
)
|
||||
|
||||
type XMLRecordsProcessor struct {
|
||||
}
|
||||
|
||||
func (xmlProc *XMLRecordsProcessor) ProcessNextRecord() ([]*engine.CDR, error) {
|
||||
return nil, nil
|
||||
}
|
||||
|
||||
func (xmlProc *XMLRecordsProcessor) ProcessedRecordsNr() int64 {
|
||||
return 0
|
||||
}
|
||||
188
cdrc/xml_test.go
Normal file
188
cdrc/xml_test.go
Normal file
@@ -0,0 +1,188 @@
|
||||
/*
|
||||
Real-time Charging System for Telecom & ISP environments
|
||||
Copyright (C) ITsysCOM GmbH
|
||||
|
||||
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 cdrc
|
||||
|
||||
import (
|
||||
"bytes"
|
||||
"encoding/xml"
|
||||
"fmt"
|
||||
"path"
|
||||
"testing"
|
||||
|
||||
"github.com/ChrisTrenkamp/goxpath"
|
||||
"github.com/ChrisTrenkamp/goxpath/tree"
|
||||
"github.com/ChrisTrenkamp/goxpath/tree/xmltree"
|
||||
)
|
||||
|
||||
var cdrXmlBroadsoft = `<?xml version="1.0" encoding="ISO-8859-1"?>
|
||||
<!DOCTYPE broadWorksCDR>
|
||||
<broadWorksCDR version="19.0">
|
||||
<cdrData>
|
||||
<headerModule>
|
||||
<recordId>
|
||||
<eventCounter>0002183384</eventCounter>
|
||||
<systemId>CGRateSaabb</systemId>
|
||||
<date>20160419210000.104</date>
|
||||
<systemTimeZone>1+020000</systemTimeZone>
|
||||
</recordId>
|
||||
<type>Start</type>
|
||||
</headerModule>
|
||||
</cdrData>
|
||||
<cdrData>
|
||||
<headerModule>
|
||||
<recordId>
|
||||
<eventCounter>0002183385</eventCounter>
|
||||
<systemId>CGRateSaabb</systemId>
|
||||
<date>20160419210005.247</date>
|
||||
<systemTimeZone>1+020000</systemTimeZone>
|
||||
</recordId>
|
||||
<serviceProvider>MBC</serviceProvider>
|
||||
<type>Normal</type>
|
||||
</headerModule>
|
||||
<basicModule>
|
||||
<userNumber>1001</userNumber>
|
||||
<groupNumber>2001</groupNumber>
|
||||
<direction>Terminating</direction>
|
||||
<asCallType>Network</asCallType>
|
||||
<callingNumber>+4986517174963</callingNumber>
|
||||
<callingPresentationIndicator>Public</callingPresentationIndicator>
|
||||
<calledNumber>1001</calledNumber>
|
||||
<startTime>20160419210005.247</startTime>
|
||||
<userTimeZone>1+020000</userTimeZone>
|
||||
<localCallId>25160047719:0</localCallId>
|
||||
<answerIndicator>Yes</answerIndicator>
|
||||
<answerTime>20160419210006.813</answerTime>
|
||||
<releaseTime>20160419210020.296</releaseTime>
|
||||
<terminationCause>016</terminationCause>
|
||||
<chargeIndicator>y</chargeIndicator>
|
||||
<releasingParty>local</releasingParty>
|
||||
<userId>1001@cgrates.org</userId>
|
||||
<clidPermitted>Yes</clidPermitted>
|
||||
<namePermitted>Yes</namePermitted>
|
||||
</basicModule>
|
||||
<centrexModule>
|
||||
<group>CGR_GROUP</group>
|
||||
<trunkGroupName>CGR_GROUP/CGR_GROUP_TRUNK30</trunkGroupName>
|
||||
<trunkGroupInfo>Normal</trunkGroupInfo>
|
||||
<locationList>
|
||||
<locationInformation>
|
||||
<location>1001@cgrates.org</location>
|
||||
<locationType>Primary Device</locationType>
|
||||
</locationInformation>
|
||||
</locationList>
|
||||
<locationUsage>31.882</locationUsage>
|
||||
</centrexModule>
|
||||
<ipModule>
|
||||
<route>gw04.cgrates.org</route>
|
||||
<networkCallID>74122796919420162305@172.16.1.2</networkCallID>
|
||||
<codec>PCMA/8000</codec>
|
||||
<accessDeviceAddress>172.16.1.4</accessDeviceAddress>
|
||||
<accessCallID>BW2300052501904161738474465@172.16.1.10</accessCallID>
|
||||
<codecUsage>31.882</codecUsage>
|
||||
<userAgent>OmniPCX Enterprise R11.0.1 k1.520.22.b</userAgent>
|
||||
</ipModule>
|
||||
</cdrData>
|
||||
<cdrData>
|
||||
<headerModule>
|
||||
<recordId>
|
||||
<eventCounter>0002183386</eventCounter>
|
||||
<systemId>CGRateSaabb</systemId>
|
||||
<date>20160419210006.909</date>
|
||||
<systemTimeZone>1+020000</systemTimeZone>
|
||||
</recordId>
|
||||
<serviceProvider>MBC</serviceProvider>
|
||||
<type>Normal</type>
|
||||
</headerModule>
|
||||
<basicModule>
|
||||
<userNumber>1002</userNumber>
|
||||
<groupNumber>2001</groupNumber>
|
||||
<direction>Terminating</direction>
|
||||
<asCallType>Network</asCallType>
|
||||
<callingNumber>+4986517174964</callingNumber>
|
||||
<callingPresentationIndicator>Public</callingPresentationIndicator>
|
||||
<calledNumber>1002</calledNumber>
|
||||
<startTime>20160419210006.909</startTime>
|
||||
<userTimeZone>1+020000</userTimeZone>
|
||||
<localCallId>27280048121:0</localCallId>
|
||||
<answerIndicator>Yes</answerIndicator>
|
||||
<answerTime>20160419210007.037</answerTime>
|
||||
<releaseTime>20160419210030.322</releaseTime>
|
||||
<terminationCause>016</terminationCause>
|
||||
<chargeIndicator>y</chargeIndicator>
|
||||
<releasingParty>local</releasingParty>
|
||||
<userId>314028947650@cgrates.org</userId>
|
||||
<clidPermitted>Yes</clidPermitted>
|
||||
<namePermitted>Yes</namePermitted>
|
||||
</basicModule>
|
||||
<centrexModule>
|
||||
<group>CGR_GROUP</group>
|
||||
<trunkGroupName>CGR_GROUP/CGR_GROUP_TRUNK65</trunkGroupName>
|
||||
<trunkGroupInfo>Normal</trunkGroupInfo>
|
||||
<locationList>
|
||||
<locationInformation>
|
||||
<location>31403456100@cgrates.org</location>
|
||||
<locationType>Primary Device</locationType>
|
||||
</locationInformation>
|
||||
</locationList>
|
||||
<locationUsage>26.244</locationUsage>
|
||||
</centrexModule>
|
||||
<ipModule>
|
||||
<route>gw01.cgrates.org</route>
|
||||
<networkCallID>108352493719420162306@172.31.250.150</networkCallID>
|
||||
<codec>PCMA/8000</codec>
|
||||
<accessDeviceAddress>172.16.1.4</accessDeviceAddress>
|
||||
<accessCallID>2345300069121904161716512907@172.16.1.10</accessCallID>
|
||||
<codecUsage>26.244</codecUsage>
|
||||
<userAgent>Altitude vBox</userAgent>
|
||||
</ipModule>
|
||||
</cdrData>
|
||||
<cdrData>
|
||||
<headerModule>
|
||||
<recordId>
|
||||
<eventCounter>0002183486</eventCounter>
|
||||
<systemId>CGRateSaabb</systemId>
|
||||
<date>20160419211500.104</date>
|
||||
<systemTimeZone>1+020000</systemTimeZone>
|
||||
</recordId>
|
||||
<type>End</type>
|
||||
</headerModule>
|
||||
</cdrData>
|
||||
</broadWorksCDR>`
|
||||
|
||||
func optsNotStrict(s *xmltree.ParseOptions) {
|
||||
s.Strict = false
|
||||
}
|
||||
|
||||
func TestXmlPathCDRs(t *testing.T) {
|
||||
xp := goxpath.MustParse(path.Join("/broadWorksCDR/cdrData/"))
|
||||
xmlTree := xmltree.MustParseXML(bytes.NewBufferString(cdrXmlBroadsoft), optsNotStrict)
|
||||
cdrs := goxpath.MustExec(xp, xmlTree, nil)
|
||||
for _, cdr := range cdrs {
|
||||
cdrBuf := bytes.NewBufferString(xml.Header)
|
||||
if err := goxpath.Marshal(cdr.(tree.Node), cdrBuf); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
xp := goxpath.MustParse(path.Join("/cdrData/basicModule/userNumber"))
|
||||
userNumberNode := xmltree.MustParseXML(cdrBuf, optsNotStrict)
|
||||
userNumber := goxpath.MustExec(xp, userNumberNode, nil)
|
||||
if len(userNumber) != 0 {
|
||||
fmt.Printf("UserNumber: %s\n", userNumber[0].String())
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user