When creating a simple server to respond to CER/CEA messages, the CEA message generated has the wrong session ID which makes the client give an error saying "Unexpected (no scenario found) call with session-id [xxxxxxxxx]"
- DIAMETER
- cmd=Capabilities-Exchange Request(257) flags=R--- appl=Diameter Common Messages(0) h2h=0 e2e=0 |
- DIAMETER
- cmd=Capabilities-Exchange Answer(257) flags=---- appl=Diameter Common Messages(0) h2h=85681811 e2e=6d510f37 |
I am using seagul to generate client side traffic.
My server code:
package main
import (
"flag"
"log"
"net/http"
_ "net/http/pprof"
"github.com/fiorix/go-diameter/v4/diam"
"github.com/fiorix/go-diameter/v4/diam/datatype"
"github.com/fiorix/go-diameter/v4/diam/dict"
"github.com/fiorix/go-diameter/v4/diam/sm"
)
func main() {
serverAddress := flag.String("serverAddress", "192.168.1.1:3868", "address in the form of ip:port to listen on")
ppaddr := flag.String("pprof_addr", ":9000", "address in form of ip:port for the pprof server")
host := flag.String("diam_host", "hssemulator.mnc001.mcc001.3gppnetwork.org", "diameter identity host")
realm := flag.String("diam_realm", "ims.mnc001.mcc001.3gppnetwork.org", "diameter identity realm")
certFile := flag.String("cert_file", "", "tls certificate file (optional)")
keyFile := flag.String("key_file", "", "tls key file (optional)")
//silent := flag.Bool("s", false, "silent mode, useful for benchmarks")
flag.Parse()
// Load our custom dictionary on top of the default one, which
// always have the Base Protocol (RFC6733) and Credit Control
// Application (RFC4006).
err := dict.Default.LoadFile("base_cx.xml")
if err != nil {
log.Fatal(err)
}
settings := &sm.Settings{
OriginHost: datatype.DiameterIdentity(*host),
OriginRealm: datatype.DiameterIdentity(*realm),
VendorID: 10415,
ProductName: "hss-emulator",
FirmwareRevision: 1,
}
// Create the state machine (mux) and set its message handlers.
mux := sm.New(settings)
mux.HandleFunc("ALL", handleALL) // Catch all.
// Print error reports.
go printErrors(mux.ErrorReports())
if len(*ppaddr) > 0 {
go func() { log.Fatal(http.ListenAndServe(*ppaddr, nil)) }()
}
err = listen(*serverAddress, *certFile, *keyFile, mux)
if err != nil {
log.Fatal(err)
}
}
func printErrors(ec <-chan *diam.ErrorReport) {
for err := range ec {
log.Println(err)
}
}
func listen(addr, cert, key string, handler diam.Handler) error {
// Start listening for connections.
if len(cert) > 0 && len(key) > 0 {
log.Println("Starting secure diameter server on", addr)
return diam.ListenAndServeTLS(addr, cert, key, handler, nil)
}
log.Println("Starting diameter server on", addr)
return diam.ListenAndServe(addr, handler, nil)
}
func handleALL(c diam.Conn, m *diam.Message) {
log.Printf("Received unexpected message from %s:\n%s", c.RemoteAddr(), m)
}
When creating a simple server to respond to CER/CEA messages, the CEA message generated has the wrong session ID which makes the client give an error saying "Unexpected (no scenario found) call with session-id [xxxxxxxxx]"
I am using seagul to generate client side traffic.
My server code: