#include #include #include #include #include #include #include #include #include #include #include #include "bson/bson.h" #define PORT_NO 8123 #define BUFLEN 1024 using namespace std; using namespace bson; /** * CCRequest: * { 'cmd', 'args', 'response_ip', 'response_port', 'id' } */ mongo::BSONObj handle_args(string input){ mongo::BSONObjBuilder b; mongo::BSONObj rpack_data; if (input.compare("ping") == 0){ cout << "You typed 'ping!'" << endl; b.append("cmd", "ping"); mongo::BSONObjBuilder b2; b2 << "dest_ip" << "127.0.0.1" << "num_times" << 5; b.append("args", b2.obj()); b.append("id", 1); rpack_data = b.obj(); cout << rpack_data.objdata() << endl; cout << rpack_data.objsize() << endl; cout << rpack_data.toString() << endl; } else if (input.compare("traceroute") == 0){ cout << "You typed 'traceroute!'" << endl; b.append("cmd", "traceroute"); mongo::BSONObjBuilder b2; b2 << "dest_ip" << "127.0.0.2"; b.append("args", b2.obj()); b.append("id", 1); rpack_data = b.obj(); cout << rpack_data.objdata() << endl; cout << rpack_data.objsize() << endl; cout << rpack_data.toString() << endl; } else{ cout << "You typed gibberish! Shame on you!" << endl; } return rpack_data; } int main(int argc, char* argv[]){ int sock, servlen; struct sockaddr_in server; char buffer[82]; char* my_ip = "127.0.0.1"; string host; bzero((char*)&server, sizeof(server)); getnameinfo((const struct sockaddr*)&server, sizeof(server), my_ip, strlen(my_ip), NULL, 0, NI_DGRAM); server.sin_port = htons(PORT_NO); servlen = sizeof(struct sockaddr_in); sock = socket(AF_INET, SOCK_DGRAM, 0); if (sock < 0){ perror("socket"); exit(EXIT_FAILURE); } while (true){ string user_input; getline(cin, user_input); mongo::BSONObj pack_data = handle_args(user_input); sendto(sock, pack_data.objdata(), strlen(pack_data.objdata()), 0, (const struct sockaddr*)&server, servlen); } cout << "Game Over!" << endl; exit(EXIT_SUCCESS); }