CRioServersFile Class Reference

#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
RioServerInfom_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

Detailed Description

Definition at line 28 of file RioServersFile.h.


Constructor & Destructor Documentation

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.

Parameters:
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 }


Member Function Documentation

bool CRioServersFile::ChooseServer ( ServerSelectionType  SelectionType,
RioServerInfo ServerInfo 
)

Funcao para escolher um dos servidores lidos do arquivo segundo o criterio passado como parametro.

Parameters:
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.
Returns:
true se foi possivel escolher o melhor servidor segundo o criterio escolhido, ou false se algum erro ocorreu durante o processamento (os erros, neste caso, devem ser obtidos pela funcao GetErrors).

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.

Parameters:
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).

Parameters:
FileName caminho do arquivo com os servidores.
Returns:
true se o arquivo foi aberto e processado com sucesso ou false se algum erro ocorreu durante o processamento (os erros, neste caso, devem ser obtidos pela funcao GetErrors).

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.

Parameters:
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.
Returns:
true se a linha foi processada com sucesso ou false se algum erro ocorreu durante o processamento.

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.

Parameters:
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 }


Field Documentation

apr_status_t CRioServersFile::m_ApacheStatus [private]

Definition at line 51 of file RioServersFile.h.

Definition at line 46 of file RioServersFile.h.

Definition at line 43 of file RioServersFile.h.

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.

Definition at line 55 of file RioServersFile.h.

Definition at line 38 of file RioServersFile.h.

Definition at line 53 of file RioServersFile.h.

unsigned int CRioServersFile::m_TotalServers [private]

Definition at line 40 of file RioServersFile.h.


The documentation for this class was generated from the following files:
Generated on Wed Jul 4 16:03:33 2012 for RIO by  doxygen 1.6.3