package main import ( "git.binarythought.com/cdramey/sdb" "fmt" "io/ioutil" "os" "flag" ) func main() { flags := flag.NewFlagSet("sdb", flag.ExitOnError) flags.SetOutput(os.Stdout) flags.Usage = func() { fmt.Fprintf(flags.Output(), "Usage: %s [OPTION] ...\nOptions:\n", os.Args[0]) flags.PrintDefaults() } plonly := flags.Bool("payload", false, "only return the payload") flags.Parse(os.Args[1:]) if flags.NArg() < 1 { fmt.Fprintf(os.Stderr, "files parameter cannot be empty\n") os.Exit(1) } for _, fn := range flags.Args() { raw, err := ioutil.ReadFile(fn) if err != nil { fmt.Fprintf(os.Stderr, "error reading \"%s\": %s\n", fn, err.Error()) continue } data, err := sdb.ParseSDB(raw) if err != nil { fmt.Fprintf(os.Stderr, "%s\n", err.Error()) continue } if *plonly { for _, i := range data.Elements { switch v := i.(type) { case sdb.MOPayload: os.Stdout.Write(v.Payload) } } } else { fmt.Printf("Protocol Revision: %d\n", data.ProtocolRevision) fmt.Printf("Message Length: %d\n", data.Length) for c, i := range data.Elements { if c > 0 { fmt.Println() } switch v := i.(type) { case sdb.MOHeader: fmt.Printf("\tMO Header IEI: %d\n", v.IEI) fmt.Printf("\tMO Header Length: %d\n", v.Length) fmt.Printf("\tMO Header CDR Reference: %d\n", v.CDRReference) fmt.Printf("\tMO Header IMEI: %s\n", v.IMEI) fmt.Printf("\tMO Header Status: %s (%d)\n", v.StatusString(), v.Status) fmt.Printf("\tMO Header MOMSN: %d\n", v.MOMSN) fmt.Printf("\tMO Header MTMSN: %d\n", v.MTMSN) fmt.Printf("\tMO Header Session Time: %s\n", v.SessionTime().String()) case sdb.MOPayload: fmt.Printf("\tMO Payload IEI: %d\n", v.IEI) fmt.Printf("\tMO Payload Length: %d\n", v.Length) case sdb.MOConfirmation: fmt.Printf("\tMO Confirmation IEI: %d\n", v.IEI) fmt.Printf("\tMO Confirmation Length: %d\n", v.Length) fmt.Printf("\tMO Confirmation Status: %d\n", v.Status) } } } } }