int Parser(clientSock *client,requestLine *argu) { char cmpletReq[BUF_SIZE]; if(bufParse(client,argu,cmpletReq)==1) { if( (cmpletReq != NULL) && argu->status != 411) { httpParser(cmpletReq,argu); } return 1; } else{ return 0; } }
bool CCommand::Tokenize( const char *pCommand, characterset_t *pBreakSet ) { Reset(); if ( !pCommand ) return false; // Use default break set if ( !pBreakSet ) { pBreakSet = &s_BreakSet; } // Copy the current command into a temp buffer // NOTE: This is here to avoid the pointers returned by DequeueNextCommand // to become invalid by calling AddText. Is there a way we can avoid the memcpy? int nLen = Q_strlen( pCommand ); if ( nLen >= COMMAND_MAX_LENGTH - 1 ) { Warning( "CCommand::Tokenize: Encountered command which overflows the tokenizer buffer.. Skipping!\n" ); return false; } memcpy( m_pArgSBuffer, pCommand, nLen + 1 ); // Parse the current command into the current command buffer CUtlBuffer bufParse( m_pArgSBuffer, nLen, CUtlBuffer::TEXT_BUFFER | CUtlBuffer::READ_ONLY ); int nArgvBufferSize = 0; while ( bufParse.IsValid() && ( m_nArgc < COMMAND_MAX_ARGC ) ) { char *pArgvBuf = &m_pArgvBuffer[nArgvBufferSize]; int nMaxLen = COMMAND_MAX_LENGTH - nArgvBufferSize; int nStartGet = bufParse.TellGet(); int nSize = bufParse.ParseToken( pBreakSet, pArgvBuf, nMaxLen ); if ( nSize < 0 ) break; // Check for overflow condition if ( nMaxLen == nSize ) { Reset(); return false; } if ( m_nArgc == 1 ) { // Deal with the case where the arguments were quoted m_nArgv0Size = bufParse.TellGet(); bool bFoundEndQuote = m_pArgSBuffer[m_nArgv0Size-1] == '\"'; if ( bFoundEndQuote ) { --m_nArgv0Size; } m_nArgv0Size -= nSize; Assert( m_nArgv0Size != 0 ); // The StartGet check is to handle this case: "foo"bar // which will parse into 2 different args. ArgS should point to bar. bool bFoundStartQuote = ( m_nArgv0Size > nStartGet ) && ( m_pArgSBuffer[m_nArgv0Size-1] == '\"' ); Assert( bFoundEndQuote == bFoundStartQuote ); if ( bFoundStartQuote ) { --m_nArgv0Size; } } m_ppArgv[ m_nArgc++ ] = pArgvBuf; if( m_nArgc >= COMMAND_MAX_ARGC ) { Warning( "CCommand::Tokenize: Encountered command which overflows the argument buffer.. Clamped!\n" ); } nArgvBufferSize += nSize + 1; Assert( nArgvBufferSize <= COMMAND_MAX_LENGTH ); } return true; }