|
|
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] <files> ...\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) } } } } }
|