void syslogd_enable(char const * ident, int log_facility, struct syslogd_options const * opt) { // default rsyslogd if (opt == NULL) { openlog(ident, LOG_PID | LOG_CONS, 0); set_logger(vsyslogf); return; } // used configured rsyslogd bzero(syslogd_tag__, sizeof(syslogd_tag__)); bzero(syslogd_pid__, sizeof(syslogd_pid__)); snprintf(syslogd_pid__, sizeof(syslogd_pid__), "[%d]", getpid()); if (getlogin_r(&syslogd_tag__[0], sizeof(syslogd_tag__)) < 0) { switch (errno) { case ENXIO: case ERANGE: case ENOTTY: errno = 0; break; default : DIE("getlogin_r error '%m'"); } } SYSLOG_INFO__ = SYSLOG_TRACE__ = ((log_facility & LOG_FACMASK) | (LOG_INFO & LOG_PRIMASK)); SYSLOG_WARNING__ = ((log_facility & LOG_FACMASK) | (LOG_WARNING & LOG_PRIMASK)); SYSLOG_ERROR__ = SYSLOG_FATAL__ = ((log_facility & LOG_FACMASK) | (LOG_ERR & LOG_PRIMASK)); if (opt->unix_socket) open_unix_socket(opt, ALL_TYPES); else open_inet_socket(opt, ALL_TYPES); set_logger(vslogf_rfc3164); }
main () { int port; std::vector<Sat*> sat_tracking; /********************************************************************************/ /************************************** PIPE ***********************************/ /********************************************************************************/ int ttt; //PIPE char *pipe = "/tmp/satObPIPE"; mkfifo(pipe,0666); /********************************************************************************/ /********************************** SEMAPHORE CAPTURE **************************/ /********************************************************************************/ key_t key = ftok ("/bin/ls", 1990); if (key == (key_t)-1){ std::cout << "Fatal error in shared memory. Can not create key.\n"; return -1; } int sem_id = semget (key,1,0600 | IPC_CREAT); if (sem_id == -1){ std::cout << "Fatal error in shared memory. Can not create/open semaphore.\n"; return -1; } semctl(sem_id,0,SETVAL,1); /********************************************************************************/ /********************************** SEMAPHORE FREQUENCY ************************/ /********************************************************************************/ key_t keyf = ftok ("/bin/ls", 1995); if (keyf == (key_t)-1) { std::cout << "Fatal error in shared memory. Can not create key.\n"; return -1; } int sem_idf = semget (keyf,1,0600 | IPC_CREAT); if (sem_idf == -1) { std::cout << "Fatal error in shared memory. Can not create/open semaphore.\n"; return -1; } semctl(sem_idf,0,SETVAL,1); /********************************************************************************/ /********************************** SHARED MEMORY ******************************/ /********************************************************************************/ key_t memory_key = ftok ("/bin/ls", 1968); if (memory_key == -1) { std::cout << "Fatal error in shared memory. Can not create key.\n"; return -1; } int memory_id = shmget (memory_key, sizeof(int), 0777 | IPC_CREAT); if (memory_id == -1) { std::cout << "Fatal error in shared memory. Can not create shared memory.\n"; return -1; } int* memory = (int *)shmat(memory_id, (char *)0, 0); if (memory == NULL) { std::cout << "Fatal error in shared memory. Can not create shared memory.\n"; return -1; } *memory=0; /********************************************************************************/ /********************************** CONFIGURATION ******************************/ /********************************************************************************/ char result[PATH_MAX]; ssize_t count = readlink( "/proc/self/exe", result, PATH_MAX ); std::string path( result, (count > 0) ? count : 0 ); path=path.substr(0,path.length()-7); path.insert(path.length(),"/default.ini"); boost::property_tree::ptree conf; boost::property_tree::ini_parser::read_ini(path, conf); port=std::atoi(conf.get<std::string>("CONNECTION.Port").c_str()); /********************************************************************************/ /********************************** CONNECTION *********************************/ /********************************************************************************/ int socket_server; int socket_client; socket_server = open_inet_socket(port); if (socket_server == -1) { printf ("Can not open server socket.\n"); exit (-1); } /********************************************************************************/ /********************************** SATELLITES RECEPTION ***********************/ /********************************************************************************/ while(true){ std::string satellite_number; std::string frequency; char str; time_t timer; socket_client = accept_client_connection (socket_server); if (socket_server == -1) { printf ("Can not open client socket.\n"); exit (-1); } for(int i=1;i>0;++i){ read_socket (socket_client, &str, 1); if(str=='|'){ i=-1; } else{ satellite_number=satellite_number.insert(satellite_number.size(),1,str); } } for(int i=1;i>0;++i){ read_socket (socket_client, &str, 1); if(str=='&'){ i=-1; } else{ frequency=frequency.insert(frequency.size(),1,str); } } close (socket_client); /********************************************************************************/ /********************************** SAVE SATELLITES TRACKED ********************/ /********************************************************************************/ bool exist_sat=false; //If satellite is having tracking only change (or not) the frequency and date for(int i = 0; (i< sat_tracking.size()) && (exist_sat==false); i++) { if(std::atoi(satellite_number.c_str())==sat_tracking[i]->satellite_number ){ exist_sat=true; } } if(exist_sat==false){ Sat* p_sat=new Sat(); p_sat->satellite_number=std::atoi(satellite_number.c_str()); p_sat->frequency=std::atof(frequency.c_str()); std::time(&timer); p_sat->time=timer; /********************************************************************************/ /********************************** SAT-OBSERVER INSTANCE **********************/ /********************************************************************************/ //Create a sat-observer instance. int child = fork(); switch(child){ case -1: std::cout << "Error: Can not create sat-observer instance.\n"; break; //Child process: sat-observer case 0: char result[PATH_MAX]; ssize_t count = readlink( "/proc/self/exe", result, PATH_MAX ); std::string path( result, (count > 0) ? count : 0 ); path=path.substr(0,path.length()-6); path.insert(path.length(),"sat-observer "); path.insert(path.length(),satellite_number); path.insert(path.length()," "); path.insert(path.length(),frequency); system(path.c_str()); break; } p_sat->proccess_id=child; sat_tracking.push_back(p_sat); } for(int i = 0; i < sat_tracking.size(); i++) { char* dt = ctime(&(sat_tracking[i]->time)); std::cout << "Satellite number: " << sat_tracking[i]->satellite_number << " || Frequency: " << sat_tracking[i]->frequency << " || " << dt << "\n"; } std::cout << "\n\n\n"; } close (socket_client); close (socket_server); }