Changeset 438

Show
Ignore:
Timestamp:
08/25/09 15:00:10 (15 years ago)
Author:
bhilburn
Message:

Made 2221 substitions (tabs to spaces) on nearly 800 lines.

Files:
1 modified

Legend:

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

    r421 r438  
    139139//Also, their sizes are hardcoded into the code in various places; a fix for a future version. 
    140140ServiceManagementLayer::ServiceManagementLayer(const char* SML_Config, \ 
    141         const char* serverName, const char* serverPort, int16_t clientPort) 
     141    const char* serverName, const char* serverPort, int16_t clientPort) 
    142142{ 
    143143    LOG("Creating Service Management Layer.\n"); 
     
    151151    miss = new Mission[10]; 
    152152    for(int i = 0; i < 10; i++) 
    153         miss[i].services = new Service[30]; 
     153        miss[i].services = new Service[30]; 
    154154 
    155155    Current_ID = 0; 
     
    296296/* CALLED BY: constructor 
    297297 * INPUTS: |serverName| the IPv4 name of the server (127.0.0.1 for localhost) 
    298  *         |serverPort| the port on the server to connect to 
     298 *       |serverPort| the port on the server to connect to 
    299299 * OUTPUTS: <none> 
    300300 * 
     
    321321ServiceManagementLayer::MessageHandler(int32_t ID) 
    322322{ 
    323     char buffer[256];    
     323    char buffer[256];     
    324324    memset(buffer, 0, 256);   
    325325    int32_t _FD;   
    326326     
    327327    if(ID != -1) 
    328         _FD = CE_List[ID].FD; 
     328    _FD = CE_List[ID].FD; 
    329329    else  
    330         _FD = shellSocketFD; 
     330    _FD = shellSocketFD; 
    331331    ReadMessage(_FD, buffer); 
    332332    //printf("MH_buffer = %s\n", buffer); 
     
    371371    } 
    372372    else if(strcmp(buffer, "register_engine_cognitive") == 0) { 
    373         RegisterCognitiveEngine(ID); 
     373         RegisterCognitiveEngine(ID); 
    374374    } 
    375375    else if(strcmp(buffer, "register_service") == 0) { 
    376         ReceiveServices(ID); 
     376     ReceiveServices(ID); 
    377377    } 
    378378    else if(strcmp(buffer, "send_component_type") == 0) { 
    379         SendComponentType(); 
     379     SendComponentType(); 
    380380    } 
    381381    else if(strcmp(buffer, "list_services") == 0) { 
    382         ListServices(); 
     382     ListServices(); 
    383383    } 
    384384    else if(strcmp(buffer, "set_active_mission") == 0) { 
    385         SetActiveMission(); 
     385    SetActiveMission(); 
    386386    } 
    387387    else if(strcmp(buffer, "request_optimization") == 0) { 
    388         PerformActiveMission(); 
     388    PerformActiveMission(); 
    389389    } 
    390390    else if(strcmp(buffer, "deregister_engine_cognitive") == 0) { 
    391         DeregisterCognitiveEngine(ID); 
     391    DeregisterCognitiveEngine(ID); 
    392392    } 
    393393    else if(strcmp(buffer, "deregister_service") == 0) { 
    394         DeregisterServices(ID); 
     394    DeregisterServices(ID); 
    395395    } 
    396396} 
     
    478478    while(rc!=0){ 
    479479        memset(buffer, 0, 256); 
    480         //Receive data from Shell 
    481         ReadMessage(shellSocketFD, buffer); 
    482         //printf("buffer = %s\n", buffer); 
    483         //Send data to CE 
    484         SendMessage(CE_List[ID].FD, buffer); 
     480    //Receive data from Shell 
     481    ReadMessage(shellSocketFD, buffer); 
     482    //printf("buffer = %s\n", buffer); 
     483    //Send data to CE 
     484    SendMessage(CE_List[ID].FD, buffer); 
    485485        FD_ZERO(&sockSet); 
    486486        FD_SET(shellSocketFD, &sockSet); 
     
    515515    //Send data until the CE sends an ACK message back 
    516516    while(rc!=0){ 
    517         //printf("transfering...\n"); 
     517    //printf("transfering...\n"); 
    518518        memset(buffer, 0, 256); 
    519         //Receive data from Shell 
    520         ReadMessage(shellSocketFD, buffer); 
    521         //printf("buffer = %s\n", buffer); 
    522         //Send data to CE 
    523         SendMessage(CE_List[ID].FD, buffer); 
     519    //Receive data from Shell 
     520    ReadMessage(shellSocketFD, buffer); 
     521    //printf("buffer = %s\n", buffer); 
     522    //Send data to CE 
     523    SendMessage(CE_List[ID].FD, buffer); 
    524524        FD_ZERO(&sockSet); 
    525525        FD_SET(shellSocketFD, &sockSet); 
     
    594594    for(activeMission = 0; activeMission < 10; activeMission++) 
    595595    { 
    596         //Find the active mission by comparing mission ID's 
    597         if(miss[activeMission].missionID == missID) 
    598             break; 
     596    //Find the active mission by comparing mission ID's 
     597    if(miss[activeMission].missionID == missID) 
     598        break; 
    599599    } 
    600600 
     
    602602    //For each service in the mission 
    603603    for(uint16_t i = 0; i < miss[activeMission].numServices; i++) 
    604     {    
    605         //Check whether the current service is an actual service or a conditional 
    606         if(miss[activeMission].services[i].name.compare("if") && miss[activeMission].services[i].name.compare("dowhile") && \ 
    607            miss[activeMission].services[i].name.compare("shell")){ 
    608             //If it is a service, search the database of registered services to find the ID of the component that registered it 
    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("';"); 
    616          
     604    {     
     605    //Check whether the current service is an actual service or a conditional 
     606    if(miss[activeMission].services[i].name.compare("if") && miss[activeMission].services[i].name.compare("dowhile") && \ 
     607       miss[activeMission].services[i].name.compare("shell")){ 
     608        //If it is a service, search the database of registered services to find the ID of the component that registered it 
     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("';"); 
     616     
    617617            sqlite3_stmt * pStatement; 
    618618            int rc = sqlite3_prepare_v2(_services_DB->db, _services_DB->command.c_str(), -1, &pStatement, NULL); 
    619619            if (rc == SQLITE_OK){  
    620620                if (sqlite3_step(pStatement) == SQLITE_ROW) 
    621                      miss[activeMission].services[i].componentID =  sqlite3_column_int(pStatement, 0);  
     621                 miss[activeMission].services[i].componentID =  sqlite3_column_int(pStatement, 0);  
    622622                else { 
    623                     printf("services_DB:: Mission requires service %s not provided by any connected component.\n",miss[activeMission].services[i].name.c_str()); 
    624                     rc=31337; 
    625                 } 
     623                printf("services_DB:: Mission requires service %s not provided by any connected component.\n",miss[activeMission].services[i].name.c_str()); 
     624            rc=31337; 
     625            } 
    626626             } else { 
    627                 printf("services_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_services_DB->command.c_str()); 
    628             } 
    629                 //printf("s_name=%s\n",miss[activeMission].services[i].name.c_str()); 
     627            printf("services_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_services_DB->command.c_str()); 
     628            } 
     629        //printf("s_name=%s\n",miss[activeMission].services[i].name.c_str()); 
    630630            sqlite3_finalize(pStatement); 
    631             miss[activeMission].services[i].socketFD = CE_List[miss[activeMission].services[i].componentID].FD; 
    632             //Set the FD and ID of the service to refer to the component where the service exists 
    633         } 
    634         //Nothing to be done for conditionals at this stage 
     631        miss[activeMission].services[i].socketFD = CE_List[miss[activeMission].services[i].componentID].FD; 
     632        //Set the FD and ID of the service to refer to the component where the service exists 
     633    } 
     634    //Nothing to be done for conditionals at this stage 
    635635    } 
    636636  
     
    663663   if(miss[activeMission].services[sourceID].name.find("shell")!=string::npos) 
    664664   {  
    665         int k = 0; 
    666         shellFound=true; 
    667         while(k<10 && !miss[activeMission].input[k].empty()){ 
    668             k++; 
    669         } 
    670         sprintf(buffer, "%d", k); 
    671         SendMessage(shellSocketFD, buffer); 
    672         for(int t = 0; t < k; t++){ 
    673             memset(buffer, 0 , 256); 
     665    int k = 0; 
     666    shellFound=true; 
     667    while(k<10 && !miss[activeMission].input[k].empty()){ 
     668        k++; 
     669    } 
     670    sprintf(buffer, "%d", k); 
     671    SendMessage(shellSocketFD, buffer); 
     672    for(int t = 0; t < k; t++){ 
     673        memset(buffer, 0 , 256); 
    674674            _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("';"); 
     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("';"); 
    681681            sqlite3_stmt * pStatement; 
    682682            int rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    683683            if (rc == SQLITE_OK){  
    684684                if (sqlite3_step(pStatement) == SQLITE_ROW) 
    685                     data=((const char*) sqlite3_column_text(pStatement, 1));  
     685                data=((const char*) sqlite3_column_text(pStatement, 1));  
    686686                else { 
    687                     printf("3data_DB:: Data not yet in DB., %s\n", _data_DB->command.c_str()); 
    688                     rc=31337; 
    689                 } 
     687                printf("3data_DB:: Data not yet in DB., %s\n", _data_DB->command.c_str()); 
     688            rc=31337; 
     689            } 
    690690            }  
    691             else { 
    692                 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     691        else { 
     692            printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    693693            } 
    694694            sqlite3_finalize(pStatement); 
    695             token = strtok((char *)data.c_str(), "@"); 
    696             token = strtok(NULL, "@"); 
    697             SendMessage(shellSocketFD, token); 
    698             token = strtok(NULL, "@"); 
    699             SendMessage(shellSocketFD, token); 
    700         } 
    701         return; 
     695        token = strtok((char *)data.c_str(), "@"); 
     696        token = strtok(NULL, "@"); 
     697        SendMessage(shellSocketFD, token); 
     698        token = strtok(NULL, "@"); 
     699        SendMessage(shellSocketFD, token); 
     700    } 
     701    return; 
    702702   }  
    703703 
     
    709709   //If the service takes a parameter, feed that parameter in 
    710710   if(!miss[activeMission].services[sourceID].parameter.empty()){ 
    711         //printf("sending parameter!\n"); 
    712         SendMessage(miss[activeMission].services[sourceID].socketFD, "1"); 
    713         SendMessage(miss[activeMission].services[sourceID].socketFD, "parameter"); 
    714         SendMessage(miss[activeMission].services[sourceID].socketFD, miss[activeMission].services[sourceID].parameter.c_str()); 
     711    //printf("sending parameter!\n"); 
     712    SendMessage(miss[activeMission].services[sourceID].socketFD, "1"); 
     713    SendMessage(miss[activeMission].services[sourceID].socketFD, "parameter"); 
     714    SendMessage(miss[activeMission].services[sourceID].socketFD, miss[activeMission].services[sourceID].parameter.c_str()); 
    715715    } 
    716716 
     
    719719    while(i < 10 && !miss[activeMission].services[sourceID].input[i].empty()){ 
    720720        _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("';"); 
     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("';"); 
    727727        sqlite3_stmt * pStatement; 
    728728        int rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    729729        if (rc == SQLITE_OK){  
    730730            if (sqlite3_step(pStatement) == SQLITE_ROW) 
    731                  data.append((const char*) sqlite3_column_text(pStatement, 1));  
     731             data.append((const char*) sqlite3_column_text(pStatement, 1));  
    732732            else { 
    733                     printf("2data_DB:: Data not yet in DB.\n"); 
    734                     rc=31337; 
    735             } 
     733                printf("2data_DB:: Data not yet in DB.\n"); 
     734            rc=31337; 
     735        } 
    736736        }  
    737         else { 
    738             printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     737    else { 
     738        printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    739739        } 
    740740        sqlite3_finalize(pStatement); 
    741741 
    742             token = strtok((char *)data.c_str(), "@"); 
    743         while(token){ 
    744             SendMessage(miss[activeMission].services[sourceID].socketFD, token); 
    745             token = strtok(NULL, "@"); 
    746         } 
    747         i++; 
    748         data.clear(); 
     742        token = strtok((char *)data.c_str(), "@"); 
     743    while(token){ 
     744        SendMessage(miss[activeMission].services[sourceID].socketFD, token); 
     745        token = strtok(NULL, "@"); 
     746    } 
     747    i++; 
     748    data.clear(); 
    749749    } 
    750750    int32_t j = 0; 
     
    752752    //Receive and store the output data 
    753753    while(j < 10 && !miss[activeMission].services[sourceID].output[j].empty()){ 
    754         int rc; 
    755         memset(buffer, 0, 256); 
    756         //Read the number of datapairs for this output 
    757         ReadMessage(miss[activeMission].services[sourceID].socketFD, buffer); 
    758         data.append(buffer); 
    759         data.append("@"); 
    760         int t = atoi(buffer); 
    761         for(int k = 0; k < t; k++){ 
    762             //Read the datapairs incrementally and deliminate it with the "@" symbol 
    763             memset(buffer, 0, 256); 
    764             ReadMessage(miss[activeMission].services[sourceID].socketFD, buffer); 
    765             data.append(buffer); 
    766             data.append("@"); 
    767             memset(buffer, 0, 256); 
    768             ReadMessage(miss[activeMission].services[sourceID].socketFD, buffer); 
    769             data.append(buffer); 
    770             data.append("@"); 
    771         } 
    772  
    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("');"); 
    785         char *errorMsg; 
    786         rc = sqlite3_exec(_data_DB->db, _data_DB->command.c_str(), callback, 0, &errorMsg); 
    787         if( rc!=SQLITE_OK && rc!=101 ) 
    788             fprintf(stderr, "SQL error: %s\n", errorMsg); 
     754    int rc; 
     755    memset(buffer, 0, 256); 
     756    //Read the number of datapairs for this output 
     757    ReadMessage(miss[activeMission].services[sourceID].socketFD, buffer); 
     758    data.append(buffer); 
     759    data.append("@"); 
     760    int t = atoi(buffer); 
     761    for(int k = 0; k < t; k++){ 
     762        //Read the datapairs incrementally and deliminate it with the "@" symbol 
     763        memset(buffer, 0, 256); 
     764        ReadMessage(miss[activeMission].services[sourceID].socketFD, buffer); 
     765        data.append(buffer); 
     766        data.append("@"); 
     767        memset(buffer, 0, 256); 
     768        ReadMessage(miss[activeMission].services[sourceID].socketFD, buffer); 
     769        data.append(buffer); 
     770        data.append("@"); 
     771    } 
     772 
     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("');"); 
     785        char *errorMsg; 
     786       rc = sqlite3_exec(_data_DB->db, _data_DB->command.c_str(), callback, 0, &errorMsg); 
     787       if( rc!=SQLITE_OK && rc!=101 ) 
     788           fprintf(stderr, "SQL error: %s\n", errorMsg); 
    789789        //printf("S: done putting ouptut data into DB for ID#='%d', data=%s\n", sourceID, data.c_str()); 
    790         j++; 
     790    j++; 
    791791        data.clear(); 
    792792    } 
     
    865865        memset(buffer1, 0, 256); 
    866866        ReadMessage(shellSocketFD, buffer1); 
    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(") "); 
     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(") "); 
    874874        memset(buffer, 0, 256); 
    875875        ReadMessage(shellSocketFD, buffer); 
    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); 
    884         if( rc!=SQLITE_OK && rc!=101 ) 
    885             fprintf(stderr, "SQL error: %s\n", 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); 
     884       if( rc!=SQLITE_OK && rc!=101 ) 
     885           fprintf(stderr, "SQL error: %s\n", errorMsg); 
    886886    } 
    887887 
     
    907907    while(i < miss[activeMission].numServices) 
    908908    { 
    909         if(miss[activeMission].services[i].name.compare("if")==0) 
    910         { 
    911            //printf("L0:if detected\n"); 
    912             input.clear(); 
    913             check.clear(); 
    914             int t; 
    915             for(t = 0; t < 10; t++){ 
    916                 if(!miss[activeMission].services[i].output[t].empty()){ 
    917                     input=miss[activeMission].services[i-numstatements[0]-1].output[t]; 
    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("';"); 
    925                     sqlite3_stmt * pStatement; 
    926                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    927                     if (rc == SQLITE_OK){  
    928                         if (sqlite3_step(pStatement) == SQLITE_ROW) 
    929                              data = (const char *) sqlite3_column_text(pStatement, 1);  
    930                         else { 
    931                                 printf("1 data_DB:: Data not yet in DB.\n"); 
    932                                 rc=31337; 
    933                         } 
    934                     } else { 
    935                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    936                     } 
    937                     sqlite3_finalize(pStatement); 
    938                     //printf("data=%s\n", data.c_str()); 
    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); 
    943                 data.clear(); 
    944                     break; 
    945                 } 
    946             } 
    947             //printf("Level 0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
    948             bool doit = false; 
    949             if(miss[activeMission].services[i].output[t].find(">") != string::npos){ 
    950                     std::string data2; 
    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("';"); 
    958                     sqlite3_stmt * pStatement; 
    959                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    960                     if (rc == SQLITE_OK){  
    961                         if (sqlite3_step(pStatement) == SQLITE_ROW) 
    962                              data2 = (const char *) sqlite3_column_text(pStatement, 1);  
    963                         else { 
    964                                 printf("2 data_DB:: Data not yet in DB.\n"); 
    965                                 rc=31337; 
    966                         } 
    967                     } else { 
    968                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    969                     } 
    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())) 
    977                         doit=true; 
    978                     //printf("%s %s\n", buffer, token); 
    979             } 
    980             else if (miss[activeMission].services[i].output[t].find(token) != string::npos) 
    981                 doit=true; 
    982             if(doit){ 
    983                 //printf("Level 0:if taken\n"); 
    984                 for(uint16_t k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){  
    985                     if(miss[activeMission].services[k].name.compare("if")==0){ 
    986                         //printf("Level 1:if detected\n"); 
    987                             input.clear(); 
    988                             check.clear(); 
    989                             for(t = 0; t < 10; t++){ 
    990                                 if(!miss[activeMission].services[k].output[t].empty()){ 
    991                                     input=miss[activeMission].services[k-numstatements[1]-1].output[t]; 
    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("';"); 
    999                                     sqlite3_stmt * pStatement; 
    1000                                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    1001                                     if (rc == SQLITE_OK){  
    1002                                         if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1003                                              data = (const char *) sqlite3_column_text(pStatement, 1);  
    1004                                         else { 
    1005                                                 printf("3 data_DB:: Data not yet in DB.\n"); 
    1006                                                 rc=31337; 
    1007                                         } 
    1008                                     } else { 
    1009                                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    1010                                     } 
    1011                                     sqlite3_finalize(pStatement); 
    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); 
    1017                                     break; 
    1018                                 } 
    1019                             } 
    1020                             bool doit = false; 
    1021                             if(miss[activeMission].services[k].output[t].find(">") != string::npos){ 
    1022                                     std::string data2; 
    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("';"); 
    1030                                     sqlite3_stmt * pStatement; 
    1031                                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    1032                                     if (rc == SQLITE_OK){  
    1033                                         if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1034                                              data2 = (const char *) sqlite3_column_text(pStatement, 1);  
    1035                                         else { 
    1036                                                 printf("4 data_DB:: Data not yet in DB.\n"); 
    1037                                                 rc=31337; 
    1038                                         } 
    1039                                     } else { 
    1040                                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    1041                                     } 
    1042                                     sqlite3_finalize(pStatement); 
    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; 
    1049                             } 
    1050                             else if (miss[activeMission].services[k].output[t].find(token) != string::npos) 
    1051                                 doit=true; 
    1052                             if(doit){ 
    1053                                 //printf("Level 1:if taken\n"); 
    1054                                 for(uint16_t j = k+1; j <= k+miss[activeMission].services[k].num_conds; j++){  
    1055                                     if(miss[activeMission].services[j].name.compare("if")==0){ 
    1056                                         //printf("Level 2:if detected\n"); 
    1057                                             input.clear(); 
    1058                                             check.clear(); 
    1059                                             for(t = 0; t < 10; t++){ 
    1060                                                 if(!miss[activeMission].services[j].output[t].empty()){ 
    1061                                                     input=miss[activeMission].services[j-numstatements[2]-1].output[t]; 
    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("';"); 
    1069                                                     sqlite3_stmt * pStatement; 
    1070                                                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    1071                                                     if (rc == SQLITE_OK){  
    1072                                                         if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1073                                                              data = (const char *) sqlite3_column_text(pStatement, 1);  
    1074                                                         else { 
    1075                                                                 printf("5 data_DB:: Data not yet in DB.\n"); 
    1076                                                                 rc=31337; 
    1077                                                         } 
    1078                                                     } else { 
    1079                                                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    1080                                                     } 
    1081                                                     sqlite3_finalize(pStatement); 
    1082                                                     //printf("data=%s\n", data.c_str()); 
    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()); 
    1087                                                     data.clear(); 
    1088                                                     break; 
    1089                                                 } 
    1090                                             } 
    1091                                             bool doit = false; 
    1092                                             if(miss[activeMission].services[j].output[t].find(">") != string::npos){ 
    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("';"); 
    1100                                                     sqlite3_stmt * pStatement; 
    1101                                                     rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    1102                                                     if (rc == SQLITE_OK){  
    1103                                                         if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1104                                                              data2 = (const char *) sqlite3_column_text(pStatement, 1);  
    1105                                                         else { 
    1106                                                                 printf("6 data_DB:: Data not yet in DB.\n"); 
    1107                                                                 rc=31337; 
    1108                                                         } 
    1109                                                     } else { 
    1110                                                         printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    1111                                                     } 
    1112                                                     sqlite3_finalize(pStatement); 
    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())) 
    1118                                                     doit=true; 
    1119                                                 data.clear(); 
    1120                                             } 
    1121                                             else if (miss[activeMission].services[j].output[t].find(token) != string::npos) 
    1122                                                 doit=true; 
    1123                                             if(doit){ 
    1124                                                 //printf("Level 1:if taken\n"); 
    1125                                                 for(uint16_t l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){  
    1126                                                     TransactData(l); 
    1127                                                 } 
    1128                                             } 
    1129                                             else 
    1130                                                 //printf("Level 2:if not taken\n"); 
    1131                                                 numstatements[2] +=miss[activeMission].services[j].num_conds+1; 
    1132                                                 j+=miss[activeMission].services[j].num_conds; 
    1133                                             //printf("Level 2:doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
    1134                                         }else if(miss[activeMission].services[j].name.compare("dowhile")==0){ 
    1135                                             numstatements[0]=0; 
    1136                                             //printf("Level 2:while detected\n"); 
    1137                                             while(true){ 
    1138                                                     uint16_t l; 
    1139                                                     for(l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){  
    1140                                                         TransactData(l); 
    1141                                                     } 
    1142                                                     data.clear(); 
    1143                                                     input.clear(); 
    1144                                                     check.clear(); 
    1145                                                     int t; 
    1146                                                     for(t = 0; t < 10; t++){ 
    1147                                                         if(!miss[activeMission].services[j].output[t].empty()){ 
    1148                                                             input=miss[activeMission].services[l-2].output[t]; 
    1149                                                             //printf("%s\n",input.c_str()); 
    1150                                                             _data_DB->command="SELECT "; 
    1151                                                             _data_DB->command.append(_data_DB->tablename); 
    1152                                                             _data_DB->command.append(".* from "); 
    1153                                                             _data_DB->command.append(_data_DB->tablename); 
    1154                                                             _data_DB->command.append(" where Tag=='"); 
    1155                                                             _data_DB->command.append(input); 
    1156                                                             _data_DB->command.append("';"); 
    1157                                                             sqlite3_stmt * pStatement; 
    1158  
    1159                                                             rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    1160                                                             if (rc == SQLITE_OK){  
    1161                                                                 if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1162                                                                      data = (const char *) sqlite3_column_text(pStatement, 1);  
    1163                                                                 else { 
    1164                                                                         printf("7 data_DB:: Data not yet in DB.: %s\n", _data_DB->command.c_str()); 
    1165                                                                         rc=31337; 
    1166                                                                 } 
    1167                                                             } else { 
    1168                                                                 printf("data_DB:: SQL statement error. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    1169                                                             } 
    1170                                                             sqlite3_finalize(pStatement); 
    1171                                                             //printf("Level 2:data=%s\n", data.c_str()); 
    1172                                                             int pos = data.find_last_of("@", data.length()-2); 
    1173                                                             token = data.substr(pos+1); 
    1174                                                             token.erase(token.length()-1); 
    1175                                                             //printf("Level 2:token=%s\n", token); 
    1176                                                             break; 
    1177                                                         } 
    1178                                                     } 
    1179                                                     //printf("Level 2:--- %s  %s---\n", miss[activeMission].services[j].output[t].c_str(), token); 
    1180                                                     if(miss[activeMission].services[j].output[t].find(token) != string::npos){ 
    1181                                                         //printf("Level 2:while taken again!\n"); 
    1182                                                     } 
    1183                                                     else { 
    1184                                                         //printf("Level 2:no more while\n"); 
    1185                                                         break;} 
    1186                                             } 
    1187                                             j+=miss[activeMission].services[j].num_conds; 
    1188                                         } 
    1189                                         else{ 
    1190                                             //printf("Level 2: no conditional\n"); 
    1191                                             numstatements[2]=0; 
    1192                                             TransactData(j); 
    1193                                         } 
    1194                                 } 
    1195                             } 
    1196                             else{ 
    1197                                 //printf("Level 1: if not taken\n"); 
    1198                             } 
    1199                                 numstatements[1] +=miss[activeMission].services[k].num_conds+1; 
    1200                                 k+=miss[activeMission].services[k].num_conds; 
    1201                             //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
    1202                         }else if(miss[activeMission].services[k].name.compare("dowhile")==0){ 
    1203                             numstatements[0]=0; 
    1204                             //printf("Level 1: while detected\n"); 
    1205                             while(true){ 
    1206                                 uint16_t j; 
    1207                                     for(j = k+1; j <= k+miss[activeMission].services[k].num_conds; j++){  
    1208                                         TransactData(j); 
    1209                                     } 
    1210                                     data.clear(); 
    1211                                     input.clear(); 
    1212                                     check.clear(); 
    1213                                     int t; 
    1214                                     for(t = 0; t < 10; t++){ 
    1215                                         if(!miss[activeMission].services[k].output[t].empty()){ 
    1216                                             input=miss[activeMission].services[j-1].output[t]; 
    1217                                             _data_DB->command="SELECT "; 
    1218                                             _data_DB->command.append(_data_DB->tablename); 
    1219                                             _data_DB->command.append(".* from "); 
    1220                                             _data_DB->command.append(_data_DB->tablename); 
    1221                                             _data_DB->command.append(" where Tag=='"); 
    1222                                             _data_DB->command.append(input); 
    1223                                             _data_DB->command.append("';"); 
    1224                                             sqlite3_stmt * pStatement; 
    1225                                             rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    1226                                             if (rc == SQLITE_OK){  
    1227                                                 if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1228                                                      data = (const char *) sqlite3_column_text(pStatement, 1);  
    1229                                                 else { 
    1230                                                         printf("8 data_DB:: Data not yet in DB.\n"); 
    1231                                                         rc=31337; 
    1232                                                 } 
    1233                                             } else { 
    1234                                                 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    1235                                             } 
    1236                                             sqlite3_finalize(pStatement); 
    1237                                             //printf("Level 1:data=%s\n", data.c_str()); 
    1238                                             int pos = data.find_last_of("@", data.length()-2); 
    1239                                             token = data.substr(pos+1); 
    1240                                             token.erase(token.length()-1); 
    1241                                             //printf("Level 1:token=%s\n", token); 
    1242                                             break; 
    1243                                         } 
    1244                                     } 
    1245                                     //printf("Level 1:--- %s  %s---\n", miss[activeMission].services[k].output[t].c_str(), token); 
    1246                                     if(miss[activeMission].services[k].output[t].find(token) != string::npos){ 
    1247                                         //printf("Level 1:while taken again!\n"); 
    1248                                     } 
    1249                                     else { 
    1250                                         //printf("Level 1:While finished\n"); 
    1251                                         break;} 
    1252                             } 
    1253                             k+=miss[activeMission].services[k].num_conds; 
    1254                         } 
    1255                         else{ 
    1256                             //printf("Level1:No conditional\n"); 
    1257                             numstatements[1]=0; 
    1258                             TransactData(k); 
    1259                         } 
    1260                 } 
    1261             } 
     909    if(miss[activeMission].services[i].name.compare("if")==0) 
     910    { 
     911       //printf("L0:if detected\n"); 
     912        input.clear(); 
     913        check.clear(); 
     914        int t; 
     915        for(t = 0; t < 10; t++){ 
     916        if(!miss[activeMission].services[i].output[t].empty()){ 
     917            input=miss[activeMission].services[i-numstatements[0]-1].output[t]; 
     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("';"); 
     925            sqlite3_stmt * pStatement; 
     926            rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     927            if (rc == SQLITE_OK){  
     928            if (sqlite3_step(pStatement) == SQLITE_ROW) 
     929                 data = (const char *) sqlite3_column_text(pStatement, 1);  
     930            else { 
     931                printf("1 data_DB:: Data not yet in DB.\n"); 
     932                rc=31337; 
     933            } 
     934            } else { 
     935            printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     936            } 
     937                sqlite3_finalize(pStatement); 
     938            //printf("data=%s\n", data.c_str()); 
     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); 
     943        data.clear(); 
     944            break; 
     945        } 
     946        } 
     947        //printf("Level 0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
     948        bool doit = false; 
     949        if(miss[activeMission].services[i].output[t].find(">") != string::npos){ 
     950            std::string data2; 
     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("';"); 
     958            sqlite3_stmt * pStatement; 
     959            rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     960            if (rc == SQLITE_OK){  
     961            if (sqlite3_step(pStatement) == SQLITE_ROW) 
     962                 data2 = (const char *) sqlite3_column_text(pStatement, 1);  
     963            else { 
     964                printf("2 data_DB:: Data not yet in DB.\n"); 
     965                rc=31337; 
     966            } 
     967            } else { 
     968            printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     969            } 
     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())) 
     977            doit=true; 
     978            //printf("%s %s\n", buffer, token); 
     979        } 
     980        else if (miss[activeMission].services[i].output[t].find(token) != string::npos) 
     981                doit=true; 
     982        if(doit){ 
     983        //printf("Level 0:if taken\n"); 
     984        for(uint16_t k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){  
     985            if(miss[activeMission].services[k].name.compare("if")==0){ 
     986            //printf("Level 1:if detected\n"); 
     987                input.clear(); 
     988                check.clear(); 
     989                for(t = 0; t < 10; t++){ 
     990                if(!miss[activeMission].services[k].output[t].empty()){ 
     991                    input=miss[activeMission].services[k-numstatements[1]-1].output[t]; 
     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("';"); 
     999                    sqlite3_stmt * pStatement; 
     1000                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     1001                    if (rc == SQLITE_OK){  
     1002                    if (sqlite3_step(pStatement) == SQLITE_ROW) 
     1003                         data = (const char *) sqlite3_column_text(pStatement, 1);  
     1004                    else { 
     1005                        printf("3 data_DB:: Data not yet in DB.\n"); 
     1006                        rc=31337; 
     1007                    } 
     1008                    } else { 
     1009                    printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     1010                    } 
     1011                        sqlite3_finalize(pStatement); 
     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); 
     1017                    break; 
     1018                } 
     1019                } 
     1020                bool doit = false; 
     1021                if(miss[activeMission].services[k].output[t].find(">") != string::npos){ 
     1022                    std::string data2; 
     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("';"); 
     1030                    sqlite3_stmt * pStatement; 
     1031                    rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     1032                    if (rc == SQLITE_OK){  
     1033                    if (sqlite3_step(pStatement) == SQLITE_ROW) 
     1034                         data2 = (const char *) sqlite3_column_text(pStatement, 1);  
     1035                    else { 
     1036                        printf("4 data_DB:: Data not yet in DB.\n"); 
     1037                        rc=31337; 
     1038                    } 
     1039                    } else { 
     1040                    printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     1041                    } 
     1042                        sqlite3_finalize(pStatement); 
     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; 
     1049                } 
     1050                else if (miss[activeMission].services[k].output[t].find(token) != string::npos) 
     1051                doit=true; 
     1052                if(doit){ 
     1053                //printf("Level 1:if taken\n"); 
     1054                for(uint16_t j = k+1; j <= k+miss[activeMission].services[k].num_conds; j++){  
     1055                    if(miss[activeMission].services[j].name.compare("if")==0){ 
     1056                    //printf("Level 2:if detected\n"); 
     1057                        input.clear(); 
     1058                        check.clear(); 
     1059                        for(t = 0; t < 10; t++){ 
     1060                        if(!miss[activeMission].services[j].output[t].empty()){ 
     1061                            input=miss[activeMission].services[j-numstatements[2]-1].output[t]; 
     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("';"); 
     1069                            sqlite3_stmt * pStatement; 
     1070                            rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     1071                            if (rc == SQLITE_OK){  
     1072                            if (sqlite3_step(pStatement) == SQLITE_ROW) 
     1073                                 data = (const char *) sqlite3_column_text(pStatement, 1);  
     1074                            else { 
     1075                                printf("5 data_DB:: Data not yet in DB.\n"); 
     1076                                rc=31337; 
     1077                            } 
     1078                            } else { 
     1079                            printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     1080                            } 
     1081                                sqlite3_finalize(pStatement); 
     1082                            //printf("data=%s\n", data.c_str()); 
     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()); 
     1087                            data.clear(); 
     1088                            break; 
     1089                        } 
     1090                        } 
     1091                        bool doit = false; 
     1092                        if(miss[activeMission].services[j].output[t].find(">") != string::npos){ 
     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("';"); 
     1100                            sqlite3_stmt * pStatement; 
     1101                            rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     1102                            if (rc == SQLITE_OK){  
     1103                            if (sqlite3_step(pStatement) == SQLITE_ROW) 
     1104                                 data2 = (const char *) sqlite3_column_text(pStatement, 1);  
     1105                            else { 
     1106                                printf("6 data_DB:: Data not yet in DB.\n"); 
     1107                                rc=31337; 
     1108                            } 
     1109                            } else { 
     1110                            printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     1111                            } 
     1112                                sqlite3_finalize(pStatement); 
     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())) 
     1118                            doit=true; 
     1119                        data.clear(); 
     1120                        } 
     1121                        else if (miss[activeMission].services[j].output[t].find(token) != string::npos) 
     1122                        doit=true; 
     1123                        if(doit){ 
     1124                        //printf("Level 1:if taken\n"); 
     1125                        for(uint16_t l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){  
     1126                            TransactData(l); 
     1127                        } 
     1128                        } 
     1129                        else 
     1130                        //printf("Level 2:if not taken\n"); 
     1131                        numstatements[2] +=miss[activeMission].services[j].num_conds+1; 
     1132                        j+=miss[activeMission].services[j].num_conds; 
     1133                        //printf("Level 2:doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
     1134                    }else if(miss[activeMission].services[j].name.compare("dowhile")==0){ 
     1135                        numstatements[0]=0; 
     1136                        //printf("Level 2:while detected\n"); 
     1137                        while(true){ 
     1138                            uint16_t l; 
     1139                            for(l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){  
     1140                            TransactData(l); 
     1141                            } 
     1142                            data.clear(); 
     1143                            input.clear(); 
     1144                            check.clear(); 
     1145                            int t; 
     1146                            for(t = 0; t < 10; t++){ 
     1147                            if(!miss[activeMission].services[j].output[t].empty()){ 
     1148                                input=miss[activeMission].services[l-2].output[t]; 
     1149                                //printf("%s\n",input.c_str()); 
     1150                                _data_DB->command="SELECT "; 
     1151                                _data_DB->command.append(_data_DB->tablename); 
     1152                                _data_DB->command.append(".* from "); 
     1153                                _data_DB->command.append(_data_DB->tablename); 
     1154                                _data_DB->command.append(" where Tag=='"); 
     1155                                _data_DB->command.append(input); 
     1156                                _data_DB->command.append("';"); 
     1157                                sqlite3_stmt * pStatement; 
     1158 
     1159                                rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     1160                                if (rc == SQLITE_OK){  
     1161                                if (sqlite3_step(pStatement) == SQLITE_ROW) 
     1162                                     data = (const char *) sqlite3_column_text(pStatement, 1);  
     1163                                else { 
     1164                                    printf("7 data_DB:: Data not yet in DB.: %s\n", _data_DB->command.c_str()); 
     1165                                    rc=31337; 
     1166                                } 
     1167                                } else { 
     1168                                  printf("data_DB:: SQL statement error. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     1169                                } 
     1170                                    sqlite3_finalize(pStatement); 
     1171                                //printf("Level 2:data=%s\n", data.c_str()); 
     1172                                    int pos = data.find_last_of("@", data.length()-2); 
     1173                                    token = data.substr(pos+1); 
     1174                                    token.erase(token.length()-1); 
     1175                                //printf("Level 2:token=%s\n", token); 
     1176                                break; 
     1177                            } 
     1178                            } 
     1179                            //printf("Level 2:--- %s  %s---\n", miss[activeMission].services[j].output[t].c_str(), token); 
     1180                            if(miss[activeMission].services[j].output[t].find(token) != string::npos){ 
     1181                            //printf("Level 2:while taken again!\n"); 
     1182                            } 
     1183                            else { 
     1184                            //printf("Level 2:no more while\n"); 
     1185                            break;} 
     1186                        } 
     1187                        j+=miss[activeMission].services[j].num_conds; 
     1188                    } 
     1189                    else{ 
     1190                        //printf("Level 2: no conditional\n"); 
     1191                        numstatements[2]=0; 
     1192                            TransactData(j); 
     1193                    } 
     1194                } 
     1195                } 
     1196                else{ 
     1197                //printf("Level 1: if not taken\n"); 
     1198                } 
     1199                    numstatements[1] +=miss[activeMission].services[k].num_conds+1; 
     1200                    k+=miss[activeMission].services[k].num_conds; 
     1201                //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 
     1202            }else if(miss[activeMission].services[k].name.compare("dowhile")==0){ 
     1203                numstatements[0]=0; 
     1204                //printf("Level 1: while detected\n"); 
     1205                while(true){ 
     1206                uint16_t j; 
     1207                    for(j = k+1; j <= k+miss[activeMission].services[k].num_conds; j++){  
     1208                    TransactData(j); 
     1209                    } 
     1210                    data.clear(); 
     1211                    input.clear(); 
     1212                    check.clear(); 
     1213                    int t; 
     1214                    for(t = 0; t < 10; t++){ 
     1215                    if(!miss[activeMission].services[k].output[t].empty()){ 
     1216                        input=miss[activeMission].services[j-1].output[t]; 
     1217                        _data_DB->command="SELECT "; 
     1218                        _data_DB->command.append(_data_DB->tablename); 
     1219                        _data_DB->command.append(".* from "); 
     1220                        _data_DB->command.append(_data_DB->tablename); 
     1221                        _data_DB->command.append(" where Tag=='"); 
     1222                        _data_DB->command.append(input); 
     1223                        _data_DB->command.append("';"); 
     1224                        sqlite3_stmt * pStatement; 
     1225                        rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     1226                        if (rc == SQLITE_OK){  
     1227                        if (sqlite3_step(pStatement) == SQLITE_ROW) 
     1228                             data = (const char *) sqlite3_column_text(pStatement, 1);  
     1229                        else { 
     1230                            printf("8 data_DB:: Data not yet in DB.\n"); 
     1231                            rc=31337; 
     1232                        } 
     1233                        } else { 
     1234                        printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     1235                        } 
     1236                            sqlite3_finalize(pStatement); 
     1237                        //printf("Level 1:data=%s\n", data.c_str()); 
     1238                        int pos = data.find_last_of("@", data.length()-2); 
     1239                        token = data.substr(pos+1); 
     1240                        token.erase(token.length()-1); 
     1241                        //printf("Level 1:token=%s\n", token); 
     1242                        break; 
     1243                    } 
     1244                    } 
     1245                    //printf("Level 1:--- %s  %s---\n", miss[activeMission].services[k].output[t].c_str(), token); 
     1246                    if(miss[activeMission].services[k].output[t].find(token) != string::npos){ 
     1247                    //printf("Level 1:while taken again!\n"); 
     1248                    } 
     1249                    else { 
     1250                    //printf("Level 1:While finished\n"); 
     1251                    break;} 
     1252                } 
     1253                k+=miss[activeMission].services[k].num_conds; 
     1254            } 
     1255            else{ 
     1256                //printf("Level1:No conditional\n"); 
     1257                numstatements[1]=0; 
     1258                    TransactData(k); 
     1259            } 
     1260        } 
     1261        } 
    12621262            numstatements[0] +=miss[activeMission].services[i].num_conds+1; 
    1263             i+=miss[activeMission].services[i].num_conds; 
    1264         } 
    1265         else if(miss[activeMission].services[i].name.compare("dowhile")==0) 
    1266         { 
    1267             numstatements[0]=0; 
    1268             //printf("Level 0: while detected\n"); 
    1269             while(true){ 
    1270                 uint16_t k; 
    1271                     for(k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){  
    1272                         TransactData(k); 
    1273                     } 
    1274                     data.clear(); 
    1275                     input.clear(); 
    1276                     check.clear(); 
    1277                     int t; 
    1278                     for(t = 0; t < 10; t++){ 
    1279                         if(!miss[activeMission].services[i].output[t].empty()){ 
    1280                             input=miss[activeMission].services[k-1].output[t]; 
    1281                             _data_DB->command="SELECT "; 
    1282                             _data_DB->command.append(_data_DB->tablename); 
    1283                             _data_DB->command.append(".* from "); 
    1284                             _data_DB->command.append(_data_DB->tablename); 
    1285                             _data_DB->command.append(" where Tag=='"); 
    1286                             _data_DB->command.append(input); 
    1287                             _data_DB->command.append("';"); 
    1288                             sqlite3_stmt * pStatement; 
    1289                             rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
    1290                             if (rc == SQLITE_OK){  
    1291                                 if (sqlite3_step(pStatement) == SQLITE_ROW) 
    1292                                      data = (const char *) sqlite3_column_text(pStatement, 1);  
    1293                                 else { 
    1294                                         printf("10data_DB:: Data not yet in DB.\n"); 
    1295                                         rc=31337; 
    1296                                 } 
    1297                             } else { 
    1298                                 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
    1299                             } 
    1300                             sqlite3_finalize(pStatement); 
    1301                             int pos = data.find_last_of("@", data.length()-2); 
    1302                             token = data.substr(pos+1); 
    1303                             token.erase(token.length()-1); 
    1304                             break; 
    1305                         } 
    1306                     } 
    1307                     //printf("Level 0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
    1308                     if(miss[activeMission].services[i].output[t].find(token) != string::npos){ 
    1309                         //printf("Level 0:while taken again!\n"); 
    1310                     } 
    1311                     else { 
    1312                         //printf("Level 0:no more while\n"); 
    1313                         break;} 
    1314             } 
    1315             i+=miss[activeMission].services[i].num_conds; 
    1316         } 
    1317         else{ 
    1318             numstatements[0]=0; 
    1319             //printf("Level 0: No conditional\n"); 
    1320             TransactData(i);} 
    1321         i++; 
     1263        i+=miss[activeMission].services[i].num_conds; 
     1264    } 
     1265    else if(miss[activeMission].services[i].name.compare("dowhile")==0) 
     1266    { 
     1267        numstatements[0]=0; 
     1268        //printf("Level 0: while detected\n"); 
     1269        while(true){ 
     1270        uint16_t k; 
     1271            for(k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){  
     1272            TransactData(k); 
     1273            } 
     1274            data.clear(); 
     1275            input.clear(); 
     1276            check.clear(); 
     1277            int t; 
     1278            for(t = 0; t < 10; t++){ 
     1279            if(!miss[activeMission].services[i].output[t].empty()){ 
     1280                input=miss[activeMission].services[k-1].output[t]; 
     1281                _data_DB->command="SELECT "; 
     1282                _data_DB->command.append(_data_DB->tablename); 
     1283                _data_DB->command.append(".* from "); 
     1284                _data_DB->command.append(_data_DB->tablename); 
     1285                _data_DB->command.append(" where Tag=='"); 
     1286                _data_DB->command.append(input); 
     1287                _data_DB->command.append("';"); 
     1288                sqlite3_stmt * pStatement; 
     1289                rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); 
     1290                if (rc == SQLITE_OK){  
     1291                if (sqlite3_step(pStatement) == SQLITE_ROW) 
     1292                     data = (const char *) sqlite3_column_text(pStatement, 1);  
     1293                else { 
     1294                    printf("10data_DB:: Data not yet in DB.\n"); 
     1295                    rc=31337; 
     1296                } 
     1297                } else { 
     1298                printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); 
     1299                } 
     1300                    sqlite3_finalize(pStatement); 
     1301                int pos = data.find_last_of("@", data.length()-2); 
     1302                token = data.substr(pos+1); 
     1303                token.erase(token.length()-1); 
     1304                break; 
     1305            } 
     1306            } 
     1307            //printf("Level 0:--- %s  %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 
     1308            if(miss[activeMission].services[i].output[t].find(token) != string::npos){ 
     1309            //printf("Level 0:while taken again!\n"); 
     1310            } 
     1311            else { 
     1312            //printf("Level 0:no more while\n"); 
     1313            break;} 
     1314        } 
     1315        i+=miss[activeMission].services[i].num_conds; 
     1316    } 
     1317    else{ 
     1318        numstatements[0]=0; 
     1319        //printf("Level 0: No conditional\n"); 
     1320        TransactData(i);} 
     1321    i++; 
    13221322    } 
    13231323    i=0; 
     
    13261326    if(!shellFound) 
    13271327    { 
    1328         int k = 0; 
    1329         while(k<10 && !miss[activeMission].input[k].empty()){ 
    1330             k++; 
    1331         } 
    1332         sprintf(buffer, "%d", k); 
    1333         SendMessage(shellSocketFD, buffer); 
    1334         for(int t = 0; t < k; t++){ 
    1335             SendMessage(shellSocketFD, miss[activeMission].input[t].c_str());  
    1336             SendMessage(shellSocketFD, "0"); 
    1337         } 
     1328    int k = 0; 
     1329    while(k<10 && !miss[activeMission].input[k].empty()){ 
     1330        k++; 
     1331    } 
     1332    sprintf(buffer, "%d", k); 
     1333    SendMessage(shellSocketFD, buffer); 
     1334    for(int t = 0; t < k; t++){ 
     1335        SendMessage(shellSocketFD, miss[activeMission].input[t].c_str());  
     1336        SendMessage(shellSocketFD, "0"); 
     1337    } 
    13381338    } 
    13391339 
     
    13921392    miss = new Mission[10]; 
    13931393    for(int i = 0; i < 10; i++) 
    1394         miss[i].services = new Service[30]; 
     1394        miss[i].services = new Service[30]; 
    13951395    LoadConfiguration(_SML_Config, miss); 
    13961396} 
     
    13981398/* CALLED BY: constructor 
    13991399 * INPUTS: |SML_Config| Address (either relitive or full) of the XML file containing mission data 
    1400  *         |mList| Mission array to be modified  
     1400 *        |mList| Mission array to be modified  
    14011401 * OUTPUTS: <none> 
    14021402 * 
     
    14371437        pChild0 = pChild0->NextSiblingElement())  
    14381438    { 
    1439         int32_t service_num = 0; 
    1440         uint16_t cond_array[] = {0, 0, 0}; 
    1441          
    1442         for(pChild1  = (pChild0->FirstChildElement())->FirstChildElement(); pChild1; \ 
    1443             pChild1  = pChild1->NextSiblingElement())  
    1444         { 
    1445             int32_t conditional_0 = service_num; 
    1446             for(pChild2 = pChild1->FirstChildElement(); \ 
    1447                 pChild2; pChild2 = pChild2->NextSiblingElement()) 
    1448             { 
    1449                 service_num++; 
    1450                 int32_t conditional_1 = service_num; 
    1451                 for(pChild3 = pChild2->FirstChildElement(); \ 
    1452                     pChild3; pChild3 = pChild3->NextSiblingElement()) 
    1453                 { 
    1454                     service_num++; 
    1455                     int32_t conditional_2 = service_num; 
    1456                         for(pChild4 = pChild3->FirstChildElement(); \ 
    1457                             pChild4; pChild4 = pChild4->NextSiblingElement()) 
    1458                         { 
    1459                             service_num++; 
    1460                             if(pChild4->Attribute("name")) 
    1461                                 mList[mission_num].services[service_num].name = pChild4->Attribute("name"); 
    1462                             else 
    1463                                 mList[mission_num].services[service_num].name = pChild4->Value(); 
    1464                             for(int i = 1; i <= 10; i++) { 
    1465                                 char buffer[9]="input"; 
    1466                                 sprintf(buffer, "%s%d", buffer, i);  
    1467                                 //printf("buffer=%s\n", buffer); 
    1468                                 if(pChild4->Attribute(buffer)) 
    1469                                     mList[mission_num].services[service_num].input[i-1] = pChild4->Attribute(buffer); 
    1470                                 char buffer2[9]="output"; 
    1471                                 sprintf(buffer2, "%s%d", buffer2, i);  
    1472                                 if(pChild4->Attribute(buffer2)) 
    1473                                     mList[mission_num].services[service_num].output[i-1] = pChild4->Attribute(buffer2); 
    1474                             } 
    1475                             if(pChild4->Attribute("parameter")) 
    1476                                 mList[mission_num].services[service_num].parameter = pChild4->Attribute("parameter"); 
    1477                             cond_array[2]++; 
    1478                         } 
    1479                         if(!strcmp(pChild3->Value(), "shell") || conditional_2 != service_num) { 
    1480                             mList[mission_num].services[conditional_2].name = pChild3->Value(); 
    1481                         } 
    1482                         else{ 
    1483                             mList[mission_num].services[service_num].name = pChild3->Attribute("name"); 
    1484                         } 
    1485                         for(int i = 1; i <= 10; i++) { 
    1486                             char buffer[9]="input"; 
    1487                             sprintf(buffer, "%s%d", buffer, i);  
    1488                             if(pChild3->Attribute(buffer)) 
    1489                                 mList[mission_num].services[conditional_2].input[i-1] = pChild3->Attribute(buffer); 
    1490                             char buffer2[9]="output"; 
    1491                             sprintf(buffer2, "%s%d", buffer2, i);  
    1492                             if(pChild3->Attribute(buffer2)) 
    1493                                 mList[mission_num].services[conditional_2].output[i-1] = pChild3->Attribute(buffer2); 
    1494                         } 
    1495                             if(pChild3->Attribute("parameter")) 
    1496                                 mList[mission_num].services[conditional_2].parameter = pChild3->Attribute("parameter"); 
    1497                         mList[mission_num].services[conditional_2].num_conds = cond_array[2]; 
    1498                         cond_array[1]+=cond_array[2]+1; 
    1499                         cond_array[2] = 0; 
    1500  
    1501  
    1502                 } 
    1503                 if(!strcmp(pChild2->Value(), "shell") || conditional_1 != service_num) { 
    1504                     mList[mission_num].services[conditional_1].name = pChild2->Value(); 
    1505                 } 
    1506                 else{ 
    1507                     mList[mission_num].services[service_num].name = pChild2->Attribute("name"); 
    1508                 } 
    1509                 for(int i = 1; i <= 10; i++) { 
    1510                     char buffer[9]="input"; 
    1511                     sprintf(buffer, "%s%d", buffer, i);  
    1512                     if(pChild2->Attribute(buffer)) 
    1513                         mList[mission_num].services[conditional_1].input[i-1] = pChild2->Attribute(buffer); 
    1514                     char buffer2[9]="output"; 
    1515                     sprintf(buffer2, "%s%d", buffer2, i);  
    1516                     if(pChild2->Attribute(buffer2)) 
    1517                         mList[mission_num].services[conditional_1].output[i-1] = pChild2->Attribute(buffer2); 
    1518                 } 
    1519                     if(pChild2->Attribute("parameter")) 
    1520                         mList[mission_num].services[conditional_1].parameter = pChild2->Attribute("parameter"); 
    1521  
    1522                 mList[mission_num].services[conditional_1].num_conds = cond_array[1]; 
    1523                 cond_array[0]+=cond_array[1]+1; 
    1524                 cond_array[1] = 0; 
    1525             } 
    1526              
    1527             if(!strcmp(pChild1->Value(), "shell") || conditional_0 != service_num) { 
    1528                 mList[mission_num].services[conditional_0].name = pChild1->Value(); 
    1529             } 
    1530             else{ 
    1531                 mList[mission_num].services[conditional_0].name = pChild1->Attribute("name"); 
    1532             } 
    1533                 for(int i = 1; i <= 10; i++) { 
    1534                     char buffer[9]="input"; 
    1535                     sprintf(buffer, "%s%d", buffer, i);  
    1536                     if(pChild1->Attribute(buffer)) 
    1537                         mList[mission_num].services[conditional_0].input[i-1] = pChild1->Attribute(buffer); 
    1538                     char buffer2[9]="output"; 
    1539                     sprintf(buffer2, "%s%d", buffer2, i);  
    1540                     if(pChild1->Attribute(buffer2)) 
    1541                         mList[mission_num].services[conditional_0].output[i-1] = pChild1->Attribute(buffer2); 
    1542                 } 
    1543                 if(pChild1->Attribute("parameter")) 
    1544                     mList[mission_num].services[conditional_0].parameter = pChild1->Attribute("parameter"); 
    1545             mList[mission_num].services[conditional_0].num_conds = cond_array[0]; 
     1439    int32_t service_num = 0; 
     1440    uint16_t cond_array[] = {0, 0, 0}; 
     1441     
     1442        for(pChild1  = (pChild0->FirstChildElement())->FirstChildElement(); pChild1; \ 
     1443              pChild1  = pChild1->NextSiblingElement())  
     1444        { 
     1445        int32_t conditional_0 = service_num; 
     1446        for(pChild2 = pChild1->FirstChildElement(); \ 
     1447        pChild2; pChild2 = pChild2->NextSiblingElement()) 
     1448        { 
     1449        service_num++; 
     1450        int32_t conditional_1 = service_num; 
     1451        for(pChild3 = pChild2->FirstChildElement(); \ 
     1452            pChild3; pChild3 = pChild3->NextSiblingElement()) 
     1453        { 
     1454            service_num++; 
     1455            int32_t conditional_2 = service_num; 
     1456            for(pChild4 = pChild3->FirstChildElement(); \ 
     1457                pChild4; pChild4 = pChild4->NextSiblingElement()) 
     1458            { 
     1459                   service_num++; 
     1460                if(pChild4->Attribute("name")) 
     1461                    mList[mission_num].services[service_num].name = pChild4->Attribute("name"); 
     1462                else 
     1463                    mList[mission_num].services[service_num].name = pChild4->Value(); 
     1464                for(int i = 1; i <= 10; i++) { 
     1465                    char buffer[9]="input"; 
     1466                    sprintf(buffer, "%s%d", buffer, i);  
     1467                    //printf("buffer=%s\n", buffer); 
     1468                    if(pChild4->Attribute(buffer)) 
     1469                        mList[mission_num].services[service_num].input[i-1] = pChild4->Attribute(buffer); 
     1470                    char buffer2[9]="output"; 
     1471                    sprintf(buffer2, "%s%d", buffer2, i);  
     1472                    if(pChild4->Attribute(buffer2)) 
     1473                    mList[mission_num].services[service_num].output[i-1] = pChild4->Attribute(buffer2); 
     1474                } 
     1475                if(pChild4->Attribute("parameter")) 
     1476                mList[mission_num].services[service_num].parameter = pChild4->Attribute("parameter"); 
     1477                cond_array[2]++; 
     1478            } 
     1479            if(!strcmp(pChild3->Value(), "shell") || conditional_2 != service_num) { 
     1480                mList[mission_num].services[conditional_2].name = pChild3->Value(); 
     1481            } 
     1482            else{ 
     1483                mList[mission_num].services[service_num].name = pChild3->Attribute("name"); 
     1484            } 
     1485            for(int i = 1; i <= 10; i++) { 
     1486                char buffer[9]="input"; 
     1487                sprintf(buffer, "%s%d", buffer, i);  
     1488                if(pChild3->Attribute(buffer)) 
     1489                mList[mission_num].services[conditional_2].input[i-1] = pChild3->Attribute(buffer); 
     1490                char buffer2[9]="output"; 
     1491                sprintf(buffer2, "%s%d", buffer2, i);  
     1492                if(pChild3->Attribute(buffer2)) 
     1493                mList[mission_num].services[conditional_2].output[i-1] = pChild3->Attribute(buffer2); 
     1494            } 
     1495                if(pChild3->Attribute("parameter")) 
     1496                mList[mission_num].services[conditional_2].parameter = pChild3->Attribute("parameter"); 
     1497            mList[mission_num].services[conditional_2].num_conds = cond_array[2]; 
     1498            cond_array[1]+=cond_array[2]+1; 
     1499            cond_array[2] = 0; 
     1500 
     1501 
     1502        } 
     1503        if(!strcmp(pChild2->Value(), "shell") || conditional_1 != service_num) { 
     1504            mList[mission_num].services[conditional_1].name = pChild2->Value(); 
     1505        } 
     1506        else{ 
     1507            mList[mission_num].services[service_num].name = pChild2->Attribute("name"); 
     1508        } 
     1509           for(int i = 1; i <= 10; i++) { 
     1510            char buffer[9]="input"; 
     1511            sprintf(buffer, "%s%d", buffer, i);  
     1512            if(pChild2->Attribute(buffer)) 
     1513                mList[mission_num].services[conditional_1].input[i-1] = pChild2->Attribute(buffer); 
     1514            char buffer2[9]="output"; 
     1515            sprintf(buffer2, "%s%d", buffer2, i);  
     1516            if(pChild2->Attribute(buffer2)) 
     1517            mList[mission_num].services[conditional_1].output[i-1] = pChild2->Attribute(buffer2); 
     1518        } 
     1519            if(pChild2->Attribute("parameter")) 
     1520            mList[mission_num].services[conditional_1].parameter = pChild2->Attribute("parameter"); 
     1521 
     1522        mList[mission_num].services[conditional_1].num_conds = cond_array[1]; 
     1523        cond_array[0]+=cond_array[1]+1; 
     1524        cond_array[1] = 0; 
     1525        } 
     1526         
     1527        if(!strcmp(pChild1->Value(), "shell") || conditional_0 != service_num) { 
     1528            mList[mission_num].services[conditional_0].name = pChild1->Value(); 
     1529        } 
     1530        else{ 
     1531        mList[mission_num].services[conditional_0].name = pChild1->Attribute("name"); 
     1532        } 
     1533        for(int i = 1; i <= 10; i++) { 
     1534            char buffer[9]="input"; 
     1535            sprintf(buffer, "%s%d", buffer, i);  
     1536            if(pChild1->Attribute(buffer)) 
     1537                mList[mission_num].services[conditional_0].input[i-1] = pChild1->Attribute(buffer); 
     1538            char buffer2[9]="output"; 
     1539            sprintf(buffer2, "%s%d", buffer2, i);  
     1540            if(pChild1->Attribute(buffer2)) 
     1541            mList[mission_num].services[conditional_0].output[i-1] = pChild1->Attribute(buffer2); 
     1542        } 
     1543        if(pChild1->Attribute("parameter")) 
     1544            mList[mission_num].services[conditional_0].parameter = pChild1->Attribute("parameter"); 
     1545        mList[mission_num].services[conditional_0].num_conds = cond_array[0]; 
    15461546            cond_array[0] = 0; 
    1547             service_num++; 
    1548         } 
    1549          
    1550         mList[mission_num].numServices = service_num; 
    1551         mList[mission_num].name = pChild0->Attribute("name"); 
     1547        service_num++; 
     1548    } 
     1549     
     1550    mList[mission_num].numServices = service_num; 
     1551    mList[mission_num].name = pChild0->Attribute("name"); 
    15521552        mList[mission_num].missionID = atoi(pChild0->Attribute("id")); 
    1553         for(int i = 1; i <= 10; i++) { 
    1554             char buffer[9]="param"; 
    1555             sprintf(buffer, "%s%d", buffer, i);  
    1556             if(pChild0->Attribute(buffer)){ 
    1557                 mList[mission_num].input[i-1] = pChild0->Attribute(buffer); 
    1558             } 
    1559         } 
    1560         mission_num++; 
     1553    for(int i = 1; i <= 10; i++) { 
     1554        char buffer[9]="param"; 
     1555        sprintf(buffer, "%s%d", buffer, i);  
     1556        if(pChild0->Attribute(buffer)){ 
     1557            mList[mission_num].input[i-1] = pChild0->Attribute(buffer); 
     1558        } 
     1559    } 
     1560    mission_num++; 
    15611561    } 
    15621562    LOG("ServiceManagementLayer:: Done Loading Configuration\n"); 
     
    16441644    SendMessage(CE_List[ID].FD, buffer); 
    16451645    if(strcmp("deregister_ack", buffer) != 0) { 
    1646         ERROR(1, "SML:: Failed to close CE socket\n"); 
     1646    ERROR(1, "SML:: Failed to close CE socket\n"); 
    16471647    } 
    16481648 
     
    16851685    int32_t port, rc, new_sd = 1; 
    16861686    int32_t desc_ready = 1; 
    1687                 //If there is, call the MessageHandler with the Shell_Msg code of -1 
     1687        //If there is, call the MessageHandler with the Shell_Msg code of -1 
    16881688    fd_set sockSet, shellSet; 
    16891689 
     
    17021702         
    17031703        for(uint16_t k = 0; k < Current_ID; k++){ 
    1704             if(CE_List[k].ID_num != -1) 
    1705                 FD_SET(CE_List[k].FD, &sockSet); 
    1706         } 
    1707             //printf("k=%d, CID=%d\n", k, CE_List[k].FD); 
     1704        if(CE_List[k].ID_num != -1) 
     1705            FD_SET(CE_List[k].FD, &sockSet); 
     1706    } 
     1707        //printf("k=%d, CID=%d\n", k, CE_List[k].FD); 
    17081708 
    17091709        /* Timeout specification */ 
     
    17111711        selTimeout.tv_sec = 0;       /* timeout (secs.) */ 
    17121712        selTimeout.tv_usec = 0;            /* 0 microseconds */ 
    1713         //Changed both to zero so that select will check messages from the shell instead of blocking 
    1714         //when there is no command from the CE's to be processed 
     1713    //Changed both to zero so that select will check messages from the shell instead of blocking 
     1714    //when there is no command from the CE's to be processed 
    17151715 
    17161716        //Check if there is a message on the socket waiting to be read 
    1717         rc = select(maxDescriptor + 1, &sockSet, NULL, NULL, &selTimeout);  
     1717    rc = select(maxDescriptor + 1, &sockSet, NULL, NULL, &selTimeout);  
    17181718        //printf("rc=%d\n", rc); 
    17191719        if(rc == 0){ 
    17201720            //LOG("No echo requests for %i secs...Server still alive\n", 10); 
    1721          
     1721     
    17221722            FD_ZERO(&shellSet); 
    17231723            FD_SET(shellSocketFD, &shellSet); 
     
    17271727            select(shellSocketFD + 1, &shellSet, NULL, NULL, &selTimeout); 
    17281728            //printf("rc2=%d\n", rc2); 
    1729                 //If there is, call the MessageHandler with the Shell_Msg code of -1 
    1730             if(FD_ISSET(shellSocketFD, &shellSet)){ 
    1731                 //printf("shell_msg, %d\n", rc2); 
    1732                 MessageHandler(-1);} 
    1733         } 
     1729        //If there is, call the MessageHandler with the Shell_Msg code of -1 
     1730        if(FD_ISSET(shellSocketFD, &shellSet)){ 
     1731        //printf("shell_msg, %d\n", rc2); 
     1732            MessageHandler(-1);} 
     1733    } 
    17341734        else {  
    17351735            desc_ready = rc; 
     
    17401740                    //Check if request is new or on an existing open descriptor 
    17411741                    if(port == cogEngSrv) {  
    1742                         //If new, assign it a descriptor and give it an ID 
     1742            //If new, assign it a descriptor and give it an ID 
    17431743                        new_sd = AcceptTCPConnection(port); 
    1744                          
     1744             
    17451745                        if(new_sd < 0)  
    17461746                            break; 
    17471747 
    17481748                        CE_List[Current_ID].FD = new_sd; 
    1749                         CE_List[Current_ID].ID_num = Current_ID; 
     1749            CE_List[Current_ID].ID_num = Current_ID; 
    17501750                        MessageHandler(Current_ID); 
    1751                         Current_ID++; 
    1752          
    1753                         FD_SET(new_sd,&sockSet); 
     1751            Current_ID++; 
     1752     
     1753            FD_SET(new_sd,&sockSet); 
    17541754                        if(new_sd > maxDescriptor)  
    17551755                           maxDescriptor = new_sd; 
    17561756                    }  
    17571757                    else { 
    1758                         //If old, figure out which ID it coresponds to and handle it accordingly 
    1759                         for(uint16_t z = 0; z < Current_ID; z++) 
    1760                         { 
    1761                                 if(CE_List[z].FD == port){ 
    1762                                         MessageHandler(z);} 
    1763                         } 
     1758            //If old, figure out which ID it coresponds to and handle it accordingly 
     1759            for(uint16_t z = 0; z < Current_ID; z++) 
     1760            { 
     1761                if(CE_List[z].FD == port){ 
     1762                    MessageHandler(z);} 
     1763            } 
    17641764                    } 
    17651765                } 
    17661766            } 
    1767         } 
     1767    } 
    17681768    }         
    17691769