Beispiel #1
0
int console_filter_selection(ContextPtr env, char *cmd) {
    if(!cmd) return 0;

    LinkList<Filter> &list = env->getFilters();
    LinkList<Filter>::iterator it = std::find_if(list.begin(), list.end(), [&](FilterPtr filter) {
                                                           return filter->getName() == cmd;
                                                       });
    if(it == list.end()) {
        ::error("filter not found: %s", cmd);
        return 0;
    }
    FilterPtr filt = *it;

    ViewPortPtr screen = getSelectedScreen();
    if(!screen) {
        ::error("no screen currently selected");
        return 0;
    }
    LayerPtr lay = getSelectedLayer();
    if(!lay) {
        ::error("no layer selected for effect %s", filt->getName().c_str());
        return 0;
    }

    if(!filt->new_instance()->apply(lay)) {
        ::error("error applying filter %s on layer %s", filt->getName().c_str(), lay->getName().c_str());
        return 0;
    }

    // select automatically the new filter
//  lay->filters.sel(0);
//  ff->sel(true);
    return 1;
}
Beispiel #2
0
FilterPtr FilterFactory::createFilter(const String &name, DepthCamera::FrameType type)
{
  auto x = _supportedFilters.find(name);
  
  if(x == _supportedFilters.end())
  {
    logger(LOG_ERROR) << "FilterFactory: Could not find filter '" << name << "'" << std::endl;
    return nullptr;
  }
  
  if(!x->second.supports(type))
  {
    logger(LOG_ERROR) << "FilterFactory: Filter '" << name << "' does not support frame type '" << type << "'" << std::endl;
    return nullptr;
  }
  
  if(!x->second._createFilter)
  {
    logger(LOG_ERROR) << "FilterFactory: Don't know how to create filter '" << name << "'. Report to vendor of FilterFactory '" << _name << "'" << std::endl;
    return nullptr;
  }
  
  FilterPtr p = x->second._createFilter();
  
  if(p) p->setNameScope(_name);
  
  return p;
}
Beispiel #3
0
void FilterGroup::append(FilterPtr filter)
{
    mFilters.push_back(filter);

    QString uid = QString("%1_%2").arg(filter->getType()).arg(mFilters.size());
    XmlOptionFile node = mOptions.descend(uid);
    filter->initialize(node.getElement(), uid);
}
Beispiel #4
0
// Test that sequence limiting works
void test16(const DestinationPtr &sink1) {
    banner("test16 - sequence limiting");
    FilterPtr limited = SequenceFilter::instance(10, 2, 5); // every other message beginning with #10, five total
    limited->addDestination(sink1);
    Stream merr = Stream("test16", INFO, limited);

    for (size_t i=0; i<100; ++i) {
        merr <<"i=" <<i <<"\n";
    }
}
FilterPtr FilterEngine::GetWhitelistingFilter(const std::string& url,
  ContentType contentType, const std::string& documentUrl) const
{
  FilterPtr match = Matches(url, contentType, documentUrl);
  if (match && match->GetType() == Filter::TYPE_EXCEPTION)
  {
    return match;
  }
  return FilterPtr();
}
Beispiel #6
0
// Test that rate limiting works
void test15(const DestinationPtr &sink1) {
    banner("test15 - rate limiting");
    FilterPtr limited = TimeFilter::instance(0.5);
    limited->addDestination(sink1);
    Stream merr = Stream("test15", INFO, limited);

    for (size_t i=0; i<5000000; ++i) {
        merr <<"i=" <<i <<"\n";
    }
}
    HttpsClientTransport::HttpsClientTransport(const HttpsEndpoint & httpsEndpoint) : 
        TcpClientTransport(httpsEndpoint.getIp(), httpsEndpoint.getPort())
    {
        std::vector<FilterPtr> wireFilters;

        // HTTP framing.
        wireFilters.push_back( FilterPtr( new HttpFrameFilter(
            getRemoteAddr().getIp(), 
            getRemoteAddr().getPort())));

        // SSL.
        ClientStub * pClientStub = getTlsClientStubPtr();
        RCF_ASSERT(pClientStub);

        FilterPtr sslFilterPtr;

#if RCF_FEATURE_SSPI==1 && RCF_FEATURE_OPENSSL==1

        if (pClientStub->getSslImplementation() == Si_Schannel)
        {
            sslFilterPtr.reset( new SchannelFilter(pClientStub) );
        }
        else
        {
            RCF_ASSERT(pClientStub->getSslImplementation() == Si_OpenSsl);
            sslFilterPtr.reset( new OpenSslEncryptionFilter(pClientStub) );
        }

#elif RCF_FEATURE_SSPI==1

        sslFilterPtr.reset( new SchannelFilter(pClientStub) );

#elif RCF_FEATURE_OPENSSL==1

        sslFilterPtr.reset( new OpenSslEncryptionFilter(pClientStub) );

#endif

        if (!sslFilterPtr)
        {
            RCF_THROW( Exception(_RcfError_SslNotSupported()) );
        }

        wireFilters.push_back(sslFilterPtr);

        // HTTP CONNECT filter for passing through a proxy.
        wireFilters.push_back( FilterPtr( new HttpConnectFilter(
            getRemoteAddr().getIp(), 
            getRemoteAddr().getPort())));

        setWireFilters(wireFilters);
    }
Beispiel #8
0
/** Set all options with the named valueName to the value,
  * given that they are of the correct type.
  *
  * Supported types: bool, double, QString, QColor
  */
void Pipeline::setOption(QString valueName, QVariant value)
{
	for (unsigned i=0; i<mFilters->size(); ++i)
	{
		FilterPtr filter = mFilters->get(i);
		std::vector<PropertyPtr> options = filter->getOptions();

		for (unsigned j=0; j<options.size(); ++j)
		{
			if (options[j]->getDisplayName()==valueName)
				this->setOption(options[j], value);
		}
	}
}
Beispiel #9
0
int console_filter_completion(ContextPtr env, char *cmd) {
    if(!cmd) return 0;

    // Find completions
    FilterPtr exactFilter;
    LinkList<Filter> retList;
    LinkList<Filter> &list = env->getFilters();
    std::string cmdString(cmd);
    std::transform(cmdString.begin(), cmdString.end(), cmdString.begin(), ::tolower);
    std::copy_if(list.begin(), list.end(), retList.begin(), [&] (FilterPtr filter) {
                     std::string name = filter->getName();
                     std::transform(name.begin(), name.end(), name.begin(), ::tolower);
                     if(name == cmdString) {
                         exactFilter = filter;
                     }
                     return name.compare(cmdString) == 0;
                 });

    if(retList.empty()) return 0;

    if(exactFilter != NULL) {
        ::notice("%s :: %s", exactFilter->getName().c_str(), exactFilter->getDescription().c_str());
        snprintf(cmd, MAX_CMDLINE, "%s", exactFilter->getName().c_str());
        return 1;
    }

    if(cmdString.empty()) {
        notice("List available filters");
    } else {
        notice("List available filters with \"%s\"", cmd);
    }

    int c = 0;
    char tmp[256];
    std::for_each(retList.begin(), retList.end(), [&] (FilterPtr f) {
                      if(c % 4 == 0) {
                          if(c != 0) {
                              ::act("%s", tmp);
                          }
                          tmp[0] = '\0';
                      }
                      strncat(tmp, "\t", sizeof(tmp) - 1);
                      strncat(tmp, f->getName().c_str(), sizeof(tmp) - 1);
                      ++c;
                  });
    return c;
}
Beispiel #10
0
    void ClientStub::createFilterSequence(
        std::vector<FilterPtr> & filters)
    {
        filters.clear();
    
        // Setup compression if configured.
        if (mEnableCompression)
        {
#if RCF_FEATURE_ZLIB==1
            FilterPtr filterPtr( new ZlibStatefulCompressionFilter() );
            filters.push_back(filterPtr);
#else
            RCF_ASSERT(0);
#endif
        }

        FilterPtr filterPtr;
        if (mTransportProtocol != Tp_Clear && mTransportProtocol != Tp_Unspecified)
        {
            switch (mTransportProtocol)
            {
#if RCF_FEATURE_SSPI==1
            case Tp_Ntlm:       filterPtr.reset( new NtlmFilter(this) ); break;
            case Tp_Kerberos:   filterPtr.reset( new KerberosFilter(this) ); break;
            case Tp_Negotiate:  filterPtr.reset( new NegotiateFilter(this) ); break;
#endif

#if RCF_FEATURE_OPENSSL==1 && RCF_FEATURE_SSPI==1
            case Tp_Ssl:        if (mSslImplementation == Si_Schannel)
                                {
                                    filterPtr.reset( new SchannelFilter(this) ); 
                                }
                                else
                                {
                                    RCF_ASSERT(mSslImplementation == Si_OpenSsl);
                                    filterPtr.reset( new OpenSslEncryptionFilter(this) ); 
                                }
                                break;
#elif RCF_FEATURE_OPENSSL==1
            case Tp_Ssl:        filterPtr.reset( new OpenSslEncryptionFilter(this) ); break;
#elif RCF_FEATURE_SSPI==1
            case Tp_Ssl:        filterPtr.reset( new SchannelFilter(this) ); break;
#else
            // Single case just to keep the compiler warnings quiet.
            case Tp_Ssl:
#endif

            default:
                RCF_THROW( Exception( _RcfError_TransportProtocolNotSupported( getTransportProtocolName(mTransportProtocol)) ) );
            }
        }
        if (filterPtr)
        {
            filters.push_back(filterPtr);
        }
    }
Beispiel #11
0
 void ClientStub::requestTransportFilters(FilterPtr filterPtr)
 {
     std::vector<FilterPtr> filters;
     if (filterPtr.get())
     {
         filters.push_back(filterPtr);
     }
     requestTransportFilters(filters);
 }
Beispiel #12
0
 void ClientStub::requestTransportFiltersAsync(
     FilterPtr filterPtr,
     boost::function0<void> onCompletion)
 {
     std::vector<FilterPtr> filters;
     if (filterPtr.get())
     {
         filters.push_back(filterPtr);
     }
     requestTransportFiltersAsync(filters, onCompletion);
 }
Beispiel #13
0
// Demonstrate rate limiting per importance level
void test15b(const DestinationPtr &sink1) {
    banner("test15b - per importance rate limiting");
    Facility log("test15b", sink1);

    for (size_t i=DEBUG; i<=FATAL; ++i) {
        Importance imp = (Importance)i;
        FilterPtr limiter = TimeFilter::instance(1.0);
        limiter->addDestination(log[imp].destination());
        log[imp].destination(limiter);
    }

    for (size_t i=0; i<300000; ++i) {
        log[DEBUG] <<"i=" <<i <<"\tdebugging message\n";
        log[TRACE] <<"i=" <<i <<"\ttracing message\n";
        log[WHERE] <<"i=" <<i <<"\tmajor execution point\n";
        log[INFO]  <<"i=" <<i <<"\tinformational message\n";
        log[WARN]  <<"i=" <<i <<"\twarning message\n";
        log[ERROR] <<"i=" <<i <<"\terror message\n";
        log[FATAL] <<"i=" <<i <<"\tfatal error message\n";
    }
}
static void checkDocIdSetCacheable(IndexReaderPtr reader, FilterPtr filter, bool shouldCacheable)
{
    CachingWrapperFilterPtr cacher = newLucene<CachingWrapperFilter>(filter);
    DocIdSetPtr originalSet = filter->getDocIdSet(reader);
    DocIdSetPtr cachedSet = cacher->getDocIdSet(reader);
    BOOST_CHECK(cachedSet->isCacheable());
    BOOST_CHECK_EQUAL(shouldCacheable, originalSet->isCacheable());
    if (originalSet->isCacheable())
        BOOST_CHECK(MiscUtils::equalTypes(originalSet, cachedSet));
    else
        BOOST_CHECK(MiscUtils::typeOf<OpenBitSetDISI>(cachedSet));
}
void AppenderSkeleton::doAppend(const spi::LoggingEventPtr& event, Pool& pool1)
{
        synchronized sync(mutex);


        if(closed)
        {
                LogLog::error(((LogString) LOG4CXX_STR("Attempted to append to closed appender named ["))
                      + name + LOG4CXX_STR("]."));
                return;
        }

        if(!isAsSevereAsThreshold(event->getLevel()))
        {
                return;
        }

        FilterPtr f = headFilter;


        while(f != 0)
        {
                 switch(f->decide(event))
                 {
                         case Filter::DENY:
                                 return;
                         case Filter::ACCEPT:
                                 f = 0;
                                 break;
                         case Filter::NEUTRAL:
                                 f = f->getNext();
                 }
        }

        append(event, pool1);
}
Beispiel #16
0
void Pipeline::initialize(FilterGroupPtr filters)
{
	mFilters = filters;

	for (unsigned i=0; i<mFilters->size(); ++i)
	{
		FilterPtr filter = mFilters->get(i);
		filter->getInputTypes();
		filter->getOutputTypes();
		filter->getOptions();
	}

	this->getNodes();

	for (unsigned i=0; i<mFilters->size(); ++i)
	{
		FilterPtr current = mFilters->get(i);
		mTimedAlgorithm[current->getUid()].reset(new FilterTimedAlgorithm(current));
	}
}
Beispiel #17
0
IECore::ConstFloatVectorDataPtr Reformat::computeChannelData( const std::string &channelName, const Imath::V2i &tileOrigin, const Gaffer::Context *context, const ImagePlug *parent ) const
{
	// Allocate the new tile
	FloatVectorDataPtr outDataPtr = new FloatVectorData;
	std::vector<float> &out = outDataPtr->writable();
	out.resize( ImagePlug::tileSize() * ImagePlug::tileSize() );

	// Create some useful variables...
	Imath::V2f scaleFactor( scale() );
	Imath::V2d inFormatOffset( inPlug()->formatPlug()->getValue().getDisplayWindow().min );
	Imath::V2d outFormatOffset( formatPlug()->getValue().getDisplayWindow().min );

	Imath::Box2i outTile( tileOrigin, Imath::V2i( tileOrigin.x + ImagePlug::tileSize() - 1, tileOrigin.y + ImagePlug::tileSize() - 1 ) );

	Imath::Box2f inTile(
		Imath::V2f(
			double( outTile.min.x - outFormatOffset.x ) / scaleFactor.x + inFormatOffset.x,
			double( outTile.min.y - outFormatOffset.y ) / scaleFactor.y + inFormatOffset.y
		),
		Imath::V2f(
			double( outTile.max.x - outFormatOffset.x + 1. ) / scaleFactor.x + inFormatOffset.x - 1.,
			double( outTile.max.y - outFormatOffset.y + 1. ) / scaleFactor.y + inFormatOffset.y - 1.
		)
	);

	// Create our filter.
	FilterPtr f = Filter::create( filterPlug()->getValue(), 1.f / scaleFactor.y );

	// If we are filtering with a box filter then just don't bother filtering
	// at all and just integer sample instead...
	if ( static_cast<GafferImage::TypeId>( f->typeId() ) == GafferImage::BoxFilterTypeId )
	{
		Imath::Box2i sampleBox(
			Imath::V2i( IECore::fastFloatFloor( inTile.min.x ), IECore::fastFloatCeil( inTile.min.y ) ),
			Imath::V2i( IECore::fastFloatFloor( inTile.max.x ), IECore::fastFloatCeil( inTile.max.y ) )
		);

		Sampler sampler( inPlug(), channelName, sampleBox, f, Sampler::Clamp );
		for ( int y = outTile.min.y, ty = 0; y <= outTile.max.y; ++y, ++ty )
		{
			for ( int x = outTile.min.x, tx = 0; x <= outTile.max.x; ++x, ++tx )
			{
				float value = sampler.sample( float( ( x + .5f - outFormatOffset.x ) / scaleFactor.x + inFormatOffset.x ), float( ( y + .5f - outFormatOffset.y ) / scaleFactor.y + inFormatOffset.y ) );
				out[ tx + ImagePlug::tileSize() * ty ] = value;
			}
		}
		return outDataPtr;
	}

	// Get the dimensions of our filter and create a box that we can use to define the bounds of our input.
	int fHeight = f->width();

	int sampleMinY = f->tap( inTile.min.y );
	int sampleMaxY = f->tap( inTile.max.y );

	f->setScale( 1.f / scaleFactor.x );
	int sampleMinX = f->tap( inTile.min.x );
	int sampleMaxX = f->tap( inTile.max.x );

	int fWidth = f->width();

	Imath::Box2i sampleBox(
		Imath::V2i( sampleMinX, sampleMinY ),
		Imath::V2i( sampleMaxX + fWidth, sampleMaxY + fHeight )
	);

	int sampleBoxWidth = sampleBox.size().x + 1;
	int sampleBoxHeight = sampleBox.size().y + 1;

	// Create a temporary buffer that we can write the result of the first pass to.
	// We extend the buffer vertically as we will need additional information in the
	// vertical squash (the second pass) to properly convolve the filter.
	float buffer[ ImagePlug::tileSize() * sampleBoxHeight ];

	// Create several buffers for each pixel in the output row (or column depending on the pass)
	// into which we can place the indices for the pixels that are contribute to it's result and
	// their weight.

	// A buffer that holds a list of pixel contributions and their weights for every pixel in the output buffer.
	// As it gets reused for both passes we make it large enough to hold both so that we don't have to resize it later.
	std::vector<Contribution> contribution( ImagePlug::tileSize() * ( sampleBoxHeight > sampleBoxWidth ? sampleBoxHeight : sampleBoxWidth ) );

	// The total number of pixels that contribute towards each pixel in th resulting image.
	std::vector<int> coverageTotal( ImagePlug::tileSize() );

	// The total weighted sum of contribution that each pixel in the output gets.
	// This value is used to normalize the result.
	std::vector<float> weightedSum( ImagePlug::tileSize() );

	// Horizontal Pass
	// Here we build a row buffer of contributing pixels and their weights for every pixel in the row.
	int contributionIdx = 0;
	for ( int i = 0; i < ImagePlug::tileSize(); ++i, contributionIdx += fWidth )
	{
		float center = ( outTile.min.x + i + 0.5 - outFormatOffset.x ) / scaleFactor.x + inFormatOffset.x;
		int tap = f->tap( center );

		int n = 0;
		weightedSum[i] = 0.;
		for ( int j = tap; j < tap+fWidth; ++j )
		{
			float weight = f->weight( center, j );
			if ( weight == 0 )
			{
				continue;
			}

			contribution[contributionIdx+n].pixel = j;
			weightedSum[i] += contribution[contributionIdx+n].weight = weight;
			n++;
		}
		coverageTotal[i] = n;
	}

	// Now that we know the contribution of each pixel from the others on the row, compute the
	// horizontally scaled buffer which we will use as input in the vertical scale pass.
	Sampler sampler( inPlug(), channelName, sampleBox, f, Sampler::Clamp );
	for ( int k = 0; k < sampleBoxHeight; ++k )
	{
		for ( int i = 0, contributionIdx = 0; i < ImagePlug::tileSize(); ++i, contributionIdx += fWidth )
		{
			float intensity = 0;

			for ( int j = 0; j < coverageTotal[i]; ++j )
			{
				Contribution &contributor( contribution[ contributionIdx+j ] );

				if ( contributor.weight == 0. )
				{
					continue;
				}

				float value = sampler.sample( contributor.pixel, k + sampleBox.min.y );
				intensity += value * contributor.weight;
			}

			buffer[i + ImagePlug::tileSize() * k] = intensity / weightedSum[i];
		}
	}

	// Vertical Pass
	// Build the column buffer of contributing pixels and their weights for each pixel in the column.
	f->setScale( 1.f / scaleFactor.y );
	for ( int i = 0, contributionIdx = 0; i < ImagePlug::tileSize(); ++i, contributionIdx += fHeight )
	{
		float center = ( outTile.min.y - outFormatOffset.y + i + 0.5 ) / scaleFactor.y - sampleBox.min.y + inFormatOffset.y;
		int tap = f->tap( center );

		int n = 0;
		weightedSum[i] = 0.;
		for ( int j = tap; j < tap+fHeight; ++j )
		{
			float weight = f->weight( center, j );
			if ( weight == 0 )
			{
				continue;
			}

			contribution[contributionIdx+n].pixel = j;
			weightedSum[i] += contribution[contributionIdx+n].weight = weight;
			n++;
		}
		coverageTotal[i] = n;
	}

	// Use the column buffer of pixel contributions to scale the temporary buffer vertically.
	// Write the result into the output buffer.
	for ( int k = 0; k < ImagePlug::tileSize(); ++k )
	{
		for ( int i = 0, contributionIdx = 0; i < ImagePlug::tileSize(); ++i, contributionIdx += fHeight )
		{
			float intensity = 0;

			for ( int j = 0; j < coverageTotal[i]; ++j )
			{
				Contribution &contributor( contribution[ contributionIdx+j ] );

				if ( contributor.weight == 0. )
				{
					continue;
				}

				intensity += buffer[ k + ImagePlug::tileSize() * contributor.pixel ] * contributor.weight;
			}

			out[k + ImagePlug::tileSize() * i] = intensity / weightedSum[i];
		}
	}

	return outDataPtr;
}
Beispiel #18
0
    // remotely accessible
    boost::int32_t FilterService::RequestTransportFilters(const std::vector<boost::int32_t> &filterIds)
    {
        RCF_LOG_3()(filterIds) << "FilterService::RequestTransportFilters() - entry";

        RcfSession & session = getCurrentRcfSession();
        RcfServer & server = session.getRcfServer();

        boost::shared_ptr< std::vector<FilterPtr> > filters(
            new std::vector<FilterPtr>());

        ReadLock readLock(mFilterFactoryMapMutex);
        for (unsigned int i=0; i<filterIds.size(); ++i)
        {
            int filterId = filterIds[i];

            if (filterId == RcfFilter_SspiSchannel || filterId == RcfFilter_OpenSsl)
            {               
                if (server.getSslImplementation() == RCF::Si_Schannel)
                {
                    filterId = RcfFilter_SspiSchannel;
                }
                else
                {
                    filterId = RcfFilter_OpenSsl;
                }
            }

            if (mFilterFactoryMap.find(filterId) == mFilterFactoryMap.end())
            {
                RCF_LOG_3()(filterId) << "FilterService::RequestTransportFilters() - filter not supported.";
                return RcfError_UnknownFilter;
            }

            FilterFactoryPtr filterFactoryPtr = mFilterFactoryMap[filterId];
            FilterPtr filterPtr( filterFactoryPtr->createFilter(server) );
            filters->push_back(filterPtr);
        }

        // Determine which protocol, if any, the filter sequence represents.
        
        session.mEnableCompression = false;

        FilterPtr filterPtr;
        if (filters->size() > 0)
        {
            if ( (*filters)[0]->getFilterId() == RcfFilter_ZlibCompressionStateful )
            {
                session.mEnableCompression = true;
                if (filters->size() > 1)
                {
                    filterPtr = (*filters)[1];
                }
            }
            else
            {
                if (filters->size() > 0)
                {
                    filterPtr = (*filters)[0];
                }
            }
        }

        TransportProtocol protocol = Tp_Unspecified;
        if (!filterPtr)
        {
            protocol = Tp_Clear;
        }
        else
        {
            int filterId = filterPtr->getFilterId();
            switch (filterId)
            {
            case RcfFilter_SspiNtlm:        protocol = Tp_Ntlm;         break;
            case RcfFilter_SspiKerberos:    protocol = Tp_Kerberos;     break;
            case RcfFilter_SspiNegotiate:   protocol = Tp_Negotiate;    break;
            case RcfFilter_SspiSchannel:    protocol = Tp_Ssl;          break;
            case RcfFilter_OpenSsl:         protocol = Tp_Ssl;          break;
            default:                        protocol = Tp_Unspecified;  break;
            }
        }

        // Check that the filter sequence is allowed.
        const std::vector<TransportProtocol> & protocols = server.getSupportedTransportProtocols();
        if (protocols.size() > 0)
        {
            if (std::find(protocols.begin(), protocols.end(), protocol) == protocols.end())
            {
                RCF_THROW( Exception(_RcfError_ProtocolNotSupported()) );
            }
        }

        if (protocol != Tp_Unspecified)
        {
            session.mTransportProtocol = protocol;
        }
        
        if (session.transportFiltersLocked())
        {
            RCF_LOG_3() << "FilterService::RequestTransportFilters() - filter sequence already locked.";
            return RcfError_FiltersLocked;
        }
        else
        {
            session.addOnWriteCompletedCallback( boost::bind(
                &FilterService::setTransportFilters, 
                this, 
                _1, 
                filters) );
        }        

        RCF_LOG_3() << "FilterService::RequestTransportFilters() - exit";
        return RcfError_Ok;
    }
Beispiel #19
0
void FiltersWidget::appendFilterIfWanted(FilterPtr filter)
{
    if(mWantedFilters.empty() || mWantedFilters.contains(filter->getName()))
        mFilters->append(filter);
}