Getting radar interface state before assigning sockets
This commit is contained in:
parent
c6d8be21f3
commit
cf1eb85c95
48
src/cpm.c
48
src/cpm.c
|
|
@ -47,30 +47,29 @@ S_INTERFACE_CONNECTION_T raw_socket;
|
|||
S_OBJECT_CONTROL_T s_objectControl;
|
||||
S_OBJECTS_T as_objects[NOF_OBJECTS];
|
||||
|
||||
int radar_ready(facilities_t* facilities){
|
||||
// Create temporary ifr struct and socket to
|
||||
// check if the radar interface is running i.e if the
|
||||
// radar has booted up
|
||||
|
||||
struct ifreq ifr;
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
|
||||
bool waitingIncomingConnection(void){
|
||||
// Listening to the socket (Waiting for incoming connection)
|
||||
unsigned int len = sizeof(s_socket.s_client);
|
||||
int sock = socket(AF_INET, SOCK_DGRAM, IPPROTO_IP);
|
||||
|
||||
if(listen(s_socket.i32_socket,1)<0){
|
||||
syslog_err("Waiting for incoming requests failed...");
|
||||
return false;
|
||||
}
|
||||
strncpy(ifr.ifr_name, facilities->dissemination->int_radar, sizeof(ifr.ifr_name));
|
||||
if(ioctl(sock, SIOCGIFFLAGS, &ifr) <0)
|
||||
syslog_err(" IOCTL failed, could not retrieve radar interface flags");
|
||||
|
||||
if((s_socket.i32_client = accept(s_socket.i32_socket, (struct sockaddr*)&s_socket.s_server, &len)) < 0){
|
||||
syslog_err("Client disconnected...");
|
||||
return false;
|
||||
}
|
||||
close(sock);
|
||||
|
||||
syslog_debug("Radar connected");
|
||||
|
||||
return true;
|
||||
return (ifr.ifr_flags & IFF_UP) && (ifr.ifr_flags & IFF_RUNNING);
|
||||
}
|
||||
|
||||
|
||||
bool radar_connection(char* radar_port, facilities_t* facilities){
|
||||
|
||||
bool radar_connection(char* radar_port, facilities_t* facilities){
|
||||
if(radar_ready(facilities) == 1){
|
||||
if(facilities->dissemination->tmc_connect == false){
|
||||
|
||||
// Create TCP socket
|
||||
|
|
@ -92,10 +91,21 @@ bool radar_connection(char* radar_port, facilities_t* facilities){
|
|||
return false;
|
||||
}
|
||||
|
||||
// Listening to the socket (Waiting for incoming connection)
|
||||
unsigned int len = sizeof(s_socket.s_client);
|
||||
|
||||
if(!waitingIncomingConnection()){
|
||||
if(listen(s_socket.i32_socket,1)<0){
|
||||
syslog_err("Waiting for incoming requests failed...");
|
||||
return false;
|
||||
}
|
||||
|
||||
if((s_socket.i32_client = accept(s_socket.i32_socket, (struct sockaddr*)&s_socket.s_server, &len)) < 0){
|
||||
syslog_err("Client disconnected...");
|
||||
return false;
|
||||
}
|
||||
|
||||
syslog_debug("Radar connected");
|
||||
|
||||
}
|
||||
|
||||
// Create RAW socket
|
||||
|
|
@ -131,7 +141,9 @@ bool radar_connection(char* radar_port, facilities_t* facilities){
|
|||
|
||||
|
||||
return true;
|
||||
|
||||
}else{
|
||||
return false;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
|
@ -728,7 +740,7 @@ void *cp_service(void *fc){
|
|||
dissemination_reset_timer(facilities->dissemination, &facilities->epv,1);
|
||||
|
||||
}else{
|
||||
is_radar_connected = waitingIncomingConnection();
|
||||
is_radar_connected = radar_connection(RADAR_PORT,facilities);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue