static XS(MPXS_modperl_filter_attributes)
MP_STATIC XS(MPXS_modperl_filter_attributes)
static XS(MPXS_modperl_filter_attributes){    dXSARGS;    U32 *attrs = modperl_filter_attributes(ST(0), ST(1));    I32 i;#ifdef MP_TRACE    HV *stash = gv_stashsv(ST(0), TRUE);#endif    for (i=2; i < items; i++) {        STRLEN len;        char *pv = SvPV(ST(i), len);        char *attribute = pv;        if (strnEQ(pv, "Filter", 6)) {            pv += 6;        }        switch (*pv) {          case 'C':            if (strEQ(pv, "ConnectionHandler")) {                *attrs |= MP_FILTER_CONNECTION_HANDLER;                trace_attr();                continue;            }          case 'I':            if (strEQ(pv, "InitHandler")) {                *attrs |= MP_FILTER_INIT_HANDLER;                trace_attr();                continue;            }          case 'H':            if (strnEQ(pv, "HasInitHandler", 14)) {                STRLEN code_len;                pv += 14; /* skip over the attr name */                code_len = len - (pv - attribute);                MODPERL_FILTER_ATTACH_ATTR_CODE(SvRV(ST(1)), pv, code_len);                *attrs |= MP_FILTER_HAS_INIT_HANDLER;                trace_attr();                continue;            }          case 'R':            if (strEQ(pv, "RequestHandler")) {                *attrs |= MP_FILTER_REQUEST_HANDLER;                trace_attr();                continue;            }          default:            /* XXX: there could be more than one attr to pass through */            XPUSHs_mortal_pv(attribute);            XSRETURN(1);        }    }    XSRETURN_EMPTY;}