Example #1
0
void* rtsp_server_create(const char* ip, int port, struct rtsp_handler_t* handler, void* ptr)
{
	socket_t socket;
	struct rtsp_server_context_t* ctx;
	struct rtsp_transport_handler_t tcphandler;
	struct rtsp_transport_handler_t udphandler;

	tcphandler.onrecv = rtsp_server_onrecv;
	tcphandler.onsend = rtsp_server_onsend;
	udphandler.onrecv = rtsp_server_onrecv;
	udphandler.onsend = rtsp_server_onsend;

	ctx = (struct rtsp_server_context_t *)malloc(sizeof(struct rtsp_server_context_t));
	if(!ctx) return NULL;

	memset(ctx, 0, sizeof(struct rtsp_server_context_t));
	memcpy(&ctx->handler, handler, sizeof(ctx->handler));
	ctx->tcptransport = rtsp_transport_tcp();
	ctx->udptransport = rtsp_transport_udp();
	ctx->ptr = ptr;

	// tcp
	socket = tcpserver_create(ip, port, 128);
	if(socket_invalid == socket)
	{
		rtsp_server_destroy(ctx);
		return NULL;
	}
	ctx->tcp = ctx->tcptransport->create(socket, &tcphandler, ctx);
	if(!ctx->tcp)
	{
		socket_close(socket);
		rtsp_server_destroy(ctx);
		return NULL;
	}

	// udp
	socket = udpsocket_create(ip, port);
	if(socket_invalid == socket)
	{
		rtsp_server_destroy(ctx);
		return NULL;
	}
	ctx->udp = ctx->udptransport->create(socket, &udphandler, ctx);
	if(!ctx->udp)
	{
		socket_close(socket);
		rtsp_server_destroy(ctx);
		return NULL;
	}

	return ctx;
}
static apt_bool_t server_destroy(apt_task_t *task)
{
	mrcp_unirtsp_agent_t *agent = server_agent_get(task);
	if(agent->rtsp_server) {
		rtsp_server_destroy(agent->rtsp_server);
		agent->rtsp_server = NULL;
	}
	return TRUE;
}