Beispiel #1
0
int
ndmis_tcp_close (struct ndm_session *sess)
{
	struct ndm_image_stream *is = &sess->plumb.image_stream;

	switch (is->remote.connect_status) {
	case NDMIS_CONN_LISTEN:
		ndmchan_cleanup (&is->remote.listen_chan);
		break;

	case NDMIS_CONN_CONNECTED:
	case NDMIS_CONN_ACCEPTED:
		ndmchan_cleanup (&is->chan);
		break;

	default:
		break;
	}

	ndmis_reinit_remote (sess);

	return 0;
}
Beispiel #2
0
void
ndmda_data_halt (struct ndm_session *sess, ndmp9_data_halt_reason reason)
{
	struct ndm_data_agent *	da = sess->data_acb;

	da->data_state.state = NDMP9_DATA_STATE_HALTED;
	da->data_state.halt_reason = reason;
	da->data_notify_pending = 1;

	ndmda_fh_flush (sess);

	ndmis_data_close (sess);

	ndmchan_cleanup (&da->formatter_image);
	ndmchan_cleanup (&da->formatter_error);
	ndmchan_cleanup (&da->formatter_wrap);

	/* this needs to be better */
	if (da->formatter_pid) {
		sleep (1);	/* give gtar a chance to stop by itself */
		kill (da->formatter_pid, SIGTERM);
	}
}
Beispiel #3
0
int
ndmis_tcp_accept (struct ndm_session *sess)
{
	struct ndm_image_stream *is = &sess->plumb.image_stream;
	char *			what = "???";
	ndmp9_tcp_addr *	tcp_addr;
	struct sockaddr		sa;
	struct sockaddr_in *	sin = (struct sockaddr_in *) &sa;
	socklen_t		len;
	int			accept_sock = -1;

	what = "remote-conn-stat";
	if (is->remote.connect_status != NDMIS_CONN_LISTEN)
		goto fail;

	what = "remote-list-ready";
	if (!is->remote.listen_chan.ready)
		goto fail;

	what = "accept";
	len = sizeof sa;
	accept_sock = accept (is->remote.listen_chan.fd, &sa, &len);

	ndmchan_cleanup (&is->remote.listen_chan);

	if (accept_sock < 0) {
		is->remote.connect_status = NDMIS_CONN_BOTCHED;
		goto fail;
	}

	/* write what we know, ndmis...addrs() will update if possible */
	is->remote.peer_addr.addr_type = NDMP9_ADDR_TCP;
	tcp_addr = &is->remote.peer_addr.ndmp9_addr_u.tcp_addr;
	tcp_addr->ip_addr = ntohl (sin->sin_addr.s_addr);
	tcp_addr->port = ntohs (sin->sin_port);

	ndmis_tcp_green_light (sess, accept_sock, NDMIS_CONN_ACCEPTED);

	return 0;

  fail:
	ndmalogf (sess, 0, 2, "ndmis_tcp_accept(): %s failed", what);
	if (accept_sock >= 0) close (accept_sock);

	return -1;
}