Просмотр исходного кода

Qdevice: Allow compiler warn about unhandled case

Remove default case where switch selection is made on top of enum value.

Signed-off-by: Jan Friesse <jfriesse@redhat.com>
Jan Friesse 9 лет назад
Родитель
Сommit
25b50ed9f8

+ 5 - 5
qdevices/msg.c

@@ -955,11 +955,11 @@ msg_decode(const struct dynar *msg, struct msg_decoded *decoded_msg)
 			decoded_msg->tie_breaker_set = 1;
 			decoded_msg->tie_breaker_set = 1;
 			memcpy(&decoded_msg->tie_breaker, &tie_breaker, sizeof(tie_breaker));
 			memcpy(&decoded_msg->tie_breaker, &tie_breaker, sizeof(tie_breaker));
 			break;
 			break;
-		default:
-			/*
-			 * Unknown option
-			 */
-			break;
+		/*
+		 * Default is not defined intentionally. Compiler shows warning when
+		 * new tlv option is added. Also protocol ignores unknown options so
+		 * no extra work is needed.
+		 */
 		}
 		}
 	}
 	}
 
 

+ 29 - 4
qdevices/qdevice-net-cast-vote-timer.c

@@ -42,24 +42,38 @@ qdevice_net_cast_vote_timer_callback(void *data1, void *data2)
 {
 {
 	struct qdevice_net_instance *instance;
 	struct qdevice_net_instance *instance;
 	int cast_vote;
 	int cast_vote;
+	int case_processed;
 
 
 	instance = (struct qdevice_net_instance *)data1;
 	instance = (struct qdevice_net_instance *)data1;
 
 
+	case_processed = 0;
+
 	switch (instance->cast_vote_timer_vote) {
 	switch (instance->cast_vote_timer_vote) {
 	case TLV_VOTE_ACK:
 	case TLV_VOTE_ACK:
+		case_processed = 1;
 		cast_vote = 1;
 		cast_vote = 1;
 		break;
 		break;
 	case TLV_VOTE_NACK:
 	case TLV_VOTE_NACK:
+		case_processed = 1;
 		cast_vote = 0;
 		cast_vote = 0;
 		break;
 		break;
 	case TLV_VOTE_ASK_LATER:
 	case TLV_VOTE_ASK_LATER:
 	case TLV_VOTE_WAIT_FOR_REPLY:
 	case TLV_VOTE_WAIT_FOR_REPLY:
 	case TLV_VOTE_NO_CHANGE:
 	case TLV_VOTE_NO_CHANGE:
-	default:
+		/*
+		 * Shouldn't happen
+		 */
+		break;
+	/*
+	 * Default is not defined intentionally. Compiler shows warning when
+	 * new tlv_vote is added.
+	 */
+	}
+
+	if (!case_processed) {
 		qdevice_log(LOG_CRIT, "qdevice_net_timer_cast_vote: Unhandled cast_vote_timer_vote %u\n",
 		qdevice_log(LOG_CRIT, "qdevice_net_timer_cast_vote: Unhandled cast_vote_timer_vote %u\n",
 		    instance->cast_vote_timer_vote);
 		    instance->cast_vote_timer_vote);
 		exit(1);
 		exit(1);
-		break;
 	}
 	}
 
 
 	if (qdevice_votequorum_poll(instance->qdevice_instance_ptr, cast_vote) != 0) {
 	if (qdevice_votequorum_poll(instance->qdevice_instance_ptr, cast_vote) != 0) {
@@ -79,25 +93,36 @@ int
 qdevice_net_cast_vote_timer_update(struct qdevice_net_instance *instance, enum tlv_vote vote)
 qdevice_net_cast_vote_timer_update(struct qdevice_net_instance *instance, enum tlv_vote vote)
 {
 {
 	int timer_needs_running;
 	int timer_needs_running;
+	int case_processed;
+
+	case_processed = 0;
 
 
 	switch (vote) {
 	switch (vote) {
 	case TLV_VOTE_ACK:
 	case TLV_VOTE_ACK:
 	case TLV_VOTE_NACK:
 	case TLV_VOTE_NACK:
+		case_processed = 1;
 		timer_needs_running = 1;
 		timer_needs_running = 1;
 		break;
 		break;
 	case TLV_VOTE_WAIT_FOR_REPLY:
 	case TLV_VOTE_WAIT_FOR_REPLY:
 	case TLV_VOTE_ASK_LATER:
 	case TLV_VOTE_ASK_LATER:
+		case_processed = 1;
 		timer_needs_running = 0;
 		timer_needs_running = 0;
 		break;
 		break;
 	case TLV_VOTE_NO_CHANGE:
 	case TLV_VOTE_NO_CHANGE:
+		case_processed = 1;
 		return (0);
 		return (0);
 
 
 		break;
 		break;
-	default:
+	/*
+	 * Default is not defined intentionally. Compiler shows warning when
+	 * new tlv_vote is added.
+	 */
+	}
+
+	if (!case_processed) {
 		qdevice_log(LOG_CRIT, "qdevice_net_cast_vote_timer_update_vote: Unhandled vote parameter %u\n",
 		qdevice_log(LOG_CRIT, "qdevice_net_cast_vote_timer_update_vote: Unhandled vote parameter %u\n",
 		    vote);
 		    vote);
 		exit(1);
 		exit(1);
-		break;
 	}
 	}
 
 
 	instance->cast_vote_timer_vote = vote;
 	instance->cast_vote_timer_vote = vote;

+ 58 - 6
qdevices/qdevice-net-msg-received.c

@@ -118,6 +118,14 @@ qdevice_net_msg_received_unexpected_msg(struct qdevice_net_instance *instance,
 	return (-1);
 	return (-1);
 }
 }
 
 
+static int
+qdevice_net_msg_received_init(struct qdevice_net_instance *instance,
+    const struct msg_decoded *msg)
+{
+
+	return (qdevice_net_msg_received_unexpected_msg(instance, msg, "init"));
+}
+
 static int
 static int
 qdevice_net_msg_received_preinit(struct qdevice_net_instance *instance,
 qdevice_net_msg_received_preinit(struct qdevice_net_instance *instance,
     const struct msg_decoded *msg)
     const struct msg_decoded *msg)
@@ -540,6 +548,7 @@ qdevice_net_msg_received_node_list_reply(struct qdevice_net_instance *instance,
 	const char *str;
 	const char *str;
 	enum tlv_vote result_vote;
 	enum tlv_vote result_vote;
 	int res;
 	int res;
+	int case_processed;
 
 
 	if (instance->state != QDEVICE_NET_INSTANCE_STATE_WAITING_VOTEQUORUM_CMAP_EVENTS) {
 	if (instance->state != QDEVICE_NET_INSTANCE_STATE_WAITING_VOTEQUORUM_CMAP_EVENTS) {
 		qdevice_log(LOG_ERR, "Received unexpected node list reply message. "
 		qdevice_log(LOG_ERR, "Received unexpected node list reply message. "
@@ -565,17 +574,25 @@ qdevice_net_msg_received_node_list_reply(struct qdevice_net_instance *instance,
 		return (-1);
 		return (-1);
 	}
 	}
 
 
+	str = NULL;
+
 	switch (msg->node_list_type) {
 	switch (msg->node_list_type) {
 	case TLV_NODE_LIST_TYPE_INITIAL_CONFIG: str = "initial config"; break;
 	case TLV_NODE_LIST_TYPE_INITIAL_CONFIG: str = "initial config"; break;
 	case TLV_NODE_LIST_TYPE_CHANGED_CONFIG: str = "changed config"; break;
 	case TLV_NODE_LIST_TYPE_CHANGED_CONFIG: str = "changed config"; break;
 	case TLV_NODE_LIST_TYPE_MEMBERSHIP: str ="membership"; break;
 	case TLV_NODE_LIST_TYPE_MEMBERSHIP: str ="membership"; break;
 	case TLV_NODE_LIST_TYPE_QUORUM: str ="quorum"; break;
 	case TLV_NODE_LIST_TYPE_QUORUM: str ="quorum"; break;
-	default:
+	/*
+	 * Default is not defined intentionally. Compiler shows warning when new node list type
+	 * is added
+	 */
+	}
+
+	if (str == NULL) {
 		qdevice_log(LOG_CRIT, "qdevice_net_msg_received_node_list_reply fatal error. "
 		qdevice_log(LOG_CRIT, "qdevice_net_msg_received_node_list_reply fatal error. "
 		    "Unhandled node_list_type (debug output)");
 		    "Unhandled node_list_type (debug output)");
 		exit(1);
 		exit(1);
-		break;
 	}
 	}
+
 	qdevice_log(LOG_DEBUG, "Received %s node list reply", str);
 	qdevice_log(LOG_DEBUG, "Received %s node list reply", str);
 	qdevice_log(LOG_DEBUG, "  seq = "UTILS_PRI_MSG_SEQ, msg->seq_number);
 	qdevice_log(LOG_DEBUG, "  seq = "UTILS_PRI_MSG_SEQ, msg->seq_number);
 	qdevice_log(LOG_DEBUG, "  vote = %s", tlv_vote_to_str(msg->vote));
 	qdevice_log(LOG_DEBUG, "  vote = %s", tlv_vote_to_str(msg->vote));
@@ -589,26 +606,35 @@ qdevice_net_msg_received_node_list_reply(struct qdevice_net_instance *instance,
 	 */
 	 */
 	result_vote = msg->vote;
 	result_vote = msg->vote;
 
 
+	case_processed = 0;
 	switch (msg->node_list_type) {
 	switch (msg->node_list_type) {
 	case TLV_NODE_LIST_TYPE_INITIAL_CONFIG:
 	case TLV_NODE_LIST_TYPE_INITIAL_CONFIG:
 	case TLV_NODE_LIST_TYPE_CHANGED_CONFIG:
 	case TLV_NODE_LIST_TYPE_CHANGED_CONFIG:
+		case_processed = 1;
 		res = qdevice_net_algorithm_config_node_list_reply_received(instance,
 		res = qdevice_net_algorithm_config_node_list_reply_received(instance,
 		    msg->seq_number, (msg->node_list_type == TLV_NODE_LIST_TYPE_INITIAL_CONFIG),
 		    msg->seq_number, (msg->node_list_type == TLV_NODE_LIST_TYPE_INITIAL_CONFIG),
 		    &result_vote);
 		    &result_vote);
 		break;
 		break;
 	case TLV_NODE_LIST_TYPE_MEMBERSHIP:
 	case TLV_NODE_LIST_TYPE_MEMBERSHIP:
+		case_processed = 1;
 		res = qdevice_net_algorithm_membership_node_list_reply_received(instance,
 		res = qdevice_net_algorithm_membership_node_list_reply_received(instance,
 		    msg->seq_number, &msg->ring_id, &result_vote);
 		    msg->seq_number, &msg->ring_id, &result_vote);
 		break;
 		break;
 	case TLV_NODE_LIST_TYPE_QUORUM:
 	case TLV_NODE_LIST_TYPE_QUORUM:
+		case_processed = 1;
 		res = qdevice_net_algorithm_quorum_node_list_reply_received(instance,
 		res = qdevice_net_algorithm_quorum_node_list_reply_received(instance,
 		    msg->seq_number, &result_vote);
 		    msg->seq_number, &result_vote);
 		break;
 		break;
-	default:
+	/*
+	 * Default is not defined intentionally. Compiler shows warning when new node list type
+	 * is added
+	 */
+	}
+
+	if (!case_processed) {
 		qdevice_log(LOG_CRIT, "qdevice_net_msg_received_node_list_reply fatal error. "
 		qdevice_log(LOG_CRIT, "qdevice_net_msg_received_node_list_reply fatal error. "
 		    "Unhandled node_list_type (algorithm call)");
 		    "Unhandled node_list_type (algorithm call)");
 		exit(1);
 		exit(1);
-		break;
 	}
 	}
 
 
 	if (res != 0) {
 	if (res != 0) {
@@ -772,6 +798,7 @@ qdevice_net_msg_received(struct qdevice_net_instance *instance)
 	struct msg_decoded msg;
 	struct msg_decoded msg;
 	int res;
 	int res;
 	int ret_val;
 	int ret_val;
+	int msg_processed;
 
 
 	msg_decoded_init(&msg);
 	msg_decoded_init(&msg);
 
 
@@ -789,59 +816,84 @@ qdevice_net_msg_received(struct qdevice_net_instance *instance)
 
 
 	ret_val = 0;
 	ret_val = 0;
 
 
+	msg_processed = 0;
+
 	switch (msg.type) {
 	switch (msg.type) {
+	case MSG_TYPE_INIT:
+		msg_processed = 1;
+		ret_val = qdevice_net_msg_received_init(instance, &msg);
+		break;
 	case MSG_TYPE_PREINIT:
 	case MSG_TYPE_PREINIT:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_preinit(instance, &msg);
 		ret_val = qdevice_net_msg_received_preinit(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_PREINIT_REPLY:
 	case MSG_TYPE_PREINIT_REPLY:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_preinit_reply(instance, &msg);
 		ret_val = qdevice_net_msg_received_preinit_reply(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_STARTTLS:
 	case MSG_TYPE_STARTTLS:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_starttls(instance, &msg);
 		ret_val = qdevice_net_msg_received_starttls(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_SERVER_ERROR:
 	case MSG_TYPE_SERVER_ERROR:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_server_error(instance, &msg);
 		ret_val = qdevice_net_msg_received_server_error(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_INIT_REPLY:
 	case MSG_TYPE_INIT_REPLY:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_init_reply(instance, &msg);
 		ret_val = qdevice_net_msg_received_init_reply(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_SET_OPTION:
 	case MSG_TYPE_SET_OPTION:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_set_option(instance, &msg);
 		ret_val = qdevice_net_msg_received_set_option(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_SET_OPTION_REPLY:
 	case MSG_TYPE_SET_OPTION_REPLY:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_set_option_reply(instance, &msg);
 		ret_val = qdevice_net_msg_received_set_option_reply(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_ECHO_REQUEST:
 	case MSG_TYPE_ECHO_REQUEST:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_echo_request(instance, &msg);
 		ret_val = qdevice_net_msg_received_echo_request(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_ECHO_REPLY:
 	case MSG_TYPE_ECHO_REPLY:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_echo_reply(instance, &msg);
 		ret_val = qdevice_net_msg_received_echo_reply(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_NODE_LIST:
 	case MSG_TYPE_NODE_LIST:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_node_list(instance, &msg);
 		ret_val = qdevice_net_msg_received_node_list(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_NODE_LIST_REPLY:
 	case MSG_TYPE_NODE_LIST_REPLY:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_node_list_reply(instance, &msg);
 		ret_val = qdevice_net_msg_received_node_list_reply(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_ASK_FOR_VOTE:
 	case MSG_TYPE_ASK_FOR_VOTE:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_ask_for_vote(instance, &msg);
 		ret_val = qdevice_net_msg_received_ask_for_vote(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_ASK_FOR_VOTE_REPLY:
 	case MSG_TYPE_ASK_FOR_VOTE_REPLY:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_ask_for_vote_reply(instance, &msg);
 		ret_val = qdevice_net_msg_received_ask_for_vote_reply(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_VOTE_INFO:
 	case MSG_TYPE_VOTE_INFO:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_vote_info(instance, &msg);
 		ret_val = qdevice_net_msg_received_vote_info(instance, &msg);
 		break;
 		break;
 	case MSG_TYPE_VOTE_INFO_REPLY:
 	case MSG_TYPE_VOTE_INFO_REPLY:
+		msg_processed = 1;
 		ret_val = qdevice_net_msg_received_vote_info_reply(instance, &msg);
 		ret_val = qdevice_net_msg_received_vote_info_reply(instance, &msg);
 		break;
 		break;
-	default:
+	/*
+	 * Default is not defined intentionally. Compiler shows warning when msg type is added
+	 */
+	}
+
+	if (!msg_processed) {
 		qdevice_log(LOG_ERR, "Received unsupported message %u. "
 		qdevice_log(LOG_ERR, "Received unsupported message %u. "
 		    "Disconnecting from server", msg.type);
 		    "Disconnecting from server", msg.type);
 		instance->disconnect_reason = QDEVICE_NET_DISCONNECT_REASON_UNEXPECTED_MSG;
 		instance->disconnect_reason = QDEVICE_NET_DISCONNECT_REASON_UNEXPECTED_MSG;
 
 
 		ret_val = -1;
 		ret_val = -1;
-		break;
 	}
 	}
 
 
 	msg_decoded_destroy(&msg);
 	msg_decoded_destroy(&msg);

+ 55 - 6
qdevices/qdevice-net-poll.c

@@ -263,6 +263,7 @@ qdevice_net_poll(struct qdevice_net_instance *instance)
 	struct qdevice_net_poll_array_user_data *user_data;
 	struct qdevice_net_poll_array_user_data *user_data;
 	struct unix_socket_client *ipc_client;
 	struct unix_socket_client *ipc_client;
 	struct qdevice_ipc_user_data *qdevice_ipc_user_data;
 	struct qdevice_ipc_user_data *qdevice_ipc_user_data;
+	int case_processed;
 
 
 	pfds = qdevice_net_pr_poll_array_create(instance);
 	pfds = qdevice_net_pr_poll_array_create(instance);
 	if (pfds == NULL) {
 	if (pfds == NULL) {
@@ -279,52 +280,84 @@ qdevice_net_poll(struct qdevice_net_instance *instance)
 			ipc_client = user_data->ipc_client;
 			ipc_client = user_data->ipc_client;
 
 
 			if (pfds[i].out_flags & PR_POLL_READ) {
 			if (pfds[i].out_flags & PR_POLL_READ) {
+				case_processed = 0;
+
 				switch (user_data->type) {
 				switch (user_data->type) {
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_SOCKET:
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_SOCKET:
+					case_processed = 1;
 					qdevice_net_poll_read_socket(instance);
 					qdevice_net_poll_read_socket(instance);
 					break;
 					break;
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_VOTEQUORUM:
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_VOTEQUORUM:
+					case_processed = 1;
 					qdevice_net_poll_read_votequorum(instance);
 					qdevice_net_poll_read_votequorum(instance);
 					break;
 					break;
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_CMAP:
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_CMAP:
+					case_processed = 1;
 					qdevice_net_poll_read_cmap(instance);
 					qdevice_net_poll_read_cmap(instance);
 					break;
 					break;
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_IPC_SOCKET:
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_IPC_SOCKET:
+					case_processed = 1;
 					qdevice_net_poll_read_ipc_socket(instance);
 					qdevice_net_poll_read_ipc_socket(instance);
 					break;
 					break;
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_IPC_CLIENT:
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_IPC_CLIENT:
+					case_processed = 1;
 					qdevice_ipc_io_read(instance->qdevice_instance_ptr, ipc_client);
 					qdevice_ipc_io_read(instance->qdevice_instance_ptr, ipc_client);
 					break;
 					break;
-				default:
+				/*
+				 * Default is not defined intentionally. Compiler shows warning when
+				 * new poll_array_user_data_type is added
+				 */
+				}
+
+				if (!case_processed) {
 					qdevice_log(LOG_CRIT, "Unhandled read on poll descriptor %u", i);
 					qdevice_log(LOG_CRIT, "Unhandled read on poll descriptor %u", i);
 					exit(1);
 					exit(1);
-					break;
 				}
 				}
 			}
 			}
 
 
 			if (!instance->schedule_disconnect && pfds[i].out_flags & PR_POLL_WRITE) {
 			if (!instance->schedule_disconnect && pfds[i].out_flags & PR_POLL_WRITE) {
+				case_processed = 0;
+
 				switch (user_data->type) {
 				switch (user_data->type) {
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_SOCKET:
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_SOCKET:
+					case_processed = 1;
 					qdevice_net_poll_write_socket(instance, &pfds[i]);
 					qdevice_net_poll_write_socket(instance, &pfds[i]);
 					break;
 					break;
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_IPC_CLIENT:
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_IPC_CLIENT:
+					case_processed = 1;
 					qdevice_ipc_io_write(instance->qdevice_instance_ptr, ipc_client);
 					qdevice_ipc_io_write(instance->qdevice_instance_ptr, ipc_client);
 					break;
 					break;
-				default:
+				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_VOTEQUORUM:
+				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_CMAP:
+				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_IPC_SOCKET:
+					/*
+					 * Write on votequorum, cmap and ipc socket shouldn't happen.
+					 */
+					break;
+				/*
+				 * Default is not defined intentionally. Compiler shows warning when
+				 * new poll_array_user_data_type is added
+				 */
+				}
+
+				if (!case_processed) {
 					qdevice_log(LOG_CRIT, "Unhandled write on poll descriptor %u", i);
 					qdevice_log(LOG_CRIT, "Unhandled write on poll descriptor %u", i);
 					exit(1);
 					exit(1);
-					break;
 				}
 				}
 			}
 			}
 
 
 			if (!instance->schedule_disconnect &&
 			if (!instance->schedule_disconnect &&
 			    (pfds[i].out_flags & (PR_POLL_ERR|PR_POLL_NVAL|PR_POLL_HUP|PR_POLL_EXCEPT)) &&
 			    (pfds[i].out_flags & (PR_POLL_ERR|PR_POLL_NVAL|PR_POLL_HUP|PR_POLL_EXCEPT)) &&
 			    !(pfds[i].out_flags & (PR_POLL_READ|PR_POLL_WRITE))) {
 			    !(pfds[i].out_flags & (PR_POLL_READ|PR_POLL_WRITE))) {
+				case_processed = 0;
+
 				switch (user_data->type) {
 				switch (user_data->type) {
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_SOCKET:
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_SOCKET:
+					case_processed = 1;
 					qdevice_net_poll_err_socket(instance, &pfds[i]);
 					qdevice_net_poll_err_socket(instance, &pfds[i]);
 					break;
 					break;
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_IPC_SOCKET:
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_IPC_SOCKET:
+					case_processed = 1;
 					if (pfds[i].out_flags != PR_POLL_NVAL) {
 					if (pfds[i].out_flags != PR_POLL_NVAL) {
 						qdevice_log(LOG_CRIT, "POLLERR (%u) on local socket",
 						qdevice_log(LOG_CRIT, "POLLERR (%u) on local socket",
 						    pfds[i].out_flags);
 						    pfds[i].out_flags);
@@ -337,14 +370,30 @@ qdevice_net_poll(struct qdevice_net_instance *instance)
 					}
 					}
 					break;
 					break;
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_IPC_CLIENT:
 				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_IPC_CLIENT:
+					case_processed = 1;
 					qdevice_log(LOG_DEBUG, "POLL_ERR (%u) on ipc client socket. "
 					qdevice_log(LOG_DEBUG, "POLL_ERR (%u) on ipc client socket. "
 					    "Disconnecting.",  pfds[i].out_flags);
 					    "Disconnecting.",  pfds[i].out_flags);
 					ipc_client->schedule_disconnect = 1;
 					ipc_client->schedule_disconnect = 1;
 					break;
 					break;
-				default:
+				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_VOTEQUORUM:
+				case QDEVICE_NET_POLL_ARRAY_USER_DATA_TYPE_CMAP:
+					case_processed = 1;
+					qdevice_log(LOG_DEBUG, "POLL_ERR (%u) on corosync socket. "
+					    "Disconnecting.",  pfds[i].out_flags);
+
+					instance->schedule_disconnect = 1;
+					instance->disconnect_reason =
+						QDEVICE_NET_DISCONNECT_REASON_COROSYNC_CONNECTION_CLOSED;
+					break;
+				/*
+				 * Default is not defined intentionally. Compiler shows warning when
+				 * new poll_array_user_data_type is added
+				 */
+				}
+
+				if (!case_processed) {
 					qdevice_log(LOG_CRIT, "Unhandled error on poll descriptor %u", i);
 					qdevice_log(LOG_CRIT, "Unhandled error on poll descriptor %u", i);
 					exit(1);
 					exit(1);
-					break;
 				}
 				}
 			}
 			}
 
 

+ 61 - 9
qdevices/qnetd-client-msg-received.c

@@ -56,16 +56,21 @@ qnetd_client_msg_received_check_tls(struct qnetd_instance *instance, struct qnet
 	int check_certificate;
 	int check_certificate;
 	int tls_required;
 	int tls_required;
 	CERTCertificate *peer_cert;
 	CERTCertificate *peer_cert;
+	int case_processed;
 
 
 	check_certificate = 0;
 	check_certificate = 0;
 	tls_required = 0;
 	tls_required = 0;
 
 
+	case_processed = 0;
+
 	switch (instance->tls_supported) {
 	switch (instance->tls_supported) {
 	case TLV_TLS_UNSUPPORTED:
 	case TLV_TLS_UNSUPPORTED:
+		case_processed = 1;
 		tls_required = 0;
 		tls_required = 0;
 		check_certificate = 0;
 		check_certificate = 0;
 		break;
 		break;
 	case TLV_TLS_SUPPORTED:
 	case TLV_TLS_SUPPORTED:
+		case_processed = 1;
 		tls_required = 0;
 		tls_required = 0;
 
 
 		if (client->tls_started && instance->tls_client_cert_required &&
 		if (client->tls_started && instance->tls_client_cert_required &&
@@ -74,16 +79,22 @@ qnetd_client_msg_received_check_tls(struct qnetd_instance *instance, struct qnet
 		}
 		}
 		break;
 		break;
 	case TLV_TLS_REQUIRED:
 	case TLV_TLS_REQUIRED:
+		case_processed = 1;
 		tls_required = 1;
 		tls_required = 1;
 
 
 		if (instance->tls_client_cert_required && !client->tls_peer_certificate_verified) {
 		if (instance->tls_client_cert_required && !client->tls_peer_certificate_verified) {
 			check_certificate = 1;
 			check_certificate = 1;
 		}
 		}
 		break;
 		break;
-	default:
+	/*
+	 * Default is not defined intentionally. Compiler shows warning when new
+	 * tls supported is added
+	 */
+	}
+
+	if (!case_processed) {
 		qnetd_log(LOG_ERR, "Unhandled instance tls supported %u", instance->tls_supported);
 		qnetd_log(LOG_ERR, "Unhandled instance tls supported %u", instance->tls_supported);
 		exit(1);
 		exit(1);
-		break;
 	}
 	}
 
 
 	if (tls_required && !client->tls_started) {
 	if (tls_required && !client->tls_started) {
@@ -624,6 +635,7 @@ qnetd_client_msg_received_node_list(struct qnetd_instance *instance, struct qnet
 	struct send_buffer_list_entry *send_buffer;
 	struct send_buffer_list_entry *send_buffer;
 	enum tlv_reply_error_code reply_error_code;
 	enum tlv_reply_error_code reply_error_code;
 	enum tlv_vote result_vote;
 	enum tlv_vote result_vote;
+	int case_processed;
 
 
 	reply_error_code = TLV_REPLY_ERROR_CODE_NO_ERROR;
 	reply_error_code = TLV_REPLY_ERROR_CODE_NO_ERROR;
 
 
@@ -669,9 +681,11 @@ qnetd_client_msg_received_node_list(struct qnetd_instance *instance, struct qnet
 
 
 	result_vote = TLV_VOTE_NO_CHANGE;
 	result_vote = TLV_VOTE_NO_CHANGE;
 
 
+	case_processed = 0;
 	switch (msg->node_list_type) {
 	switch (msg->node_list_type) {
 	case TLV_NODE_LIST_TYPE_INITIAL_CONFIG:
 	case TLV_NODE_LIST_TYPE_INITIAL_CONFIG:
 	case TLV_NODE_LIST_TYPE_CHANGED_CONFIG:
 	case TLV_NODE_LIST_TYPE_CHANGED_CONFIG:
+		case_processed = 1;
 		qnetd_log_debug_config_node_list_received(client, msg->seq_number,
 		qnetd_log_debug_config_node_list_received(client, msg->seq_number,
 		    msg->config_version_set, msg->config_version, &msg->nodes,
 		    msg->config_version_set, msg->config_version, &msg->nodes,
 		    (msg->node_list_type == TLV_NODE_LIST_TYPE_INITIAL_CONFIG));
 		    (msg->node_list_type == TLV_NODE_LIST_TYPE_INITIAL_CONFIG));
@@ -683,6 +697,7 @@ qnetd_client_msg_received_node_list(struct qnetd_instance *instance, struct qnet
 		    &result_vote);
 		    &result_vote);
 		break;
 		break;
 	case TLV_NODE_LIST_TYPE_MEMBERSHIP:
 	case TLV_NODE_LIST_TYPE_MEMBERSHIP:
+		case_processed = 1;
 		if (!msg->ring_id_set) {
 		if (!msg->ring_id_set) {
 			qnetd_log(LOG_ERR, "Received node list message without ring id number set. "
 			qnetd_log(LOG_ERR, "Received node list message without ring id number set. "
 			    "Sending error reply.");
 			    "Sending error reply.");
@@ -702,6 +717,7 @@ qnetd_client_msg_received_node_list(struct qnetd_instance *instance, struct qnet
 		    msg->seq_number, &msg->ring_id, &msg->nodes, &result_vote);
 		    msg->seq_number, &msg->ring_id, &msg->nodes, &result_vote);
 		break;
 		break;
 	case TLV_NODE_LIST_TYPE_QUORUM:
 	case TLV_NODE_LIST_TYPE_QUORUM:
+		case_processed = 1;
 		if (!msg->quorate_set) {
 		if (!msg->quorate_set) {
 			qnetd_log(LOG_ERR, "Received quorum list message without quorate set. "
 			qnetd_log(LOG_ERR, "Received quorum list message without quorate set. "
 			    "Sending error reply.");
 			    "Sending error reply.");
@@ -720,11 +736,16 @@ qnetd_client_msg_received_node_list(struct qnetd_instance *instance, struct qnet
 		reply_error_code = qnetd_algorithm_quorum_node_list_received(client,
 		reply_error_code = qnetd_algorithm_quorum_node_list_received(client,
 		    msg->seq_number,msg->quorate, &msg->nodes, &result_vote);
 		    msg->seq_number,msg->quorate, &msg->nodes, &result_vote);
 		break;
 		break;
-	default:
+	/*
+	 * Default is not defined intentionally. Compiler shows warning when new
+	 * node list type is added
+	 */
+	}
+
+	if (!case_processed) {
 		qnetd_log(LOG_ERR, "qnetd_client_msg_received_node_list fatal error. "
 		qnetd_log(LOG_ERR, "qnetd_client_msg_received_node_list fatal error. "
 		    "Unhandled node_list_type");
 		    "Unhandled node_list_type");
 		exit(1);
 		exit(1);
-		break;
 	}
 	}
 
 
 	if (reply_error_code != TLV_REPLY_ERROR_CODE_NO_ERROR) {
 	if (reply_error_code != TLV_REPLY_ERROR_CODE_NO_ERROR) {
@@ -751,9 +772,11 @@ qnetd_client_msg_received_node_list(struct qnetd_instance *instance, struct qnet
 	/*
 	/*
 	 * Store node list for future use
 	 * Store node list for future use
 	 */
 	 */
+	case_processed = 0;
 	switch (msg->node_list_type) {
 	switch (msg->node_list_type) {
 	case TLV_NODE_LIST_TYPE_INITIAL_CONFIG:
 	case TLV_NODE_LIST_TYPE_INITIAL_CONFIG:
 	case TLV_NODE_LIST_TYPE_CHANGED_CONFIG:
 	case TLV_NODE_LIST_TYPE_CHANGED_CONFIG:
+		case_processed = 1;
 		node_list_free(&client->configuration_node_list);
 		node_list_free(&client->configuration_node_list);
 		if (node_list_clone(&client->configuration_node_list, &msg->nodes) == -1) {
 		if (node_list_clone(&client->configuration_node_list, &msg->nodes) == -1) {
 			qnetd_log(LOG_ERR, "Can't alloc config node list clone. "
 			qnetd_log(LOG_ERR, "Can't alloc config node list clone. "
@@ -763,6 +786,7 @@ qnetd_client_msg_received_node_list(struct qnetd_instance *instance, struct qnet
 		}
 		}
 		break;
 		break;
 	case TLV_NODE_LIST_TYPE_MEMBERSHIP:
 	case TLV_NODE_LIST_TYPE_MEMBERSHIP:
+		case_processed = 1;
 		node_list_free(&client->last_membership_node_list);
 		node_list_free(&client->last_membership_node_list);
 		if (node_list_clone(&client->last_membership_node_list, &msg->nodes) == -1) {
 		if (node_list_clone(&client->last_membership_node_list, &msg->nodes) == -1) {
 			qnetd_log(LOG_ERR, "Can't alloc membership node list clone. "
 			qnetd_log(LOG_ERR, "Can't alloc membership node list clone. "
@@ -773,6 +797,7 @@ qnetd_client_msg_received_node_list(struct qnetd_instance *instance, struct qnet
 		memcpy(&client->last_ring_id, &msg->ring_id, sizeof(struct tlv_ring_id));
 		memcpy(&client->last_ring_id, &msg->ring_id, sizeof(struct tlv_ring_id));
 		break;
 		break;
 	case TLV_NODE_LIST_TYPE_QUORUM:
 	case TLV_NODE_LIST_TYPE_QUORUM:
+		case_processed = 1;
 		node_list_free(&client->last_quorum_node_list);
 		node_list_free(&client->last_quorum_node_list);
 		if (node_list_clone(&client->last_quorum_node_list, &msg->nodes) == -1) {
 		if (node_list_clone(&client->last_quorum_node_list, &msg->nodes) == -1) {
 			qnetd_log(LOG_ERR, "Can't alloc quorum node list clone. "
 			qnetd_log(LOG_ERR, "Can't alloc quorum node list clone. "
@@ -781,11 +806,16 @@ qnetd_client_msg_received_node_list(struct qnetd_instance *instance, struct qnet
 			return (-1);
 			return (-1);
 		}
 		}
 		break;
 		break;
-	default:
+	/*
+	 * Default is not defined intentionally. Compiler shows warning when new
+	 * node list type is added
+	 */
+	}
+
+	if (!case_processed) {
 		qnetd_log(LOG_ERR, "qnetd_client_msg_received_node_list fatal error. "
 		qnetd_log(LOG_ERR, "qnetd_client_msg_received_node_list fatal error. "
 		    "Unhandled node_list_type");
 		    "Unhandled node_list_type");
 		exit(1);
 		exit(1);
-		break;
 	}
 	}
 
 
 	send_buffer = send_buffer_list_get_new(&client->send_buffer_list);
 	send_buffer = send_buffer_list_get_new(&client->send_buffer_list);
@@ -978,6 +1008,7 @@ qnetd_client_msg_received(struct qnetd_instance *instance, struct qnetd_client *
 	struct msg_decoded msg;
 	struct msg_decoded msg;
 	int res;
 	int res;
 	int ret_val;
 	int ret_val;
+	int msg_processed;
 
 
 	client->dpd_msg_received_since_last_check = 1;
 	client->dpd_msg_received_since_last_check = 1;
 
 
@@ -1001,57 +1032,80 @@ qnetd_client_msg_received(struct qnetd_instance *instance, struct qnetd_client *
 
 
 	ret_val = 0;
 	ret_val = 0;
 
 
+	msg_processed = 0;
 	switch (msg.type) {
 	switch (msg.type) {
 	case MSG_TYPE_PREINIT:
 	case MSG_TYPE_PREINIT:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_preinit(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_preinit(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_PREINIT_REPLY:
 	case MSG_TYPE_PREINIT_REPLY:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_preinit_reply(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_preinit_reply(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_STARTTLS:
 	case MSG_TYPE_STARTTLS:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_starttls(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_starttls(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_INIT:
 	case MSG_TYPE_INIT:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_init(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_init(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_INIT_REPLY:
 	case MSG_TYPE_INIT_REPLY:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_init_reply(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_init_reply(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_SERVER_ERROR:
 	case MSG_TYPE_SERVER_ERROR:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_server_error(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_server_error(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_SET_OPTION:
 	case MSG_TYPE_SET_OPTION:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_set_option(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_set_option(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_SET_OPTION_REPLY:
 	case MSG_TYPE_SET_OPTION_REPLY:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_set_option_reply(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_set_option_reply(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_ECHO_REQUEST:
 	case MSG_TYPE_ECHO_REQUEST:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_echo_request(instance, client, &msg,
 		ret_val = qnetd_client_msg_received_echo_request(instance, client, &msg,
 		    &client->receive_buffer);
 		    &client->receive_buffer);
 		break;
 		break;
 	case MSG_TYPE_ECHO_REPLY:
 	case MSG_TYPE_ECHO_REPLY:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_echo_reply(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_echo_reply(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_NODE_LIST:
 	case MSG_TYPE_NODE_LIST:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_node_list(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_node_list(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_NODE_LIST_REPLY:
 	case MSG_TYPE_NODE_LIST_REPLY:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_node_list_reply(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_node_list_reply(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_ASK_FOR_VOTE:
 	case MSG_TYPE_ASK_FOR_VOTE:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_ask_for_vote(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_ask_for_vote(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_ASK_FOR_VOTE_REPLY:
 	case MSG_TYPE_ASK_FOR_VOTE_REPLY:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_ask_for_vote_reply(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_ask_for_vote_reply(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_VOTE_INFO:
 	case MSG_TYPE_VOTE_INFO:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_vote_info(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_vote_info(instance, client, &msg);
 		break;
 		break;
 	case MSG_TYPE_VOTE_INFO_REPLY:
 	case MSG_TYPE_VOTE_INFO_REPLY:
+		msg_processed = 1;
 		ret_val = qnetd_client_msg_received_vote_info_reply(instance, client, &msg);
 		ret_val = qnetd_client_msg_received_vote_info_reply(instance, client, &msg);
 		break;
 		break;
-	default:
+	/*
+	 * Default is not defined intentionally. Compiler shows warning when new
+	 * msg type is added.
+	 */
+	}
+
+	if (!msg_processed) {
 		qnetd_log(LOG_ERR, "Unsupported message %u received from client. "
 		qnetd_log(LOG_ERR, "Unsupported message %u received from client. "
 		    "Sending back error message", msg.type);
 		    "Sending back error message", msg.type);
 
 
@@ -1059,8 +1113,6 @@ qnetd_client_msg_received(struct qnetd_instance *instance, struct qnetd_client *
 		    TLV_REPLY_ERROR_CODE_UNSUPPORTED_MESSAGE) != 0) {
 		    TLV_REPLY_ERROR_CODE_UNSUPPORTED_MESSAGE) != 0) {
 			ret_val = -1;
 			ret_val = -1;
 		}
 		}
-
-		break;
 	}
 	}
 
 
 	msg_decoded_destroy(&msg);
 	msg_decoded_destroy(&msg);