Example #1
0
ndmp9_error
ndmis_audit_tape_connect (struct ndm_session *sess,
  ndmp9_addr_type addr_type, char *reason)
{
	struct ndm_image_stream *is;
	struct ndmis_end_point	*mine_ep;
	struct ndmis_end_point	*peer_ep;

	/*
	 * We are about to start using an Image Stream so allocate it.
	 * Only do this when not allocated yet.
	 */
	if (!sess->plumb.image_stream) {
		if (ndmis_initialize (sess)) {
			return NDMP9_NO_MEM_ERR;
		}
	}

	is = sess->plumb.image_stream;
	mine_ep = &is->tape_ep;
	peer_ep  = &is->data_ep;

	return ndmis_audit_ep_listen (sess, addr_type, reason,
						mine_ep, peer_ep);
}
Example #2
0
ndmp9_error
ndmis_ep_listen (
  struct ndm_session *sess,
  ndmp9_addr_type addr_type,
  ndmp9_addr *ret_addr,
  char *reason,
  struct ndmis_end_point *mine_ep,
  struct ndmis_end_point *peer_ep)
{
	struct ndm_image_stream *is = &sess->plumb.image_stream;
	char *			reason_end;
	ndmp9_error		error;

	error = ndmis_audit_ep_listen (sess, addr_type, reason,
						mine_ep, peer_ep);
	if (error != NDMP9_NO_ERR)
		return error;

	reason_end = reason;
	while (*reason_end && *reason_end != ':') reason_end++;
	*reason_end++ = ':'; *reason_end++ = ' '; *reason_end = 0;

	NDMOS_MACRO_ZEROFILL (ret_addr);
	ret_addr->addr_type = addr_type;

	switch (addr_type) {
	case NDMP9_ADDR_LOCAL:
		mine_ep->addr_type = NDMP9_ADDR_LOCAL;
		mine_ep->connect_status = NDMIS_CONN_LISTEN;
		is->remote.connect_status = NDMIS_CONN_EXCLUDE;
		break;

	case NDMP9_ADDR_TCP:
		if (ndmis_tcp_listen (sess, ret_addr) != 0) {
			strcpy (reason_end, "TCP listen() failed");
			error = NDMP9_CONNECT_ERR;
			goto out;
		}
		mine_ep->addr_type = NDMP9_ADDR_TCP;
		mine_ep->connect_status = NDMIS_CONN_LISTEN;
		peer_ep->connect_status = NDMIS_CONN_REMOTE;
		break;

	default:
		reason = "unknown addr_type (bad)";
		error = NDMP9_ILLEGAL_ARGS_ERR;
		goto out;
	}

  out:
	if (error == NDMP9_NO_ERR)
		strcpy (reason_end, "OK");

	return error;
}
Example #3
0
ndmp9_error
ndmis_audit_tape_listen (struct ndm_session *sess,
  ndmp9_addr_type addr_type, char *reason)
{
	struct ndm_image_stream *is = &sess->plumb.image_stream;
	struct ndmis_end_point	*mine_ep = &is->tape_ep;
	struct ndmis_end_point	*peer_ep  = &is->data_ep;

	return ndmis_audit_ep_listen (sess, addr_type, reason,
						mine_ep, peer_ep);
}