#include <RioServersFile.h>
Public Member Functions | |
CRioServersFile (request_rec *Request, unsigned int LineSize) | |
Construtor da classe, usado para criar um novo objeto para processar os arquivos com as informacoes dos servidores. | |
~CRioServersFile () | |
Destrutor da classe, usado para destruir um objeto da classe. | |
bool | Open (char *FileName) |
Funcao para abrir o arquivo do servidor e inicializar as estruturas internas da classe (com as informacoes sobre os servidores lidas do arquivo). | |
bool | ChooseServer (ServerSelectionType SelectionType, RioServerInfo *ServerInfo) |
Funcao para escolher um dos servidores lidos do arquivo segundo o criterio passado como parametro. | |
void | GetErrors (apr_status_t *ApacheStatus, int *SystemStatus, RioResult *RioStatus) |
Funcao para retornar os codigos de erro caso alguma das funcoes acima retorne false. | |
Private Member Functions | |
void | DeleteServersInfo () |
Funcao para remover a lista com os servidores lidos do arquivo. | |
void | RemoveSpaces (char **Line) |
Funcao para remover os espacos iniciais (' ' e '') e finais de uma linha. | |
bool | ProcessLine (char *FileName, char *Line, unsigned int LineNumber, RioServerInfo *ServerInfo) |
Funcao para processar uma linha do arquivo com as informacoes dos servidores. | |
Private Attributes | |
bool | m_Initialized |
request_rec * | m_Request |
RioServerInfo * | m_ServersInfo |
unsigned int | m_TotalServers |
int | m_BestMaxSessions |
int | m_BestMaxAverage |
unsigned int | m_LineSize |
apr_status_t | m_ApacheStatus |
int | m_SystemStatus |
RioResult | m_RioStatus |
Definition at line 28 of file RioServersFile.h.
CRioServersFile::CRioServersFile | ( | request_rec * | Request, | |
unsigned int | LineSize | |||
) |
Construtor da classe, usado para criar um novo objeto para processar os arquivos com as informacoes dos servidores.
Request | ponteiro para a requisicao do apache associada ao arquivo a ser lido. | |
LineSize | Tamanho maximo de cada linha do arquivo. |
Definition at line 31 of file RioServersFile.cpp.
00032 { 00033 // Inicializa as estruturas da classe. 00034 m_Request = Request; 00035 m_LineSize = LineSize; 00036 m_ServersInfo = NULL; 00037 m_TotalServers = 0; 00038 m_Initialized = false; 00039 m_BestMaxSessions = -1; 00040 m_BestMaxAverage = -1; 00041 00042 // Inicializa a semente randomica (com o tempo atual) 00043 srandom( time( NULL ) ); 00044 }
CRioServersFile::~CRioServersFile | ( | ) |
Destrutor da classe, usado para destruir um objeto da classe.
Definition at line 47 of file RioServersFile.cpp.
00048 { 00049 // Remove a lista com os servidores. 00050 DeleteServersInfo(); 00051 }
bool CRioServersFile::ChooseServer | ( | ServerSelectionType | SelectionType, | |
RioServerInfo * | ServerInfo | |||
) |
Funcao para escolher um dos servidores lidos do arquivo segundo o criterio passado como parametro.
SelectionType | Tipo de selecao que deve ser usada ao escolher os servidores: RIO_SELECTION_RANDOM - servidor escolhido de modo aleatorio. RIO_SELECTION_L_LOAD - servidor com o menor numero maximo de sessoes. RIO_SELECTION_MV_AVG - servidor com o menor numero maximo da media de sessoes. RIO_SELECTION_FIRST - o primeiro servidor da lista e o "melhor". Usado quando enviamos o arquivo para sabermos de qual servidor obteremos o arquivo (que e o mesmo servidor onde o modulo esta executando). | |
ServerInfo | ponteiro para a estrutura que armazenara as informacoes do servidor escolhido. |
Definition at line 484 of file RioServersFile.cpp.
00486 { 00487 // Armazena a posicao do servidor escolhido. 00488 unsigned int ChoosenServer; 00489 00490 // Inicializa a estrutura ServerInfo com as informacoes do servidor 00491 // escolhido. 00492 ServerInfo->ServerName = NULL; 00493 ServerInfo->RIOServerName = NULL; 00494 ServerInfo->MaxSessions = 0; 00495 ServerInfo->MaxAverage = 0; 00496 00497 // Verifica se a classe ja foi inicializada. 00498 if( !m_Initialized ) 00499 { 00500 m_RioStatus = ERROR_RIOMODULE + ERROR_NOT_INITIALIZED; 00501 #ifdef RIO_DEBUG2 00502 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00503 "Error %u (%s): no file was opened", m_RioStatus, 00504 GetErrorDescription( m_RioStatus ).c_str() ); 00505 #endif 00506 00507 return false; 00508 } 00509 00510 // Temos pelo menos um servidor para processar. Logo, escolhemos o 00511 // melhor servidor, segundo o criterio dado em SelectionType. 00512 switch( SelectionType ) 00513 { 00514 case RIO_SELECTION_RANDOM: // Escolhe aleatoriamente um dos servidores 00515 00516 ChoosenServer = random() % m_TotalServers; 00517 break; 00518 00519 case RIO_SELECTION_L_LOAD: // Escolhe o com o menor MaxSessions. 00520 ChoosenServer = m_BestMaxSessions; 00521 break; 00522 00523 case RIO_SELECTION_MV_AVG: // Escolhe o com o menor Maxaverage. 00524 ChoosenServer = m_BestMaxAverage; 00525 break; 00526 case RIO_SELECTION_FIRST: // Escolhe o primeiro da lista. 00527 ChoosenServer = 0; 00528 break; 00529 00530 default: // Tipo invalido: neste caso, geramos um erro. 00531 m_RioStatus = ERROR_RIOMODULE + ERROR_INVALID_PARAM; 00532 00533 #ifdef RIO_DEBUG2 00534 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00535 "Error %u (%s): invalid selection type %u", 00536 m_RioStatus, 00537 GetErrorDescription( m_RioStatus ).c_str(), 00538 SelectionType ); 00539 #endif 00540 00541 return false; 00542 break; 00543 } 00544 00545 // Copia os ponteiros de m_ServersInfo[ ChoosenServer ] para ServerInfo. 00546 ServerInfo->ServerName = m_ServersInfo[ ChoosenServer ].ServerName; 00547 ServerInfo->RIOServerName = m_ServersInfo[ ChoosenServer ].RIOServerName; 00548 ServerInfo->MaxSessions = m_ServersInfo[ ChoosenServer ].MaxSessions; 00549 ServerInfo->MaxAverage = m_ServersInfo[ ChoosenServer ].MaxAverage; 00550 00551 return true; 00552 }
void CRioServersFile::DeleteServersInfo | ( | ) | [private] |
Funcao para remover a lista com os servidores lidos do arquivo.
Definition at line 54 of file RioServersFile.cpp.
00055 { 00056 unsigned int i; 00057 // Destroi o vetor com as informacoes, se estas informacoes foram alocadas. 00058 if( m_ServersInfo != NULL ) 00059 { 00060 for( i = 0; i < m_TotalServers; i++ ) 00061 { 00062 // Remove o nome do servidor em que o modulo esta instalado. 00063 if( m_ServersInfo[ i ].ServerName != NULL ) 00064 free( m_ServersInfo[ i ].ServerName ); 00065 00066 // Remove o nome do servidor usado pelo modulo. 00067 if( m_ServersInfo[ i ].RIOServerName != NULL ) 00068 free( m_ServersInfo[ i ].RIOServerName ); 00069 } 00070 free( m_ServersInfo ); 00071 } 00072 m_ServersInfo = NULL; 00073 m_TotalServers = 0; 00074 }
void CRioServersFile::GetErrors | ( | apr_status_t * | ApacheStatus, | |
int * | SystemStatus, | |||
RioResult * | RioStatus | |||
) |
Funcao para retornar os codigos de erro caso alguma das funcoes acima retorne false.
ApacheStatus | ponteiro para a variavel que recebera o codigo de erro retorado pelas funcoes do apache. | |
SystemStatus | ponteiro para a variavel que recebera o codigo de erro retornado pelas funcoes da biblioteca do sistema. | |
RioStatus | ponteiro para a variavel que recebera o codigo de erro retornado pelas funcoes do RIO. |
Definition at line 556 of file RioServersFile.cpp.
00558 { 00559 *ApacheStatus = m_ApacheStatus; 00560 *SystemStatus = m_SystemStatus; 00561 *RioStatus = m_RioStatus; 00562 }
bool CRioServersFile::Open | ( | char * | FileName | ) |
Funcao para abrir o arquivo do servidor e inicializar as estruturas internas da classe (com as informacoes sobre os servidores lidas do arquivo).
FileName | caminho do arquivo com os servidores. |
Definition at line 300 of file RioServersFile.cpp.
00301 { 00302 // Ponteiro para o identificador do arquivo de servidores. 00303 apr_file_t *fp = NULL; 00304 // Variavel usada para armazenar os retornos das funcoes. 00305 apr_status_t rv; 00306 // String para armazenar uma linha lida do arquivo. 00307 char *Line; 00308 // Variavel para contar o numero atual da linha do arquivo 00309 // (usada somente para impressao). 00310 unsigned int LineNumber; 00311 // Variavel temporaria para armazenar o vetor que esta sendo redimensionado. 00312 RioServerInfo *NewServersInfo; 00313 00314 // Remove a lista anterior, se ela existir. 00315 DeleteServersInfo(); 00316 00317 // Define que a classe nao esta inicializada. 00318 m_Initialized = false; 00319 00320 // Tenta alocar o buffer, usado para ler uma das linhas do arquivo 00321 Line = ( char * ) malloc( sizeof( char ) * ( m_LineSize + 1 ) ); 00322 if( Line == NULL ) 00323 { 00324 m_SystemStatus = ENOMEM; 00325 00326 #ifdef RIO_DEBUG2 00327 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00328 "Error %u (%s) allocating Line buffer for file %s", 00329 m_SystemStatus, strerror( m_SystemStatus ), FileName ); 00330 #endif 00331 00332 return false; 00333 } 00334 00335 // Abre o arquivo com os nomes dos servidores. 00336 rv = apr_file_open( &fp, FileName, APR_READ, APR_OS_DEFAULT, 00337 m_Request->pool ); 00338 if( rv != APR_SUCCESS ) 00339 { 00340 m_ApacheStatus = rv; 00341 00342 #ifdef RIO_DEBUG2 00343 ap_log_rerror( APLOG_MARK, APLOG_ERR, m_ApacheStatus, m_Request, 00344 "Unable to open module servers file %s", FileName ); 00345 #endif 00346 00347 return false; 00348 } 00349 00350 // Inicializa as variaveis, antes da leitura do arquivo. 00351 m_ServersInfo = NULL; 00352 m_TotalServers = 0; 00353 LineNumber = 1; 00354 m_BestMaxSessions = -1; 00355 m_BestMaxAverage = -1; 00356 00357 // Le o arquivo linha por linha. 00358 while( ( rv = apr_file_gets( Line, m_LineSize, fp ) ) != APR_EOF ) 00359 { 00360 00361 if( rv != APR_SUCCESS ) 00362 { 00363 m_ApacheStatus = rv; 00364 00365 rv = apr_file_close( fp ); 00366 if( rv != APR_SUCCESS ) 00367 m_ApacheStatus = rv; 00368 00369 #ifdef RIO_DEBUG2 00370 ap_log_rerror( APLOG_MARK, APLOG_ERR, m_ApacheStatus, m_Request, 00371 "Unable to read module servers file %s", FileName ); 00372 #endif 00373 00374 return rv; 00375 } 00376 00377 // Remove os espacos iniciais e finais da linha lida. 00378 RemoveSpaces( &Line ); 00379 // Somente processamos a linha se nao for uma linha de comentario e que 00380 // nao for vazia. Como removemos os espacos iniciais e finais, esta 00381 // linha deve comcecar com o caractere '#' ou ter tamanho nulo. 00382 if( ( strlen( Line ) > 0 ) && ( Line[ 0 ] != '#' ) ) 00383 { 00384 // Aloca um novo registro para o novo servidor 00385 NewServersInfo = ( RioServerInfo * ) realloc( m_ServersInfo, 00386 sizeof( RioServerInfo ) 00387 * ( m_TotalServers + 1 ) ); 00388 if( NewServersInfo == NULL ) 00389 { 00390 m_ApacheStatus = apr_file_close( fp ); 00391 m_SystemStatus = ENOMEM; 00392 00393 #ifdef RIO_DEBUG2 00394 ap_log_rerror( APLOG_MARK, APLOG_ERR, m_ApacheStatus, m_Request, 00395 "Error %u (%s) processing line %s of file %s", 00396 m_SystemStatus, strerror( m_SystemStatus ), 00397 Line, FileName ); 00398 #endif 00399 00400 return false; 00401 } 00402 m_ServersInfo = NewServersInfo; 00403 // Incrementa o contador com o numero de servidores. 00404 m_TotalServers++; 00405 00406 // Tenta processar a linha. 00407 if( !ProcessLine( FileName, Line, LineNumber, 00408 &m_ServersInfo[ m_TotalServers - 1 ] ) ) 00409 { 00410 m_ApacheStatus = apr_file_close( fp ); 00411 00412 #ifdef RIO_DEBUG2 00413 ap_log_rerror( APLOG_MARK, APLOG_ERR, m_ApacheStatus, m_Request, 00414 "Error processing line %s of file %s", Line, 00415 FileName ); 00416 #endif 00417 00418 return false; 00419 } 00420 00421 #ifdef RIO_DEBUG2 00422 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00423 "Line info: ServerName = %s, RIOServerName = %s " 00424 "MaxSessions = %f, MaxAverage = %f", 00425 m_ServersInfo[ m_TotalServers - 1 ].ServerName, 00426 m_ServersInfo[ m_TotalServers - 1 ].RIOServerName, 00427 m_ServersInfo[ m_TotalServers - 1 ].MaxSessions, 00428 m_ServersInfo[ m_TotalServers - 1 ].MaxAverage ); 00429 00430 #endif 00431 // Atualiza o servidor com o menor valor para MaxSessions. 00432 if( ( m_BestMaxSessions == -1 ) || 00433 ( ( m_ServersInfo[ m_TotalServers - 1 ].MaxSessions < 00434 m_ServersInfo[ m_BestMaxSessions ].MaxSessions ) ) ) 00435 m_BestMaxSessions = m_TotalServers - 1; 00436 00437 // Atualiza o servidor com o menor valor para MaxAverage. 00438 if( ( m_BestMaxAverage == -1 ) || 00439 ( ( m_ServersInfo[ m_TotalServers - 1 ].MaxAverage < 00440 m_ServersInfo[ m_BestMaxAverage ].MaxAverage ) ) ) 00441 m_BestMaxAverage = m_TotalServers - 1; 00442 } 00443 // Atualiza o contador de linha para a proxima linha. 00444 LineNumber++; 00445 } 00446 00447 // Fecha o arquivo. 00448 rv = apr_file_close( fp ); 00449 if( rv ) 00450 { 00451 m_ApacheStatus = rv; 00452 00453 #ifdef RIO_DEBUG2 00454 ap_log_rerror( APLOG_MARK, APLOG_ERR, m_ApacheStatus, m_Request, 00455 "Unable to close module servers file %s", FileName ); 00456 #endif 00457 00458 return false; 00459 } 00460 00461 // Verifica se lemos pelo menos um nome de servidor do arquivo. 00462 if( m_TotalServers == 0 ) 00463 { 00464 m_RioStatus = ERROR_RIOMODULE + ERROR_SERVER_NOT_DEFINED; 00465 00466 #ifdef RIO_DEBUG2 00467 ap_log_rerror( APLOG_MARK, APLOG_ERR, m_ApacheStatus, m_Request, 00468 "Unable to close module servers file %s", FileName ); 00469 #endif 00470 00471 return false; 00472 } 00473 else 00474 { 00475 // Informa que a classe foi corretamente inicializada. 00476 m_Initialized = true; 00477 00478 return true; 00479 } 00480 }
bool CRioServersFile::ProcessLine | ( | char * | FileName, | |
char * | Line, | |||
unsigned int | LineNumber, | |||
RioServerInfo * | ServerInfo | |||
) | [private] |
Funcao para processar uma linha do arquivo com as informacoes dos servidores.
FileName | ponteiro para o nome do arquivo de onde a linha se originou (isso e usado somente para a impressao de erros). | |
Line | ponteiro para linha a ser processada. | |
LineNumber | numero desta linha em FileName (tambem usado somente para impressao de erros). | |
ServerInfo | ponteiro para estrutura que recebera as informacoes processadas da linha. |
Definition at line 108 of file RioServersFile.cpp.
00111 { 00112 // Define identificadores para cada um dos parametros. O Nome parametro 00113 // RIOSERVERNAME foi colocado para armazenar, no arquivo, o nome do servidor 00114 // RIO associado ao modulo (que pode ou nao ser igual a SERVERNAME, porque o 00115 // modulo nao esta necessariamente na mesma maquina do servidor RIO). Este 00116 // novo parametro, por enquanto, nao e usado, mas ainda assim o coloquei na 00117 // estrutura, para ser usado futuramente, se necessario. 00118 enum ParamType 00119 { 00120 SERVERNAME, 00121 RIOSERVERNAME, 00122 MAXSESSIONS, 00123 MAXAVERAGE, 00124 NOTUSED 00125 }; 00126 00127 // Indica a posicao do parametro que estamos atualmente avaliando. 00128 ParamType Param; 00129 // Indica a posicao em que estamos na Linha. 00130 unsigned int LinePos; 00131 // Salva a posicao de inicio do parametro atualmente avaliado. 00132 unsigned int ParamPos; 00133 // Armazena o tamanho real da linha. 00134 unsigned int LineSize; 00135 00136 // Inicializa os parametros e os campos da estrutura. 00137 Param = SERVERNAME; 00138 ServerInfo->ServerName = NULL; 00139 ServerInfo->RIOServerName = NULL; 00140 ServerInfo->MaxSessions = 0; 00141 ServerInfo->MaxAverage = 0; 00142 LinePos = 0; 00143 LineSize = strlen( Line ); 00144 00145 // Comeca o processamento da linha. 00146 while( LinePos < LineSize ) 00147 { 00148 // Salta os espacos iniciais do parametro atualmente processado. 00149 while( ( LinePos < LineSize ) && 00150 ( ( Line[ LinePos ] == ' ' ) || ( Line[ LinePos ] == '\t' ) || 00151 ( Line[ LinePos ] == '\n' ) ) ) 00152 LinePos++; 00153 ParamPos = LinePos; 00154 // Procura pelo final do parametro atualmente processado. 00155 while( ( LinePos < LineSize ) && ( Line[ LinePos ] != ' ' ) && 00156 ( Line[ LinePos ] != '\n' ) && ( Line[ LinePos ] != '\t' ) ) 00157 LinePos++; 00158 // Verificamos se temos algum parametro. 00159 if( ParamPos < LineSize ) 00160 { 00161 // Delimita o parametro atual. 00162 Line[ LinePos ] = 0; 00163 // Atualiza o ponteiro para apontar para o proximo parametro 00164 // (se ele existir). 00165 LinePos++; 00166 00167 #ifdef RIO_DEBUG2 00168 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00169 "File %s(%u:%u): processing parameter %s", 00170 FileName, LineNumber, ParamPos + 1, &Line[ ParamPos ] 00171 ); 00172 #endif 00173 00174 // Processa o parametro, de acordo com o seu tipo. 00175 switch( Param ) 00176 { 00177 case SERVERNAME: 00178 ServerInfo->ServerName = strdup( &Line[ ParamPos ] ); 00179 if( ServerInfo->ServerName == NULL ) 00180 { 00181 m_SystemStatus = ENOMEM; 00182 00183 #ifdef RIO_DEBUG2 00184 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00185 "File %s(%u:%u): error %u (%s) " 00186 "allocating ServerName", FileName, 00187 LineNumber, ParamPos + 1, m_SystemStatus, 00188 strerror( m_SystemStatus ) ); 00189 #endif 00190 00191 return false; 00192 } 00193 Param = RIOSERVERNAME; 00194 break; 00195 // Novo parametro, usado para armazenar o nome do servidor usado 00196 // pelo modulo. 00197 case RIOSERVERNAME: 00198 ServerInfo->RIOServerName = strdup( &Line[ ParamPos ] ); 00199 if( ServerInfo->RIOServerName == NULL ) 00200 { 00201 m_SystemStatus = ENOMEM; 00202 00203 #ifdef RIO_DEBUG2 00204 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00205 "File %s(%u:%u): error %u (%s) " 00206 "allocating RIOServerName", FileName, 00207 LineNumber, ParamPos + 1, m_SystemStatus, 00208 strerror( m_SystemStatus ) ); 00209 #endif 00210 00211 return false; 00212 } 00213 Param = MAXSESSIONS; 00214 break; 00215 case MAXSESSIONS: 00216 errno = 0; 00217 ServerInfo->MaxSessions = strtod( &Line[ ParamPos ], NULL ); 00218 if( errno != 0 ) 00219 { 00220 m_SystemStatus = errno; 00221 00222 #ifdef RIO_DEBUG2 00223 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00224 "File %s(%u:%u): error %u (%s) " 00225 "converting MaxSessions", FileName, 00226 LineNumber, ParamPos + 1, m_SystemStatus, 00227 strerror( m_SystemStatus ) ); 00228 #endif 00229 00230 return false; 00231 } 00232 Param = MAXAVERAGE; 00233 break; 00234 case MAXAVERAGE: 00235 errno = 0; 00236 ServerInfo->MaxAverage = strtod( &Line[ ParamPos ], NULL ); 00237 if( errno != 0 ) 00238 { 00239 m_SystemStatus = errno; 00240 00241 #ifdef RIO_DEBUG2 00242 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00243 "File %s(%u:%u): error %u (%s) " 00244 "converting MaxAverage", FileName, 00245 LineNumber, ParamPos + 1, m_SystemStatus, 00246 strerror( m_SystemStatus ) ); 00247 #endif 00248 00249 return false; 00250 } 00251 Param = NOTUSED; 00252 break; 00253 default: // NOTUSED 00254 #ifdef RIO_DEBUG2 00255 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00256 "File %s(%u:%u): discarded additional " 00257 "parameter %s", FileName, LineNumber, 00258 ParamPos + 1, &Line[ ParamPos ] ); 00259 #endif 00260 break; 00261 } 00262 } 00263 } 00264 00265 // Verifica se processamos todos os parametros da linha. 00266 if( Param != NOTUSED ) 00267 { 00268 m_RioStatus = ERROR_RIOMODULE + ERROR_INVALID_PARAM; 00269 00270 #ifdef RIO_DEBUG2 00271 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00272 "File %s(%u) not enoungh params: error %u (%s) ", 00273 FileName, LineNumber, m_RioStatus, 00274 GetErrorDescription( m_RioStatus ).c_str() ); 00275 #endif 00276 00277 // Deleta o nome do servidor onde esta instalado o modulo, se ele foi 00278 // criado. 00279 if( ServerInfo->ServerName != NULL ); 00280 free( ServerInfo->ServerName ); 00281 00282 // Deleta o nome do servidor usado pelo modulo, se ele foi criado. 00283 if( ServerInfo->RIOServerName != NULL ); 00284 free( ServerInfo->RIOServerName ); 00285 00286 // Define os campos de ServerInfo como nao-inicializados. 00287 ServerInfo->ServerName = NULL; 00288 ServerInfo->RIOServerName = NULL; 00289 ServerInfo->MaxSessions = 0; 00290 ServerInfo->MaxAverage = 0; 00291 00292 return false; 00293 } 00294 else 00295 return true; 00296 }
void CRioServersFile::RemoveSpaces | ( | char ** | Line | ) | [private] |
Funcao para remover os espacos iniciais (' ' e '') e finais de uma linha.
Line | ponteiro para um ponteiro com a linha que desejamos remover os espacos. |
Definition at line 77 of file RioServersFile.cpp.
00078 { 00079 char *End; 00080 00081 #ifdef RIO_DEBUG2 00082 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00083 "Before removing spaces: %s", *Line ); 00084 #endif 00085 00086 // Remove os espacos no inicio da string. 00087 while( ( strlen( *Line ) > 1 ) && 00088 ( ( **Line == ' ' ) || ( **Line == '\t' ) ) ) 00089 ( *Line )++; 00090 00091 // Remove os espacos no final da string. 00092 End = &( *Line )[ strlen( *Line ) - 1 ]; 00093 while( ( strlen( *Line ) > 1 ) && 00094 ( ( *End == ' ' ) || ( *End == '\t' ) ) ) 00095 { 00096 *End = 0; 00097 End--; 00098 } 00099 00100 #ifdef RIO_DEBUG2 00101 ap_log_rerror( APLOG_MARK, APLOG_ERR, 0, m_Request, 00102 "After removing spaces: %s", *Line ); 00103 #endif 00104 }
apr_status_t CRioServersFile::m_ApacheStatus [private] |
Definition at line 51 of file RioServersFile.h.
int CRioServersFile::m_BestMaxAverage [private] |
Definition at line 46 of file RioServersFile.h.
int CRioServersFile::m_BestMaxSessions [private] |
Definition at line 43 of file RioServersFile.h.
bool CRioServersFile::m_Initialized [private] |
Definition at line 33 of file RioServersFile.h.
unsigned int CRioServersFile::m_LineSize [private] |
Definition at line 48 of file RioServersFile.h.
request_rec* CRioServersFile::m_Request [private] |
Definition at line 35 of file RioServersFile.h.
RioResult CRioServersFile::m_RioStatus [private] |
Definition at line 55 of file RioServersFile.h.
RioServerInfo* CRioServersFile::m_ServersInfo [private] |
Definition at line 38 of file RioServersFile.h.
int CRioServersFile::m_SystemStatus [private] |
Definition at line 53 of file RioServersFile.h.
unsigned int CRioServersFile::m_TotalServers [private] |
Definition at line 40 of file RioServersFile.h.