Changeset 290
- Timestamp:
- 06/18/09 16:32:42 (15 years ago)
- Files:
-
- 1 modified
Legend:
- Unmodified
- Added
- Removed
-
vtcross/trunk/src/service_management_layer/ServiceManagementLayer.cpp
r289 r290 600 600 { 601 601 //Check whether the current service is an actual service or a conditional 602 if(miss[activeMission].services[i].name.compare("if") && miss[activeMission].services[i].name.compare(" while") && \602 if(miss[activeMission].services[i].name.compare("if") && miss[activeMission].services[i].name.compare("dowhile") && \ 603 603 miss[activeMission].services[i].name.compare("shell")){ 604 604 //If it is a service, search the database of registered services to find the ID of the component that registered it … … 648 648 ServiceManagementLayer::TransactData(int32_t sourceID) 649 649 { 650 LOG("ServiceManagementLayer:: Data transaction occuring.\n");650 // LOG("ServiceManagementLayer:: Data transaction occuring.\n"); 651 651 char buffer[256]; 652 652 std::string data; … … 679 679 else { 680 680 //TODO could do shell output here if not in DB 681 data.append("1@"); 682 data.append(miss[activeMission].services[sourceID].output[0]); 683 data.append("@"); 684 data.append(miss[activeMission].services[sourceID].output[0]); 685 data.append("@"); 686 //printf("data = %s\n", data.c_str()); 687 681 688 printf("data_DB:: Data not yet in DB.\n"); 682 689 rc=31337; … … 695 702 } 696 703 } 697 //Otherwise, just return the value specified by output TODO (in 1 - <output name> - <output name> format)698 else{699 printf("taken2\n");700 memset(buffer, 0, 256);701 SendMessage(shellSocketFD, "1");702 miss[activeMission].services[sourceID].output[0].erase(0);703 SendMessage(shellSocketFD, miss[activeMission].services[sourceID].output[0].c_str());704 SendMessage(shellSocketFD, miss[activeMission].services[sourceID].output[0].c_str());705 }706 704 //printf("done shell\n"); 705 // LOG("ServiceManagementLayer:: Finished with data transaction.\n"); 707 706 return; 708 707 } … … 850 849 } 851 850 //printf("done transact data!\n"); 852 LOG("ServiceManagementLayer:: Finished with data transaction.\n");851 // LOG("ServiceManagementLayer:: Finished with data transaction.\n"); 853 852 854 853 … … 962 961 ReadMessage(shellSocketFD, buffer); 963 962 t=atoi(buffer); 964 for(int k = 0; k < t; k++) {963 for(int m = 0; m < t; m++) { 965 964 //printf("data=%s\n", data_obsv.c_str()); 966 965 memset(buffer1, 0, 256); … … 1002 1001 1003 1002 // printf("done\n"); 1004 i=0; 1005 int32_t numstatements = 0;1003 i=0; 1004 int32_t numstatements[3] = {0,0,0}; 1006 1005 data.clear(); 1007 1006 while(i < miss[activeMission].numServices) … … 1015 1014 for(t = 0; t < 5; t++){ 1016 1015 if(!miss[activeMission].services[i].output[t].empty()){ 1017 //printf("i-numstmts = %d\n", i-numstatements-1);1018 input=miss[activeMission].services[i-numstatements -1].output[t];1016 //printf("i-numstmts-1 = %d\n", i-numstatements[0]-1); 1017 input=miss[activeMission].services[i-numstatements[0]-1].output[t]; 1019 1018 strcpy(_data_DB->command, "SELECT "); 1020 1019 strcat(_data_DB->command, _data_DB->tablename); … … 1045 1044 } 1046 1045 //printf("L0:--- %s %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 1047 if(!miss[activeMission].services[i].output[t].compare(token)){ 1046 //TODO change to strstr 1047 if(strstr(miss[activeMission].services[i].output[t].c_str(), token)){ 1048 1048 //printf("L0:if taken\n"); 1049 1049 for(uint16_t k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){ 1050 //printf("transacting data for k=%d\n", k); 1051 TransactData(k); 1050 //printf("transacting data for k=%d\n", k); 1051 //printf("%s---%d\n", miss[activeMission].services[k].name.c_str(), k); 1052 if(miss[activeMission].services[k].name.compare("if")==0){ 1053 //printf("L1:if detected\n"); 1054 input.clear(); 1055 check.clear(); 1056 for(t = 0; t < 5; t++){ 1057 if(!miss[activeMission].services[k].output[t].empty()){ 1058 //printf("i-numstmts = %d\n", i-numstatements-1); 1059 input=miss[activeMission].services[k-numstatements[1]-1].output[t]; 1060 strcpy(_data_DB->command, "SELECT "); 1061 strcat(_data_DB->command, _data_DB->tablename); 1062 strcat(_data_DB->command, ".* from "); 1063 strcat(_data_DB->command, _data_DB->tablename); 1064 strcat(_data_DB->command, " where Tag=="); 1065 sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 1066 sqlite3_stmt * pStatement; 1067 rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 1068 if (rc == SQLITE_OK){ 1069 if (sqlite3_step(pStatement) == SQLITE_ROW) 1070 data = (const char *) sqlite3_column_text(pStatement, 1); 1071 else { 1072 printf("1 data_DB:: Data not yet in DB.\n"); 1073 rc=31337; 1074 } 1075 } else { 1076 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 1077 } 1078 sqlite3_finalize(pStatement); 1079 //printf("data=%s\n", data.c_str()); 1080 token = strtok((char *)data.c_str(), "@"); 1081 token = strtok(NULL, "@"); 1082 token = strtok(NULL, "@"); 1083 //printf("data=%s\n", token); 1084 break; 1085 } 1086 } 1087 //printf("L1:--- %s %s---\n", miss[activeMission].services[k].output[t].c_str(), token); 1088 //TODO change to strstr 1089 if(strstr(miss[activeMission].services[k].output[t].c_str(), token)){ 1090 //printf("L1:if taken\n"); 1091 for(uint16_t j = k+1; j <= k+miss[activeMission].services[k].num_conds; j++){ 1092 //printf("transacting data for k=%d\n", k); 1093 //printf("%s---%d\n", miss[activeMission].services[j].name.c_str(), j); 1094 if(miss[activeMission].services[j].name.compare("if")==0){ 1095 //printf("L2:if detected\n"); 1096 input.clear(); 1097 check.clear(); 1098 for(t = 0; t < 5; t++){ 1099 if(!miss[activeMission].services[j].output[t].empty()){ 1100 //printf("i-numstmts = %d\n", i-numstatements-1); 1101 input=miss[activeMission].services[j-numstatements[2]-1].output[t]; 1102 strcpy(_data_DB->command, "SELECT "); 1103 strcat(_data_DB->command, _data_DB->tablename); 1104 strcat(_data_DB->command, ".* from "); 1105 strcat(_data_DB->command, _data_DB->tablename); 1106 strcat(_data_DB->command, " where Tag=="); 1107 sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 1108 sqlite3_stmt * pStatement; 1109 rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 1110 if (rc == SQLITE_OK){ 1111 if (sqlite3_step(pStatement) == SQLITE_ROW) 1112 data = (const char *) sqlite3_column_text(pStatement, 1); 1113 else { 1114 printf("1 data_DB:: Data not yet in DB.\n"); 1115 rc=31337; 1116 } 1117 } else { 1118 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 1119 } 1120 sqlite3_finalize(pStatement); 1121 //printf("data=%s\n", data.c_str()); 1122 token = strtok((char *)data.c_str(), "@"); 1123 token = strtok(NULL, "@"); 1124 token = strtok(NULL, "@"); 1125 //printf("data=%s\n", token); 1126 break; 1127 } 1128 } 1129 //printf("L2:--- %s %s---\n", miss[activeMission].services[j].output[t].c_str(), token); 1130 //TODO change to strstr 1131 if(strstr(miss[activeMission].services[j].output[t].c_str(), token)){ 1132 //printf("L1:if taken\n"); 1133 for(uint16_t l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){ 1134 //printf("transacting data for k=%d\n", k); 1135 TransactData(l); 1136 } 1137 } 1138 else 1139 //printf("L2: if not taken\n"); 1140 numstatements[2] +=miss[activeMission].services[j].num_conds+1; 1141 j+=miss[activeMission].services[j].num_conds; 1142 //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 1143 } 1144 else{ 1145 //printf("NO L2 COND!\n"); 1146 numstatements[2]=0; 1147 TransactData(j); 1148 } 1149 } 1150 } 1151 else 1152 //printf("L1: if not taken\n"); 1153 numstatements[1] +=miss[activeMission].services[k].num_conds+1; 1154 k+=miss[activeMission].services[k].num_conds; 1155 //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 1156 } else if(miss[activeMission].services[k].name.compare("dowhile")==0){ 1157 //printf("while detected\n"); 1158 while(true){ 1159 uint16_t m; 1160 for(uint16_t m = k+1; m <= k+miss[activeMission].services[k].num_conds; m++){ 1161 TransactData(m); 1162 printf("transact! %d\n", m); 1163 } 1164 data.clear(); 1165 printf("L1:while detected %d, %d\n", miss[activeMission].services[k].num_conds, k); 1166 input.clear(); 1167 check.clear(); 1168 int t; 1169 for(t = 0; t < 5; t++){ 1170 if(!miss[activeMission].services[k-1].output[t].empty()){ 1171 input=miss[activeMission].services[m].output[t]; 1172 strcpy(_data_DB->command, "SELECT "); 1173 strcat(_data_DB->command, _data_DB->tablename); 1174 strcat(_data_DB->command, ".* from "); 1175 strcat(_data_DB->command, _data_DB->tablename); 1176 strcat(_data_DB->command, " where Tag=="); 1177 sprintf(_data_DB->command, "%s'%s';", _data_DB->command, input.c_str()); 1178 sqlite3_stmt * pStatement; 1179 rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command, -1, &pStatement, NULL); 1180 if (rc == SQLITE_OK){ 1181 if (sqlite3_step(pStatement) == SQLITE_ROW) 1182 data = (const char *) sqlite3_column_text(pStatement, 1); 1183 else { 1184 printf("1 data_DB:: Data not yet in DB.\n"); 1185 rc=31337; 1186 } 1187 } else { 1188 printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command); 1189 } 1190 sqlite3_finalize(pStatement); 1191 //printf("data=%s\n", data.c_str()); 1192 token = strtok((char *)data.c_str(), "@"); 1193 token = strtok(NULL, "@"); 1194 token = strtok(NULL, "@"); 1195 //printf("data=%s\n", token); 1196 break; 1197 } 1198 } 1199 printf("L1:--- %s %s---\n", miss[activeMission].services[k].output[t].c_str(), token); 1200 if(strstr(miss[activeMission].services[k].output[t].c_str(), token)){ 1201 printf("L1:do it again!\n"); 1202 } 1203 else 1204 break; 1205 } 1206 k+=miss[activeMission].services[k].num_conds; 1207 //printf("donewhile\n"); 1208 } 1209 else{ 1210 //printf("NO L1 COND!\n"); 1211 numstatements[1]=0; 1212 TransactData(k); 1213 } 1214 1215 //numstatements[0] +=miss[activeMission].services[i].num_conds+1; 1216 //i+=miss[activeMission].services[i].num_conds; 1217 //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 1052 1218 } 1053 1219 } 1054 numstatements +=miss[activeMission].services[i].num_conds+1; 1220 // else 1221 //printf("LO if not taken\n"); 1222 numstatements[0] +=miss[activeMission].services[i].num_conds+1; 1055 1223 i+=miss[activeMission].services[i].num_conds; 1056 1224 //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); 1057 1225 } 1058 else if(miss[activeMission].services[i].name.compare(" while")==0)1226 else if(miss[activeMission].services[i].name.compare("dowhile")==0) 1059 1227 { 1060 numstatements =0;1228 numstatements[0]=0; 1061 1229 //printf("while detected\n"); 1062 1230 while(true){ 1231 uint16_t k; 1232 for(k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){ 1233 TransactData(k); 1234 } 1063 1235 data.clear(); 1064 printf("L0:if detected\n");1236 //printf("L0:while detected %d, %d\n", k, miss[activeMission].services[i].num_conds); 1065 1237 input.clear(); 1066 1238 check.clear(); … … 1068 1240 for(t = 0; t < 5; t++){ 1069 1241 if(!miss[activeMission].services[i].output[t].empty()){ 1070 input=miss[activeMission].services[i-1].output[t]; 1242 input=miss[activeMission].services[k-1].output[t]; 1243 //printf("input=%s\n", input.c_str()); 1071 1244 strcpy(_data_DB->command, "SELECT "); 1072 1245 strcat(_data_DB->command, _data_DB->tablename); … … 1096 1269 } 1097 1270 } 1098 printf("L0:--- %s %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 1099 if(!miss[activeMission].services[i].output[t].compare(token)){ 1100 printf("L0:if taken\n"); 1101 for(uint16_t k = i+i; k <= i+miss[activeMission].services[i].num_conds; k++){ 1102 TransactData(k); 1103 } 1271 //printf("L0:--- %s %s---\n", miss[activeMission].services[i].output[t].c_str(), token); 1272 if(strstr(miss[activeMission].services[i].output[t].c_str(), token)){ 1273 //printf("L0:while taken again!\n"); 1104 1274 } 1105 1275 else … … 1110 1280 } 1111 1281 else{ 1112 numstatements =0;1282 numstatements[0]=0; 1113 1283 //printf("L0 Neither if nor while\n"); 1114 1284 TransactData(i);} … … 1223 1393 TiXmlElement *pChild0, *pChild1, *pChild2, *pChild3, *pChild4; 1224 1394 TiXmlHandle hRoot(0); 1225 //printf("ServiceManagementLayer:: Loading Configuration.\n");1395 printf("ServiceManagementLayer:: Loading Configuration.\n"); 1226 1396 TiXmlDocument doc("."); 1227 1397 doc.LoadFile(SML_Config); … … 1259 1429 int32_t conditional_1 = service_num; 1260 1430 for(pChild3 = pChild2->FirstChildElement(); \ 1261 pChild3; pChild3 = pChild3 1431 pChild3; pChild3 = pChild3->NextSiblingElement()) 1262 1432 { 1263 1433 service_num++; 1264 1434 int32_t conditional_2 = service_num; 1265 1435 for(pChild4 = pChild3->FirstChildElement(); \ 1266 pChild4; pChild4 = pChild4 1436 pChild4; pChild4 = pChild4->NextSiblingElement()) 1267 1437 { 1268 service_num++; 1269 mList[mission_num].services[service_num].name = pChild4->Attribute("name"); 1438 service_num++; 1439 if(pChild4->Attribute("name")) 1440 mList[mission_num].services[service_num].name = pChild4->Attribute("name"); 1441 else 1442 mList[mission_num].services[service_num].name = pChild4->Value(); 1443 1270 1444 if(pChild4->Attribute("input1")) 1271 1445 mList[mission_num].services[service_num].input[0] = pChild4->Attribute("input1"); … … 1323 1497 1324 1498 } 1325 //printf("here\n");1326 1499 if(!strcmp(pChild2->Value(), "shell") || conditional_1 != service_num) { 1327 1500 mList[mission_num].services[conditional_1].name = pChild2->Value(); … … 1350 1523 if(pChild2->Attribute("output5")) 1351 1524 mList[mission_num].services[conditional_1].output[4] = pChild2->Attribute("output5"); 1352 //printf("2%s %s\n", mList[mission_num].services[conditional_1].output[0].c_str(), mList[mission_num].services[conditional_1].output[1].c_str());1353 1525 1354 1526 mList[mission_num].services[conditional_1].num_conds = cond_array[1]; … … 1385 1557 if(pChild1->Attribute("output5")) 1386 1558 mList[mission_num].services[service_num].output[4] = pChild1->Attribute("output4"); 1387 //printf("1%s %s\n", mList[mission_num].services[conditional_0].output[0].c_str(), mList[mission_num].services[conditional_0].output[1].c_str());1388 1559 mList[mission_num].services[conditional_0].num_conds = cond_array[0]; 1389 1560 cond_array[0] = 0;