Changeset 445

Show
Ignore:
Timestamp:
08/28/09 16:53:43 (15 years ago)
Author:
bhilburn
Message:

55% done with code cleanup. Discovered a variable scoping issue that is
likely affecting code behavoir - leaving unchanged for now (see var 't'
on 827).

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • vtcross/trunk/src/service_management_layer/ServiceManagementLayer.cpp

    r444 r445  
    8888{ 
    8989    for(size_t i = 0; i < argc; i++) { 
    90         printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); 
    91     } 
    92  
    93     printf("\n"); 
     90        LOG("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); 
     91    } 
     92 
     93    LOG("\n"); 
    9494    return 0; 
     95} 
     96 
     97/* Useful for spotchecking what's in the database */ 
     98void 
     99printDatabase()  
     100{ 
     101    /* 
     102    LOG("\n\n\n"); 
     103    strcpy(_data_DB->command, "select "); 
     104    strcat(_data_DB->command, _data_DB->tablename); 
     105    strcat(_data_DB->command, ".* from "); 
     106    strcat(_data_DB->command, _data_DB->tablename); 
     107    strcat(_data_DB->command, ";"); 
     108 
     109    rc = sqlite3_exec(_data_DB->db, _data_DB->command, callback, 0, &errorMsg); 
     110    if((rc != SQLITE_OK) && (rc != 101)) 
     111        WARNING("SQL error: %s\n", errorMsg); 
     112 
     113    LOG("database %s, table %s:\n", _data_DB->filename, _data_DB->tablename); 
     114    LOG("\n\n\n"); 
     115    */ 
    95116} 
    96117 
     
    628649                        WARNING("services_DB:: Mission requires service %s ", \ 
    629650                                miss[activeMission].services[i].name.c_str()); 
    630                         WARNING("not provided by any connected component.\n") 
     651                        WARNING("not provided by any connected component.\n"); 
    631652                        rc = 31337; 
    632653                    } 
     
    720741    SendMessage(miss[activeMission].services[sourceID].socketFD, \ 
    721742            miss[activeMission].services[sourceID].name.c_str()); 
    722  
    723    /* If the service takes a parameter, feed that parameter in 
    724    if(!miss[activeMission].services[sourceID].parameter.empty()){ 
    725     //printf("sending parameter!\n"); 
    726     SendMessage(miss[activeMission].services[sourceID].socketFD, "1"); 
    727     SendMessage(miss[activeMission].services[sourceID].socketFD, "parameter"); 
    728     SendMessage(miss[activeMission].services[sourceID].socketFD, miss[activeMission].services[sourceID].parameter.c_str()); 
    729     } 
    730  
    731  
    732     //Load and transmit the input data 
    733     int i = 0; 
    734     while(i < 10 && !miss[activeMission].services[sourceID].input[i].empty()){ 
    735         _data_DB->command="select "; 
    736        _data_DB->command.append(_data_DB->tablename); 
    737         _data_DB->command.append(".* from "); 
    738         _data_DB->command.append(_data_DB->tablename); 
    739         _data_DB->command.append(" where Tag=='"); 
    740     _data_DB->command.append(miss[activeMission].services[sourceID].input[i]); 
    741         _data_DB->command.append("';"); 
    742         sqlite3_stmt * pStatement; 
    743         int rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    744         if (rc == SQLITE_OK){  
    745             if (sqlite3_step(pStatement) == SQLITE_ROW) 
    746              data.append((const char*) sqlite3_column_text(pStatement, 1));  
    747             else { 
    748                 printf("2data_DB:: Data not yet in DB.\n"); 
    749             rc=31337; 
    750         } 
    751         }  
    752     else { 
    753         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    754         } 
    755         sqlite3_finalize(pStatement); 
    756  
    757         token = strtok((char *)data.c_str(), "@"); 
    758     while(token){ 
    759         SendMessage(miss[activeMission].services[sourceID].socketFD, token); 
    760         token = strtok(NULL, "@"); 
    761     } 
    762     i++; 
    763     data.clear(); 
    764     } 
    765     int32_t j = 0; 
    766      
    767     //Receive and store the output data 
    768     while(j < 10 && !miss[activeMission].services[sourceID].output[j].empty()){ 
    769     int rc; 
    770     memset(buffer, 0, 256); 
    771     //Read the number of datapairs for this output 
    772     ReadMessage(miss[activeMission].services[sourceID].socketFD, buffer); 
    773     data.append(buffer); 
    774     data.append("@"); 
    775     int t = atoi(buffer); 
    776     for(int k = 0; k < t; k++){ 
    777         //Read the datapairs incrementally and deliminate it with the "@" symbol 
    778         memset(buffer, 0, 256); 
    779         ReadMessage(miss[activeMission].services[sourceID].socketFD, buffer); 
    780         data.append(buffer); 
    781         data.append("@"); 
    782         memset(buffer, 0, 256); 
    783         ReadMessage(miss[activeMission].services[sourceID].socketFD, buffer); 
    784         data.append(buffer); 
    785         data.append("@"); 
    786     } 
    787  
    788     _data_DB->command="insert or replace into "; 
    789         _data_DB->command.append(_data_DB->tablename);  
    790           _data_DB->command.append(" ("); 
    791         _data_DB->command.append(cols[0]); 
    792         _data_DB->command.append(", "); 
    793     _data_DB->command.append(cols[1]); 
    794     _data_DB->command.append(") "); 
    795     _data_DB->command.append(" values('");     
    796     _data_DB->command.append(miss[activeMission].services[sourceID].output[j]); 
    797     _data_DB->command.append("', '"); 
    798     _data_DB->command.append(data); 
    799     _data_DB->command.append("');"); 
    800         char *errorMsg; 
    801        rc = sqlite3_exec(_data_DB->db, _data_DB->command.c_str(), callback, 0, &errorMsg); 
    802        if( rc!=SQLITE_OK && rc!=101 ) 
    803            fprintf(stderr, "SQL error: %s\n", errorMsg); 
    804         //printf("S: done putting ouptut data into DB for ID#='%d', data=%s\n", sourceID, data.c_str()); 
    805     j++; 
    806         data.clear(); 
    807     } 
    808     //printf("done transact data!\n"); 
    809    // LOG("ServiceManagementLayer:: Finished with data transaction.\n"); 
    810  
    811  
    812     /*printf("\n\n\n"); 
    813     // generate commandi 
    814     strcpy(_data_DB->command, "select "); 
    815     strcat(_data_DB->command, _data_DB->tablename); 
    816     strcat(_data_DB->command, ".* from "); 
    817     strcat(_data_DB->command, _data_DB->tablename); 
    818     strcat(_data_DB->command, ";"); 
    819  
    820     // execute print (select all)  command     
    821     char *errorMsg; 
    822     int rc = sqlite3_exec(_data_DB->db, _data_DB->command, callback, 0, &errorMsg); 
    823     if( rc!=SQLITE_OK && rc!=101 ) 
    824         fprintf(stderr, "SQL error: %s\n", errorMsg); 
    825     printf("database %s, table %s:\n", _data_DB->filename, _data_DB->tablename); 
    826     printf("\n\n\n");*/ 
    827 } 
    828  
    829  
     743} 
    830744 
    831745/* CALLED BY: MessageHandler 
     
    833747 * OUTPUTS: <none> 
    834748 * 
    835  * DESCRIPTION: This function works by first sending the inputs from the shell to the appropriate components 
    836  * The first service should begin immeadiately, as should any others who have all of their input parameters 
    837  * When they complete, the output path is found and the data is transfered as it becomes available 
    838  * Presumably at this point the second function has all of it's parameters, so it begins to compute, and the cycle repeats 
    839  *   
     749 * DESCRIPTION: This function works by first sending the inputs from the shell to  
     750 * the appropriate components. The first service should begin immeadiately, as  
     751 * should any others who have all of their input parameters. When they complete,  
     752 * the output path is found and the data is transfered as it becomes available 
     753 * Presumably at this point the second function has all of it's parameters, so it  
     754 * begins to compute, and the cycle repeats. 
    840755 *  
    841756 * Rules for active missions (currently) 
    842757 * -Five inputs/outputs per service and per mission 
    843  * -All ordering constraints have been relaxed in this version; all data is stored locally and only sent when requested 
     758 * -All ordering constraints have been relaxed in this version; all data is stored  
     759 *  locally and only sent when requested 
    844760 * -If and while support fully implemented - up to three levels (if's can be nested, but dowhiles cannot) 
    845761 * -For dowhiles, assumes loop condition determined on last line 
    846  * -IMPORTANT: DB uses '@' to seperate individual statements; using '@' in the data stream will result in incorrect behavior 
    847  */ 
    848  
    849 //WHILE 
     762 * 
     763 * -IMPORTANT: DB uses '@' to seperate individual statements; using '@' in the data  
     764 *  stream will result in incorrect behavior 
     765 */ 
    850766void 
    851767ServiceManagementLayer::PerformActiveMission() 
    852768{ 
    853     //printf("start PAM\n"); 
    854     uint16_t i = 0, t; 
    855769    shellFound = false; 
    856     std::string data_param, data_obsv, data; 
     770    std::string data_param; 
     771    std::string data_obsv; 
     772    std::string data; 
    857773    std::string input; 
    858774    std::string check; 
     775 
    859776    char buffer[256]; 
    860777    char buffer1[256]; 
    861778    std::string token, token2; 
    862779    std::string data2; 
    863     int rc; 
     780 
     781    int32_t rc; 
    864782    char *errorMsg; 
    865     char* cols[] = {(char *)"Tag", (char *)"Data"}; 
     783    char *cols[] = {(char *) "Tag", (char *) "Data"}; 
    866784 
    867785    LOG("ServiceManagementLayer:: Received PerformActiveMission command.\n"); 
    868786 
    869     //Get the inputs 
     787    /* Get the inputs */ 
    870788    memset(buffer, 0, 256); 
    871     //Needed to read the zero passed in by GOP as the number of observables 
    872789    ReadMessage(shellSocketFD, buffer); 
    873  
    874790 
    875791    /* Receive Set of Parameters */ 
    876792    memset(buffer, 0, 256); 
    877793    ReadMessage(shellSocketFD, buffer); 
    878     t=atoi(buffer); 
    879     for(int m = 0; m < t; m++) { 
     794    int32_t t = atoi(buffer); 
     795    for(size_t m = 0; m < t; m++) { 
    880796        memset(buffer1, 0, 256); 
    881797        ReadMessage(shellSocketFD, buffer1); 
    882     _data_DB->command="insert into "; 
     798        _data_DB->command="insert into "; 
    883799        _data_DB->command.append(_data_DB->tablename);  
    884           _data_DB->command.append(" ("); 
     800        _data_DB->command.append(" ("); 
    885801        _data_DB->command.append(cols[0]); 
    886802        _data_DB->command.append(", "); 
    887     _data_DB->command.append(cols[1]); 
    888     _data_DB->command.append(") "); 
     803        _data_DB->command.append(cols[1]); 
     804        _data_DB->command.append(") "); 
     805 
    889806        memset(buffer, 0, 256); 
    890807        ReadMessage(shellSocketFD, buffer); 
    891     _data_DB->command.append(" values('"); 
    892     _data_DB->command.append(buffer1); 
    893     _data_DB->command.append("', '1@"); 
    894     _data_DB->command.append(buffer1); 
    895     _data_DB->command.append("@"); 
    896     _data_DB->command.append(buffer); 
    897     _data_DB->command.append("');"); 
    898        rc = sqlite3_exec(_data_DB->db, _data_DB->command.c_str(), callback, 0, &errorMsg); 
    899        if( rc!=SQLITE_OK && rc!=101 ) 
    900            fprintf(stderr, "SQL error: %s\n", errorMsg); 
    901     } 
    902  
    903     //Useful for spotchecking what's in the database 
    904     /*printf("\n\n\n"); 
    905     // generate commandi 
    906     strcpy(_data_DB->command, "select "); 
    907     strcat(_data_DB->command, _data_DB->tablename); 
    908     strcat(_data_DB->command, ".* from "); 
    909     strcat(_data_DB->command, _data_DB->tablename); 
    910     strcat(_data_DB->command, ";"); 
    911  
    912     // execute print (select all)  command   
    913     rc = sqlite3_exec(_data_DB->db, _data_DB->command, callback, 0, &errorMsg); 
    914     if( rc!=SQLITE_OK && rc!=101 ) 
    915         fprintf(stderr, "SQL error: %s\n", errorMsg); 
    916     printf("database %s, table %s:\n", _data_DB->filename, _data_DB->tablename); 
    917     printf("\n\n\n");*/ 
    918  
    919  
    920     i=0;  
    921     int32_t numstatements[3] = {0,0,0}; 
    922     while(i < miss[activeMission].numServices) 
    923     { 
    924     if(miss[activeMission].services[i].name.compare("if")==0) 
    925     { 
    926        //printf("L0:if detected\n"); 
    927         input.clear(); 
    928         check.clear(); 
    929         int t; 
    930         for(t = 0; t < 10; t++){ 
    931         if(!miss[activeMission].services[i].output[t].empty()){ 
    932             input=miss[activeMission].services[i-numstatements[0]-1].output[t]; 
    933             _data_DB->command="SELECT "; 
    934             _data_DB->command.append(_data_DB->tablename); 
    935             _data_DB->command.append(".* from "); 
    936             _data_DB->command.append(_data_DB->tablename); 
    937             _data_DB->command.append(" where Tag=='"); 
    938             _data_DB->command.append(input); 
    939             _data_DB->command.append("';"); 
    940             sqlite3_stmt * pStatement; 
    941             rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    942             if (rc == SQLITE_OK){  
    943             if (sqlite3_step(pStatement) == SQLITE_ROW) 
    944                  data = (const char *) sqlite3_column_text(pStatement, 1);  
    945             else { 
    946                 printf("1 data_DB:: Data not yet in DB.\n"); 
    947                 rc=31337; 
    948             } 
    949             } else { 
    950             printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    951             } 
    952                 sqlite3_finalize(pStatement); 
    953             //printf("data=%s\n", data.c_str()); 
    954             int pos = data.find_last_of("@", data.length()-2); 
    955             token = data.substr(pos+1); 
    956             token.erase(token.length()-1); 
    957             //printf("token=%s, %d\n", token.c_str(), pos); 
    958         data.clear(); 
    959             break; 
    960         } 
    961         } 
    962         //printf("Level 0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
    963         bool doit = false; 
    964         if(miss[activeMission].services[i].output[t].find(">") != string::npos){ 
    965             std::string data2; 
    966             _data_DB->command="SELECT "; 
    967             _data_DB->command.append(_data_DB->tablename); 
    968             _data_DB->command.append(".* from "); 
    969             _data_DB->command.append(_data_DB->tablename); 
    970             _data_DB->command.append(" where Tag=='"); 
    971             _data_DB->command.append(miss[activeMission].services[i].output[t].erase(0, 1)); 
    972             _data_DB->command.append("';"); 
    973             sqlite3_stmt * pStatement; 
    974             rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    975             if (rc == SQLITE_OK){  
    976             if (sqlite3_step(pStatement) == SQLITE_ROW) 
    977                  data2 = (const char *) sqlite3_column_text(pStatement, 1);  
    978             else { 
    979                 printf("2 data_DB:: Data not yet in DB.\n"); 
    980                 rc=31337; 
    981             } 
    982             } else { 
    983             printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    984             } 
    985             sqlite3_finalize(pStatement); 
    986  
    987             int pos = data2.find_last_of("@", data2.length()-2); 
    988             token2 = data2.substr(pos+1); 
    989             token2.erase(token2.length()-1); 
    990             //printf("token2=%s, %d\n", token2.c_str(), pos); 
    991             if(atof(token.c_str()) > atof(token2.c_str())) 
    992             doit=true; 
    993             //printf("%s %s\n", buffer, token); 
    994         } 
    995         else if (miss[activeMission].services[i].output[t].find(token) != string::npos) 
    996                 doit=true; 
    997         if(doit){ 
    998         //printf("Level 0:if taken\n"); 
    999         for(uint16_t k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){  
    1000             if(miss[activeMission].services[k].name.compare("if")==0){ 
    1001             //printf("Level 1:if detected\n"); 
    1002                 input.clear(); 
    1003                 check.clear(); 
    1004                 for(t = 0; t < 10; t++){ 
    1005                 if(!miss[activeMission].services[k].output[t].empty()){ 
    1006                     input=miss[activeMission].services[k-numstatements[1]-1].output[t]; 
    1007                         _data_DB->command="SELECT "; 
    1008                         _data_DB->command.append(_data_DB->tablename); 
    1009                        _data_DB->command.append(".* from "); 
    1010                        _data_DB->command.append(_data_DB->tablename); 
    1011                       _data_DB->command.append(" where Tag=='"); 
    1012                      _data_DB->command.append(input); 
    1013                     _data_DB->command.append("';"); 
    1014                     sqlite3_stmt * pStatement; 
    1015                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    1016                     if (rc == SQLITE_OK){  
    1017                     if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1018                          data = (const char *) sqlite3_column_text(pStatement, 1);  
    1019                     else { 
    1020                         printf("3 data_DB:: Data not yet in DB.\n"); 
    1021                         rc=31337; 
    1022                     } 
    1023                     } else { 
    1024                     printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    1025                     } 
    1026                         sqlite3_finalize(pStatement); 
    1027                     //printf("Level 1:data=%s\n", data.c_str()); 
    1028                     int pos = data.find_last_of("@", data.length()-2); 
    1029                     token = data.substr(pos+1); 
    1030                     token.erase(token.length()-1); 
    1031                     //printf("Level 1:token=%s\n", token); 
    1032                     break; 
    1033                 } 
    1034                 } 
    1035                 bool doit = false; 
    1036                 if(miss[activeMission].services[k].output[t].find(">") != string::npos){ 
    1037                     std::string data2; 
    1038                         _data_DB->command="SELECT "; 
     808        _data_DB->command.append(" values('"); 
     809        _data_DB->command.append(buffer1); 
     810        _data_DB->command.append("', '1@"); 
     811        _data_DB->command.append(buffer1); 
     812        _data_DB->command.append("@"); 
     813        _data_DB->command.append(buffer); 
     814        _data_DB->command.append("');"); 
     815 
     816        rc = sqlite3_exec(_data_DB->db, _data_DB->command.c_str(), callback, 0, &errorMsg); 
     817        if((rc != SQLITE_OK) && (rc != 101)) 
     818           WARNING("SQL error: %s\n", errorMsg); 
     819    } 
     820 
     821    int32_t numstatements[3] = {0 ,0 ,0}; 
     822    for(size_t i; i < miss[activeMission].numServices; i++) { 
     823        if(miss[activeMission].services[i].name.compare("if") == 0) { 
     824            input.clear(); 
     825            check.clear(); 
     826 
     827            for(size_t t = 0; t < 10; t++) { 
     828                if(!miss[activeMission].services[i].output[t].empty()) { 
     829                    input = miss[activeMission].services[i - numstatements[0] - 1].output[t]; 
     830 
     831                    _data_DB->command="SELECT "; 
    1039832                    _data_DB->command.append(_data_DB->tablename); 
    1040833                    _data_DB->command.append(".* from "); 
    1041834                    _data_DB->command.append(_data_DB->tablename); 
    1042835                    _data_DB->command.append(" where Tag=='"); 
    1043                     _data_DB->command.append(miss[activeMission].services[k].output[t].erase(0, 1)); 
     836                    _data_DB->command.append(input); 
    1044837                    _data_DB->command.append("';"); 
    1045                     sqlite3_stmt * pStatement; 
    1046                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    1047                     if (rc == SQLITE_OK){  
    1048                     if (sqlite3_step(pStatement) == SQLITE_ROW) 
     838 
     839                    sqlite3_stmt *pStatement; 
     840                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), \ 
     841                            -1, &pStatement, NULL); 
     842                    if(rc == SQLITE_OK) {  
     843                        if(sqlite3_step(pStatement) == SQLITE_ROW) 
     844                             data = (const char *) sqlite3_column_text(pStatement, 1);  
     845                        else { 
     846                            LOG("1 data_DB:: Data not yet in DB.\n"); 
     847                            rc=31337; 
     848                        } 
     849                    } else { 
     850                        LOG("data_DB:: Error executing SQL statement. rc = %i\n%s\n", \ 
     851                                rc,_data_DB->command.c_str()); 
     852                    } 
     853 
     854                    sqlite3_finalize(pStatement); 
     855                    int32_t pos = data.find_last_of("@", data.length() - 2); 
     856                    token = data.substr(pos + 1); 
     857                    token.erase(token.length() - 1); 
     858                    data.clear(); 
     859                    break; 
     860                } 
     861            } 
     862 
     863            bool doit = false; 
     864            if(miss[activeMission].services[i].output[t].find(">") != string::npos) { 
     865                std::string data2; 
     866                _data_DB->command="SELECT "; 
     867                _data_DB->command.append(_data_DB->tablename); 
     868                _data_DB->command.append(".* from "); 
     869                _data_DB->command.append(_data_DB->tablename); 
     870                _data_DB->command.append(" where Tag=='"); 
     871                _data_DB->command.append(miss[activeMission].services[i].output[t].erase(0, 1)); 
     872                _data_DB->command.append("';"); 
     873                sqlite3_stmt *pStatement; 
     874 
     875                rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), \ 
     876                        -1, &pStatement, NULL); 
     877                if(rc == SQLITE_OK) {  
     878                    if(sqlite3_step(pStatement) == SQLITE_ROW) 
    1049879                         data2 = (const char *) sqlite3_column_text(pStatement, 1);  
    1050880                    else { 
    1051                         printf("4 data_DB:: Data not yet in DB.\n"); 
    1052                         rc=31337; 
     881                        LOG("2 data_DB:: Data not yet in DB.\n"); 
     882                        rc = 31337; 
    1053883                    } 
    1054                     } else { 
    1055                     printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    1056                     } 
    1057                         sqlite3_finalize(pStatement); 
    1058                     int pos = data2.find_last_of("@", data2.length()-2); 
    1059                     token2 = data2.substr(pos+1); 
    1060                     token2.erase(token2.length()-1); 
    1061                         //printf("token=%s token2=%s\n", token.c_str(), token2.c_str()); 
    1062                         if(atof(token.c_str()) > atof(token2.c_str())) 
    1063                         doit=true; 
     884                } else { 
     885                    LOG("data_DB:: Error executing SQL statement. rc = %i\n%s\n", \ 
     886                            rc, _data_DB->command.c_str()); 
    1064887                } 
    1065                 else if (miss[activeMission].services[k].output[t].find(token) != string::npos) 
    1066                 doit=true; 
    1067                 if(doit){ 
    1068                 //printf("Level 1:if taken\n"); 
    1069                 for(uint16_t j = k+1; j <= k+miss[activeMission].services[k].num_conds; j++){  
    1070                     if(miss[activeMission].services[j].name.compare("if")==0){ 
    1071                     //printf("Level 2:if detected\n"); 
     888 
     889                sqlite3_finalize(pStatement); 
     890 
     891                int32_t pos = data2.find_last_of("@", data2.length() - 2); 
     892                token2 = data2.substr(pos + 1); 
     893                token2.erase(token2.length() - 1); 
     894                if(atof(token.c_str()) > atof(token2.c_str())) 
     895                    doit = true; 
     896            } 
     897            else if(miss[activeMission].services[i].output[t].find(token) != string::npos) 
     898                doit = true; 
     899 
     900            if(doit) { 
     901                for(size_t k = i + 1; k <= i+miss[activeMission].services[i].num_conds; k++) {  
     902                    if(miss[activeMission].services[k].name.compare("if") == 0) { 
    1072903                        input.clear(); 
    1073904                        check.clear(); 
    1074                         for(t = 0; t < 10; t++){ 
    1075                         if(!miss[activeMission].services[j].output[t].empty()){ 
    1076                             input=miss[activeMission].services[j-numstatements[2]-1].output[t]; 
    1077                                    _data_DB->command="SELECT "; 
     905                        for(size_t t = 0; t < 10; t++) { 
     906                            if(!miss[activeMission].services[k].output[t].empty()) { 
     907                                input = miss[activeMission].services[k - numstatements[1] - 1].output[t]; 
     908                                _data_DB->command="SELECT "; 
    1078909                                _data_DB->command.append(_data_DB->tablename); 
    1079                                _data_DB->command.append(".* from "); 
    1080                                _data_DB->command.append(_data_DB->tablename); 
    1081                               _data_DB->command.append(" where Tag=='"); 
    1082                              _data_DB->command.append(input); 
    1083                             _data_DB->command.append("';"); 
    1084                             sqlite3_stmt * pStatement; 
    1085                             rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    1086                             if (rc == SQLITE_OK){  
    1087                             if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1088                                  data = (const char *) sqlite3_column_text(pStatement, 1);  
    1089                             else { 
    1090                                 printf("5 data_DB:: Data not yet in DB.\n"); 
    1091                                 rc=31337; 
     910                                _data_DB->command.append(".* from "); 
     911                                _data_DB->command.append(_data_DB->tablename); 
     912                                _data_DB->command.append(" where Tag=='"); 
     913                                _data_DB->command.append(input); 
     914                                _data_DB->command.append("';"); 
     915 
     916                                sqlite3_stmt *pStatement; 
     917                                rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), \ 
     918                                        -1, &pStatement, NULL); 
     919                                if(rc == SQLITE_OK) {  
     920                                    if(sqlite3_step(pStatement) == SQLITE_ROW) 
     921                                         data = (const char *) sqlite3_column_text(pStatement, 1);  
     922                                    else { 
     923                                        LOG("3 data_DB:: Data not yet in DB.\n"); 
     924                                        rc = 31337; 
     925                                    } 
     926                                } else { 
     927                                    LOG("data_DB:: Error executing SQL statement. rc = %i\n%s\n", \ 
     928                                            rc,_data_DB->command.c_str()); 
     929                                } 
     930 
     931                                sqlite3_finalize(pStatement); 
     932                                int32_t pos = data.find_last_of("@", data.length() - 2); 
     933                                token = data.substr(pos + 1); 
     934                                token.erase(token.length() - 1); 
     935                                break; 
    1092936                            } 
    1093                             } else { 
    1094                             printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    1095                             } 
    1096                                 sqlite3_finalize(pStatement); 
    1097                             //printf("data=%s\n", data.c_str()); 
    1098                             int pos = data.find_last_of("@", data.length()-2); 
    1099                             token = data.substr(pos+1); 
    1100                             token.erase(token.length()-1); 
    1101                             //printf("token=%s\n", token.c_str()); 
    1102                             data.clear(); 
    1103                             break; 
    1104937                        } 
    1105                         } 
     938 
    1106939                        bool doit = false; 
    1107                         if(miss[activeMission].services[j].output[t].find(">") != string::npos){ 
     940                        if(miss[activeMission].services[k].output[t].find(">") != string::npos) { 
     941                            std::string data2; 
    1108942                            _data_DB->command="SELECT "; 
    1109943                            _data_DB->command.append(_data_DB->tablename); 
    1110944                            _data_DB->command.append(".* from "); 
    1111                            _data_DB->command.append(_data_DB->tablename); 
     945                            _data_DB->command.append(_data_DB->tablename); 
    1112946                            _data_DB->command.append(" where Tag=='"); 
    1113                             _data_DB->command.append(miss[activeMission].services[j].output[t].erase(0, 1)); 
     947                            _data_DB->command.append(miss[activeMission].services[k].output[t].erase(0, 1)); 
    1114948                            _data_DB->command.append("';"); 
    1115949                            sqlite3_stmt * pStatement; 
     
    1119953                                 data2 = (const char *) sqlite3_column_text(pStatement, 1);  
    1120954                            else { 
    1121                                 printf("6 data_DB:: Data not yet in DB.\n"); 
     955                                printf("4 data_DB:: Data not yet in DB.\n"); 
    1122956                                rc=31337; 
    1123957                            } 
     
    1126960                            } 
    1127961                                sqlite3_finalize(pStatement); 
    1128  
    1129                         int pos = data2.find_last_of("@", data2.length()-2); 
    1130                         token2 = data2.substr(pos+1); 
    1131                         token2.erase(token2.length()-1); 
    1132                             if(atof(token.c_str()) > atof(token2.c_str())) 
    1133                             doit=true; 
    1134                         data.clear(); 
     962                            int pos = data2.find_last_of("@", data2.length()-2); 
     963                            token2 = data2.substr(pos+1); 
     964                            token2.erase(token2.length()-1); 
     965                                //printf("token=%s token2=%s\n", token.c_str(), token2.c_str()); 
     966                                if(atof(token.c_str()) > atof(token2.c_str())) 
     967                                doit=true; 
    1135968                        } 
    1136                         else if (miss[activeMission].services[j].output[t].find(token) != string::npos) 
     969                        else if (miss[activeMission].services[k].output[t].find(token) != string::npos) 
    1137970                        doit=true; 
    1138971                        if(doit){ 
    1139972                        //printf("Level 1:if taken\n"); 
    1140                         for(uint16_t l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){  
    1141                             TransactData(l); 
     973                        for(uint16_t j = k+1; j <= k+miss[activeMission].services[k].num_conds; j++){  
     974                            if(miss[activeMission].services[j].name.compare("if")==0){ 
     975                            //printf("Level 2:if detected\n"); 
     976                                input.clear(); 
     977                                check.clear(); 
     978                                for(t = 0; t < 10; t++){ 
     979                                if(!miss[activeMission].services[j].output[t].empty()){ 
     980                                    input=miss[activeMission].services[j-numstatements[2]-1].output[t]; 
     981                                           _data_DB->command="SELECT "; 
     982                                        _data_DB->command.append(_data_DB->tablename); 
     983                                       _data_DB->command.append(".* from "); 
     984                                       _data_DB->command.append(_data_DB->tablename); 
     985                                      _data_DB->command.append(" where Tag=='"); 
     986                                     _data_DB->command.append(input); 
     987                                    _data_DB->command.append("';"); 
     988                                    sqlite3_stmt * pStatement; 
     989                                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     990                                    if (rc == SQLITE_OK){  
     991                                    if (sqlite3_step(pStatement) == SQLITE_ROW) 
     992                                         data = (const char *) sqlite3_column_text(pStatement, 1);  
     993                                    else { 
     994                                        printf("5 data_DB:: Data not yet in DB.\n"); 
     995                                        rc=31337; 
     996                                    } 
     997                                    } else { 
     998                                    printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     999                                    } 
     1000                                        sqlite3_finalize(pStatement); 
     1001                                    //printf("data=%s\n", data.c_str()); 
     1002                                    int pos = data.find_last_of("@", data.length()-2); 
     1003                                    token = data.substr(pos+1); 
     1004                                    token.erase(token.length()-1); 
     1005                                    //printf("token=%s\n", token.c_str()); 
     1006                                    data.clear(); 
     1007                                    break; 
     1008                                } 
     1009                                } 
     1010                                bool doit = false; 
     1011                                if(miss[activeMission].services[j].output[t].find(">") != string::npos){ 
     1012                                    _data_DB->command="SELECT "; 
     1013                                    _data_DB->command.append(_data_DB->tablename); 
     1014                                    _data_DB->command.append(".* from "); 
     1015                                   _data_DB->command.append(_data_DB->tablename); 
     1016                                    _data_DB->command.append(" where Tag=='"); 
     1017                                    _data_DB->command.append(miss[activeMission].services[j].output[t].erase(0, 1)); 
     1018                                    _data_DB->command.append("';"); 
     1019                                    sqlite3_stmt * pStatement; 
     1020                                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     1021                                    if (rc == SQLITE_OK){  
     1022                                    if (sqlite3_step(pStatement) == SQLITE_ROW) 
     1023                                         data2 = (const char *) sqlite3_column_text(pStatement, 1);  
     1024                                    else { 
     1025                                        printf("6 data_DB:: Data not yet in DB.\n"); 
     1026                                        rc=31337; 
     1027                                    } 
     1028                                    } else { 
     1029                                    printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     1030                                    } 
     1031                                        sqlite3_finalize(pStatement); 
     1032 
     1033                                int pos = data2.find_last_of("@", data2.length()-2); 
     1034                                token2 = data2.substr(pos+1); 
     1035                                token2.erase(token2.length()-1); 
     1036                                    if(atof(token.c_str()) > atof(token2.c_str())) 
     1037                                    doit=true; 
     1038                                data.clear(); 
     1039                                } 
     1040                                else if (miss[activeMission].services[j].output[t].find(token) != string::npos) 
     1041                                doit=true; 
     1042                                if(doit){ 
     1043                                //printf("Level 1:if taken\n"); 
     1044                                for(uint16_t l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){  
     1045                                    TransactData(l); 
     1046                                } 
     1047                                } 
     1048                                else 
     1049                                //printf("Level 2:if not taken\n"); 
     1050                                numstatements[2] +=miss[activeMission].services[j].num_conds+1; 
     1051                                j+=miss[activeMission].services[j].num_conds; 
     1052                                //printf("Level 2:doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
     1053                            }else if(miss[activeMission].services[j].name.compare("dowhile")==0){ 
     1054                                numstatements[0]=0; 
     1055                                //printf("Level 2:while detected\n"); 
     1056                                while(true){ 
     1057                                    uint16_t l; 
     1058                                    for(l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){  
     1059                                    TransactData(l); 
     1060                                    } 
     1061                                    data.clear(); 
     1062                                    input.clear(); 
     1063                                    check.clear(); 
     1064                                    int t; 
     1065                                    for(t = 0; t < 10; t++){ 
     1066                                    if(!miss[activeMission].services[j].output[t].empty()){ 
     1067                                        input=miss[activeMission].services[l-2].output[t]; 
     1068                                        //printf("%s\n",input.c_str()); 
     1069                                        _data_DB->command="SELECT "; 
     1070                                        _data_DB->command.append(_data_DB->tablename); 
     1071                                        _data_DB->command.append(".* from "); 
     1072                                        _data_DB->command.append(_data_DB->tablename); 
     1073                                        _data_DB->command.append(" where Tag=='"); 
     1074                                        _data_DB->command.append(input); 
     1075                                        _data_DB->command.append("';"); 
     1076                                        sqlite3_stmt * pStatement; 
     1077 
     1078                                        rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     1079                                        if (rc == SQLITE_OK){  
     1080                                        if (sqlite3_step(pStatement) == SQLITE_ROW) 
     1081                                             data = (const char *) sqlite3_column_text(pStatement, 1);  
     1082                                        else { 
     1083                                            printf("7 data_DB:: Data not yet in DB.: %s\n", _data_DB->command.c_str()); 
     1084                                            rc=31337; 
     1085                                        } 
     1086                                        } else { 
     1087                                          printf("data_DB:: SQL statement error. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     1088                                        } 
     1089                                            sqlite3_finalize(pStatement); 
     1090                                        //printf("Level 2:data=%s\n", data.c_str()); 
     1091                                            int pos = data.find_last_of("@", data.length()-2); 
     1092                                            token = data.substr(pos+1); 
     1093                                            token.erase(token.length()-1); 
     1094                                        //printf("Level 2:token=%s\n", token); 
     1095                                        break; 
     1096                                    } 
     1097                                    } 
     1098                                    //printf("Level 2:--- %s  %s---\n", miss[activeMission].services[j].output[t].c_str(), token); 
     1099                                    if(miss[activeMission].services[j].output[t].find(token) != string::npos){ 
     1100                                    //printf("Level 2:while taken again!\n"); 
     1101                                    } 
     1102                                    else { 
     1103                                    //printf("Level 2:no more while\n"); 
     1104                                    break;} 
     1105                                } 
     1106                                j+=miss[activeMission].services[j].num_conds; 
     1107                            } 
     1108                            else{ 
     1109                                //printf("Level 2: no conditional\n"); 
     1110                                numstatements[2]=0; 
     1111                                    TransactData(j); 
     1112                            } 
    11421113                        } 
    11431114                        } 
    1144                         else 
    1145                         //printf("Level 2:if not taken\n"); 
    1146                         numstatements[2] +=miss[activeMission].services[j].num_conds+1; 
    1147                         j+=miss[activeMission].services[j].num_conds; 
    1148                         //printf("Level 2:doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
    1149                     }else if(miss[activeMission].services[j].name.compare("dowhile")==0){ 
     1115                        else{ 
     1116                        //printf("Level 1: if not taken\n"); 
     1117                        } 
     1118                            numstatements[1] +=miss[activeMission].services[k].num_conds+1; 
     1119                            k+=miss[activeMission].services[k].num_conds; 
     1120                        //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
     1121                    }else if(miss[activeMission].services[k].name.compare("dowhile")==0){ 
    11501122                        numstatements[0]=0; 
    1151                         //printf("Level 2:while detected\n"); 
     1123                        //printf("Level 1: while detected\n"); 
    11521124                        while(true){ 
    1153                             uint16_t l; 
    1154                             for(l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){  
    1155                             TransactData(l); 
     1125                        uint16_t j; 
     1126                            for(j = k+1; j <= k+miss[activeMission].services[k].num_conds; j++){  
     1127                            TransactData(j); 
    11561128                            } 
    11571129                            data.clear(); 
     
    11601132                            int t; 
    11611133                            for(t = 0; t < 10; t++){ 
    1162                             if(!miss[activeMission].services[j].output[t].empty()){ 
    1163                                 input=miss[activeMission].services[l-2].output[t]; 
    1164                                 //printf("%s\n",input.c_str()); 
     1134                            if(!miss[activeMission].services[k].output[t].empty()){ 
     1135                                input=miss[activeMission].services[j-1].output[t]; 
    11651136                                _data_DB->command="SELECT "; 
    11661137                                _data_DB->command.append(_data_DB->tablename); 
     
    11711142                                _data_DB->command.append("';"); 
    11721143                                sqlite3_stmt * pStatement; 
    1173  
    11741144                                rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    11751145                                if (rc == SQLITE_OK){  
     
    11771147                                     data = (const char *) sqlite3_column_text(pStatement, 1);  
    11781148                                else { 
    1179                                     printf("7 data_DB:: Data not yet in DB.: %s\n", _data_DB->command.c_str()); 
     1149                                    printf("8 data_DB:: Data not yet in DB.\n"); 
    11801150                                    rc=31337; 
    11811151                                } 
    11821152                                } else { 
    1183                                   printf("data_DB:: SQL statement error. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     1153                                printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    11841154                                } 
    11851155                                    sqlite3_finalize(pStatement); 
    1186                                 //printf("Level 2:data=%s\n", data.c_str()); 
    1187                                     int pos = data.find_last_of("@", data.length()-2); 
    1188                                     token = data.substr(pos+1); 
    1189                                     token.erase(token.length()-1); 
    1190                                 //printf("Level 2:token=%s\n", token); 
     1156                                //printf("Level 1:data=%s\n", data.c_str()); 
     1157                                int pos = data.find_last_of("@", data.length()-2); 
     1158                                token = data.substr(pos+1); 
     1159                                token.erase(token.length()-1); 
     1160                                //printf("Level 1:token=%s\n", token); 
    11911161                                break; 
    11921162                            } 
    11931163                            } 
    1194                             //printf("Level 2:--- %s  %s---\n", miss[activeMission].services[j].output[t].c_str(), token); 
    1195                             if(miss[activeMission].services[j].output[t].find(token) != string::npos){ 
    1196                             //printf("Level 2:while taken again!\n"); 
     1164                            //printf("Level 1:--- %s  %s---\n", miss[activeMission].services[k].output[t].c_str(), token); 
     1165                            if(miss[activeMission].services[k].output[t].find(token) != string::npos){ 
     1166                            //printf("Level 1:while taken again!\n"); 
    11971167                            } 
    11981168                            else { 
    1199                             //printf("Level 2:no more while\n"); 
     1169                            //printf("Level 1:While finished\n"); 
    12001170                            break;} 
    12011171                        } 
    1202                         j+=miss[activeMission].services[j].num_conds; 
     1172                        k+=miss[activeMission].services[k].num_conds; 
    12031173                    } 
    12041174                    else{ 
    1205                         //printf("Level 2: no conditional\n"); 
    1206                         numstatements[2]=0; 
    1207                             TransactData(j); 
     1175                        //printf("Level1:No conditional\n"); 
     1176                        numstatements[1]=0; 
     1177                            TransactData(k); 
    12081178                    } 
    12091179                } 
     1180            } 
     1181                numstatements[0] +=miss[activeMission].services[i].num_conds+1; 
     1182            i+=miss[activeMission].services[i].num_conds; 
     1183        } 
     1184        else if(miss[activeMission].services[i].name.compare("dowhile")==0) 
     1185        { 
     1186            numstatements[0]=0; 
     1187            //printf("Level 0: while detected\n"); 
     1188            while(true){ 
     1189            uint16_t k; 
     1190                for(k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){  
     1191                TransactData(k); 
    12101192                } 
    1211                 else{ 
    1212                 //printf("Level 1: if not taken\n"); 
     1193                data.clear(); 
     1194                input.clear(); 
     1195                check.clear(); 
     1196                int t; 
     1197                for(t = 0; t < 10; t++){ 
     1198                if(!miss[activeMission].services[i].output[t].empty()){ 
     1199                    input=miss[activeMission].services[k-1].output[t]; 
     1200                    _data_DB->command="SELECT "; 
     1201                    _data_DB->command.append(_data_DB->tablename); 
     1202                    _data_DB->command.append(".* from "); 
     1203                    _data_DB->command.append(_data_DB->tablename); 
     1204                    _data_DB->command.append(" where Tag=='"); 
     1205                    _data_DB->command.append(input); 
     1206                    _data_DB->command.append("';"); 
     1207                    sqlite3_stmt * pStatement; 
     1208                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     1209                    if (rc == SQLITE_OK){  
     1210                    if (sqlite3_step(pStatement) == SQLITE_ROW) 
     1211                         data = (const char *) sqlite3_column_text(pStatement, 1);  
     1212                    else { 
     1213                        printf("10data_DB:: Data not yet in DB.\n"); 
     1214                        rc=31337; 
     1215                    } 
     1216                    } else { 
     1217                    printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     1218                    } 
     1219                        sqlite3_finalize(pStatement); 
     1220                    int pos = data.find_last_of("@", data.length()-2); 
     1221                    token = data.substr(pos+1); 
     1222                    token.erase(token.length()-1); 
     1223                    break; 
    12131224                } 
    1214                     numstatements[1] +=miss[activeMission].services[k].num_conds+1; 
    1215                     k+=miss[activeMission].services[k].num_conds; 
    1216                 //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
    1217             }else if(miss[activeMission].services[k].name.compare("dowhile")==0){ 
    1218                 numstatements[0]=0; 
    1219                 //printf("Level 1: while detected\n"); 
    1220                 while(true){ 
    1221                 uint16_t j; 
    1222                     for(j = k+1; j <= k+miss[activeMission].services[k].num_conds; j++){  
    1223                     TransactData(j); 
    1224                     } 
    1225                     data.clear(); 
    1226                     input.clear(); 
    1227                     check.clear(); 
    1228                     int t; 
    1229                     for(t = 0; t < 10; t++){ 
    1230                     if(!miss[activeMission].services[k].output[t].empty()){ 
    1231                         input=miss[activeMission].services[j-1].output[t]; 
    1232                         _data_DB->command="SELECT "; 
    1233                         _data_DB->command.append(_data_DB->tablename); 
    1234                         _data_DB->command.append(".* from "); 
    1235                         _data_DB->command.append(_data_DB->tablename); 
    1236                         _data_DB->command.append(" where Tag=='"); 
    1237                         _data_DB->command.append(input); 
    1238                         _data_DB->command.append("';"); 
    1239                         sqlite3_stmt * pStatement; 
    1240                         rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    1241                         if (rc == SQLITE_OK){  
    1242                         if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1243                              data = (const char *) sqlite3_column_text(pStatement, 1);  
    1244                         else { 
    1245                             printf("8 data_DB:: Data not yet in DB.\n"); 
    1246                             rc=31337; 
    1247                         } 
    1248                         } else { 
    1249                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    1250                         } 
    1251                             sqlite3_finalize(pStatement); 
    1252                         //printf("Level 1:data=%s\n", data.c_str()); 
    1253                         int pos = data.find_last_of("@", data.length()-2); 
    1254                         token = data.substr(pos+1); 
    1255                         token.erase(token.length()-1); 
    1256                         //printf("Level 1:token=%s\n", token); 
    1257                         break; 
    1258                     } 
    1259                     } 
    1260                     //printf("Level 1:--- %s  %s---\n", miss[activeMission].services[k].output[t].c_str(), token); 
    1261                     if(miss[activeMission].services[k].output[t].find(token) != string::npos){ 
    1262                     //printf("Level 1:while taken again!\n"); 
    1263                     } 
    1264                     else { 
    1265                     //printf("Level 1:While finished\n"); 
    1266                     break;} 
    12671225                } 
    1268                 k+=miss[activeMission].services[k].num_conds; 
     1226                //printf("Level 0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
     1227                if(miss[activeMission].services[i].output[t].find(token) != string::npos){ 
     1228                //printf("Level 0:while taken again!\n"); 
     1229                } 
     1230                else { 
     1231                //printf("Level 0:no more while\n"); 
     1232                break;} 
    12691233            } 
    1270             else{ 
    1271                 //printf("Level1:No conditional\n"); 
    1272                 numstatements[1]=0; 
    1273                     TransactData(k); 
    1274             } 
    1275         } 
    1276         } 
    1277             numstatements[0] +=miss[activeMission].services[i].num_conds+1; 
    1278         i+=miss[activeMission].services[i].num_conds; 
    1279     } 
    1280     else if(miss[activeMission].services[i].name.compare("dowhile")==0) 
    1281     { 
    1282         numstatements[0]=0; 
    1283         //printf("Level 0: while detected\n"); 
    1284         while(true){ 
    1285         uint16_t k; 
    1286             for(k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){  
    1287             TransactData(k); 
    1288             } 
    1289             data.clear(); 
    1290             input.clear(); 
    1291             check.clear(); 
    1292             int t; 
    1293             for(t = 0; t < 10; t++){ 
    1294             if(!miss[activeMission].services[i].output[t].empty()){ 
    1295                 input=miss[activeMission].services[k-1].output[t]; 
    1296                 _data_DB->command="SELECT "; 
    1297                 _data_DB->command.append(_data_DB->tablename); 
    1298                 _data_DB->command.append(".* from "); 
    1299                 _data_DB->command.append(_data_DB->tablename); 
    1300                 _data_DB->command.append(" where Tag=='"); 
    1301                 _data_DB->command.append(input); 
    1302                 _data_DB->command.append("';"); 
    1303                 sqlite3_stmt * pStatement; 
    1304                 rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    1305                 if (rc == SQLITE_OK){  
    1306                 if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1307                      data = (const char *) sqlite3_column_text(pStatement, 1);  
    1308                 else { 
    1309                     printf("10data_DB:: Data not yet in DB.\n"); 
    1310                     rc=31337; 
    1311                 } 
    1312                 } else { 
    1313                 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    1314                 } 
    1315                     sqlite3_finalize(pStatement); 
    1316                 int pos = data.find_last_of("@", data.length()-2); 
    1317                 token = data.substr(pos+1); 
    1318                 token.erase(token.length()-1); 
    1319                 break; 
    1320             } 
    1321             } 
    1322             //printf("Level 0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
    1323             if(miss[activeMission].services[i].output[t].find(token) != string::npos){ 
    1324             //printf("Level 0:while taken again!\n"); 
    1325             } 
    1326             else { 
    1327             //printf("Level 0:no more while\n"); 
    1328             break;} 
    1329         } 
    1330         i+=miss[activeMission].services[i].num_conds; 
    1331     } 
    1332     else{ 
    1333         numstatements[0]=0; 
    1334         //printf("Level 0: No conditional\n"); 
    1335         TransactData(i);} 
    1336     i++; 
    1337     } 
    1338     i=0; 
     1234            i+=miss[activeMission].services[i].num_conds; 
     1235        } 
     1236        else{ 
     1237            numstatements[0]=0; 
     1238            //printf("Level 0: No conditional\n"); 
     1239            TransactData(i); 
     1240        } 
     1241    } 
     1242 
     1243    int32_t i = 0; 
    13391244    data.clear(); 
    13401245