shared_ptr<ndn::Data> NdnDataManager::operator[]( shared_ptr<const ndn::Interest> interest ) { Name subname = interest->getName(); auto it = subname.end()-1; while( ( it->isVersion() || it->isSegment() || it->isSegmentOffset() || it->isTimestamp() || it->isSequenceNumber() ) && ( it-- ) != subname.begin() ); subname = subname.getPrefix( it - subname.begin() + 1 ); if( m_producers.find( subname ) != m_producers.end() ) { // find data producer auto producer = m_producers[subname]; // if access level is 0, no access needs to be provided if( interest->getAuthTag().getAccessLevel() == 0 ) { Coordinator:: producerSatisfiedRequest( interest->getName().getPrefix( 2 ), interest->getName() ); return producer->makeData( interest ); } // generate data packet shared_ptr<Data> data = producer->makeData( interest ); // check that the interest's access rights // satisfy the data's requirements if( m_auth_manager->getTagAccess( interest->getAuthTag() ) < data->getAccessLevel() ) { Coordinator:: producerDeniedRequest( interest->getName().getPrefix( 2 ), interest->getName(), "Insufficient Auth" ); return makeNack( *data ); } // check that the data satisfies interest if( interest->matchesData( *data ) ) { Coordinator:: producerSatisfiedRequest( interest->getName().getPrefix(2), interest->getName() ); return data; } } Coordinator::producerOther( interest->getName().getPrefix( 2 ), "No data matching " + interest->getName().toUri() ); return NULL; };
int main( int argc, const char* argv[] ) { int result; int i = 1; // pq el parametro 0 es el ejecutable char* listBytes; char* listFields; // //esto no va, es para probar // parseList( argv[i], TYPE_BYTES); // itero el vector de parametros while( i<argc ){ if( isVersion( argv[i] ) == 1 ){ _isVersion = 1; } else if( isHelp(argv[i]) == 1 ){ _isHelp = 1; } else if( isBytes(argv[i]) == 1 ){ _isBytes = 1; // Parsear el argv[i+1] y determinar los elementos o rangos i++; listBytes = parseList( argv[i], TYPE_BYTES); } else if( isFields(argv[i]) == 1){ _isFields = 1; // Parsear el argv[i+1] y determinar los elementos o rangos i++; listFields = parseList( argv[i], TYPE_FIELDS); } else if( isDelimiter(argv[i]) == 1 ){ _isDelimiter = 1; // Parsear el argv[i+1] y determinar el delimitador i++; _delimiter = argv[i][0]; // el delimitador es de solo un caracter. Si tiene mas de uno se toma el primero } else if( isIgnore(argv[i]) == 1 ){ _isIgnore = 1; } else{ // argumento invalido!!! _hasInvalidParameters = 1; _invalidParameter = argv[i]; } i++; } // puts(listBytes); // puts(listFields); if (_isFields==1){ //Imprimir lo que corresponda imprimir(listFields, TYPE_FIELDS); } if (_isBytes==1){ //Imprimir lo que corresponda imprimir(listBytes, TYPE_BYTES); } // Sino tiene parametros invalidos, sigo if( _hasInvalidParameters == 0 ){ // ahora me fijo q operacion hay q hacer if( _isVersion == 1 ){ // imprimo version y salgo puts("Imprimo Version!!"); } else if(_isHelp==1){ // imprimo help y salgo puts("Imprimo help!!"); } else if(_isBytes==1){ // hago la operacion del CUT segun el conjunto de bytes previamente parseado // y salgo } else if(_isFields==1){ // hago la operacion del CUT (usando el delimitador seteado o default y el parametro ignore) // con el conjunto de fields previamente parseado y devuelvo el resultado por stdout // y salgo } result = EXIT_SUCCESS; puts("saliendo bien"); } else { // si tiene parametros invalidos salgo result = EXIT_FAILURE; puts( "saliendo mal" ); } puts("saliendo "); /* prints TP 0 */ // puts(result); return result; }