bool GrupPacket::packetHandler ( __rawNetData__ * packetData ){ #ifdef DEBUG std::cout<<PRINT<<" Source Ip ["<<packetData->sourceIp<<" ] Destination Ip [ "<<packetData->destinationIp <<" ]\nSourcePOrt [ "<<packetData->sourcePort<<" ] \nDestinationPOrt [" <<packetData->destinationPort<<" ] \nSequence Number [ "<<packetData->sequenceNumber <<"] \n AcknowledgeNumber: [ "<<packetData->acknowledgeNumber<<"]\n Flags\n ACK [ " <<packetData->networkTcpFlags.__ACK__<<" ] \n SYN[ "<<packetData->networkTcpFlags.__SYN__ <<" ] \n FIN"<<packetData->networkTcpFlags.__FIN__<<" ] Data Length:[ " <<packetData->dataLength<<std::endl; #endif bool returnValue; returnValue = true; if ( packetData->networkTcpFlags.__SYN__ || packetData->networkTcpFlags.__FIN__ ){ isSynFin = true; return true; } if ( packetData->destinationPort == Init::configuration.port ){// 3306 ){ //check whether the packet is acknowledgement packet or not //for acknwledgement packet length of the packet is [0] and ACK flag [ set] std::cout<<PRINT<<"Outgoing Packet"<<std::endl; if ( packetData->dataLength ==0 && packetData->networkTcpFlags.__ACK__ ){ if ( isSynFin ){ return true; } std::cout<<PRINT<<" ACK FLAG ON-- OUTGOING \n"; if ( validPack ( false , &conversationDiary [ activeConversationId ] , packetData ) ){ std::cout<<PRINT<<"VALID ACK -- OUTGOING PACKET \n"; //insertData into database ( true , activeConversationId , ++packetNumber , packetData ); returnValue = copyPacket ( true , &conversationDiary [ activeConversationId ] , packetData ); returnValue == true ?returnValue = insertDb( packetData , false , true ): returnValue = false; }else{ std::cout<<PRINT<<" ACK PACKET NOT VALID--- OUTGOING\n"; returnValue = false; } }else if ( searchMother ( false , &conversationDiary [ activeConversationId ] , packetData ) && !lastDb ){ std::cout<<PRINT<<" CONSICUTIEVE PACKETS-- OUTGOING \n"; returnValue = copyPacket( true , &conversationDiary[ activeConversationId ], packetData ); if ( packetData->networkTcpFlags.__ACK__ ) returnValue == true ?returnValue = insertDb( packetData , false , true ):returnValue = false ; returnValue == true ?returnValue = insertDb( packetData , false ):returnValue = false ; //insert the packet } //it's a new packet--start conversation else { std::cout<<"It's a fresh Outgoing Packet"<<std::endl; lastDb = false; // packetNumber = 0; returnValue = copyPacket( true , &conversationDiary [ ++activeConversationId ] , packetData ); returnValue == true ?returnValue = insertDb( packetData , true ):returnValue = false ; //insertpacketSetting( true , ++packet); } }else if ( packetData->sourcePort == Init::configuration.port ){// 3306 ){ std::cout<<PRINT<<" IN COMING PACKET \n"; if ( packetData ->dataLength == 0 && packetData->networkTcpFlags.__ACK__ ) { if ( isSynFin ){ return true;} std::cout<<PRINT<<"IT;S ACK PACKET -- IN COMING \n"; if ( validPack ( true , &conversationDiary [ activeConversationId] , packetData ) ){ std::cout<<"VALID ACK RESPONSE PACKET -- IN COMING"<<std::endl; returnValue = copyPacket( false , &conversationDiary [ activeConversationId ] , packetData ); returnValue == true ?returnValue = insertDb( packetData , false , true ):returnValue = false ; }else{ std::cerr<<PRINT<<" ACK PACKET NOT VALID-- IN COMING\n"; returnValue = false; } }else if ( searchMother ( true , &conversationDiary [activeConversationId ] , packetData ) ){ std::cout<<PRINT<<"CONTIMNIOUS PACKET--- IN COMING"<<std::endl; returnValue = copyPacket( false , &conversationDiary [ activeConversationId ], packetData ); if ( packetData->networkTcpFlags.__ACK__ ) returnValue == true ?returnValue = insertDb( packetData , false , true ):returnValue = false ; else returnValue == true ?returnValue = insertDb( packetData , false ):returnValue = false ; } // after sending a request client may get a request response without ACK else {// freash packet std::cout<<"FRESH PACKET -- INCOMING"<<std::endl; // packetNumber = 0; if( isSynFin ) lastDb = true; returnValue = copyPacket ( false , &conversationDiary[ ++activeConversationId ] , packetData ); returnValue == true ?returnValue = insertDb( packetData , true):returnValue = false ; } } isSynFin = false; return returnValue; }
int main(int argc, char *argv[]){ if (argc < 2){ puts("Usage: db [FILE]"); return -1; } Node list; list = readDatabase(argv[1]); puts("Welcome to"); puts(" ____ ____ "); puts("/\\ _`\\ /\\ _`\\ "); puts("\\ \\ \\/\\ \\ \\ \\L\\ \\ "); puts(" \\ \\ \\ \\ \\ \\ _ <\\ "); puts(" \\ \\ \\_\\ \\ \\ \\L\\ \\ "); puts(" \\ \\____/\\ \\____/ "); puts(" \\/___/ \\/___/ "); puts(""); // Main loop int choice = -1; while(choice != 0) { puts("Please choose an operation"); puts("1. Query a key"); puts("2. Update an entry"); puts("3. New entry"); puts("4. Remove entry"); puts("5. Print database"); puts("0. Exit database"); printf("? "); scanf("%d", &choice); while(getchar() != '\n'); // Clear stdin //int found; // Node cursor; char buffer[128]; switch(choice){ case 1: //query queryDb(list, buffer); break; case 2: //update updateDb(list, buffer); break; case 3: //insert list = insertDb(list, buffer, buffer, 1); break; case 4: // Delete list = deleteDb(list, buffer); break; case 5: //print printDb(list); break; case 0: //Fel - prova igen // Exit puts("Good bye!"); break; default: // Please try again puts("Could not parse choice! Please try again"); } puts(""); } return 0; }