"strconv"
"strings"
"syscall"
+ "text/tabwriter"
"github.com/Sirupsen/logrus"
"github.com/iotbzh/xds-agent/lib/xaapiv1"
HeaderClientKeyName: "Xds-Agent-Sid",
CsrfDisable: true,
LogOut: g.log.Out,
- LogLevel: common.HTTPLogLevelWarning,
+ LogPrefix: "XDSAGENT: ",
+ LogLevel: common.HTTPLogLevelDebug,
}
c, err := common.HTTPNewClient(baseURL, conf)
if err != nil {
errmsg := err.Error()
- if m, err := regexp.MatchString("Get http.?://", errmsg); m && err == nil {
+ m, err := regexp.MatchString("Get http.?://", errmsg)
+ if (m && err == nil) || strings.Contains(errmsg, "Failed to get device ID") {
i := strings.LastIndex(errmsg, ":")
- errmsg = "Cannot connection to " + baseURL + errmsg[i:]
+ newErr := "Cannot connection to " + baseURL
+ if i > 0 {
+ newErr += " (" + strings.TrimSpace(errmsg[i+1:]) + ")"
+ } else {
+ newErr += " (" + strings.TrimSpace(errmsg) + ")"
+ }
+ errmsg = newErr
}
return int(syscallEBADE), fmt.Errorf(errmsg)
}
}
})
+ // Monitor XDS server configuration changes (and specifically connected status)
+ iosk.On(xaapiv1.EVTServerConfig, func(ev xaapiv1.EventMsg) {
+ svrCfg, err := ev.DecodeServerCfg()
+ if err == nil && !svrCfg.Connected {
+ // TODO: should wait that server will be connected back
+ if g.cbOnExit != nil {
+ g.cbOnExit(-1, fmt.Errorf("XDS Server disconnected"))
+ } else {
+ fmt.Printf("XDS Server disconnected")
+ os.Exit(-1)
+ }
+ }
+ })
+
+ args := xaapiv1.EventRegisterArgs{Name: xaapiv1.EVTServerConfig}
+ if err := g.httpCli.Post("/events/register", args, nil); err != nil {
+ return 0, err
+ }
+
return 0, nil
}
// except if XDS_GDBSERVER_OUTPUT_NOFIX is defined
_, gdbserverNoFix := os.LookupEnv("XDS_GDBSERVER_OUTPUT_NOFIX")
+ // SDK ID must be set else $GDB cannot be resolved
+ if g.sdkID == "" {
+ return int(syscall.EINVAL), fmt.Errorf("sdkid must be set")
+ }
+
args := xaapiv1.ExecArgs{
ID: g.prjID,
SdkID: g.sdkID,
//***** Private functions *****
func (g *GdbXds) printProjectsList() (int, error) {
+ writer := new(tabwriter.Writer)
+ writer.Init(os.Stdout, 0, 8, 0, '\t', 0)
msg := ""
if len(g.projects) > 0 {
- msg += "List of existing projects (use: export XDS_PROJECT_ID=<< ID >>): \n"
- msg += " ID\t\t\t\t | Label"
+ fmt.Fprintln(writer, "List of existing projects (use: export XDS_PROJECT_ID=<< ID >>):")
+ fmt.Fprintln(writer, "ID \t Label")
for _, f := range g.projects {
- msg += fmt.Sprintf("\n %s\t | %s", f.ID, f.Label)
- if f.DefaultSdk != "" {
- msg += fmt.Sprintf("\t(default SDK: %s)", f.DefaultSdk)
- }
+ fmt.Fprintf(writer, " %s \t %s\n", f.ID, f.Label)
}
- msg += "\n"
}
// FIXME : support multiple servers
if err := g.httpCli.Get("/servers/0/sdks", &sdks); err != nil {
return int(syscallEBADE), err
}
- msg += "\nList of installed cross SDKs (use: export XDS_SDK_ID=<< ID >>): \n"
- msg += " ID\t\t\t\t\t | NAME\n"
+ fmt.Fprintln(writer, "\nList of installed cross SDKs (use: export XDS_SDK_ID=<< ID >>):")
+ fmt.Fprintln(writer, "ID \t Name")
for _, s := range sdks {
- msg += fmt.Sprintf(" %s\t | %s\n", s.ID, s.Name)
+ fmt.Fprintf(writer, " %s \t %s\n", s.ID, s.Name)
}
if len(g.projects) > 0 && len(sdks) > 0 {
- msg += fmt.Sprintf("\n")
- msg += fmt.Sprintf("For example: \n")
- msg += fmt.Sprintf(" XDS_PROJECT_ID=%q XDS_SDK_ID=%q %s -x myGdbConf.ini\n",
- g.projects[0].ID, sdks[0].ID, AppName)
+ fmt.Fprintln(writer, "")
+ fmt.Fprintln(writer, "For example: ")
+ fmt.Fprintf(writer, " XDS_PROJECT_ID=%s XDS_SDK_ID=%s %s -x myGdbConf.ini\n",
+ g.projects[0].ID[:8], sdks[0].ID[:8], AppName)
}
+ fmt.Fprintln(writer, "")
+ fmt.Fprintln(writer, "Or define settings within gdb configuration file (see help and :XDS-ENV: tag)")
+ writer.Flush()
return 0, fmt.Errorf(msg)
}