Skip to content

Commit 8ff673a

Browse files
committed
Support Sy SLR/STR
1 parent 1319a80 commit 8ff673a

File tree

2 files changed

+19
-16
lines changed

2 files changed

+19
-16
lines changed

README.md

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -28,16 +28,18 @@ and send it to Diameter Server.
2828
```json
2929
"originHost": "1.client.ccg-go",
3030
"originRealm": "client.ccg-go",
31-
"diameterServerAddr": "10.253.191.56:16553", //remote Diameter Server IP/Port
32-
"localRESTServerAddr": ":8080", //local address for REST server
33-
"extraDiameterXML": "vendor.xml", //extra xml for diameter dictionary
34-
"dumpMessage": false, //print detail CCR/CCA in console?
35-
"dumpPCAP": false, //dump packet to pcap file?
36-
"dumpFile": "ccg-go.pcap" //file name for wireshark
31+
"diameterServerAddr": "10.253.191.56:16553", //remote Diameter Server IP/Port
32+
"localRESTServerAddr": ":8080", //local address for REST server
33+
"extraDiameterXML": "vendor1.xml,vendor2.xml", //extra xml for diameter dictionary
34+
"dumpMessage": false, //print detail CCR/CCA in console?
35+
"dumpPCAP": false, //dump packet to pcap file?
36+
"dumpFile": "ccg-go.pcap" //file name for wireshark
3737
```
3838

3939
## Log
4040

41+
* v20191120 Support Sy SLR/STR
42+
4143
## Todo List
4244

4345
* [x] handle CCR/CCA diameter message
@@ -46,6 +48,7 @@ and send it to Diameter Server.
4648
* [x] Return detail CCA message as json
4749
* [x] Write .pacap for wireshark
4850
* [x] Generate SessionID for automaticlly
51+
* [x] Support Sy SLR/STR
4952

5053
## License
5154

internal/json2diam.go

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ func (enc *Encoding) Encode(dst *diam.Message, src []byte) (err error) {
3737
}
3838
//2. range every key/value
3939
for key, value := range js {
40-
if avps, err = encode(key, value); err != nil {
40+
if avps, err = encode(key, value, dst.Header.ApplicationID); err != nil {
4141
return err
4242
}
4343
if avps.Code == avp.SessionID && avps.VendorID == 0 {
@@ -54,13 +54,13 @@ func (enc *Encoding) Encode(dst *diam.Message, src []byte) (err error) {
5454
//Decode diam.Message into []byte
5555
func (enc *Encoding) Decode(src *diam.Message) (dst []byte, err error) {
5656
var b bytes.Buffer
57-
jsonGroupData(&b, src.AVP)
57+
jsonGroupData(&b, src.AVP, src.Header.ApplicationID)
5858
return b.Bytes(), nil
5959
}
6060

61-
func jsonAVP(b *bytes.Buffer, avp *diam.AVP) {
61+
func jsonAVP(b *bytes.Buffer, avp *diam.AVP, appid uint32) {
6262
//1. print avp name
63-
if dictAVP, err := dict.Default.FindAVPWithVendor((uint32(4)), avp.Code, avp.VendorID); err != nil {
63+
if dictAVP, err := dict.Default.FindAVPWithVendor(appid, avp.Code, avp.VendorID); err != nil {
6464
//1.1 print as "20230:2011" if no avp_name found,
6565
fmt.Fprintf(b, "\"%d:%d\": ", avp.Code, avp.VendorID)
6666
} else {
@@ -74,15 +74,15 @@ func jsonAVP(b *bytes.Buffer, avp *diam.AVP) {
7474
fmt.Fprint(b, jsonData(avp.Data))
7575
} else {
7676
//2.2 print group avp
77-
jsonGroupData(b, avp.Data.(*diam.GroupedAVP).AVP)
77+
jsonGroupData(b, avp.Data.(*diam.GroupedAVP).AVP, appid)
7878
}
7979

8080
}
81-
func jsonGroupData(b *bytes.Buffer, avps []*diam.AVP) {
81+
func jsonGroupData(b *bytes.Buffer, avps []*diam.AVP, appid uint32) {
8282
fmt.Fprintln(b, "{")
8383
for index, avp := range avps {
8484
//1. print each line "avp_name:avp_value"
85-
jsonAVP(b, avp)
85+
jsonAVP(b, avp, appid)
8686
//2. print "," for each line if not last line
8787
if index != len(avps)-1 {
8888
fmt.Fprintln(b, ",")
@@ -146,7 +146,7 @@ func isJSON(s []byte) bool {
146146
return json.Unmarshal(s, &js) == nil
147147
}
148148

149-
func encode(key string, value interface{}) (avp *diam.AVP, err error) {
149+
func encode(key string, value interface{}, appid uint32) (avp *diam.AVP, err error) {
150150
var avpcode int
151151
var subAVP *diam.AVP
152152
//var dictAVP *dict.AVP
@@ -177,7 +177,7 @@ func encode(key string, value interface{}) (avp *diam.AVP, err error) {
177177

178178
} else {
179179
//1.3. handle key as "avp_name"
180-
if dictAVP, err = dict.Default.FindAVP(uint32(4), key); err != nil {
180+
if dictAVP, err = dict.Default.FindAVP(appid, key); err != nil {
181181
return nil, err
182182
}
183183
}
@@ -194,7 +194,7 @@ func encode(key string, value interface{}) (avp *diam.AVP, err error) {
194194
AVP: make([]*diam.AVP, 0),
195195
}
196196
for key, value := range value.(map[string]interface{}) {
197-
if subAVP, err = encode(key, value); err != nil {
197+
if subAVP, err = encode(key, value, appid); err != nil {
198198
return nil, err
199199
}
200200
grouped.AddAVP(subAVP)

0 commit comments

Comments
 (0)