00001 /* 00002 * Copyright (C) 2009, Edmundo Albuquerque de Souza e Silva. 00003 * 00004 * This file may be distributed under the terms of the Q Public License 00005 * as defined by Trolltech AS of Norway and appearing in the file 00006 * LICENSE.QPL included in the packaging of this file. 00007 * 00008 * THIS FILE IS PROVIDED AS IS WITH NO WARRANTY OF ANY KIND, INCLUDING 00009 * THE WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR 00010 * PURPOSE. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY SPECIAL, 00011 * INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING 00012 * FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, 00013 * NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION 00014 * WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. 00015 * 00016 */ 00017 00018 #ifndef __RIOSHELL_H__ 00019 #define __RIOSHELL_H__ 00020 00021 #include "RioSemaphore.h" 00022 #include "RioExplorer.h" 00023 00024 #ifdef USE_GRID 00025 #include <unistd.h> 00026 #endif 00027 00028 #define BLACK_RED "\033[01;40;31m" //black background and red text 00029 #define BLACK_GREEN "\033[01;40;32m" //black background and green text 00030 #define BLACK_BLUE "\033[01;40;34m" //black background and blue text 00031 #define BLACK_CYAN "\033[01;40;36m" //black background and cyan text 00032 #define B_RED_WHITE "\033[05;41;37m" //red background and blinking white text 00033 #define RESET "\033[0m" //black background and white text 00034 00035 #define RIOSHELL_ERROR 1 00036 00037 // Nova estrutura definindo as opcoes de busca nos logs. 00038 struct SSearchOption 00039 { 00040 const char *Name; 00041 bool IsDispatcher; 00042 int SearchType; 00043 }; 00044 00045 class RioShell : public RioExplorer 00046 { 00047 public: 00048 RioShell( char *, char *, char * = NULL ); 00049 ~RioShell(); 00050 int exec( bool, bool, char *, bool ); 00051 bool connect( void ); 00052 bool showMessage( int, string, string = "" ); 00053 void handle_SIGINT( void ); 00054 00055 private: 00056 // O ultimo parametro e usado para retornar o nome do usuario. Isso e 00057 // para implementar o novo tipo formato user@machinename:pathname. Se 00058 // for passado NULL, o nome do usuario nao sera retornado, mesmo que 00059 // seja fornecido. 00060 int parsePath( char*, char*, char * = NULL ); 00061 int execCMD( CMParser* ); 00062 // Novos parametros do tipo CMParser e unsigned int * foram adicionados 00063 // a esta funcao. Se o parametro CMParser nao for NULL entao, quando for 00064 // necessario pedir uma senha ao processar a sessao, esta senha podera 00065 // ser fornecida em um parametro '-p'. O ponteiro para um inteiro e 00066 // usado para indicar qual opcao '-p' devemos usar (0 para a primeira, 00067 // 1 para a segunda, e assim sucessivamente). Se este ponteiro for NULL, 00068 // entao sempre usaremos a primeira opcao '-p' e, em caso contrario, 00069 // usaremos o parametro '-p' indicado pelo valor apontado pelo ponteiro. 00070 // Alem disso, neste caso, o valor sera atualizado depois de 00071 // processarmos a opcao '-p', para que a proxima chamada a funcao possa 00072 // usar a senha dada pelo proximo parametro '-p'. 00073 bool resolvePathSession( CRioSession **, char *, int *, 00074 CMParser * = NULL, unsigned int * = NULL ); 00075 void clear( void ); 00076 void help( void ); 00077 // A funcao possui agora mais um parametro bool (o penultimo, que 00078 // indica se devemos mostrar, ao listar os arquivos, a taxa de 00079 // transmissao de video (usando a opcao -v do comando ls). 00080 void printLsInfo( vector<ObjectInfo> *, bool, bool, bool, bool, bool, 00081 unsigned int ); 00082 void printDfInfo( vector<DfInfo> *, bool, bool ); 00083 void printDuInfo( vector<DuInfo> *, bool, bool ); 00084 void printSessionsInfo( SessionsInfo * ); 00085 void printDisplayInfo( DisplayInfo *, int, bool ); 00086 void updateCopyProgress( void ); 00087 void setMD5Calculation( char *, bool ); 00088 void setSyncCheck( char *, bool ); 00089 00090 /** 00091 * Funcao usada para executar o novo comando searchlogs que faz buscas 00092 * nos logs dos servidores 00093 * @param SearchOptionName tipo de busca a ser executada. Pode ser 00094 * clientlogs (busca nos logs de clientes conectados) ou trafficlogs 00095 * (busca nos logs dos trafegos de dados). 00096 * @param ServerName ponteiro para o nome do servidor em cujos logs 00097 * desejamos fazer a busca 00098 * @param StrStartTime ponteiro para a string com o tempo inicial para a 00099 * busca (baseado no mesmo principio da funcao time da biblioteca do C, 00100 * isto e, o tempo em segundos desde a Epoch (00:00:00 UTC, Janeiro 1 de 00101 * 1970). 00102 * @param StrEndTime ponteiro para a string com o tempo final para a 00103 * busca, usando a mesma medida do tempo inicial 00104 * @param ResultFileName ponteiro para o nome do arquivo que armazenara 00105 * os resultados, caso a busca seja feita com sucesso. 00106 * @result igual a RIOSHELL_ERROR se algum erro ocorreu ao exdcutar o 00107 * comando ou igual a ERROR_NO_RIO_ERROR em caso contrario. 00108 */ 00109 int SearchLogs( char *SearchOptionName, char *MachineName, 00110 char *StrStartTime, char *StrEndTime, 00111 char *ResultFileName ); 00112 /** 00113 * Funcao de callback usada quando uma busca nos logs terminar a sua 00114 * execucao para desbloquear o shell. 00115 * @param param ponteiro (convertido para void) para o objeto RioShell 00116 * pelo qual a busca foi executada. 00117 * @param result resultado da busca nos logs. 00118 */ 00119 static void SearchLogsCallback( void *param, int result ); 00120 00121 string current_file; 00122 RioObjectSize current_file_completed; 00123 RioObjectSize current_file_size; 00124 00125 char *MachineName; 00126 char *UserName; 00127 char *Password; 00128 bool copy_allowed; 00129 00130 // Novo campo usado para indicar se devemos ou nao mostrar as 00131 // informacoes sobre a taxa de transmissao do video. 00132 bool UseVideoRate; 00133 00134 // Novo campo usado para indicar o estado de uma busca que acabou de 00135 // ser executada. 00136 int SearchLogsResult; 00137 // Novo semaforo usado para bloquear o shell ate que a busca seja 00138 // executada com sucesso (isso e necessario para que a emulacao saiba 00139 // que a busca terminou com sucesso). 00140 CSemaphore *SearchLogsSemaphore; 00141 00142 /* Update progress bar interval (in us) */ 00143 static const int UPDATE_INTERVAL = 50000; 00144 static const int PROGRESS_BAR_WIDTH = 25; 00145 00146 struct 00147 { 00148 char *host; 00149 char *user; 00150 char *password; 00151 } lastRemoteAccess; 00152 }; 00153 00154 #endif 00155