Changeset 419 for vtcross

Show
Ignore:
Timestamp:
08/07/09 11:03:00 (15 years ago)
Author:
wrodgers
Message:

Updated c-string operations to c++

Files:
1 modified

Legend:

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

    r411 r419  
    2323 * Missions are loaded from an XML file, connected with services provided by components, 
    2424 * and run.  See the documentation for the "PerformActiveMission" below for important  
    25  * info.   
     25 * info. 
    2626 */ 
    2727 
     
    6666 
    6767struct services_s { 
    68     char filename[64]; 
    69     char tablename[64]; 
    70     char command[2048]; 
     68    string filename; 
     69    string tablename; 
     70    string command; 
    7171    sqlite3 *db;  
    7272    unsigned int num_columns; 
     
    7474 
    7575struct data_s { 
    76     char filename[64]; 
    77     char tablename[64]; 
    78     char command[2048]; 
     76    string filename; 
     77    string tablename; 
     78    string command; 
    7979    sqlite3 *db;  
    8080    unsigned int num_columns; 
     
    113113{ 
    114114    char *errorMsg; 
    115     strcpy(_services_DB->command, "drop table "); 
    116     strcat(_services_DB->command, _services_DB->tablename); 
    117     int rc = sqlite3_exec(_services_DB->db, _services_DB->command, callback, 0, &errorMsg); 
     115    _services_DB->command="drop table "; 
     116    _services_DB->command.append(_services_DB->tablename); 
     117    int rc = sqlite3_exec(_services_DB->db, _services_DB->command.c_str(), callback, 0, &errorMsg); 
    118118    if( rc!=SQLITE_OK && rc!=101 ) 
    119119        fprintf(stderr, "ServiceManagementLayer::Destructor services 'drop table' error: %s\n", errorMsg); 
    120     strcpy(_services_DB->command, "vacuum"); 
    121     rc = sqlite3_exec(_services_DB->db, _services_DB->command, callback, 0, &errorMsg); 
     120    _services_DB->command="vacuum"; 
     121    rc = sqlite3_exec(_services_DB->db, _services_DB->command.c_str(), callback, 0, &errorMsg); 
    122122    if( rc!=SQLITE_OK && rc!=101 ) 
    123123        fprintf(stderr, "ServiceManagementLayer::Destructor services 'vacuum' error: %s\n", errorMsg); 
    124124    free(_services_DB); 
    125125 
    126     strcpy(_data_DB->command, "drop table "); 
    127     strcat(_data_DB->command, _data_DB->tablename); 
    128     rc = sqlite3_exec(_data_DB->db, _data_DB->command, callback, 0, &errorMsg); 
     126    _data_DB->command="drop table "; 
     127    _data_DB->command.append(_data_DB->tablename); 
     128    rc = sqlite3_exec(_data_DB->db, _data_DB->command.c_str(), callback, 0, &errorMsg); 
    129129    if( rc!=SQLITE_OK && rc!=101 ) 
    130130        fprintf(stderr, "ServiceManagementLayer::Destructor data 'drop table' error: %s\n", errorMsg); 
    131     strcpy(_data_DB->command, "vacuum"); 
    132     rc = sqlite3_exec(_data_DB->db, _data_DB->command, callback, 0, &errorMsg); 
     131    _data_DB->command="vacuum"; 
     132    rc = sqlite3_exec(_data_DB->db, _data_DB->command.c_str(), callback, 0, &errorMsg); 
    133133    if( rc!=SQLITE_OK && rc!=101 ) 
    134134        fprintf(stderr, "ServiceManagementLayer::Destructor data 'vacuum' error: %s\n", errorMsg); 
     
    169169ServiceManagementLayer::CreateServicesDB() 
    170170{ 
    171  
    172  
    173   sqlite3_stmt *ppStmt;  /* OUT: Statement handle */ 
    174   const char *pzTail;     /* OUT: Pointer to unused portion of zSql */ 
    175  
    176  
    177     _services_DB = (services_DB) malloc(sizeof(struct services_s)); 
    178    // char *errorMsg; 
    179  
    180     // create database 
    181  
     171    sqlite3_stmt *ppStmt;  /* OUT: Statement handle */ 
     172    const char *pzTail;     /* OUT: Pointer to unused portion of zSql */ 
     173 
     174    //_services_DB = (services_DB) malloc(sizeof(struct services_s)); 
     175    _services_DB = new services_s; 
    182176    // copy filename 
    183     strcpy(_services_DB->filename, "Services_Table"); 
    184  
     177    _services_DB->filename="Services_Table"; 
    185178    // execute create database command 
    186179    // database handle 
    187180    //_services_DB->db = NULL; 
    188     sqlite3_open(_services_DB->filename, &(_services_DB->db)); 
     181    sqlite3_open(_services_DB->filename.c_str(), &(_services_DB->db)); 
    189182    char* cols[] = {(char *)"ID_Num", (char *)"Service_Name"}; 
    190183 
    191184 
    192185    // copy tablename 
    193     strcpy(_services_DB->tablename, "Services"); 
     186    _services_DB->tablename="Services"; 
    194187 
    195188    //If program execution ends in anything other than a ordered shutdown, DB's will still be there for next run 
    196189    //Need to get rid of it so that old data isn't inadvertantly used in the next execution cycle 
    197     sprintf(_services_DB->command, "DROP TABLE IF EXISTS Services;");      
    198  
    199     int rc = sqlite3_prepare_v2(_services_DB->db, _services_DB->command, 128, &ppStmt, &pzTail); 
     190    _services_DB->command = "DROP TABLE IF EXISTS Services;";      
     191 
     192    int rc = sqlite3_prepare_v2(_services_DB->db, _services_DB->command.c_str(), 128, &ppStmt, &pzTail); 
    200193    if( rc!=SQLITE_OK && rc!=101 ) 
    201194        printf("ServiceManagementLayer::CreateServicesDB 'prepare_stmt' error %d\n", rc); 
     
    208201 
    209202    // generate command 
    210     strcpy(_services_DB->command, "CREATE TABLE "); 
    211     strcat(_services_DB->command, _services_DB->tablename); 
    212     strcat(_services_DB->command, "("); 
    213     strcat(_services_DB->command, cols[0]); 
    214     strcat(_services_DB->command, " INT, "); 
    215     strcat(_services_DB->command, cols[1]); 
    216     strcat(_services_DB->command, " TEXT"); 
    217     strcat(_services_DB->command, ");"); 
     203    _services_DB->command="CREATE TABLE "; 
     204    _services_DB->command.append(_services_DB->tablename); 
     205    _services_DB->command.append("("); 
     206    _services_DB->command.append(cols[0]); 
     207    _services_DB->command.append(" INT, "); 
     208    _services_DB->command.append(cols[1]); 
     209    _services_DB->command.append(" TEXT);"); 
    218210 
    219211    // execute create table command 
    220212 
    221     rc = sqlite3_prepare_v2(_services_DB->db, _services_DB->command, 128, &ppStmt, &pzTail); 
     213    rc = sqlite3_prepare_v2(_services_DB->db, _services_DB->command.c_str(), 128, &ppStmt, &pzTail); 
    222214    if( rc!=SQLITE_OK && rc!=101 ) 
    223215        printf("ServiceManagementLayer::CreateServicesDB 'prepare_stmt' error %d\n", rc); 
     
    236228ServiceManagementLayer::CreateDataDB() 
    237229{ 
    238     _data_DB = (data_DB) malloc(sizeof(struct data_s)); 
    239     //char *errorMsg; 
    240   sqlite3_stmt *ppStmt;  /* OUT: Statement handle */ 
    241   const char *pzTail;     /* OUT: Pointer to unused portion of zSql */ 
     230    sqlite3_stmt *ppStmt;  /* OUT: Statement handle */ 
     231    const char *pzTail;     /* OUT: Pointer to unused portion of zSql */ 
     232 
     233    _data_DB = new data_s;//(data_DB) malloc(sizeof(struct data_s)); 
    242234 
    243235    // create database 
    244236 
    245237    // copy filename 
    246     strcpy(_data_DB->filename, "Data_Table"); 
     238    _data_DB->filename="Data_Table"; 
    247239    // execute create database command 
    248240    // database handle 
    249241    //_services_DB->db = NULL; 
    250     sqlite3_open(_data_DB->filename, &(_data_DB->db)); 
     242    sqlite3_open(_data_DB->filename.c_str(), &(_data_DB->db)); 
    251243    char* cols[] = {(char *)"Tag", (char *)"Data"}; 
    252244 
     
    254246 
    255247    // copy tablename 
    256     strcpy(_data_DB->tablename, "Data"); 
    257     sprintf(_data_DB->command, "DROP TABLE IF EXISTS Data;");      
    258  
    259     int rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, 128, &ppStmt, &pzTail); 
     248    _data_DB->tablename="Data"; 
     249    _data_DB->command="DROP TABLE IF EXISTS Data;";      
     250 
     251    int rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), 128, &ppStmt, &pzTail); 
    260252    if( rc!=SQLITE_OK && rc!=101 ) 
    261253        printf("ServiceManagementLayer::CreateServicesDB 'prepare_stmt' error %d\n", rc); 
     
    269261 
    270262    // generate command 
    271     strcpy(_data_DB->command, "CREATE TABLE "); 
    272     strcat(_data_DB->command, _data_DB->tablename); 
    273     strcat(_data_DB->command, "("); 
    274     strcat(_data_DB->command, cols[0]); 
     263    _data_DB->command="CREATE TABLE "; 
     264    _data_DB->command.append(_data_DB->tablename); 
     265    _data_DB->command.append("("); 
     266    _data_DB->command.append(cols[0]); 
    275267    //First column is the name of the data (coresponding to the name of the output/input pair) 
    276268    //It is the primary key so any subsequent data with the same name will replace the row 
    277     strcat(_data_DB->command, " TEXT PRIMARY KEY ON CONFLICT REPLACE, "); 
    278     strcat(_data_DB->command, cols[1]); 
    279     strcat(_data_DB->command, " TEXT"); 
    280     strcat(_data_DB->command, ");"); 
     269    _data_DB->command.append(" TEXT PRIMARY KEY ON CONFLICT REPLACE, "); 
     270    _data_DB->command.append(cols[1]); 
     271    _data_DB->command.append(" TEXT);"); 
    281272 
    282273    // execute create table command 
    283274 
    284     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, 128, &ppStmt, &pzTail); 
     275    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), 128, &ppStmt, &pzTail); 
    285276    if( rc!=SQLITE_OK && rc!=101 ) 
    286277        printf("ServiceManagementLayer::CreateDataDB 'prepare_stmt' error %d\n", rc); 
     
    559550    //printf("RS_buffer = %s\n", buffer); 
    560551    // generate command 
    561     strcpy(_services_DB->command, "insert into "); 
    562     strcat(_services_DB->command, _services_DB->tablename);  
    563     strcat(_services_DB->command, " ("); 
    564     strcat(_services_DB->command, cols[0]); 
    565     strcat(_services_DB->command, ", "); 
    566     strcat(_services_DB->command, cols[1]); 
    567     strcat(_services_DB->command, ") "); 
    568     strcat(_services_DB->command, " values("); 
    569     sprintf(_services_DB->command, "%s%d", _services_DB->command, ID); 
    570     strcat(_services_DB->command, ", '"); 
    571     strcat(_services_DB->command, buffer); 
    572     strcat(_services_DB->command, "');"); 
     552    _services_DB->command="insert into "; 
     553    _services_DB->command.append(_services_DB->tablename);  
     554    _services_DB->command.append(" ("); 
     555    _services_DB->command.append(cols[0]); 
     556    _services_DB->command.append(", "); 
     557    _services_DB->command.append(cols[1]); 
     558    _services_DB->command.append(") "); 
     559    _services_DB->command.append(" values("); 
     560    char temp[3]; 
     561    memset(temp,0,3); 
     562    sprintf(temp, "%d", ID); 
     563    _services_DB->command.append(temp); 
     564    _services_DB->command.append(", '"); 
     565    _services_DB->command.append(buffer); 
     566    _services_DB->command.append("');"); 
    573567     
    574568    //printf("search command: %s\n", _services_DB->command); 
    575569    // execute add command 
    576570    char *errorMsg; 
    577     int rc = sqlite3_exec(_services_DB->db, _services_DB->command, callback, 0, &errorMsg); 
     571    int rc = sqlite3_exec(_services_DB->db, _services_DB->command.c_str(), callback, 0, &errorMsg); 
    578572    if( rc!=SQLITE_OK && rc!=101 ) 
    579573        fprintf(stderr, "ServiceManagementLayer::RecieveServices DB Error %s\n", errorMsg); 
     
    613607           miss[activeMission].services[i].name.compare("shell")){ 
    614608            //If it is a service, search the database of registered services to find the ID of the component that registered it 
    615             strcpy(_services_DB->command, "select "); 
    616             strcat(_services_DB->command, _services_DB->tablename); 
    617             strcat(_services_DB->command, ".* from "); 
    618             strcat(_services_DB->command, _services_DB->tablename); 
    619             strcat(_services_DB->command, " where Service_Name=="); 
    620             sprintf(_services_DB->command, "%s'%s';", _services_DB->command, miss[activeMission].services[i].name.c_str()); 
     609            _services_DB->command="select "; 
     610            _services_DB->command.append(_services_DB->tablename); 
     611            _services_DB->command.append(".* from "); 
     612            _services_DB->command.append( _services_DB->tablename); 
     613            _services_DB->command.append(" where Service_Name=='"); 
     614            _services_DB->command.append(miss[activeMission].services[i].name); 
     615            _services_DB->command.append("';"); 
    621616         
    622617            sqlite3_stmt * pStatement; 
    623             int rc = sqlite3_prepare_v2(_services_DB->db, _services_DB->command, -1, &pStatement, NULL); 
     618            int rc = sqlite3_prepare_v2(_services_DB->db, _services_DB->command.c_str(), -1, &pStatement, NULL); 
    624619            if (rc == SQLITE_OK){  
    625620                if (sqlite3_step(pStatement) == SQLITE_ROW) 
     
    630625                } 
    631626             } else { 
    632                 printf("services_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_services_DB->command); 
     627                printf("services_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_services_DB->command.c_str()); 
    633628            } 
    634629                //printf("s_name=%s\n",miss[activeMission].services[i].name.c_str()); 
     
    677672        for(int t = 0; t < k; t++){ 
    678673            memset(buffer, 0 , 256); 
    679             strcpy(_data_DB->command, "select "); 
    680             strcat(_data_DB->command, _data_DB->tablename); 
    681             strcat(_data_DB->command, ".* from "); 
    682             strcat(_data_DB->command, _data_DB->tablename); 
    683             strcat(_data_DB->command, " where Tag=="); 
    684             sprintf(_data_DB->command, "%s'%s';", _data_DB->command, miss[activeMission].input[t].c_str()); 
     674            _data_DB->command="select "; 
     675            _data_DB->command.append(_data_DB->tablename); 
     676            _data_DB->command.append(".* from "); 
     677            _data_DB->command.append(_data_DB->tablename); 
     678            _data_DB->command.append(" where Tag=='"); 
     679            _data_DB->command.append(miss[activeMission].input[t]); 
     680            _data_DB->command.append("';"); 
    685681            sqlite3_stmt * pStatement; 
    686             int rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
     682            int rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    687683            if (rc == SQLITE_OK){  
    688684                if (sqlite3_step(pStatement) == SQLITE_ROW) 
    689685                    data=((const char*) sqlite3_column_text(pStatement, 1));  
    690686                else { 
    691                     printf("data_DB:: Data not yet in DB.\n"); 
     687                    printf("3data_DB:: Data not yet in DB., %s\n", _data_DB->command.c_str()); 
    692688                    rc=31337; 
    693689                } 
    694690            }  
    695691            else { 
    696                 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
     692                printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    697693            } 
    698694            sqlite3_finalize(pStatement); 
     
    722718    //Load and transmit the input data 
    723719    while(i < 10 && !miss[activeMission].services[sourceID].input[i].empty()){ 
    724         strcpy(_data_DB->command, "select "); 
    725         strcat(_data_DB->command, _data_DB->tablename); 
    726         strcat(_data_DB->command, ".* from "); 
    727         strcat(_data_DB->command, _data_DB->tablename); 
    728         strcat(_data_DB->command, " where Tag=="); 
    729         sprintf(_data_DB->command, "%s'%s';", _data_DB->command, miss[activeMission].services[sourceID].input[i].c_str()); 
     720        _data_DB->command="select "; 
     721        _data_DB->command.append(_data_DB->tablename); 
     722        _data_DB->command.append(".* from "); 
     723        _data_DB->command.append(_data_DB->tablename); 
     724        _data_DB->command.append(" where Tag=='"); 
     725        _data_DB->command.append(miss[activeMission].services[sourceID].input[i]); 
     726        _data_DB->command.append("';"); 
    730727        sqlite3_stmt * pStatement; 
    731         int rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
     728        int rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    732729        if (rc == SQLITE_OK){  
    733730            if (sqlite3_step(pStatement) == SQLITE_ROW) 
    734731                 data.append((const char*) sqlite3_column_text(pStatement, 1));  
    735732            else { 
    736                     printf("data_DB:: Data not yet in DB.\n"); 
     733                    printf("2data_DB:: Data not yet in DB.\n"); 
    737734                    rc=31337; 
    738735            } 
    739736        }  
    740737        else { 
    741             printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
     738            printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    742739        } 
    743740        sqlite3_finalize(pStatement); 
     
    774771        } 
    775772 
    776         strcpy(_data_DB->command, "insert or replace into "); 
    777         strcat(_data_DB->command, _data_DB->tablename);  
    778         strcat(_data_DB->command, " ("); 
    779         strcat(_data_DB->command, cols[0]); 
    780         strcat(_data_DB->command, ", "); 
    781         strcat(_data_DB->command, cols[1]); 
    782         strcat(_data_DB->command, ") "); 
    783         strcat(_data_DB->command, " values('");  
    784         strcat(_data_DB->command, miss[activeMission].services[sourceID].output[j].c_str()); 
    785         strcat(_data_DB->command, "', '"); 
    786         strcat(_data_DB->command, data.c_str()); 
    787         strcat(_data_DB->command, "');"); 
     773        _data_DB->command="insert or replace into "; 
     774        _data_DB->command.append(_data_DB->tablename);  
     775        _data_DB->command.append(" ("); 
     776        _data_DB->command.append(cols[0]); 
     777        _data_DB->command.append(", "); 
     778        _data_DB->command.append(cols[1]); 
     779        _data_DB->command.append(") "); 
     780        _data_DB->command.append(" values('");   
     781        _data_DB->command.append(miss[activeMission].services[sourceID].output[j]); 
     782        _data_DB->command.append("', '"); 
     783        _data_DB->command.append(data); 
     784        _data_DB->command.append("');"); 
    788785        char *errorMsg; 
    789         rc = sqlite3_exec(_data_DB->db, _data_DB->command, callback, 0, &errorMsg); 
     786        rc = sqlite3_exec(_data_DB->db, _data_DB->command.c_str(), callback, 0, &errorMsg); 
    790787        if( rc!=SQLITE_OK && rc!=101 ) 
    791788            fprintf(stderr, "SQL error: %s\n", errorMsg); 
     
    847844    char buffer[256]; 
    848845    char buffer1[256]; 
    849     char *token, *token2; 
     846    std::string token, token2; 
    850847    std::string data2; 
    851848    int rc; 
     
    866863    t=atoi(buffer); 
    867864    for(int m = 0; m < t; m++) { 
    868         //printf("data=%s\n", data_obsv.c_str()); 
    869865        memset(buffer1, 0, 256); 
    870866        ReadMessage(shellSocketFD, buffer1); 
    871         strcpy(_data_DB->command, "insert into "); 
    872         strcat(_data_DB->command, _data_DB->tablename);  
    873         strcat(_data_DB->command, " ("); 
    874         strcat(_data_DB->command, cols[0]); 
    875         strcat(_data_DB->command, ", "); 
    876         strcat(_data_DB->command, cols[1]); 
    877         strcat(_data_DB->command, ") "); 
     867        _data_DB->command="insert into "; 
     868        _data_DB->command.append(_data_DB->tablename);  
     869        _data_DB->command.append(" ("); 
     870        _data_DB->command.append(cols[0]); 
     871        _data_DB->command.append(", "); 
     872        _data_DB->command.append(cols[1]); 
     873        _data_DB->command.append(") "); 
    878874        memset(buffer, 0, 256); 
    879875        ReadMessage(shellSocketFD, buffer); 
    880         sprintf(_data_DB->command, "%s values('%s', '1@%s@%s');", _data_DB->command, buffer1, buffer1, buffer); 
    881         rc = sqlite3_exec(_data_DB->db, _data_DB->command, callback, 0, &errorMsg); 
     876        _data_DB->command.append(" values('"); 
     877        _data_DB->command.append(buffer1); 
     878        _data_DB->command.append("', '1@"); 
     879        _data_DB->command.append(buffer1); 
     880        _data_DB->command.append("@"); 
     881        _data_DB->command.append(buffer); 
     882        _data_DB->command.append("');"); 
     883        rc = sqlite3_exec(_data_DB->db, _data_DB->command.c_str(), callback, 0, &errorMsg); 
    882884        if( rc!=SQLITE_OK && rc!=101 ) 
    883885            fprintf(stderr, "SQL error: %s\n", errorMsg); 
     
    913915            for(t = 0; t < 10; t++){ 
    914916                if(!miss[activeMission].services[i].output[t].empty()){ 
    915                     //printf("i-numstmts-1 = %d\n", i-numstatements[0]-1); 
    916917                    input=miss[activeMission].services[i-numstatements[0]-1].output[t]; 
    917                     strcpy(_data_DB->command, "SELECT "); 
    918                     strcat(_data_DB->command, _data_DB->tablename); 
    919                     strcat(_data_DB->command, ".* from "); 
    920                     strcat(_data_DB->command, _data_DB->tablename); 
    921                     strcat(_data_DB->command, " where Tag=="); 
    922                     sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
     918                    _data_DB->command="SELECT "; 
     919                    _data_DB->command.append(_data_DB->tablename); 
     920                    _data_DB->command.append(".* from "); 
     921                    _data_DB->command.append(_data_DB->tablename); 
     922                    _data_DB->command.append(" where Tag=='"); 
     923                    _data_DB->command.append(input); 
     924                    _data_DB->command.append("';"); 
    923925                    sqlite3_stmt * pStatement; 
    924                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
     926                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    925927                    if (rc == SQLITE_OK){  
    926928                        if (sqlite3_step(pStatement) == SQLITE_ROW) 
     
    931933                        } 
    932934                    } else { 
    933                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
     935                        printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    934936                    } 
    935937                    sqlite3_finalize(pStatement); 
    936938                    //printf("data=%s\n", data.c_str()); 
    937                     token = strtok((char *)data.c_str(), "@"); 
    938                     token = strtok(NULL, "@"); 
    939                     token = strtok(NULL, "@"); 
    940                     //printf("data=%s\n", token); 
     939                    int pos = data.find_last_of("@", data.length()-2); 
     940                    token = data.substr(pos+1); 
     941                    token.erase(token.length()-1); 
     942                    //printf("token=%s, %d\n", token.c_str(), pos); 
    941943                data.clear(); 
    942944                    break; 
    943945                } 
    944946            } 
    945             //printf("L0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
     947            //printf("Level 0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
    946948            bool doit = false; 
    947949            if(miss[activeMission].services[i].output[t].find(">") != string::npos){ 
    948950                    std::string data2; 
    949                     strcpy(_data_DB->command, "SELECT "); 
    950                     strcat(_data_DB->command, _data_DB->tablename); 
    951                     strcat(_data_DB->command, ".* from "); 
    952                     strcat(_data_DB->command, _data_DB->tablename); 
    953                 strcat(_data_DB->command, " where Tag=="); 
    954                     miss[activeMission].services[i].output[t].erase(0, 1); 
    955             //printf("here! %s\n", miss[activeMission].services[i].output[t].c_str()); 
    956                     sprintf(_data_DB->command, "%s'%s';", _data_DB->command, miss[activeMission].services[i].output[t].c_str()); 
     951                    _data_DB->command="SELECT "; 
     952                    _data_DB->command.append(_data_DB->tablename); 
     953                    _data_DB->command.append(".* from "); 
     954                    _data_DB->command.append(_data_DB->tablename); 
     955                    _data_DB->command.append(" where Tag=='"); 
     956                    _data_DB->command.append(miss[activeMission].services[i].output[t].erase(0, 1)); 
     957                    _data_DB->command.append("';"); 
    957958                    sqlite3_stmt * pStatement; 
    958                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
     959                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    959960                    if (rc == SQLITE_OK){  
    960961                        if (sqlite3_step(pStatement) == SQLITE_ROW) 
     
    965966                        } 
    966967                    } else { 
    967                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
     968                        printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    968969                    } 
    969                             sqlite3_finalize(pStatement); 
    970                     char* token2 = strtok((char *)data2.c_str(), "@"); 
    971                     token2 = strtok(NULL, "@"); 
    972                     token2 = strtok(NULL, "@"); 
    973                     if(atof(token) > atof(token2)) 
     970                    sqlite3_finalize(pStatement); 
     971 
     972                    int pos = data2.find_last_of("@", data2.length()-2); 
     973                    token2 = data2.substr(pos+1); 
     974                    token2.erase(token2.length()-1); 
     975                    //printf("token2=%s, %d\n", token2.c_str(), pos); 
     976                    if(atof(token.c_str()) > atof(token2.c_str())) 
    974977                        doit=true; 
    975978                    //printf("%s %s\n", buffer, token); 
    976979            } 
    977             else if (strstr(miss[activeMission].services[i].output[t].c_str(), token)) 
     980            else if (miss[activeMission].services[i].output[t].find(token) != string::npos) 
    978981                doit=true; 
    979982            if(doit){ 
    980             //if(strstr(miss[activeMission].services[i].output[t].c_str(), token)){ 
    981                 //printf("L0:if taken\n"); 
     983                //printf("Level 0:if taken\n"); 
    982984                for(uint16_t k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){  
    983                         //printf("transacting data for k=%d\n", k); 
    984                     //printf("%s---%d\n", miss[activeMission].services[k].name.c_str(), k); 
    985985                    if(miss[activeMission].services[k].name.compare("if")==0){ 
    986                         //printf("L1:if detected\n"); 
     986                        //printf("Level 1:if detected\n"); 
    987987                            input.clear(); 
    988988                            check.clear(); 
    989989                            for(t = 0; t < 10; t++){ 
    990990                                if(!miss[activeMission].services[k].output[t].empty()){ 
    991                                     //printf("i-numstmts = %d\n", i-numstatements-1); 
    992991                                    input=miss[activeMission].services[k-numstatements[1]-1].output[t]; 
    993                                     strcpy(_data_DB->command, "SELECT "); 
    994                                     strcat(_data_DB->command, _data_DB->tablename); 
    995                                     strcat(_data_DB->command, ".* from "); 
    996                                     strcat(_data_DB->command, _data_DB->tablename); 
    997                                     strcat(_data_DB->command, " where Tag=="); 
    998                                     sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
     992                                    _data_DB->command="SELECT "; 
     993                                    _data_DB->command.append(_data_DB->tablename); 
     994                                    _data_DB->command.append(".* from "); 
     995                                    _data_DB->command.append(_data_DB->tablename); 
     996                                    _data_DB->command.append(" where Tag=='"); 
     997                                    _data_DB->command.append(input); 
     998                                    _data_DB->command.append("';"); 
    999999                                    sqlite3_stmt * pStatement; 
    1000                                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
     1000                                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    10011001                                    if (rc == SQLITE_OK){  
    10021002                                        if (sqlite3_step(pStatement) == SQLITE_ROW) 
     
    10071007                                        } 
    10081008                                    } else { 
    1009                                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
     1009                                        printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    10101010                                    } 
    10111011                                    sqlite3_finalize(pStatement); 
    1012                                     //printf("data=%s\n", data.c_str()); 
    1013                                     token = strtok((char *)data.c_str(), "@"); 
    1014                                     token = strtok(NULL, "@"); 
    1015                                     token = strtok(NULL, "@"); 
    1016                                     //printf("data=%s\n", token); 
     1012                                    //printf("Level 1:data=%s\n", data.c_str()); 
     1013                                    int pos = data.find_last_of("@", data.length()-2); 
     1014                                    token = data.substr(pos+1); 
     1015                                    token.erase(token.length()-1); 
     1016                                    //printf("Level 1:token=%s\n", token); 
    10171017                                    break; 
    10181018                                } 
    10191019                            } 
    1020                             //printf("L1:--- %s  %s---\n", miss[activeMission].services[k].output[t].c_str(), token); 
    10211020                            bool doit = false; 
    1022                                 //printf("here! %s\n", miss[activeMission].services[k].output[t].c_str()); 
    10231021                            if(miss[activeMission].services[k].output[t].find(">") != string::npos){ 
    10241022                                    std::string data2; 
    1025                                     strcpy(_data_DB->command, "SELECT "); 
    1026                                     strcat(_data_DB->command, _data_DB->tablename); 
    1027                                     strcat(_data_DB->command, ".* from "); 
    1028                                     strcat(_data_DB->command, _data_DB->tablename); 
    1029                                     strcat(_data_DB->command, " where Tag=="); 
    1030                                     miss[activeMission].services[k].output[t].erase(0, 1); 
    1031                                     sprintf(_data_DB->command, "%s'%s';", _data_DB->command, miss[activeMission].services[k].output[t].c_str()); 
     1023                                    _data_DB->command="SELECT "; 
     1024                                    _data_DB->command.append(_data_DB->tablename); 
     1025                                    _data_DB->command.append(".* from "); 
     1026                                    _data_DB->command.append(_data_DB->tablename); 
     1027                                    _data_DB->command.append(" where Tag=='"); 
     1028                                    _data_DB->command.append(miss[activeMission].services[k].output[t].erase(0, 1)); 
     1029                                    _data_DB->command.append("';"); 
    10321030                                    sqlite3_stmt * pStatement; 
    1033                                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
     1031                                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    10341032                                    if (rc == SQLITE_OK){  
    10351033                                        if (sqlite3_step(pStatement) == SQLITE_ROW) 
     
    10401038                                        } 
    10411039                                    } else { 
    1042                                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
     1040                                        printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    10431041                                    } 
    10441042                                    sqlite3_finalize(pStatement); 
    1045                                 //printf("data=%s token=%s\n", data2.c_str(), token); 
    1046                                     token2 = strtok((char *)data2.c_str(), "@"); 
    1047                                     token2 = strtok(NULL, "@"); 
    1048                                     token2 = strtok(NULL, "@"); 
    1049                                 //printf("token2 %s token %s\n", token2, token); 
    1050                                 if(atof(token) > atof(token2)) 
    1051                                     doit=true; 
     1043                                    int pos = data2.find_last_of("@", data2.length()-2); 
     1044                                    token2 = data2.substr(pos+1); 
     1045                                    token2.erase(token2.length()-1); 
     1046                                    //printf("token=%s token2=%s\n", token.c_str(), token2.c_str()); 
     1047                                    if(atof(token.c_str()) > atof(token2.c_str())) 
     1048                                        doit=true; 
    10521049                            } 
    1053                             else if (strstr(miss[activeMission].services[k].output[t].c_str(), token)) 
     1050                            else if (miss[activeMission].services[k].output[t].find(token) != string::npos) 
    10541051                                doit=true; 
    10551052                            if(doit){ 
    1056                                 //printf("L1:if taken\n"); 
     1053                                //printf("Level 1:if taken\n"); 
    10571054                                for(uint16_t j = k+1; j <= k+miss[activeMission].services[k].num_conds; j++){  
    1058                                     //printf("transacting data for k=%d\n", k); 
    1059                                     //printf("%s---%d\n", miss[activeMission].services[j].name.c_str(), j); 
    10601055                                    if(miss[activeMission].services[j].name.compare("if")==0){ 
    1061                                         //printf("L2:if detected\n"); 
     1056                                        //printf("Level 2:if detected\n"); 
    10621057                                            input.clear(); 
    10631058                                            check.clear(); 
    10641059                                            for(t = 0; t < 10; t++){ 
    10651060                                                if(!miss[activeMission].services[j].output[t].empty()){ 
    1066                                                     //printf("i-numstmts = %d\n", i-numstatements-1); 
    10671061                                                    input=miss[activeMission].services[j-numstatements[2]-1].output[t]; 
    1068                                                     strcpy(_data_DB->command, "SELECT "); 
    1069                                                     strcat(_data_DB->command, _data_DB->tablename); 
    1070                                                     strcat(_data_DB->command, ".* from "); 
    1071                                                     strcat(_data_DB->command, _data_DB->tablename); 
    1072                                                     strcat(_data_DB->command, " where Tag=="); 
    1073                                                     sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
     1062                                                    _data_DB->command="SELECT "; 
     1063                                                    _data_DB->command.append(_data_DB->tablename); 
     1064                                                    _data_DB->command.append(".* from "); 
     1065                                                    _data_DB->command.append(_data_DB->tablename); 
     1066                                                    _data_DB->command.append(" where Tag=='"); 
     1067                                                    _data_DB->command.append(input); 
     1068                                                    _data_DB->command.append("';"); 
    10741069                                                    sqlite3_stmt * pStatement; 
    1075                                                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
     1070                                                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    10761071                                                    if (rc == SQLITE_OK){  
    10771072                                                        if (sqlite3_step(pStatement) == SQLITE_ROW) 
     
    10821077                                                        } 
    10831078                                                    } else { 
    1084                                                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
     1079                                                        printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    10851080                                                    } 
    10861081                                                    sqlite3_finalize(pStatement); 
    10871082                                                    //printf("data=%s\n", data.c_str()); 
    1088                                                     token = strtok((char *)data.c_str(), "@"); 
    1089                                                     token = strtok(NULL, "@"); 
    1090                                                     token = strtok(NULL, "@"); 
    1091                                                     //printf("data=%s\n", token); 
     1083                                                    int pos = data.find_last_of("@", data.length()-2); 
     1084                                                    token = data.substr(pos+1); 
     1085                                                    token.erase(token.length()-1); 
     1086                                                    //printf("token=%s\n", token.c_str()); 
    10921087                                                    data.clear(); 
    10931088                                                    break; 
    10941089                                                } 
    10951090                                            } 
    1096                                             //printf("L2:---%s||%s---\n", miss[activeMission].services[j].output[t].c_str(), token); 
    10971091                                            bool doit = false; 
    1098                                                 //printf("here! %s\n", miss[activeMission].services[j].output[t].c_str()); 
    10991092                                            if(miss[activeMission].services[j].output[t].find(">") != string::npos){ 
    1100                                                     strcpy(_data_DB->command, "SELECT "); 
    1101                                                     strcat(_data_DB->command, _data_DB->tablename); 
    1102                                                     strcat(_data_DB->command, ".* from "); 
    1103                                                     strcat(_data_DB->command, _data_DB->tablename); 
    1104                                                     strcat(_data_DB->command, " where Tag=="); 
    1105                                                     miss[activeMission].services[k].output[t].erase(0, 1); 
    1106                                         sprintf(_data_DB->command, "%s'%s';", _data_DB->command, miss[activeMission].services[j].output[t].c_str()); 
     1093                                                _data_DB->command="SELECT "; 
     1094                                                _data_DB->command.append(_data_DB->tablename); 
     1095                                                _data_DB->command.append(".* from "); 
     1096                                                _data_DB->command.append(_data_DB->tablename); 
     1097                                                _data_DB->command.append(" where Tag=='"); 
     1098                                                _data_DB->command.append(miss[activeMission].services[j].output[t].erase(0, 1)); 
     1099                                                _data_DB->command.append("';"); 
    11071100                                                    sqlite3_stmt * pStatement; 
    1108                                                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
     1101                                                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    11091102                                                    if (rc == SQLITE_OK){  
    11101103                                                        if (sqlite3_step(pStatement) == SQLITE_ROW) 
     
    11151108                                                        } 
    11161109                                                    } else { 
    1117                                                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
     1110                                                        printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    11181111                                                    } 
    11191112                                                    sqlite3_finalize(pStatement); 
    1120                                                     token2 = strtok((char *)data2.c_str(), "@"); 
    1121                                                     token2 = strtok(NULL, "@"); 
    1122                                                     token2 = strtok(NULL, "@"); 
    1123                                                 if(atof(token) > atof(token2)) 
     1113 
     1114                                                int pos = data2.find_last_of("@", data2.length()-2); 
     1115                                                token2 = data2.substr(pos+1); 
     1116                                                token2.erase(token2.length()-1); 
     1117                                                if(atof(token.c_str()) > atof(token2.c_str())) 
    11241118                                                    doit=true; 
    11251119                                                data.clear(); 
    11261120                                            } 
    1127                                             else if (strstr(miss[activeMission].services[j].output[t].c_str(), token)) 
     1121                                            else if (miss[activeMission].services[j].output[t].find(token) != string::npos) 
    11281122                                                doit=true; 
    11291123                                            if(doit){ 
    1130                                                 //printf("L1:if taken\n"); 
     1124                                                //printf("Level 1:if taken\n"); 
    11311125                                                for(uint16_t l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){  
    1132                                                     //printf("transacting data for k=%d\n", k); 
    11331126                                                    TransactData(l); 
    11341127                                                } 
    11351128                                            } 
    11361129                                            else 
    1137                                                 //printf("L2: if not taken\n"); 
     1130                                                //printf("Level 2:if not taken\n"); 
    11381131                                                numstatements[2] +=miss[activeMission].services[j].num_conds+1; 
    11391132                                                j+=miss[activeMission].services[j].num_conds; 
    1140                                             //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
     1133                                            //printf("Level 2:doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
    11411134                                        }else if(miss[activeMission].services[j].name.compare("dowhile")==0){ 
    11421135                                            numstatements[0]=0; 
    1143                                             //printf("L2 while detected\n"); 
     1136                                            //printf("Level 2:while detected\n"); 
    11441137                                            while(true){ 
    11451138                                                uint16_t l; 
    11461139                                                    for(l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){  
    11471140                                                        TransactData(l); 
    1148                                                         //printf("l=%d\n", l); 
    11491141                                                    } 
    11501142                                                    data.clear(); 
    1151                                                     //printf("L2:while detected %d, %d\n", k, miss[activeMission].services[i].num_conds); 
    11521143                                                    input.clear(); 
    11531144                                                    check.clear(); 
     
    11561147                                                        if(!miss[activeMission].services[j].output[t].empty()){ 
    11571148                                                            input=miss[activeMission].services[l-1].output[t]; 
    1158                                                             strcpy(_data_DB->command, "SELECT "); 
    1159                                                             strcat(_data_DB->command, _data_DB->tablename); 
    1160                                                             strcat(_data_DB->command, ".* from "); 
    1161                                                             strcat(_data_DB->command, _data_DB->tablename); 
    1162                                                             strcat(_data_DB->command, " where Tag=="); 
    1163                                                             sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
     1149                                                            _data_DB->command="SELECT "; 
     1150                                                            _data_DB->command.append(_data_DB->tablename); 
     1151                                                            _data_DB->command.append(".* from "); 
     1152                                                            _data_DB->command.append(_data_DB->tablename); 
     1153                                                            _data_DB->command.append(" where Tag=='"); 
     1154                                                            _data_DB->command.append(input); 
     1155                                                            _data_DB->command.append("';"); 
    11641156                                                            sqlite3_stmt * pStatement; 
    1165                                                             rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
     1157                                                            rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    11661158                                                            if (rc == SQLITE_OK){  
    11671159                                                                if (sqlite3_step(pStatement) == SQLITE_ROW) 
     
    11721164                                                                } 
    11731165                                                            } else { 
    1174                                                                 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
     1166                                                                printf("data_DB:: SQL statement error. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    11751167                                                            } 
    11761168                                                            sqlite3_finalize(pStatement); 
    1177                                                             //printf("data=%s\n", data.c_str()); 
    1178                                                             token = strtok((char *)data.c_str(), "@"); 
    1179                                                             token = strtok(NULL, "@"); 
    1180                                                             token = strtok(NULL, "@"); 
    1181                                                             //printf("data=%s\n", token); 
     1169                                                            //printf("Level 2:data=%s\n", data.c_str()); 
     1170                                                            int pos = data.find_last_of("@", data.length()-2); 
     1171                                                            token = data.substr(pos+1); 
     1172                                                            token.erase(token.length()-1); 
     1173                                                            //printf("Level 2:token=%s\n", token); 
    11821174                                                            break; 
    11831175                                                        } 
    11841176                                                    } 
    1185                                                     //printf("L2:--- %s  %s---\n", miss[activeMission].services[j].output[t].c_str(), token); 
    1186                                                     if(strstr(miss[activeMission].services[j].output[t].c_str(), token)){ 
    1187                                                         //printf("L2:while taken again!\n"); 
     1177                                                    //printf("Level 2:--- %s  %s---\n", miss[activeMission].services[j].output[t].c_str(), token); 
     1178                                                    if(miss[activeMission].services[j].output[t].find(token) != string::npos){ 
     1179                                                        //printf("Level 2:while taken again!\n"); 
    11881180                                                    } 
    11891181                                                    else { 
    1190                                                         //printf("no more while\n"); 
     1182                                                        //printf("Level 2:no more while\n"); 
    11911183                                                        break;} 
    11921184                                            } 
    11931185                                            j+=miss[activeMission].services[j].num_conds; 
    1194                                             //printf("doneif\n"); 
    11951186                                        } 
    11961187                                        else{ 
    1197                                             //printf("NO L2 COND!\n"); 
     1188                                            //printf("Level 2: no conditional\n"); 
    11981189                                            numstatements[2]=0; 
    11991190                                            TransactData(j); 
     
    12021193                            } 
    12031194                            else{ 
    1204                                 //printf("L1: if not taken\n"); 
     1195                                //printf("Level 1: if not taken\n"); 
    12051196                            } 
    12061197                                numstatements[1] +=miss[activeMission].services[k].num_conds+1; 
     
    12091200                        }else if(miss[activeMission].services[k].name.compare("dowhile")==0){ 
    12101201                            numstatements[0]=0; 
    1211                             //printf("L1 while detected\n"); 
     1202                            //printf("Level 1: while detected\n"); 
    12121203                            while(true){ 
    12131204                                uint16_t j; 
     
    12161207                                    } 
    12171208                                    data.clear(); 
    1218                                     //printf("L1:while detected %d, %d\n", k, miss[activeMission].services[i].num_conds); 
    12191209                                    input.clear(); 
    12201210                                    check.clear(); 
     
    12231213                                        if(!miss[activeMission].services[k].output[t].empty()){ 
    12241214                                            input=miss[activeMission].services[j-1].output[t]; 
    1225                                             //printf("input=%s\n", input.c_str()); 
    1226                                             strcpy(_data_DB->command, "SELECT "); 
    1227                                             strcat(_data_DB->command, _data_DB->tablename); 
    1228                                             strcat(_data_DB->command, ".* from "); 
    1229                                             strcat(_data_DB->command, _data_DB->tablename); 
    1230                                             strcat(_data_DB->command, " where Tag=="); 
    1231                                             sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
     1215                                            _data_DB->command="SELECT "; 
     1216                                            _data_DB->command.append(_data_DB->tablename); 
     1217                                            _data_DB->command.append(".* from "); 
     1218                                            _data_DB->command.append(_data_DB->tablename); 
     1219                                            _data_DB->command.append(" where Tag=='"); 
     1220                                            _data_DB->command.append(input); 
     1221                                            _data_DB->command.append("';"); 
    12321222                                            sqlite3_stmt * pStatement; 
    1233                                             rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
     1223                                            rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    12341224                                            if (rc == SQLITE_OK){  
    12351225                                                if (sqlite3_step(pStatement) == SQLITE_ROW) 
     
    12401230                                                } 
    12411231                                            } else { 
    1242                                                 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
     1232                                                printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    12431233                                            } 
    12441234                                            sqlite3_finalize(pStatement); 
    1245                                             //printf("data=%s\n", data.c_str()); 
    1246                                             token = strtok((char *)data.c_str(), "@"); 
    1247                                             token = strtok(NULL, "@"); 
    1248                                             token = strtok(NULL, "@"); 
    1249                                             //printf("data=%s\n", token); 
     1235                                            //printf("Level 1:data=%s\n", data.c_str()); 
     1236                                            int pos = data.find_last_of("@", data.length()-2); 
     1237                                            token = data.substr(pos+1); 
     1238                                            token.erase(token.length()-1); 
     1239                                            //printf("Level 1:token=%s\n", token); 
    12501240                                            break; 
    12511241                                        } 
    12521242                                    } 
    1253                                     //printf("L1:--- %s  %s---\n", miss[activeMission].services[k].output[t].c_str(), token); 
    1254                                     if(strstr(miss[activeMission].services[k].output[t].c_str(), token)){ 
    1255                                         //printf("L1:while taken again!\n"); 
     1243                                    //printf("Level 1:--- %s  %s---\n", miss[activeMission].services[k].output[t].c_str(), token); 
     1244                                    if(miss[activeMission].services[k].output[t].find(token) != string::npos){ 
     1245                                        //printf("Level 1:while taken again!\n"); 
    12561246                                    } 
    12571247                                    else { 
    1258                                         //printf("no more while\n"); 
     1248                                        //printf("Level 1:While finished\n"); 
    12591249                                        break;} 
    12601250                            } 
    12611251                            k+=miss[activeMission].services[k].num_conds; 
    1262                             //printf("doneif\n"); 
    12631252                        } 
    12641253                        else{ 
    1265                             //printf("NO L1 COND!\n"); 
     1254                            //printf("Level1:No conditional\n"); 
    12661255                            numstatements[1]=0; 
    12671256                            TransactData(k); 
    12681257                        } 
    1269                  
    1270                         //numstatements[0] +=miss[activeMission].services[i].num_conds+1; 
    1271                         //i+=miss[activeMission].services[i].num_conds; 
    1272             //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
    12731258                } 
    12741259            } 
    1275            // else 
    1276                 //printf("LO if not taken\n"); 
    12771260            numstatements[0] +=miss[activeMission].services[i].num_conds+1; 
    12781261            i+=miss[activeMission].services[i].num_conds; 
    1279             //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
    12801262        } 
    12811263        else if(miss[activeMission].services[i].name.compare("dowhile")==0) 
    12821264        { 
    12831265            numstatements[0]=0; 
    1284             //printf("L0 while detected\n"); 
     1266            //printf("Level 0: while detected\n"); 
    12851267            while(true){ 
    12861268                uint16_t k; 
     
    12951277                        if(!miss[activeMission].services[i].output[t].empty()){ 
    12961278                            input=miss[activeMission].services[k-1].output[t]; 
    1297                             //printf("input=%s\n", input.c_str()); 
    1298                             strcpy(_data_DB->command, "SELECT "); 
    1299                             strcat(_data_DB->command, _data_DB->tablename); 
    1300                             strcat(_data_DB->command, ".* from "); 
    1301                             strcat(_data_DB->command, _data_DB->tablename); 
    1302                             strcat(_data_DB->command, " where Tag=="); 
    1303                             sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 
     1279                            _data_DB->command="SELECT "; 
     1280                            _data_DB->command.append(_data_DB->tablename); 
     1281                            _data_DB->command.append(".* from "); 
     1282                            _data_DB->command.append(_data_DB->tablename); 
     1283                            _data_DB->command.append(" where Tag=='"); 
     1284                            _data_DB->command.append(input); 
     1285                            _data_DB->command.append("';"); 
    13041286                            sqlite3_stmt * pStatement; 
    1305                             rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 
     1287                            rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    13061288                            if (rc == SQLITE_OK){  
    13071289                                if (sqlite3_step(pStatement) == SQLITE_ROW) 
     
    13121294                                } 
    13131295                            } else { 
    1314                                 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 
     1296                                printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    13151297                            } 
    13161298                            sqlite3_finalize(pStatement); 
    1317                             token = strtok((char *)data.c_str(), "@"); 
    1318                             token = strtok(NULL, "@"); 
    1319                             token = strtok(NULL, "@"); 
     1299                            int pos = data.find_last_of("@", data.length()-2); 
     1300                            token = data.substr(pos+1); 
     1301                            token.erase(token.length()-1); 
    13201302                            break; 
    13211303                        } 
    13221304                    } 
    1323                     //printf("L0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
    1324                     if(strstr(miss[activeMission].services[i].output[t].c_str(), token)){ 
    1325                         //printf("L0:while taken again!\n"); 
     1305                    //printf("Level 0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
     1306                    if(miss[activeMission].services[i].output[t].find(token) != string::npos){ 
     1307                        //printf("Level 0:while taken again!\n"); 
    13261308                    } 
    13271309                    else { 
    1328                         //printf("no more while\n"); 
     1310                        //printf("Level 0:no more while\n"); 
    13291311                        break;} 
    13301312            } 
    13311313            i+=miss[activeMission].services[i].num_conds; 
    1332             //printf("doneif\n"); 
    13331314        } 
    13341315        else{ 
    13351316            numstatements[0]=0; 
    1336             //printf("L0 Neither if nor while\n"); 
     1317            //printf("Level 0: No conditional\n"); 
    13371318            TransactData(i);} 
    13381319        i++; 
     
    13401321    i=0; 
    13411322    data.clear(); 
    1342  
    1343  
    13441323 
    13451324    if(!shellFound) 
     
    13521331        SendMessage(shellSocketFD, buffer); 
    13531332        for(int t = 0; t < k; t++){ 
    1354             //printf("---%s---\n", miss[activeMission].input[t].c_str()); 
    13551333            SendMessage(shellSocketFD, miss[activeMission].input[t].c_str());  
    13561334            SendMessage(shellSocketFD, "0"); 
     
    13851363ServiceManagementLayer::ListServices() 
    13861364{ 
    1387     strcpy(_services_DB->command, "select "); 
    1388     strcat(_services_DB->command, _services_DB->tablename); 
    1389     strcat(_services_DB->command, ".* from "); 
    1390     strcat(_services_DB->command, _services_DB->tablename); 
    1391     strcat(_services_DB->command, ";"); 
     1365    _services_DB->command="select "; 
     1366    _services_DB->command.append(_services_DB->tablename); 
     1367    _services_DB->command.append(".* from "); 
     1368    _services_DB->command.append(_services_DB->tablename); 
     1369    _services_DB->command.append(";"); 
    13921370 
    13931371    // execute print (select all)  command     
    13941372    char *errorMsg; 
    1395     int rc = sqlite3_exec(_services_DB->db, _services_DB->command, callback, 0, &errorMsg); 
     1373    int rc = sqlite3_exec(_services_DB->db, _services_DB->command.c_str(), callback, 0, &errorMsg); 
    13961374    if( rc!=SQLITE_OK && rc!=101 ) 
    13971375        fprintf(stderr, "SQL error: %s\n", errorMsg); 
    1398     printf("database %s, table %s:\n", _services_DB->filename, _services_DB->tablename); 
     1376    printf("database %s, table %s:\n", _services_DB->filename.c_str(), _services_DB->tablename.c_str()); 
    13991377} 
    14001378 
     
    16231601    memset(buffer, 0, 256); 
    16241602    ReadMessage(CE_List[ID].FD, buffer);  
    1625     strcpy(_services_DB->command, "DELETE FROM "); 
    1626     strcat(_services_DB->command, _services_DB->tablename); 
    1627     strcat(_services_DB->command, " WHERE ID_Num IN (SELECT"); 
    1628     sprintf(_services_DB->command, " %s %d",_services_DB->command, ID); 
    1629     strcat(_services_DB->command, " FROM "); 
    1630     strcat(_services_DB->command, _services_DB->tablename); 
    1631     strcat(_services_DB->command, " WHERE Service_Name"); 
    1632     strcat(_services_DB->command, "=="); 
    1633     sprintf(_services_DB->command, "%s'%s');", _services_DB->command, buffer); 
     1603    _services_DB->command="DELETE FROM "; 
     1604    _services_DB->command.append(_services_DB->tablename); 
     1605    _services_DB->command.append(" WHERE ID_Num IN (SELECT "); 
     1606    char tmp[3]; 
     1607    memset(tmp,0,3); 
     1608    sprintf(tmp, "%d", ID); 
     1609    _services_DB->command.append(tmp); 
     1610    _services_DB->command.append(" FROM "); 
     1611    _services_DB->command.append(_services_DB->tablename); 
     1612    _services_DB->command.append(" WHERE Service_Name"); 
     1613    _services_DB->command.append("=='"); 
     1614    _services_DB->command.append(buffer); 
     1615    _services_DB->command.append("');"); 
    16341616    char *errorMsg; 
    1635     int rc = sqlite3_exec(_services_DB->db, _services_DB->command, callback, 0, &errorMsg); 
     1617    int rc = sqlite3_exec(_services_DB->db, _services_DB->command.c_str(), callback, 0, &errorMsg); 
    16361618    if( rc!=SQLITE_OK && rc!=101 ) 
    16371619        fprintf(stderr, "SQL error: %s\n", errorMsg); 
     
    16641646 
    16651647    //Deregister the services 
    1666     strcpy(_services_DB->command, "DELETE FROM "); 
    1667     strcat(_services_DB->command, _services_DB->tablename); 
    1668     strcat(_services_DB->command, " WHERE "); 
    1669     strcat(_services_DB->command, "ID_Num"); 
    1670     strcat(_services_DB->command, "=="); 
    1671     sprintf(_services_DB->command, "%s%d;", _services_DB->command, ID); 
     1648    _services_DB->command="DELETE FROM "; 
     1649    _services_DB->command.append(_services_DB->tablename); 
     1650    _services_DB->command.append(" WHERE "); 
     1651    _services_DB->command.append("ID_Num"); 
     1652    _services_DB->command.append("=="); 
     1653    char tmp[3]; 
     1654    memset(tmp,0,3); 
     1655    sprintf(tmp, "%d", ID); 
     1656    _services_DB->command.append(tmp); 
     1657    _services_DB->command.append(";"); 
    16721658    char *errorMsg; 
    1673     int rc = sqlite3_exec(_services_DB->db, _services_DB->command, callback, 0, &errorMsg); 
     1659    int rc = sqlite3_exec(_services_DB->db, _services_DB->command.c_str(), callback, 0, &errorMsg); 
    16741660    if( rc!=SQLITE_OK && rc!=101 ) 
    16751661        fprintf(stderr, "SQL error: %s\n", errorMsg);