static int cmdLstn(int argc, char* argv[]) { int dflag, flags; Lstn *lstn; char *usage = "usage: listen [-dIN] [address]"; dflag = 0; flags = 0; ARGBEGIN{ default: return cliError(usage); case 'd': dflag = 1; break; case 'I': flags |= ConIPCheck; break; case 'N': flags |= ConNoneAllow; break; }ARGEND switch(argc){ default: return cliError(usage); case 0: vtRLock(lbox.lock); for(lstn = lbox.head; lstn != nil; lstn = lstn->next) consPrint("\t%s\t%s\n", lstn->address, lstn->dir); vtRUnlock(lbox.lock); break; case 1: if(!dflag){ if(lstnAlloc(argv[0], flags) == nil) return 0; break; } vtLock(lbox.lock); for(lstn = lbox.head; lstn != nil; lstn = lstn->next){ if(strcmp(lstn->address, argv[0]) != 0) continue; if(lstn->afd != -1){ close(lstn->afd); lstn->afd = -1; } break; } vtUnlock(lbox.lock); if(lstn == nil){ vtSetError("listen: '%s' not found", argv[0]); return 0; } break; } return 1; }
static int cmdUsers(int argc, char* argv[]) { Ubox *box; int dflag, r, wflag; char *file; char *usage = "usage: users [-d | -r file] [-w]"; dflag = wflag = 0; file = nil; ARGBEGIN{ default: return cliError(usage); case 'd': dflag = 1; break; case 'r': file = ARGF(); if(file == nil) return cliError(usage); break; case 'w': wflag = 1; break; }ARGEND if(argc) return cliError(usage); if(dflag && file) return cliError("cannot use -d and -r together"); if(dflag) uboxInit(usersDefault, sizeof(usersDefault)); else if(file){ if(usersFileRead(file) == 0) return 0; } vtRLock(ubox.lock); box = ubox.box; consPrint("\tnuser %d len %d\n", box->nuser, box->len); r = 1; if(wflag) r = usersFileWrite(box); vtRUnlock(ubox.lock); return r; }
void squeezeLiteGui::CliReady(void) { DEBUGF("cliConnected Slot"); m_playerInfo = new playerInfo(cli,encodedMacAddress); m_playerInfoThread = new playerInfoThread(m_playerInfo); m_playerInfo->moveToThread(m_playerInfoThread); // Error message processing connect(m_playerInfo,SIGNAL(playerInfoError(QString)), this,SLOT(ErrorMessageReceiver(QString))); connect(cli,SIGNAL(cliError(QString)), this,SLOT(ErrorMessageReceiver(QString))); // interface command issuing connect(this,SIGNAL(issueStandardCommand(CliCommand)), cli,SLOT(SendStandardCommand(CliCommand))); connect(this,SIGNAL(issueCommand(QByteArray)), cli,SLOT(SendCommand(QByteArray))); // so device can send messages connect(m_playerInfo,SIGNAL(PlayerInfoFilled()), this,SLOT(playerInfoReady())); connect(m_playerInfo,SIGNAL(PlayerStatus(PlayerState)), this,SLOT(PlayerStatus(PlayerState))); m_playerInfoThread->start(); // connect(this,SIGNAL(deviceStatusReady()),this,SLOT(initInterfaceConnections())); }
static int cmdUname(int argc, char* argv[]) { User *u, *up; int d, dflag, i, r; char *p, *uid, *uname; char *createfmt = "fsys main create /active/usr/%s %s %s d775"; char *usage = "usage: uname [-d] uname [uid|:uid|%%newname|=leader|+member|-member]"; dflag = 0; ARGBEGIN{ default: return cliError(usage); case 'd': dflag = 1; break; }ARGEND if(argc < 1){ if(!dflag) return cliError(usage); vtRLock(ubox.lock); uboxDump(ubox.box); vtRUnlock(ubox.lock); return 1; } uname = argv[0]; argc--; argv++; if(argc == 0){ vtRLock(ubox.lock); if((u = _userByUname(ubox.box, uname)) == nil){ vtRUnlock(ubox.lock); return 0; } consPrint("\t%U\n", u); vtRUnlock(ubox.lock); return 1; } vtLock(ubox.lock); u = _userByUname(ubox.box, uname); while(argc--){ if(argv[0][0] == '%'){ if(u == nil){ vtUnlock(ubox.lock); return 0; } p = &argv[0][1]; if((up = _userByUname(ubox.box, p)) != nil){ vtSetError("uname: uname '%s' already exists", up->uname); vtUnlock(ubox.lock); return 0; } for(i = 0; usersMandatory[i] != nil; i++){ if(strcmp(usersMandatory[i], uname) != 0) continue; vtSetError("uname: uname '%s' is mandatory", uname); vtUnlock(ubox.lock); return 0; } d = strlen(p) - strlen(u->uname); for(up = ubox.box->head; up != nil; up = up->next){ if(up->leader != nil){ if(strcmp(up->leader, u->uname) == 0){ vtMemFree(up->leader); up->leader = vtStrDup(p); ubox.box->len += d; } } for(i = 0; i < up->ngroup; i++){ if(strcmp(up->group[i], u->uname) != 0) continue; vtMemFree(up->group[i]); up->group[i] = vtStrDup(p); ubox.box->len += d; break; } } uboxRemUser(ubox.box, u); vtMemFree(u->uname); u->uname = vtStrDup(p); uboxAddUser(ubox.box, u); } else if(argv[0][0] == '='){ if(u == nil){ vtUnlock(ubox.lock); return 0; } if((up = _userByUname(ubox.box, &argv[0][1])) == nil){ if(argv[0][1] != '\0'){ vtUnlock(ubox.lock); return 0; } } if(u->leader != nil){ ubox.box->len -= strlen(u->leader); vtMemFree(u->leader); u->leader = nil; } if(up != nil){ u->leader = vtStrDup(up->uname); ubox.box->len += strlen(u->leader); } } else if(argv[0][0] == '+'){ if(u == nil){ vtUnlock(ubox.lock); return 0; } if((up = _userByUname(ubox.box, &argv[0][1])) == nil){ vtUnlock(ubox.lock); return 0; } if(!_groupAddMember(ubox.box, u, up->uname)){ vtUnlock(ubox.lock); return 0; } } else if(argv[0][0] == '-'){ if(u == nil){ vtUnlock(ubox.lock); return 0; } if((up = _userByUname(ubox.box, &argv[0][1])) == nil){ vtUnlock(ubox.lock); return 0; } if(!_groupRemMember(ubox.box, u, up->uname)){ vtUnlock(ubox.lock); return 0; } } else{ if(u != nil){ vtSetError("uname: uname '%s' already exists", u->uname); vtUnlock(ubox.lock); return 0; } uid = argv[0]; if(*uid == ':') uid++; if((u = _userByUid(ubox.box, uid)) != nil){ vtSetError("uname: uid '%s' already exists", u->uid); vtUnlock(ubox.lock); return 0; } u = userAlloc(uid, uname); uboxAddUser(ubox.box, u); if(argv[0][0] != ':'){ // should have an option for the mode and gid p = smprint(createfmt, uname, uname, uname); r = cliExec(p); vtMemFree(p); if(r == 0){ vtUnlock(ubox.lock); return 0; } } } argv++; } if(usersFileWrite(ubox.box) == 0){ vtUnlock(ubox.lock); return 0; } if(dflag) uboxDump(ubox.box); vtUnlock(ubox.lock); return 1; }
static int cmdSrv(int argc, char* argv[]) { Con *con; Srv *srv; char *usage = "usage: srv [-APWdp] [service]"; int conflags, dflag, fd[2], mode, pflag, r; dflag = 0; pflag = 0; conflags = 0; mode = 0666; ARGBEGIN{ default: return cliError(usage); case 'A': conflags |= ConNoAuthCheck; break; case 'I': conflags |= ConIPCheck; break; case 'N': conflags |= ConNoneAllow; break; case 'P': conflags |= ConNoPermCheck; mode = 0600; break; case 'W': conflags |= ConWstatAllow; mode = 0600; break; case 'd': dflag = 1; break; case 'p': pflag = 1; mode = 0600; break; }ARGEND if(pflag && (conflags&ConNoPermCheck)){ vtSetError("srv: cannot use -P with -p"); return 0; } switch(argc){ default: return cliError(usage); case 0: vtRLock(sbox.lock); for(srv = sbox.head; srv != nil; srv = srv->next) consPrint("\t%s\t%d\n", srv->service, srv->srvfd); vtRUnlock(sbox.lock); return 1; case 1: if(!dflag) break; vtLock(sbox.lock); for(srv = sbox.head; srv != nil; srv = srv->next){ if(strcmp(srv->service, argv[0]) != 0) continue; srvFree(srv); break; } vtUnlock(sbox.lock); if(srv == nil){ vtSetError("srv: '%s' not found", argv[0]); return 0; } return 1; } if(pipe(fd) < 0){ vtSetError("srv pipe: %r"); return 0; } if((srv = srvAlloc(argv[0], mode, fd[0])) == nil){ close(fd[0]); close(fd[1]); return 0; } if(pflag) r = consOpen(fd[1], srv->srvfd, -1); else{ con = conAlloc(fd[1], srv->mntpnt, conflags); if(con == nil) r = 0; else r = 1; } if(r == 0){ close(fd[1]); vtLock(sbox.lock); srvFree(srv); vtUnlock(sbox.lock); } return r; }
void squeezeLiteGui::Init(void) { qmlRegisterType<ControlListModel>("net.galtfamily.controlListModel",1,0,"ControlListModel"); // qmlRegisterType<ControlListItem>("net.galtfamily.controllistitem",1,0,"ControlListItem"); setSource(QUrl::fromLocalFile("qml/squeezelitegui/squeezeliteguimain.qml")); show(); QSettings *mySettings = new QSettings("squeezelitegui", "squeezelitegui"); if( !mySettings->contains("Version") || mySettings->value("Version")!=DATAVERSION) { // no settings file, so create one mySettings->setValue("Version", DATAVERSION); mySettings->setValue("Server/Address","127.0.0.1"); // mySettings->setValue("Server/Address","10.6.67.54"); mySettings->setValue("Server/AudioPort","3483"); mySettings->setValue("Server/CLIPort", "9090"); mySettings->setValue("Server/HttpPort", "9000"); mySettings->setValue("Server/Username", ""); mySettings->setValue("Server/Password", ""); mySettings->setValue("Audio/Device","default"); mySettings->setValue("Player/Name","squeezelite"); mySettings->sync(); } lmsUsername = mySettings->value("Server/Username","").toString(); lmsPassword = mySettings->value("Server/Password","").toString(); SqueezeBoxServerAddress = mySettings->value("Server/Address","127.0.0.1").toString(); SqueezeBoxServerAudioPort = mySettings->value("Server/AudioPort","3483").toString(); SqueezeBoxServerCLIPort = mySettings->value("Server/CLIPort", "9090").toString(); SqueezeBoxServerHttpPort = mySettings->value("Server/HttpPort", "9000").toString(); AudioDevice = mySettings->value("Audio/Device","").toString(); PlayerName = mySettings->value("Player/Name", "squeezelite").toString(); getplayerMACAddress(); // get the MAC address we are going to use player = new QProcess(this); #ifdef Q_OS_LINUX QString program = "squeezelite"; program += (QString(" -m " + QString( MacAddress ))) + (QString(" -n " + PlayerName)) + (QString(" -o " + AudioDevice)) + " " + SqueezeBoxServerAddress; #else QString program = QString('"')+QString("c:\\program files (x86)\\squeezelite\\squeezelite-win")+QString('"'); program += (QString(" -m " + QString( MacAddress ))) + (QString(" -n " + PlayerName)) + (QString(" -o " + AudioDevice)) + " " + SqueezeBoxServerAddress; #endif DEBUGF( "player command " << program); player->start( program ); DEBUGF("ERROR STRING IF ANY" << player->error() << player->errorString() ); // player->waitForStarted(2000); // // initialize the CLI interface. Make sure that you've set the appropriate server address and port cli = new SlimCLI(0, SqueezeBoxServerAddress, encodedMacAddress, SqueezeBoxServerCLIPort.toInt()); m_cliThread = new cliThread(cli); cli->moveToThread(m_cliThread); connect(cli,SIGNAL(isConnected()), this, SLOT(CliReady())); connect(cli,SIGNAL(cliError(QString)),this,SLOT(ErrorMessageReceiver(QString))); m_cliThread->start(); m_interfaceState = INTERFACE_CLI_STARTED; }