void UpdateJobKeyValue(int rank, char *key, char *value) { SOCKET sock; char pszRank[20]; char pszStr[MAX_CMD_LENGTH+1]; char pszResult[MAX_CMD_LENGTH+1]; int error; if (!g_bUseJobHost) return; if ((key == NULL) || (value == NULL) || (rank < 0)) return; sprintf(pszRank, s_pszRankFormat, rank); if ((error = ConnectToMPD(s_pszRootHost, s_nPort, s_pszPassPhrase, &sock)) == 0) { // put the key/value string sprintf(pszStr, "dbput name=%s key=%s%s value=%s", s_pszJobId, pszRank, key, value); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the put operation: '%s', error %d\n", pszStr, WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("ERROR: put operation('%s') failed on '%s'\n%s", pszStr, s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // close the session with the mpd if (WriteString(sock, "done") == SOCKET_ERROR) { printf("Error: Unable to write 'done' to socket[%d]\n", sock); easy_closesocket(sock); return; } easy_closesocket(sock); } else { printf("UpdateJobKeyValue(%s:%s): Connect to %s failed, error %d\n", key, value, s_pszRootHost, error); fflush(stdout); } }
void UpdateJobState(char *state) { SOCKET sock; char pszStr[MAX_CMD_LENGTH+1]; char pszResult[MAX_CMD_LENGTH+1]; int error; if (!g_bUseJobHost) return; if ((error = ConnectToMPD(s_pszRootHost, s_nPort, s_pszPassPhrase, &sock)) == 0) { // put the state string sprintf(pszStr, "dbput %s:state:%s", s_pszJobId, state); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the put operation: '%s', error %d\n", pszStr, WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("ERROR: put operation('%s') failed on '%s'\n%s", pszStr, s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // close the session with the mpd if (WriteString(sock, "done") == SOCKET_ERROR) { printf("Error: Unable to write 'done' to socket[%d]\n", sock); easy_closesocket(sock); return; } easy_closesocket(sock); } else { printf("UpdateJobState(%s): Connect to %s failed, error %d\n", state, s_pszRootHost, error); fflush(stdout); } }
void ParseArgv(int argc, char **argv) { bool quit = 0; std::string now_playing_format = "{{(%l) }{{%a - }%t}}|{%f}}"; for (int i = 1; i < argc; ++i) { if (!strcmp(argv[i], "-h") || !strcmp(argv[i], "--host")) { if (++i >= argc) exit(0); Mpd.SetHostname(argv[i]); continue; } if (!strcmp(argv[i], "-p") || !strcmp(argv[i], "--port")) { if (++i >= argc) exit(0); Mpd.SetPort(atoi(argv[i])); continue; } else if (!strcmp(argv[i], "-v") || !strcmp(argv[i], "--version")) { std::cout << "ncmpcpp version: " << VERSION << "\n\n" << "optional screens compiled-in:\n" # ifdef HAVE_TAGLIB_H << " - tag editor\n" << " - tiny tag editor\n" # endif # ifdef HAVE_CURL_CURL_H << " - artist info\n" # endif # ifdef ENABLE_OUTPUTS << " - outputs\n" # endif # ifdef ENABLE_VISUALIZER << " - visualizer\n" # endif # ifdef ENABLE_CLOCK << " - clock\n" # endif << "\nencoding detection: " # ifdef HAVE_LANGINFO_H << "enabled" # else << "disabled" # endif // HAVE_LANGINFO_H << "\nbuilt with support for:" # ifdef HAVE_CURL_CURL_H << " curl" # endif # ifdef HAVE_ICONV_H << " iconv" # endif # ifdef HAVE_FFTW3_H << " fftw" # endif # ifdef USE_PDCURSES << " pdcurses" # else << " ncurses" # endif # ifdef HAVE_TAGLIB_H << " taglib" # endif # ifdef HAVE_PTHREAD_H << " threads" # endif # ifdef _UTF8 << " unicode" # endif << std::endl; exit(0); } else if (!strcmp(argv[i], "-?") || !strcmp(argv[i], "--help")) { std::cout << "Usage: ncmpcpp [OPTION]...\n" << " -h, --host connect to server at host [localhost]\n" << " -p, --port connect to server at port [6600]\n" << " -?, --help show this help message\n" << " -v, --version display version information\n" << " --now-playing display now playing song [" << now_playing_format << "]\n" << "\n" << " play start playing\n" << " pause pause the currently playing song\n" << " toggle toggle play/pause mode\n" << " stop stop playing\n" << " next play the next song\n" << " prev play the previous song\n" << " volume [+-]<num> adjusts volume by [+-]<num>\n" ; exit(0); } if (!ConnectToMPD()) exit(0); if (!strcmp(argv[i], "--now-playing")) { Mpd.UpdateStatus(); if (!Mpd.GetErrorMessage().empty()) { std::cout << "Error: " << Mpd.GetErrorMessage() << std::endl; exit(1); } if (Mpd.isPlaying()) { if (argc > ++i) { // apply additional pair of braces now_playing_format = "{"; now_playing_format += argv[i]; now_playing_format += "}"; Replace(now_playing_format, "\\n", "\n"); Replace(now_playing_format, "\\t", "\t"); MPD::Song::ValidateFormat("now-playing format", now_playing_format); } std::cout << utf_to_locale_cpy(Mpd.GetCurrentSong().toString(now_playing_format)) << "\n"; } exit(0); } else if (!strcmp(argv[i], "play")) { Mpd.Play(); quit = 1; } else if (!strcmp(argv[i], "pause")) { Mpd.Pause(1); quit = 1; } else if (!strcmp(argv[i], "toggle")) { Mpd.UpdateStatus(); if (!Mpd.GetErrorMessage().empty()) { std::cout << "Error: " << Mpd.GetErrorMessage() << std::endl; exit(1); } Mpd.Toggle(); quit = 1; } else if (!strcmp(argv[i], "stop")) { Mpd.Stop(); quit = 1; } else if (!strcmp(argv[i], "next")) { Mpd.Next(); quit = 1; } else if (!strcmp(argv[i], "prev")) { Mpd.Prev(); quit = 1; } else if (!strcmp(argv[i], "volume")) { i++; Mpd.UpdateStatus(); if (!Mpd.GetErrorMessage().empty()) { std::cout << "Error: " << Mpd.GetErrorMessage() << std::endl; exit(1); } if (i != argc) Mpd.SetVolume(Mpd.GetVolume()+atoi(argv[i])); quit = 1; } else { std::cout << "ncmpcpp: invalid option: " << argv[i] << std::endl; exit(0); } if (!Mpd.GetErrorMessage().empty()) { std::cout << "Error: " << Mpd.GetErrorMessage() << std::endl; exit(0); } } if (quit) exit(0); }
void CFindHostsDlg::OnVerify() { char host[100]; SOCKET sock; int index; char str[100]; HCURSOR hOldCursor; POSITION pos; UpdateData(); m_nofm = ""; UpdateData(FALSE); m_num_threads = m_list.GetSelectedCount(); if (m_num_threads == 0) return; pos = m_list.GetFirstSelectedItemPosition(); if (pos == NULL) { return; } hOldCursor = SetCursor( LoadCursor(NULL, IDC_WAIT) ); m_ok_btn.EnableWindow(FALSE); m_cancel_btn.EnableWindow(FALSE); m_num_items = m_list.GetSelectedCount(); m_progress.SetRange(0, m_num_items); m_progress.SetPos(0); m_progress.SetStep(1); m_nofm.Format("0 of %d", m_num_items); UpdateData(FALSE); if (m_bNeedPassword) { CPwdDialog dlg; dlg.DoModal(); if (dlg.m_bUseDefault) strcpy(m_pszPhrase, MPD_DEFAULT_PASSPHRASE); else strcpy(m_pszPhrase, dlg.m_password); } while (pos) { index = m_list.GetNextSelectedItem(pos); if (m_list.GetItemText(index, 0, host, 100) == 0) { SetCursor(hOldCursor); MessageBox("GetItemText failed", "Error", MB_OK); return; } if (ConnectToMPD(host, m_nPort, m_pszPhrase, &sock) != 0) { easy_closesocket(sock); ::PostMessage(m_hWnd, WM_USER+1, index, FALSE); continue; } if (WriteString(sock, "version") == SOCKET_ERROR) { easy_closesocket(sock); ::PostMessage(m_hWnd, WM_USER+1, index, FALSE); continue; } if (!ReadString(sock, str)) { easy_closesocket(sock); ::PostMessage(m_hWnd, WM_USER+1, index, FALSE); continue; } WriteString(sock, "done"); easy_closesocket(sock); ::PostMessage(m_hWnd, WM_USER+2, index, FALSE); } SetCursor(hOldCursor); }
void FindThreadSingle(FindThreadSingleArg *arg) { TCHAR host[100]; char str[100]; SOCKET sock; if (arg->list->GetItemText(arg->i, 0, host, 100) == 0) { ::PostMessage(arg->hWnd, WM_USER+1, arg->i, FALSE); delete arg; return; } if (arg->wildcard && (!wildcmp(arg->wildstr, host))) { ::PostMessage(arg->hWnd, WM_USER+1, arg->i, FALSE); delete arg; return; } ::PostMessage(arg->hWnd, WM_USER+1, arg->i, TRUE); if (arg->fast) { if (ConnectToMPDquick(host, arg->port, arg->phrase, &sock) != 0) { ::PostMessage(arg->hWnd, WM_USER+1, arg->i, FALSE); delete arg; return; } } else { if (ConnectToMPD(host, arg->port, arg->phrase, &sock) != 0) { ::PostMessage(arg->hWnd, WM_USER+1, arg->i, FALSE); delete arg; return; } } if (WriteString(sock, "version") == SOCKET_ERROR) { printf("WriteString failed after attempting passphrase authentication: %d\n", WSAGetLastError());fflush(stdout); easy_closesocket(sock); ::PostMessage(arg->hWnd, WM_USER+1, arg->i, FALSE); delete arg; return; } if (!ReadString(sock, str)) { ::PostMessage(arg->hWnd, WM_USER+1, arg->i, FALSE); delete arg; return; } WriteString(sock, "done"); easy_closesocket(sock); if (mpd_version_string_to_int(str) == 0) ::PostMessage(arg->hWnd, WM_USER+1, arg->i, FALSE); else ::PostMessage(arg->hWnd, WM_USER+2, arg->i, TRUE); delete arg; }
void ListJobs(char *host, int port, char *altphrase) { SOCKET sock; char str[CONSOLE_STR_LENGTH+1]; int error; char key[100]; char value[CONSOLE_STR_LENGTH]; char localhost[100]; if (host == NULL) { gethostname(localhost, 100); host = localhost; } if (ConnectToMPD(host, port, (altphrase == NULL) ? MPD_DEFAULT_PASSPHRASE : altphrase, &sock) != 0) { printf("Unable to connect to the mpd on %s\n", host); fflush(stdout); return; } printf("Jobs on %s:\n", host); //printf("start time : user@jobid\n"); printf("yyyy.mm.dd<hh .mm .ss > : user@jobid : state\n"); printf("--------------------------------------------\n"); fflush(stdout); strcpy(str, "dbfirst jobs"); if (WriteString(sock, str) == SOCKET_ERROR) { error = WSAGetLastError(); printf("writing '%s' failed, %d\n", str, error); Translate_Error(error, str); printf("%s\n", str); fflush(stdout); easy_closesocket(sock); return; } if (ReadStringTimeout(sock, str, MPD_DEFAULT_TIMEOUT)) { if (strcmp(str, "DBS_FAIL") == 0) { printf("no jobs on %s\n", host); fflush(stdout); WriteString(sock, "done"); easy_closesocket(sock); return; } if (strcmp(str, "DBS_END") == 0) { printf("no jobs on %s\n", host); fflush(stdout); WriteString(sock, "done"); easy_closesocket(sock); return; } GetKeyAndValue(str, key, value); printf("%s : %s : ", key, value); fflush(stdout); GetAndPrintState(sock, strstr(value, "@")+1); } else { printf("Unable to read the jobs on %s.\n", host); fflush(stdout); WriteString(sock, "done"); easy_closesocket(sock); return; } while (true) { strcpy(str, "dbnext jobs"); if (WriteString(sock, str) == SOCKET_ERROR) { error = WSAGetLastError(); printf("writing '%s' failed, %d\n", str, error); Translate_Error(error, str); printf("%s\n", str); fflush(stdout); easy_closesocket(sock); return; } if (ReadStringTimeout(sock, str, MPD_DEFAULT_TIMEOUT)) { if (strcmp(str, "DBS_FAIL") == 0) { printf("unexpected error reading the next job\n"); fflush(stdout); WriteString(sock, "done"); easy_closesocket(sock); return; } if (strcmp(str, "DBS_END") == 0) { break; } GetKeyAndValue(str, key, value); printf("%s : %s : ", key, value); GetAndPrintState(sock, strstr(value, "@")+1); } else { printf("Unable to read the jobs on %s.\n", host); fflush(stdout); WriteString(sock, "done"); easy_closesocket(sock); return; } } if (WriteString(sock, "done") == SOCKET_ERROR) { error = WSAGetLastError(); Translate_Error(error, str); printf("WriteString failed: %d\n%s\n", error, str); fflush(stdout); } easy_closesocket(sock); }
void PutJobProcessInDatabase(MPIRunLaunchProcessArg *arg, int pid) { SOCKET sock; char pszStr[MAX_CMD_LENGTH+1]; char pszResult[MAX_CMD_LENGTH+1]; int error; char pszRank[100]; int extent; if (!g_bUseJobHost) return; if (arg->n < 10) extent = 1; else if (arg->n < 100) extent = 2; else if (arg->n < 1000) extent = 3; else extent = 4; sprintf(s_pszRankFormat, "%%0%dd", extent); sprintf(pszRank, s_pszRankFormat, arg->i); if ((error = ConnectToMPD(s_pszRootHost, s_nPort, s_pszPassPhrase, &sock)) == 0) { // put host sprintf(pszStr, "dbput %s:%shost:%s", arg->pszJobID, pszRank, arg->pszHost); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the put operation: '%s', error %d\n", pszStr, WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("ERROR: put operation('%s') failed on '%s'\n%s", pszStr, s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // put command line sprintf(pszStr, "dbput name=%s key=%scmd value=%s", arg->pszJobID, pszRank, arg->pszCmdLine); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the put operation: '%s', error %d\n", pszStr, WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("ERROR: put operation('%s') failed on '%s'\n%s", pszStr, s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // put working directory sprintf(pszStr, "dbput name=%s key=%sdir value=%s", arg->pszJobID, pszRank, arg->pszDir); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the put operation: '%s', error %d\n", pszStr, WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("ERROR: put operation('%s') failed on '%s'\n%s", pszStr, s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // put environment variables sprintf(pszStr, "dbput %s:%senv:%s", arg->pszJobID, pszRank, arg->pszEnv); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the put operation: '%s', error %d\n", pszStr, WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("ERROR: put operation('%s') failed on '%s'\n%s", pszStr, s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // put process id sprintf(pszStr, "dbput %s:%spid:%d", arg->pszJobID, pszRank, pid); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the put operation: '%s', error %d\n", pszStr, WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("ERROR: put operation('%s') failed on '%s'\n%s", pszStr, s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // close the session with the mpd if (WriteString(sock, "done") == SOCKET_ERROR) { printf("Error: Unable to write 'done' to socket[%d]\n", sock); easy_closesocket(sock); return; } easy_closesocket(sock); } else { printf("PutJobProcessInRootMPD: Connect to %s failed, error %d\n", s_pszRootHost, error); fflush(stdout); } }
void PutJobInDatabase(MPIRunLaunchProcessArg *arg) { int error; SOCKET sock; SYSTEMTIME stime; char pszStr[MAX_CMD_LENGTH+1]; char pszResult[MAX_CMD_LENGTH+1]; if (!g_bUseJobHost) return; // save the host strcpy(s_pszRootHost, g_pszJobHost); // save the passphrase if (g_bUseJobMPDPwd) strcpy(s_pszPassPhrase, g_pszJobHostMPDPwd); else strcpy(s_pszPassPhrase, MPD_DEFAULT_PASSPHRASE); // save the jobid strcpy(s_pszJobId, arg->pszJobID); if ((error = ConnectToMPD(s_pszRootHost, s_nPort, s_pszPassPhrase, &sock)) == 0) { // open the jobs database sprintf(pszStr, "dbcreate jobs"); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the jobs database query: error %d\n", WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("Unable to open the jobs database on '%s'\n%s", s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // create a database for this job with the jobid as its name sprintf(pszStr, "dbcreate %s", arg->pszJobID); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the job database creation request: error %d\n", WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("Unable to create the job database(%s) on '%s'\n%s", arg->pszJobID, s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // get the current time and put it in the jobs database with this jobid GetLocalTime(&stime); sprintf(pszStr, "dbput jobs:%d.%02d.%02d<%02dh.%02dm.%02ds>:%s@%s", stime.wYear, stime.wMonth, stime.wDay, stime.wHour, stime.wMinute, stime.wSecond, arg->pszAccount, arg->pszJobID); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the jobs timestamp put operation: error %d\n", WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("Unable to put the job timestamp in the jobs database on '%s'\n%s", s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // put the user name in the job database sprintf(pszStr, "dbput %s:user:%s", arg->pszJobID, (arg->pszAccount[0] == '\0') ? "<single user mode>" : arg->pszAccount); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the job timestamp put operation: error %d\n", WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("ERROR: put operation('%s') failed on '%s'\n%s", pszStr, s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // put the size of the parallel process in the job database sprintf(pszStr, "dbput %s:nproc:%d", arg->pszJobID, arg->n); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the job nproc put operation: error %d\n", WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("ERROR: put operation('%s') failed on '%s'\n%s", pszStr, s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // put the state of the job database sprintf(pszStr, "dbput %s:state:LAUNCHING", arg->pszJobID, (arg->pszAccount[0] == '\0') ? "<single user mode>" : arg->pszAccount); if (WriteString(sock, pszStr) == SOCKET_ERROR) { printf("ERROR: Unable to write '%s' to socket[%d]\n", pszStr, sock); easy_closesocket(sock); return; } if (!ReadString(sock, pszResult)) { printf("ERROR: ReadString failed to read the result of the job state put operation: error %d\n", WSAGetLastError()); easy_closesocket(sock); return; } if (strnicmp(pszResult, "DBS_SUCCESS", 11) != 0) { printf("ERROR: put operation('%s') failed on '%s'\n%s", pszStr, s_pszRootHost, pszResult); fflush(stdout); easy_closesocket(sock); return; } // close the session with the mpd if (WriteString(sock, "done") == SOCKET_ERROR) { printf("Error: Unable to write 'done' to socket[%d]\n", sock); easy_closesocket(sock); return; } easy_closesocket(sock); } else { printf("PutJobInDatabase: Connect to %s failed, error %d\n", s_pszRootHost, error); fflush(stdout); } }