722 | | |
723 | | /* If the service takes a parameter, feed that parameter in |
724 | | if(!miss[activeMission].services[sourceID].parameter.empty()){ |
725 | | //printf("sending parameter!\n"); |
726 | | SendMessage(miss[activeMission].services[sourceID].socketFD, "1"); |
727 | | SendMessage(miss[activeMission].services[sourceID].socketFD, "parameter"); |
728 | | SendMessage(miss[activeMission].services[sourceID].socketFD, miss[activeMission].services[sourceID].parameter.c_str()); |
729 | | } |
730 | | |
731 | | |
732 | | //Load and transmit the input data |
733 | | int i = 0; |
734 | | while(i < 10 && !miss[activeMission].services[sourceID].input[i].empty()){ |
735 | | _data_DB->command="select "; |
736 | | _data_DB->command.append(_data_DB->tablename); |
737 | | _data_DB->command.append(".* from "); |
738 | | _data_DB->command.append(_data_DB->tablename); |
739 | | _data_DB->command.append(" where Tag=='"); |
740 | | _data_DB->command.append(miss[activeMission].services[sourceID].input[i]); |
741 | | _data_DB->command.append("';"); |
742 | | sqlite3_stmt * pStatement; |
743 | | int rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); |
744 | | if (rc == SQLITE_OK){ |
745 | | if (sqlite3_step(pStatement) == SQLITE_ROW) |
746 | | data.append((const char*) sqlite3_column_text(pStatement, 1)); |
747 | | else { |
748 | | printf("2data_DB:: Data not yet in DB.\n"); |
749 | | rc=31337; |
750 | | } |
751 | | } |
752 | | else { |
753 | | printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); |
754 | | } |
755 | | sqlite3_finalize(pStatement); |
756 | | |
757 | | token = strtok((char *)data.c_str(), "@"); |
758 | | while(token){ |
759 | | SendMessage(miss[activeMission].services[sourceID].socketFD, token); |
760 | | token = strtok(NULL, "@"); |
761 | | } |
762 | | i++; |
763 | | data.clear(); |
764 | | } |
765 | | int32_t j = 0; |
766 | | |
767 | | //Receive and store the output data |
768 | | while(j < 10 && !miss[activeMission].services[sourceID].output[j].empty()){ |
769 | | int rc; |
770 | | memset(buffer, 0, 256); |
771 | | //Read the number of datapairs for this output |
772 | | ReadMessage(miss[activeMission].services[sourceID].socketFD, buffer); |
773 | | data.append(buffer); |
774 | | data.append("@"); |
775 | | int t = atoi(buffer); |
776 | | for(int k = 0; k < t; k++){ |
777 | | //Read the datapairs incrementally and deliminate it with the "@" symbol |
778 | | memset(buffer, 0, 256); |
779 | | ReadMessage(miss[activeMission].services[sourceID].socketFD, buffer); |
780 | | data.append(buffer); |
781 | | data.append("@"); |
782 | | memset(buffer, 0, 256); |
783 | | ReadMessage(miss[activeMission].services[sourceID].socketFD, buffer); |
784 | | data.append(buffer); |
785 | | data.append("@"); |
786 | | } |
787 | | |
788 | | _data_DB->command="insert or replace into "; |
789 | | _data_DB->command.append(_data_DB->tablename); |
790 | | _data_DB->command.append(" ("); |
791 | | _data_DB->command.append(cols[0]); |
792 | | _data_DB->command.append(", "); |
793 | | _data_DB->command.append(cols[1]); |
794 | | _data_DB->command.append(") "); |
795 | | _data_DB->command.append(" values('"); |
796 | | _data_DB->command.append(miss[activeMission].services[sourceID].output[j]); |
797 | | _data_DB->command.append("', '"); |
798 | | _data_DB->command.append(data); |
799 | | _data_DB->command.append("');"); |
800 | | char *errorMsg; |
801 | | rc = sqlite3_exec(_data_DB->db, _data_DB->command.c_str(), callback, 0, &errorMsg); |
802 | | if( rc!=SQLITE_OK && rc!=101 ) |
803 | | fprintf(stderr, "SQL error: %s\n", errorMsg); |
804 | | //printf("S: done putting ouptut data into DB for ID#='%d', data=%s\n", sourceID, data.c_str()); |
805 | | j++; |
806 | | data.clear(); |
807 | | } |
808 | | //printf("done transact data!\n"); |
809 | | // LOG("ServiceManagementLayer:: Finished with data transaction.\n"); |
810 | | |
811 | | |
812 | | /*printf("\n\n\n"); |
813 | | // generate commandi |
814 | | strcpy(_data_DB->command, "select "); |
815 | | strcat(_data_DB->command, _data_DB->tablename); |
816 | | strcat(_data_DB->command, ".* from "); |
817 | | strcat(_data_DB->command, _data_DB->tablename); |
818 | | strcat(_data_DB->command, ";"); |
819 | | |
820 | | // execute print (select all) command |
821 | | char *errorMsg; |
822 | | int rc = sqlite3_exec(_data_DB->db, _data_DB->command, callback, 0, &errorMsg); |
823 | | if( rc!=SQLITE_OK && rc!=101 ) |
824 | | fprintf(stderr, "SQL error: %s\n", errorMsg); |
825 | | printf("database %s, table %s:\n", _data_DB->filename, _data_DB->tablename); |
826 | | printf("\n\n\n");*/ |
827 | | } |
828 | | |
829 | | |
| 743 | } |
891 | | _data_DB->command.append(" values('"); |
892 | | _data_DB->command.append(buffer1); |
893 | | _data_DB->command.append("', '1@"); |
894 | | _data_DB->command.append(buffer1); |
895 | | _data_DB->command.append("@"); |
896 | | _data_DB->command.append(buffer); |
897 | | _data_DB->command.append("');"); |
898 | | rc = sqlite3_exec(_data_DB->db, _data_DB->command.c_str(), callback, 0, &errorMsg); |
899 | | if( rc!=SQLITE_OK && rc!=101 ) |
900 | | fprintf(stderr, "SQL error: %s\n", errorMsg); |
901 | | } |
902 | | |
903 | | //Useful for spotchecking what's in the database |
904 | | /*printf("\n\n\n"); |
905 | | // generate commandi |
906 | | strcpy(_data_DB->command, "select "); |
907 | | strcat(_data_DB->command, _data_DB->tablename); |
908 | | strcat(_data_DB->command, ".* from "); |
909 | | strcat(_data_DB->command, _data_DB->tablename); |
910 | | strcat(_data_DB->command, ";"); |
911 | | |
912 | | // execute print (select all) command |
913 | | rc = sqlite3_exec(_data_DB->db, _data_DB->command, callback, 0, &errorMsg); |
914 | | if( rc!=SQLITE_OK && rc!=101 ) |
915 | | fprintf(stderr, "SQL error: %s\n", errorMsg); |
916 | | printf("database %s, table %s:\n", _data_DB->filename, _data_DB->tablename); |
917 | | printf("\n\n\n");*/ |
918 | | |
919 | | |
920 | | i=0; |
921 | | int32_t numstatements[3] = {0,0,0}; |
922 | | while(i < miss[activeMission].numServices) |
923 | | { |
924 | | if(miss[activeMission].services[i].name.compare("if")==0) |
925 | | { |
926 | | //printf("L0:if detected\n"); |
927 | | input.clear(); |
928 | | check.clear(); |
929 | | int t; |
930 | | for(t = 0; t < 10; t++){ |
931 | | if(!miss[activeMission].services[i].output[t].empty()){ |
932 | | input=miss[activeMission].services[i-numstatements[0]-1].output[t]; |
933 | | _data_DB->command="SELECT "; |
934 | | _data_DB->command.append(_data_DB->tablename); |
935 | | _data_DB->command.append(".* from "); |
936 | | _data_DB->command.append(_data_DB->tablename); |
937 | | _data_DB->command.append(" where Tag=='"); |
938 | | _data_DB->command.append(input); |
939 | | _data_DB->command.append("';"); |
940 | | sqlite3_stmt * pStatement; |
941 | | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); |
942 | | if (rc == SQLITE_OK){ |
943 | | if (sqlite3_step(pStatement) == SQLITE_ROW) |
944 | | data = (const char *) sqlite3_column_text(pStatement, 1); |
945 | | else { |
946 | | printf("1 data_DB:: Data not yet in DB.\n"); |
947 | | rc=31337; |
948 | | } |
949 | | } else { |
950 | | printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); |
951 | | } |
952 | | sqlite3_finalize(pStatement); |
953 | | //printf("data=%s\n", data.c_str()); |
954 | | int pos = data.find_last_of("@", data.length()-2); |
955 | | token = data.substr(pos+1); |
956 | | token.erase(token.length()-1); |
957 | | //printf("token=%s, %d\n", token.c_str(), pos); |
958 | | data.clear(); |
959 | | break; |
960 | | } |
961 | | } |
962 | | //printf("Level 0:--- %s %s---\n", miss[activeMission].services[i].output[t].c_str(), token); |
963 | | bool doit = false; |
964 | | if(miss[activeMission].services[i].output[t].find(">") != string::npos){ |
965 | | std::string data2; |
966 | | _data_DB->command="SELECT "; |
967 | | _data_DB->command.append(_data_DB->tablename); |
968 | | _data_DB->command.append(".* from "); |
969 | | _data_DB->command.append(_data_DB->tablename); |
970 | | _data_DB->command.append(" where Tag=='"); |
971 | | _data_DB->command.append(miss[activeMission].services[i].output[t].erase(0, 1)); |
972 | | _data_DB->command.append("';"); |
973 | | sqlite3_stmt * pStatement; |
974 | | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); |
975 | | if (rc == SQLITE_OK){ |
976 | | if (sqlite3_step(pStatement) == SQLITE_ROW) |
977 | | data2 = (const char *) sqlite3_column_text(pStatement, 1); |
978 | | else { |
979 | | printf("2 data_DB:: Data not yet in DB.\n"); |
980 | | rc=31337; |
981 | | } |
982 | | } else { |
983 | | printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); |
984 | | } |
985 | | sqlite3_finalize(pStatement); |
986 | | |
987 | | int pos = data2.find_last_of("@", data2.length()-2); |
988 | | token2 = data2.substr(pos+1); |
989 | | token2.erase(token2.length()-1); |
990 | | //printf("token2=%s, %d\n", token2.c_str(), pos); |
991 | | if(atof(token.c_str()) > atof(token2.c_str())) |
992 | | doit=true; |
993 | | //printf("%s %s\n", buffer, token); |
994 | | } |
995 | | else if (miss[activeMission].services[i].output[t].find(token) != string::npos) |
996 | | doit=true; |
997 | | if(doit){ |
998 | | //printf("Level 0:if taken\n"); |
999 | | for(uint16_t k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){ |
1000 | | if(miss[activeMission].services[k].name.compare("if")==0){ |
1001 | | //printf("Level 1:if detected\n"); |
1002 | | input.clear(); |
1003 | | check.clear(); |
1004 | | for(t = 0; t < 10; t++){ |
1005 | | if(!miss[activeMission].services[k].output[t].empty()){ |
1006 | | input=miss[activeMission].services[k-numstatements[1]-1].output[t]; |
1007 | | _data_DB->command="SELECT "; |
1008 | | _data_DB->command.append(_data_DB->tablename); |
1009 | | _data_DB->command.append(".* from "); |
1010 | | _data_DB->command.append(_data_DB->tablename); |
1011 | | _data_DB->command.append(" where Tag=='"); |
1012 | | _data_DB->command.append(input); |
1013 | | _data_DB->command.append("';"); |
1014 | | sqlite3_stmt * pStatement; |
1015 | | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); |
1016 | | if (rc == SQLITE_OK){ |
1017 | | if (sqlite3_step(pStatement) == SQLITE_ROW) |
1018 | | data = (const char *) sqlite3_column_text(pStatement, 1); |
1019 | | else { |
1020 | | printf("3 data_DB:: Data not yet in DB.\n"); |
1021 | | rc=31337; |
1022 | | } |
1023 | | } else { |
1024 | | printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); |
1025 | | } |
1026 | | sqlite3_finalize(pStatement); |
1027 | | //printf("Level 1:data=%s\n", data.c_str()); |
1028 | | int pos = data.find_last_of("@", data.length()-2); |
1029 | | token = data.substr(pos+1); |
1030 | | token.erase(token.length()-1); |
1031 | | //printf("Level 1:token=%s\n", token); |
1032 | | break; |
1033 | | } |
1034 | | } |
1035 | | bool doit = false; |
1036 | | if(miss[activeMission].services[k].output[t].find(">") != string::npos){ |
1037 | | std::string data2; |
1038 | | _data_DB->command="SELECT "; |
| 808 | _data_DB->command.append(" values('"); |
| 809 | _data_DB->command.append(buffer1); |
| 810 | _data_DB->command.append("', '1@"); |
| 811 | _data_DB->command.append(buffer1); |
| 812 | _data_DB->command.append("@"); |
| 813 | _data_DB->command.append(buffer); |
| 814 | _data_DB->command.append("');"); |
| 815 | |
| 816 | rc = sqlite3_exec(_data_DB->db, _data_DB->command.c_str(), callback, 0, &errorMsg); |
| 817 | if((rc != SQLITE_OK) && (rc != 101)) |
| 818 | WARNING("SQL error: %s\n", errorMsg); |
| 819 | } |
| 820 | |
| 821 | int32_t numstatements[3] = {0 ,0 ,0}; |
| 822 | for(size_t i; i < miss[activeMission].numServices; i++) { |
| 823 | if(miss[activeMission].services[i].name.compare("if") == 0) { |
| 824 | input.clear(); |
| 825 | check.clear(); |
| 826 | |
| 827 | for(size_t t = 0; t < 10; t++) { |
| 828 | if(!miss[activeMission].services[i].output[t].empty()) { |
| 829 | input = miss[activeMission].services[i - numstatements[0] - 1].output[t]; |
| 830 | |
| 831 | _data_DB->command="SELECT "; |
1045 | | sqlite3_stmt * pStatement; |
1046 | | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); |
1047 | | if (rc == SQLITE_OK){ |
1048 | | if (sqlite3_step(pStatement) == SQLITE_ROW) |
| 838 | |
| 839 | sqlite3_stmt *pStatement; |
| 840 | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), \ |
| 841 | -1, &pStatement, NULL); |
| 842 | if(rc == SQLITE_OK) { |
| 843 | if(sqlite3_step(pStatement) == SQLITE_ROW) |
| 844 | data = (const char *) sqlite3_column_text(pStatement, 1); |
| 845 | else { |
| 846 | LOG("1 data_DB:: Data not yet in DB.\n"); |
| 847 | rc=31337; |
| 848 | } |
| 849 | } else { |
| 850 | LOG("data_DB:: Error executing SQL statement. rc = %i\n%s\n", \ |
| 851 | rc,_data_DB->command.c_str()); |
| 852 | } |
| 853 | |
| 854 | sqlite3_finalize(pStatement); |
| 855 | int32_t pos = data.find_last_of("@", data.length() - 2); |
| 856 | token = data.substr(pos + 1); |
| 857 | token.erase(token.length() - 1); |
| 858 | data.clear(); |
| 859 | break; |
| 860 | } |
| 861 | } |
| 862 | |
| 863 | bool doit = false; |
| 864 | if(miss[activeMission].services[i].output[t].find(">") != string::npos) { |
| 865 | std::string data2; |
| 866 | _data_DB->command="SELECT "; |
| 867 | _data_DB->command.append(_data_DB->tablename); |
| 868 | _data_DB->command.append(".* from "); |
| 869 | _data_DB->command.append(_data_DB->tablename); |
| 870 | _data_DB->command.append(" where Tag=='"); |
| 871 | _data_DB->command.append(miss[activeMission].services[i].output[t].erase(0, 1)); |
| 872 | _data_DB->command.append("';"); |
| 873 | sqlite3_stmt *pStatement; |
| 874 | |
| 875 | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), \ |
| 876 | -1, &pStatement, NULL); |
| 877 | if(rc == SQLITE_OK) { |
| 878 | if(sqlite3_step(pStatement) == SQLITE_ROW) |
1079 | | _data_DB->command.append(".* from "); |
1080 | | _data_DB->command.append(_data_DB->tablename); |
1081 | | _data_DB->command.append(" where Tag=='"); |
1082 | | _data_DB->command.append(input); |
1083 | | _data_DB->command.append("';"); |
1084 | | sqlite3_stmt * pStatement; |
1085 | | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); |
1086 | | if (rc == SQLITE_OK){ |
1087 | | if (sqlite3_step(pStatement) == SQLITE_ROW) |
1088 | | data = (const char *) sqlite3_column_text(pStatement, 1); |
1089 | | else { |
1090 | | printf("5 data_DB:: Data not yet in DB.\n"); |
1091 | | rc=31337; |
| 910 | _data_DB->command.append(".* from "); |
| 911 | _data_DB->command.append(_data_DB->tablename); |
| 912 | _data_DB->command.append(" where Tag=='"); |
| 913 | _data_DB->command.append(input); |
| 914 | _data_DB->command.append("';"); |
| 915 | |
| 916 | sqlite3_stmt *pStatement; |
| 917 | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), \ |
| 918 | -1, &pStatement, NULL); |
| 919 | if(rc == SQLITE_OK) { |
| 920 | if(sqlite3_step(pStatement) == SQLITE_ROW) |
| 921 | data = (const char *) sqlite3_column_text(pStatement, 1); |
| 922 | else { |
| 923 | LOG("3 data_DB:: Data not yet in DB.\n"); |
| 924 | rc = 31337; |
| 925 | } |
| 926 | } else { |
| 927 | LOG("data_DB:: Error executing SQL statement. rc = %i\n%s\n", \ |
| 928 | rc,_data_DB->command.c_str()); |
| 929 | } |
| 930 | |
| 931 | sqlite3_finalize(pStatement); |
| 932 | int32_t pos = data.find_last_of("@", data.length() - 2); |
| 933 | token = data.substr(pos + 1); |
| 934 | token.erase(token.length() - 1); |
| 935 | break; |
1140 | | for(uint16_t l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){ |
1141 | | TransactData(l); |
| 973 | for(uint16_t j = k+1; j <= k+miss[activeMission].services[k].num_conds; j++){ |
| 974 | if(miss[activeMission].services[j].name.compare("if")==0){ |
| 975 | //printf("Level 2:if detected\n"); |
| 976 | input.clear(); |
| 977 | check.clear(); |
| 978 | for(t = 0; t < 10; t++){ |
| 979 | if(!miss[activeMission].services[j].output[t].empty()){ |
| 980 | input=miss[activeMission].services[j-numstatements[2]-1].output[t]; |
| 981 | _data_DB->command="SELECT "; |
| 982 | _data_DB->command.append(_data_DB->tablename); |
| 983 | _data_DB->command.append(".* from "); |
| 984 | _data_DB->command.append(_data_DB->tablename); |
| 985 | _data_DB->command.append(" where Tag=='"); |
| 986 | _data_DB->command.append(input); |
| 987 | _data_DB->command.append("';"); |
| 988 | sqlite3_stmt * pStatement; |
| 989 | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); |
| 990 | if (rc == SQLITE_OK){ |
| 991 | if (sqlite3_step(pStatement) == SQLITE_ROW) |
| 992 | data = (const char *) sqlite3_column_text(pStatement, 1); |
| 993 | else { |
| 994 | printf("5 data_DB:: Data not yet in DB.\n"); |
| 995 | rc=31337; |
| 996 | } |
| 997 | } else { |
| 998 | printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); |
| 999 | } |
| 1000 | sqlite3_finalize(pStatement); |
| 1001 | //printf("data=%s\n", data.c_str()); |
| 1002 | int pos = data.find_last_of("@", data.length()-2); |
| 1003 | token = data.substr(pos+1); |
| 1004 | token.erase(token.length()-1); |
| 1005 | //printf("token=%s\n", token.c_str()); |
| 1006 | data.clear(); |
| 1007 | break; |
| 1008 | } |
| 1009 | } |
| 1010 | bool doit = false; |
| 1011 | if(miss[activeMission].services[j].output[t].find(">") != string::npos){ |
| 1012 | _data_DB->command="SELECT "; |
| 1013 | _data_DB->command.append(_data_DB->tablename); |
| 1014 | _data_DB->command.append(".* from "); |
| 1015 | _data_DB->command.append(_data_DB->tablename); |
| 1016 | _data_DB->command.append(" where Tag=='"); |
| 1017 | _data_DB->command.append(miss[activeMission].services[j].output[t].erase(0, 1)); |
| 1018 | _data_DB->command.append("';"); |
| 1019 | sqlite3_stmt * pStatement; |
| 1020 | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); |
| 1021 | if (rc == SQLITE_OK){ |
| 1022 | if (sqlite3_step(pStatement) == SQLITE_ROW) |
| 1023 | data2 = (const char *) sqlite3_column_text(pStatement, 1); |
| 1024 | else { |
| 1025 | printf("6 data_DB:: Data not yet in DB.\n"); |
| 1026 | rc=31337; |
| 1027 | } |
| 1028 | } else { |
| 1029 | printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); |
| 1030 | } |
| 1031 | sqlite3_finalize(pStatement); |
| 1032 | |
| 1033 | int pos = data2.find_last_of("@", data2.length()-2); |
| 1034 | token2 = data2.substr(pos+1); |
| 1035 | token2.erase(token2.length()-1); |
| 1036 | if(atof(token.c_str()) > atof(token2.c_str())) |
| 1037 | doit=true; |
| 1038 | data.clear(); |
| 1039 | } |
| 1040 | else if (miss[activeMission].services[j].output[t].find(token) != string::npos) |
| 1041 | doit=true; |
| 1042 | if(doit){ |
| 1043 | //printf("Level 1:if taken\n"); |
| 1044 | for(uint16_t l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){ |
| 1045 | TransactData(l); |
| 1046 | } |
| 1047 | } |
| 1048 | else |
| 1049 | //printf("Level 2:if not taken\n"); |
| 1050 | numstatements[2] +=miss[activeMission].services[j].num_conds+1; |
| 1051 | j+=miss[activeMission].services[j].num_conds; |
| 1052 | //printf("Level 2:doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); |
| 1053 | }else if(miss[activeMission].services[j].name.compare("dowhile")==0){ |
| 1054 | numstatements[0]=0; |
| 1055 | //printf("Level 2:while detected\n"); |
| 1056 | while(true){ |
| 1057 | uint16_t l; |
| 1058 | for(l = j+1; l <= j+miss[activeMission].services[j].num_conds; l++){ |
| 1059 | TransactData(l); |
| 1060 | } |
| 1061 | data.clear(); |
| 1062 | input.clear(); |
| 1063 | check.clear(); |
| 1064 | int t; |
| 1065 | for(t = 0; t < 10; t++){ |
| 1066 | if(!miss[activeMission].services[j].output[t].empty()){ |
| 1067 | input=miss[activeMission].services[l-2].output[t]; |
| 1068 | //printf("%s\n",input.c_str()); |
| 1069 | _data_DB->command="SELECT "; |
| 1070 | _data_DB->command.append(_data_DB->tablename); |
| 1071 | _data_DB->command.append(".* from "); |
| 1072 | _data_DB->command.append(_data_DB->tablename); |
| 1073 | _data_DB->command.append(" where Tag=='"); |
| 1074 | _data_DB->command.append(input); |
| 1075 | _data_DB->command.append("';"); |
| 1076 | sqlite3_stmt * pStatement; |
| 1077 | |
| 1078 | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); |
| 1079 | if (rc == SQLITE_OK){ |
| 1080 | if (sqlite3_step(pStatement) == SQLITE_ROW) |
| 1081 | data = (const char *) sqlite3_column_text(pStatement, 1); |
| 1082 | else { |
| 1083 | printf("7 data_DB:: Data not yet in DB.: %s\n", _data_DB->command.c_str()); |
| 1084 | rc=31337; |
| 1085 | } |
| 1086 | } else { |
| 1087 | printf("data_DB:: SQL statement error. rc = %i\n%s\n",rc,_data_DB->command.c_str()); |
| 1088 | } |
| 1089 | sqlite3_finalize(pStatement); |
| 1090 | //printf("Level 2:data=%s\n", data.c_str()); |
| 1091 | int pos = data.find_last_of("@", data.length()-2); |
| 1092 | token = data.substr(pos+1); |
| 1093 | token.erase(token.length()-1); |
| 1094 | //printf("Level 2:token=%s\n", token); |
| 1095 | break; |
| 1096 | } |
| 1097 | } |
| 1098 | //printf("Level 2:--- %s %s---\n", miss[activeMission].services[j].output[t].c_str(), token); |
| 1099 | if(miss[activeMission].services[j].output[t].find(token) != string::npos){ |
| 1100 | //printf("Level 2:while taken again!\n"); |
| 1101 | } |
| 1102 | else { |
| 1103 | //printf("Level 2:no more while\n"); |
| 1104 | break;} |
| 1105 | } |
| 1106 | j+=miss[activeMission].services[j].num_conds; |
| 1107 | } |
| 1108 | else{ |
| 1109 | //printf("Level 2: no conditional\n"); |
| 1110 | numstatements[2]=0; |
| 1111 | TransactData(j); |
| 1112 | } |
1214 | | numstatements[1] +=miss[activeMission].services[k].num_conds+1; |
1215 | | k+=miss[activeMission].services[k].num_conds; |
1216 | | //printf("doneif %d, %d, %d\n", numstatements, miss[activeMission].services[i].num_conds, i); |
1217 | | }else if(miss[activeMission].services[k].name.compare("dowhile")==0){ |
1218 | | numstatements[0]=0; |
1219 | | //printf("Level 1: while detected\n"); |
1220 | | while(true){ |
1221 | | uint16_t j; |
1222 | | for(j = k+1; j <= k+miss[activeMission].services[k].num_conds; j++){ |
1223 | | TransactData(j); |
1224 | | } |
1225 | | data.clear(); |
1226 | | input.clear(); |
1227 | | check.clear(); |
1228 | | int t; |
1229 | | for(t = 0; t < 10; t++){ |
1230 | | if(!miss[activeMission].services[k].output[t].empty()){ |
1231 | | input=miss[activeMission].services[j-1].output[t]; |
1232 | | _data_DB->command="SELECT "; |
1233 | | _data_DB->command.append(_data_DB->tablename); |
1234 | | _data_DB->command.append(".* from "); |
1235 | | _data_DB->command.append(_data_DB->tablename); |
1236 | | _data_DB->command.append(" where Tag=='"); |
1237 | | _data_DB->command.append(input); |
1238 | | _data_DB->command.append("';"); |
1239 | | sqlite3_stmt * pStatement; |
1240 | | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); |
1241 | | if (rc == SQLITE_OK){ |
1242 | | if (sqlite3_step(pStatement) == SQLITE_ROW) |
1243 | | data = (const char *) sqlite3_column_text(pStatement, 1); |
1244 | | else { |
1245 | | printf("8 data_DB:: Data not yet in DB.\n"); |
1246 | | rc=31337; |
1247 | | } |
1248 | | } else { |
1249 | | printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); |
1250 | | } |
1251 | | sqlite3_finalize(pStatement); |
1252 | | //printf("Level 1:data=%s\n", data.c_str()); |
1253 | | int pos = data.find_last_of("@", data.length()-2); |
1254 | | token = data.substr(pos+1); |
1255 | | token.erase(token.length()-1); |
1256 | | //printf("Level 1:token=%s\n", token); |
1257 | | break; |
1258 | | } |
1259 | | } |
1260 | | //printf("Level 1:--- %s %s---\n", miss[activeMission].services[k].output[t].c_str(), token); |
1261 | | if(miss[activeMission].services[k].output[t].find(token) != string::npos){ |
1262 | | //printf("Level 1:while taken again!\n"); |
1263 | | } |
1264 | | else { |
1265 | | //printf("Level 1:While finished\n"); |
1266 | | break;} |
1270 | | else{ |
1271 | | //printf("Level1:No conditional\n"); |
1272 | | numstatements[1]=0; |
1273 | | TransactData(k); |
1274 | | } |
1275 | | } |
1276 | | } |
1277 | | numstatements[0] +=miss[activeMission].services[i].num_conds+1; |
1278 | | i+=miss[activeMission].services[i].num_conds; |
1279 | | } |
1280 | | else if(miss[activeMission].services[i].name.compare("dowhile")==0) |
1281 | | { |
1282 | | numstatements[0]=0; |
1283 | | //printf("Level 0: while detected\n"); |
1284 | | while(true){ |
1285 | | uint16_t k; |
1286 | | for(k = i+1; k <= i+miss[activeMission].services[i].num_conds; k++){ |
1287 | | TransactData(k); |
1288 | | } |
1289 | | data.clear(); |
1290 | | input.clear(); |
1291 | | check.clear(); |
1292 | | int t; |
1293 | | for(t = 0; t < 10; t++){ |
1294 | | if(!miss[activeMission].services[i].output[t].empty()){ |
1295 | | input=miss[activeMission].services[k-1].output[t]; |
1296 | | _data_DB->command="SELECT "; |
1297 | | _data_DB->command.append(_data_DB->tablename); |
1298 | | _data_DB->command.append(".* from "); |
1299 | | _data_DB->command.append(_data_DB->tablename); |
1300 | | _data_DB->command.append(" where Tag=='"); |
1301 | | _data_DB->command.append(input); |
1302 | | _data_DB->command.append("';"); |
1303 | | sqlite3_stmt * pStatement; |
1304 | | rc = sqlite3_prepare_v2(_data_DB->db, _data_DB->command.c_str(), -1, &pStatement, NULL); |
1305 | | if (rc == SQLITE_OK){ |
1306 | | if (sqlite3_step(pStatement) == SQLITE_ROW) |
1307 | | data = (const char *) sqlite3_column_text(pStatement, 1); |
1308 | | else { |
1309 | | printf("10data_DB:: Data not yet in DB.\n"); |
1310 | | rc=31337; |
1311 | | } |
1312 | | } else { |
1313 | | printf("data_DB:: Error executing SQL statement. rc = %i\n%s\n",rc,_data_DB->command.c_str()); |
1314 | | } |
1315 | | sqlite3_finalize(pStatement); |
1316 | | int pos = data.find_last_of("@", data.length()-2); |
1317 | | token = data.substr(pos+1); |
1318 | | token.erase(token.length()-1); |
1319 | | break; |
1320 | | } |
1321 | | } |
1322 | | //printf("Level 0:--- %s %s---\n", miss[activeMission].services[i].output[t].c_str(), token); |
1323 | | if(miss[activeMission].services[i].output[t].find(token) != string::npos){ |
1324 | | //printf("Level 0:while taken again!\n"); |
1325 | | } |
1326 | | else { |
1327 | | //printf("Level 0:no more while\n"); |
1328 | | break;} |
1329 | | } |
1330 | | i+=miss[activeMission].services[i].num_conds; |
1331 | | } |
1332 | | else{ |
1333 | | numstatements[0]=0; |
1334 | | //printf("Level 0: No conditional\n"); |
1335 | | TransactData(i);} |
1336 | | i++; |
1337 | | } |
1338 | | i=0; |
| 1234 | i+=miss[activeMission].services[i].num_conds; |
| 1235 | } |
| 1236 | else{ |
| 1237 | numstatements[0]=0; |
| 1238 | //printf("Level 0: No conditional\n"); |
| 1239 | TransactData(i); |
| 1240 | } |
| 1241 | } |
| 1242 | |
| 1243 | int32_t i = 0; |