示例#1
0
static void
jpf_service_op_stop(jpf_service *ps, tp_block *tb)
{
	if (!ps->running)
		return;

	ps->running = 0;
	if (ps->jpf_client)
	{
		LOG_I(
			"Stop pf service."
		);
		client_kill_unref((client*)ps->jpf_client);
		ps->jpf_client = NULL;
	}
}
示例#2
0
void
network_client_kill_unref(network_client *nc)
{
	client_kill_unref((client_t*)nc);
}
示例#3
0
static void
jpf_service_op_timer(jpf_service *ps, tp_block *tb)
{
	rtsp_message *rm = NULL;
	char url[MAX_URL_LEN];
	char ip[MAX_IP_LEN];
	RTSP_RESULT res;

	if (!ps->running)
		return;

	if (!ps->jpf_client)
	{
		if (--ps->ttl > 0)
			return;

		ps->ttl = CONNECT_INTERVAL;
		jpf_service_connect(ps);
	}

	if (!ps->jpf_client)
	{
		return;
	}

	if (rtsp_impl_ts_client_killed(ps->jpf_client))
	{
		LOG_I(
			"Mds reset connection."
		);
		client_kill_unref((client*)ps->jpf_client);
		ps->jpf_client = NULL;
		return;
	}

	if (--ps->ttl > 0)
		return;

	ps->ttl = ps->psp.ka;
	jpf_service_resolve_ip(ps->psp.ip, ip);

	snprintf(url,
		MAX_URL_LEN,
		"rtsp://%s:%d/PUID=%s/keepalive=%d/l4proto=%d",
		ip,
		ps->psp.port,
		ps->psp.puid,
		ps->psp.ka,
		ps->psp.l4_proto
	);

	res = rtsp_message_new_request(&rm, RTSP_OPTIONS, url);
	if (res != RTSP_OK || !rm)
	{
		LOG_W(
			"jpf_service_op_timer()->rtsp_message_new_request() failed."
		);
		return;
	}

	rtsp_impl_send_message((rtsp_client*)ps->jpf_client, rm);
}
示例#4
0
static __inline__ void
jpf_service_connect(jpf_service *ps)
{
	int32_t sock, err;
	struct sockaddr_in sin;
	client *c;
	tr_server *server;

	err = unix_resolve_host(&sin, ps->psp.ip, ps->psp.port);
	if (err)
	{
		LOG_W(
			"jpf_service_connect()->unix_resolve_host() failed, ip:%s.",
			ps->psp.ip
		);
		goto __conn_err;
	}

	sock = unix_sock_bind(L4_TCP, 0, 0, 0);
	if (sock < 0)
	{
		LOG_W(
			"jpf_service_connect()->unix_sock_bind() failed."
		);
		err = sock;
		goto __conn_err;
	}

	if (connect(sock, (struct sockaddr*)&sin, sizeof(sin)) < 0)
	{
		err = -errno;
		LOG_W(
			"jpf_service_connect()->connect() failed, err:'%d'.",
			err
		);
		goto __conn_err;
	}

	c = rtsp_impl_ts_client_new(0, (void*)sock);
	if (!c)
	{
		LOG_W(
			"jpf_service_connect()->rtsp_impl_ts_client_new() failed."
		);
		close(sock);
		err = -ENOMEM;
		goto __conn_err;
	}

	server = avs_get_server();
	if (!server)
	{
		LOG_W(
			"jpf_service_connect()->avs_get_server() failed."
		);
		client_kill_unref((client*)c);
		err = -EPERM;
		goto __conn_err;
	}

	client_attach(c, server->sched);
	ps->jpf_client = (rtsp_ts_client*)c;
	ps->ttl = 0;
	LOG_I(
		"Connect MDS '%s:%d' ok.", ps->psp.ip, ps->psp.port
	);
	return;

__conn_err:
	if (ps->psp.exp_notifier)
	{
		(*ps->psp.exp_notifier)(ps->psp.user_data, err);
	}
	return;
}