void pa_classify_add_stream(struct userdata *u, const char *prop,
                            enum pa_classify_method method, const char *arg,
                            const char *clnam, const char *sname, uid_t uid,
                            const char *exe, const char *grnam,
                            uint32_t flags, const char *port)
{
    struct pa_classify     *classify;
    struct pa_policy_group *group;

    pa_assert(u);
    pa_assert_se((classify = u->classify));

    if (((prop && method && arg) || uid != (uid_t)-1 || exe) && grnam) {
        if (port) {
            if ((group = pa_policy_group_find(u, grnam)) == NULL) {
                flags &= ~PA_POLICY_LOCAL_ROUTE;
                pa_log("can't find group '%s' for stream", grnam);
            }
            else {
                group->portname = pa_xstrdup(port);
                pa_log_debug("set portname '%s' for group '%s'", port, grnam);
            }
        }

        streams_add(&classify->streams.defs, prop,method,arg,
                    clnam, sname, uid, exe, grnam, flags);
    }
}
Exemple #2
0
streams *
setup_stream (char *str, sockets * s)
{
	char *arg[20], pol;
	streams *sid;

	int i;
	transponder t;
	init_hw ();
	detect_dvb_parameters (str, &t);
	LOG ("Setup stream %d parameters, sock_id %d, handle %d", s->sid,
		s->id, s->sock);
	if (!get_sid(s->sid))				 // create the stream
	{
		int a_id = 0,
			s_id = 0;
		char pol;

		s_id = streams_add ();
		if(!(sid = get_sid(s_id)))
			LOG_AND_RETURN ( NULL, "Could not add a new stream");

		s->sid = s_id;
//		s->close_sec = 200;
//		s->timeout = (socket_action) stream_timeout;
		LOG ("Setup stream done: sid: %d (e:%d) for sock %d handle %d", s_id,
			st[s_id].enabled, s->id, s->sock);
	}
	if (!( sid = get_sid(s->sid)))
		LOG_AND_RETURN (NULL, "Stream %d not enabled for sock_id %d handle %d",
			s->sid, s->id, s->sock);
	
	set_stream_parameters (s->sid, &t);
	sid->do_play = 0;
	
	if(sid->adapter >= 0 && !strncasecmp( s->buf, "SETUP", 5 )) // SETUP after PLAY
	{
		int ad = sid->adapter;
		sid->adapter = -1;
		close_adapter_for_stream(sid->sid, ad);
	}
	
	return sid;
}