#include #include #include #include #include "cfg.h" #include "fbsh.h" Config config; FBSmartHome fbsh; void help() { printf ("fbsh-cli: parameters command options\n"); printf (" Client for accessing the fritzbox smart home devices.\n"); printf (" Most parameters can be set in a seperate config file.\n"); printf ("Commands:\n"); printf ("\thelp displays this helptext.\n"); printf ("\tconnect connect to the device, it will save the SID file.\n"); printf ("\tlist lists all devices, connection will be recovered from SID.\n"); printf ("\t If silent parameter is set, we will not be asked for credentials\n"); printf ("\tsaveconfig save configfile.\n"); printf ("\n"); printf ("Parameters:\n"); printf ("\t-config configfile to use\n"); printf ("\t-host the fritzbox to connect to (http://fritz.box)\n"); printf ("\t-user username to connect with\n"); printf ("\t-pass password to use\n"); printf ("\t-sidfile file which contains the session id\n"); printf ("\t-savepassword <0|1> should the password be saved in the configfile\n"); printf ("\n"); printf ("\t-silent <0|1> enable/disable: no questions about username or password\n"); printf ("\t-S enable silent mode\n"); printf ("\n"); exit (0); } void connect() { fbsh.UseSIDFile(config.GetSIDFile()); if (fbsh.Connect(config.GetFBHostname()) != 0) { if (fbsh.Connect(config.GetFBHostname(), config.GetUsername(), config.GetPassword()) != 0) { fprintf (stderr, "could not connect to: %s Error:%s\n", config.GetFBHostname().c_str(), strerror(errno)); } } } void getlist(int argpos, int argc, char **argv) { std::list *devlist; std::list::iterator iter; connect (); devlist = fbsh.GetDevices(); if (devlist == NULL) { fprintf (stderr, "Error Retrieving Devices: %s\n", strerror(errno)); return; } for (iter = devlist->begin(); iter != devlist->end(); iter++) { printf ("%s,%s,%s,%s,%d,%s\n", iter->id.c_str(), iter->name.c_str(), iter->product.c_str(), iter->vendor.c_str(), iter->present, iter->attributes.c_str()); } delete devlist; } int main(int argc, char** argv) { int i; if (argc < 2) help(); else { for (i = 1; i < argc; i++) { // // commands to run, all parameters must be set by here. // if (strcmp(argv[i], "help") == 0) { help(); break; } else if (strcmp(argv[i], "connect") == 0) { connect(); printf ("SID:%s\n", fbsh.GetSID().c_str()); break; } else if (strcmp(argv[i], "list") == 0) { getlist(i, argc, argv); break; } else if (strcmp(argv[i], "saveconfig") == 0) { config.SaveConfig(); break; } // // parameters will follow here // else if (strcmp(argv[i], "-host") == 0) { config.SetFBHostname(argv[++i]); } else if (strcmp(argv[i], "-user") == 0) { config.SetUsername(argv[++i]); } else if (strcmp(argv[i], "-pass") == 0) { config.SetPassword(argv[++i]); } else if (strcmp(argv[i], "-silent") == 0) { config.SetSilent(atoi(argv[++i])); } else if (strcmp(argv[i], "-S") == 0) { config.SetSilent(true); } else if (strcmp(argv[i], "-sidfile") == 0) { config.SetSIDFile(argv[++i]); } else if (strcmp(argv[i], "-savepassword") == 0) { config.SetSavePassword(atoi(argv[++i])); } else if (strcmp(argv[i], "-config") == 0) { config.SetFilename(argv[++i]); config.LoadConfig(); } } } return 0; }