Ejemplo n.º 1
0
static void remove_list(struct dict_list *list)
{
	struct dict_list_elem *elem;
	struct dict_list_elem *tmp;

	LIST_FOREACH_SAFE(elem, list, next, tmp) {
		remove_list_elem(elem);
	}
Ejemplo n.º 2
0
static int read_client(int fd, rscntxt_t *cntxt) {
	if (NULL == cntxt) {
		return -1;
	}

	msgheader_t header;
	int nrecv = recv(fd, &header, sizeof(header), 0);
	if(nrecv < 0) {
		LogE("Failed recv msg header:%s", strerror(errno));
		close(fd);
		return -1;
	}

	if (0 == nrecv) {
		struct sockaddr_in addr;
		int len = sizeof(addr);
		getpeername(fd, (struct sockaddr *)&addr, &len);
		Log("client %s disconnect\n", inet_ntoa(addr.sin_addr) );

		if (epoll_ctl(cntxt->fd_epoll, EPOLL_CTL_DEL, fd, NULL) < 0) {
			LogE("Failed delete disconnected client fd"); 
		}
		close(fd);

		connection_t conn;
		conn.conn_fd = fd;
		remove_list_elem(cntxt->conn_list, &conn, compare_conn);
		return 0;
	} 

	if (validate_msgheader(&header) < 0) {
		LogE("Invalid msg header");
		close(fd);
		return -1;
	}

	if (REQ_CONNECT == header.message_type
			&& DEVICE_SLAVE == header.device_type) {
		if (proc_slave_connect(fd, cntxt) < 0) {
			LogE("Failed process slave device connect");
			close(fd);
			return -1;
		}
	}
	else if (REQ_CONNECT == header.message_type
			&& DEVICE_MASTER == header.device_type) {
		if (proc_master_connect(fd, ntohl(header.token), cntxt) < 0) {
			LogE("Failed process master device relay");
			close(fd);
			return -1;
		}
	}
	else if (DEVICE_ADMIN == header.device_type) {
		proc_admin_connect(fd);
	}

	return 0;
}
Ejemplo n.º 3
0
/* Remove and free corresponding to ELEM node in the INSN_LIST pointed to
   by LISTP.  */
void
remove_free_INSN_LIST_elem (rtx_insn *elem, rtx_insn_list **listp)
{
  free_INSN_LIST_node (remove_list_elem (elem, (rtx *)listp));
}
Ejemplo n.º 4
0
/* Remove and free corresponding to ELEM node in the INSN_LIST pointed to
   by LISTP.  */
void
remove_free_INSN_LIST_elem (rtx elem, rtx *listp)
{
    free_INSN_LIST_node (remove_list_elem (elem, listp));
}