00001 /* 00002 * Copyright (C) 2010, 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 // Unidades usadas do apache 00019 //#include <apr_proc_mutex.h> 00020 #include <apr_thread_proc.h> 00021 00022 #ifndef __RIOMODULETYPES_H_ 00023 #define __RIOMODULETYPES_H_ 00024 00025 // Unidades usadas do RIO. 00026 #include "RioInterfaceTypes.h" 00027 00028 // Definicoes dos tipos MINE do modulo 00029 00030 #define RIOMODULE_MIME "application/x-rio" 00031 #define RIOMODULE_MIME_SIZE 17 00032 #define RIOMODULE_MIME_ERROR "text/html" 00033 #define RIOMODULE_MIME_ERROR_SIZE 9 00034 #define RIOMODULE_MIME_XML "text/xml" 00035 #define RIOMODULE_MIME_XML_SIZE 8 00036 00037 00038 // Campo da resposta http com o nome do servidor usado ao copiar o arquivo. 00039 #define RIOMODULE_HTTP_RIOSERVERNAME "RioServer-Name" 00040 #define RIOMODULE_HTTP_RIOOBJECTNAME "RioObject-Name" 00041 #define RIOMODULE_HTTP_RIOOBJECTSIZE "RioObject-Size" 00042 #define RIOMODULE_HTTP_RIOBLOCKSIZE "RioBlock-Size" 00043 #define RIOMODULE_HTTP_RIOOBJECTTOTALBLOCKS "RioObject-TotalBlocks" 00044 #define RIOMODULE_HTTP_RIOOBJECTSTARTPOSITION "RioObject-StartPosition" 00045 #define RIOMODULE_HTTP_RIOOBJECTENDPOSITION "RioObject-EndPosition" 00046 #define RIOMODULE_HTTP_RIOOBJECTUSEREALTIME "RioObject-UseRealTime" 00047 #define RIOMODULE_HTTP_RIOOBJECTSENDHEADER "RioObject-SendHeader" 00048 #define RIOMODULE_HTTP_FILENAME "Content-Disposition" 00049 00050 // Tempo default para a espera dos blocos na copia em tempo real. 00051 #define DEFAULT_WAITTIME 1000 // Tempo de espera default: 1s. 00052 00053 // Constante definindo o tamanho maximo do buffer usado para armazenar a 00054 // descricao de um erro do apache2. 00055 #define MAXAPACHESTRERRORSIZE 128 00056 00057 // Nome da chave usada para guardamos o ponteiro alocado do objeto com a sessao 00058 // ativa 00059 #define SERVERINTERFACEOBJECTPOINTER "server_interface_object_pointer" 00060 00061 // Constantes com os cabecalhos de cada um dos arquivos de videos para os quais 00062 // cabecalhos devem ser enviados se o byte inicial de envio for maior ou igual 00063 // a zero. 00064 00065 #define FLVX_HEADER "FLV\x1\x1\0\0\0\x9\0\0\0\x9" 00066 #define FLVX_HEADER_LEN (sizeof(FLVX_HEADER)-1) 00067 00068 // Necessario para definir a estrutura com as informacoes da opcao "exec.rio" 00069 class CServerInterface; 00070 00071 // Define o tipo usado para definir o criterio de selecao dos servidores, usando 00072 // as informacoes passadas pelo arquivo .rio 00073 enum ServerSelectionType 00074 { 00075 RIO_SELECTION_RANDOM, // selecionar um servidor aleatorio. 00076 RIO_SELECTION_L_LOAD, // selecionar o servidor com menor carga no ultimo 00077 // instante de observacao. 00078 RIO_SELECTION_MV_AVG, // selecionar o servidor com menor carga segundo um 00079 // calculo de media ponderada movel. 00080 RIO_SELECTION_FIRST // Escolhe o primeiro servidor da lista. Usado quando 00081 // o redirecionamento nao e usado. 00082 }; 00083 00084 // Estrutura com as configuracoes do nosso modulo. O conteudo da estrutura sera 00085 // sempre passado ao fazermos uma requisicao. 00086 // 00087 // Podemos usar a estrutura para armazenar os parametros passados ao modulo, 00088 // se isso for necessario. 00089 // 00090 typedef struct 00091 { 00092 char *Description; // Descricao textual do modulo. 00093 char *ServerName; // Endereco do servidor RIO. 00094 char *RealTimeExtensions; // Extensoes dos arquivos que devem ser 00095 // transmitidos em tempo real. 00096 unsigned int WaitTime; // Tempo de espera para esperar por um bloco 00097 // na copia em tempo real. 00098 unsigned int BufferSize; // Numero maximo de blocos que o buffer pode 00099 // armazenar. 00100 unsigned int LineSize; // Tamanho de cada linha do arquivo .rio. 00101 ServerSelectionType SelectionType; // Tipo de selecao dos servidores do 00102 // arquivo .rio. 00103 unsigned int FragmentSize; // Tamanho dos fragmentos enviados ao cliente (o 00104 // bloco sera, ao ser enviado, dividido em 00105 // fragmentos deste tamanho. 00106 char *User; // Usuario do servidor RIO. 00107 char *Password; // Senha do usuario do servidor RIO. 00108 char *ServersFileName; // Nome do arquivo com os servidores. 00109 char *RedirectName; // Nome usado (sem o .rio) usado para indicar um 00110 // redirecionamento. 00111 char *TransferName; // Nome usado (sem o .rio) para indicar que um arquivo 00112 // deve ser enviado/recebido. 00113 // Armazena o ponteiro para o mutex usado ao acessar a memoria compartilhada 00114 //apr_proc_mutex_t *SharedMemoryMutex; 00115 // Novos campos para salvar os logs de comportamento dos clientes. 00116 unsigned int MaxLogFileSize; // Tamanho maximo do arquivo nao compacato com 00117 // os logs (antes de ele ser compactado e um 00118 // novo arquivo ser criado). 00119 unsigned long long int MaxCombinedLogFilesSize; // Tamanho maximo combinado 00120 // de todos os arquivos de 00121 // log (compactados ou nao). 00122 char *UserLogsPrefixPath; // Caminho completo do prefixo usado pelos nomes 00123 // dos arquivos com os logs (da opcao 00124 // "userlog.rio"). 00125 char *UserLogName; // Nome usado (sem o .rio) para indicar a opcao usada 00126 // para salvar os logs de comportamento do cliente. 00127 char *ExecName; // Nome usado (sem o .rio) para indicar a opcao usada para 00128 // executar os comandos similares ao do riosh. 00129 unsigned int UserLogPort; // Porta UDP usada pelo objeto que salva os logs 00130 // no modulo atraves da opcao "userlog.rio". 00131 unsigned int ExecSessionId; // Valor default para as sessoes criadas pela 00132 // opcao "exec.rio". Se o valor for 0 (o valor 00133 // default, um identificador aleatorio sera 00134 // usado. Em caso contrario, o identificador 00135 // definido por esta opcao sera usado. 00136 char *ExecLogsPrefixPath; // Caminho completo do prefixo usado pelos nomes 00137 // dos arquivos com os logs (da opcao "exec.rio"). 00138 unsigned int ExecLogPort; // Porta UDP usada pelo objeto que salva os logs 00139 // no modulo atraves da opcao "exec.rio"). 00140 } RioModuleConfig; 00141 00142 // Estrurura passada a funcao de finalizacao do processo. 00143 typedef struct 00144 { 00145 apr_proc_t *ProcessInfo; 00146 int LogsServerPort; 00147 } TFinalizeLogsInfo; 00148 00149 // Estrutura com as informacoes do servidor escolhido do arquivo com os 00150 // servidores. 00151 typedef struct 00152 { 00153 char *ServerName; // Nome do servidor onde o modulo esta instalado. 00154 char *RIOServerName; // Nome do servidor RIO usado pelo modulo. 00155 double MaxSessions; // Numero maximo de sessoes. 00156 double MaxAverage; // Media maxima do numero de sessoes. 00157 } RioServerInfo; 00158 00159 // Estrutura com o ponteiro para o objeto do tipo CServerInterface. A estrutura 00160 // e usada pela opcao "exec.rio", usada para executar comandos similares aos do 00161 // riosh. 00162 typedef struct 00163 { 00164 // Armazena o valor da porta local usada pelo cliente (eu nao armazenei o 00165 // ponteiro para o IP pois nao achei necessario). 00166 // 00167 // Obs: Esta porta sempre parece ser a mesma, a do http (80) ou https (443). 00168 int LocalPort; 00169 // Armazena o endereco do ip local. 00170 unsigned int LocalIP; 00171 // Armazena o valor da porta remota usada pelo cliente (eu nao armazenei o 00172 // ponteiro para o IP pois nao achei necessario). 00173 int RemotePort; 00174 // Armazena o endereco do ip local. 00175 unsigned int RemoteIP; 00176 // Ponteiro para o objeto da classe que gerencia a sessao. 00177 CServerInterface *ServerInterface; 00178 } TRioExecInfo; 00179 00180 #endif /* __RIOMODULETYPES_H_*/ 00181