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 * Thanks: Jose Renato Santos 00017 * 00018 */ 00019 00020 /////////////////////////////////////////////////////////////////////////////// 00021 // routerinterface.h : Defines class CRouterInterface, which 00022 // implements the communication with router 00023 /////////////////////////////////////////////////////////////////////////////// 00024 00025 #ifndef __ROUTERINTERFACE_H_ 00026 #define __ROUTERINTERFACE_H_ 00027 00028 #include <vsitypesint.h> 00029 #include <vsisocket.h> 00030 #include <vsithread.h> 00031 00032 #include <msgrouterstorage.h> 00033 #include <msgqueue.h> 00034 00035 00036 class CRouterInterface 00037 { 00038 public: 00039 CRouterInterface(); 00040 ~CRouterInterface(); 00041 int Initialize (u16 LocalPort, char *LogsDirectory); 00042 void Stop (); 00043 void Send(StrMsg* Msg); 00044 private: 00045 static void* WaitThread (void* Param); 00046 static void* TxThread (void* Param); 00047 static void* RxThread (void* Param); 00048 void ProcessMsg(StrMsg* Elem); 00049 void ProcessNew(StrMsg* Elem); 00050 void ProcessPending(StrMsg* Elem); 00051 void SendNodeInfo(StrMsg* Msg); 00052 void SendDiskInfo(StrMsg* Msg, int Disk); 00053 void ProcessCancel(StrMsg* Elem); 00054 void SendDiskServiceTimeInfo( StrMsg* Elem, int Disk, int DiskId); 00055 void SendStatus (StrMsg* Msg, u16 Type, u32 RouterId, s32 Error); 00056 00057 /** 00058 * Processa a mensagem de inicializacao recebida pelo servidor de 00059 * despacho. 00060 * @param Elem ponteiro para a estrutura onde esta armazenada a 00061 * mensagem a ser processada. 00062 * @param Restart valor booleano que indica se esta e a primeira 00063 * mensagem enviada pelo servidor de gerenciamento ou se e uma nova 00064 * mensagem (indicando que o servidor de gerenciamento caiu e depois 00065 * voltou). 00066 */ 00067 void ProcessInitialization( StrMsg* Elem, bool Restart ); 00068 00069 /** 00070 * Funcao para enviar, ao servidor de despacho, a confirmacao de que a 00071 * inicializacao do servidor de armazenamento foi feita com sucesso. 00072 * @param Elem ponteiro para a estrutura onde esta armazenada a mensagem 00073 * a ser enviada. 00074 */ 00075 void SendConfirmation( StrMsg* Elem ); 00076 /** 00077 * Funcao para processar a mensagem que inicializa uma solicitacao de 00078 * busca nos logs do servidor de armazenamento. 00079 * @param Elem ponteiro para a estrutura onde esta armazenada a mensagem 00080 * com os parametros usados pela inicializacao. Esta mensagem, do tipo 00081 * MsgRSSStartSearchInLogsReq, contem o tipo da busca, o tempo inicial, 00082 * o tempo final, o par IP, porta UDP do cliente (para o qual devemos 00083 * enviar o resultado da busca) e o identificador usado ao enviar a 00084 * resposta da busca. 00085 */ 00086 void ProcessStartSearchInLogs( StrMsg* Elem ); 00087 /** 00088 * Funcao para obter um dos blocos de um dos arquivos com o resultado de 00089 * uma busca executada nos logs do servidor de armazenamento. 00090 * @param Elem ponteiro para a estrutura onde esta armazenada a mensagem 00091 * com os parametros usados pela inicializacao. Esta mensagem, do tipo 00092 * MsgRSSBlockSearchFileReq, contem o identificador do arquivo, o 00093 * numero do bloco, o par IP, porta UDP do cliente (para o qual devemos 00094 * enviar o resultado da busca) e o identificador usado ao enviar o 00095 * bloco ao cliente. 00096 */ 00097 void ProcessBlockSearchFile( StrMsg* Elem ); 00098 /** 00099 * Funcao para remover um um dos arquivos com o resultado de uma busca 00100 * executada nos logs do servidor de armazenamento. 00101 * @param Elem ponteiro para a estrutura onde esta armazenada a mensagem 00102 * com os parametros usados pela inicializacao. Esta mensagem, do tipo 00103 * MsgRSSRemoveSearchFileReq, contem o identificador do arquivo e o par 00104 * IP, porta UDP do cliente. 00105 */ 00106 void ProcessRemoveSearchFile( StrMsg* Elem ); 00107 #ifdef RIO_DEBUG2 00108 /** 00109 * Funcao para enviar, ao servidor de despacho, o resultado de uma 00110 * das solicitacoes associadas a uma busca nos logs (inicio de uma 00111 * busca, pedido de um bloco de um arquivo com os resultados ou remocao 00112 * de um arquivo com os resultados). 00113 * Obs: Atualmente esta funcao somente e usada para fins de depuracao 00114 * do codigo. 00115 * @param Elem ponteiro para a estrutura onde esta armazenada a mensagem 00116 * a ser enviada. 00117 * @param ClientIP IP do cliente que gerou a mensagem de busca (usada 00118 * para enviar um erro do tipo TYPE_RST para o cliente abortar em caso 00119 * de erro - somente ao enviar o pedido de inicializacao de busca ou 00120 * ao enviar um bloco ao cliente - ). 00121 * @param ClientPort Porta do cliente (para maiores detalhes, veja o 00122 * campo ClientIP). 00123 * @param ClientId identificador usado pela solicitacao (somente de 00124 * inicio da busca ou de envio de blocos). 00125 * @param ResultType tipo da mensagem associada ao resultado. 00126 * @param Status codigo retornado ao executar a solicitacao (o mesmo 00127 * valor retornado pelas funcoes da classe SearchLogs). 00128 */ 00129 void SendSearchLogsStatus( StrMsg* Elem, u32 ClientIP, u16 ClientPort, 00130 u32 ClientId, u16 ResultType, s32 Status ); 00131 #endif 00132 00133 CvsiTCPwait m_Connection; 00134 CvsiTCPsocket* m_Socket; 00135 CvsiThread m_WaitThread; 00136 CvsiThread m_TxThread; 00137 CvsiThread m_RxThread; 00138 CMsgQueue m_TxQueue; 00139 int m_Status; 00140 int m_ConnectionActive; 00141 int m_DisconnectFlag; 00142 CvsiCondition m_ConnectCondition; 00143 CvsiCondition m_DisconnectCondition; 00144 /** Nova variavel usada para verificar se o objeto RequestManager ja 00145 * foi inicializado. */ 00146 bool m_InitializedRequestManager; 00147 /** Nova variavel usada para armazenar o caminho em que os logs do 00148 * servidor de armazenamento sao armazenados (usada ao inicializarmos 00149 * o objeto de busca nos logs). */ 00150 char *m_LogsDirectory; 00151 }; 00152 00153 #endif /* __ROUTERINTERFACE_H_ */