blob: af3a8dda38e047feeadc3e0723260728dcf1e1c5 [file] [log] [blame]
/* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
#ifndef MODPERL_HANDLER_H
#define MODPERL_HANDLER_H
typedef enum {
MP_HANDLER_ACTION_GET,
MP_HANDLER_ACTION_PUSH,
MP_HANDLER_ACTION_SET
} modperl_handler_action_e;
void modperl_handler_anon_init(pTHX_ apr_pool_t *p);
MP_INLINE modperl_mgv_t *modperl_handler_anon_next(pTHX_ apr_pool_t *p);
MP_INLINE void modperl_handler_anon_add(pTHX_ modperl_mgv_t *anon, CV *cv);
MP_INLINE CV *modperl_handler_anon_get(pTHX_ modperl_mgv_t *anon);
#define modperl_handler_array_new(p) \
apr_array_make(p, 1, sizeof(modperl_handler_t *))
#define modperl_handler_array_push(handlers, h) \
*(modperl_handler_t **)apr_array_push(handlers) = h
#define modperl_handler_array_item(handlers, idx) \
((modperl_handler_t **)(handlers)->elts)[idx]
#define modperl_handler_array_last(handlers) \
modperl_handler_array_item(handlers, ((handlers)->nelts - 1))
modperl_handler_t *modperl_handler_new(apr_pool_t *p, const char *name);
modperl_handler_t *modperl_handler_new_from_sv(pTHX_ apr_pool_t *p, SV *sv);
MP_INLINE const char *modperl_handler_name(modperl_handler_t *handler);
int modperl_handler_resolve(pTHX_ modperl_handler_t **handp,
apr_pool_t *p, server_rec *s);
modperl_handler_t *modperl_handler_dup(apr_pool_t *p,
modperl_handler_t *h);
int modperl_handler_equal(modperl_handler_t *h1, modperl_handler_t *h2);
MpAV *modperl_handler_array_merge(apr_pool_t *p, MpAV *base_a, MpAV *add_a);
void modperl_handler_make_args(pTHX_ AV **avp, ...);
MpAV **modperl_handler_lookup_handlers(modperl_config_dir_t *dcfg,
modperl_config_srv_t *scfg,
modperl_config_req_t *rcfg,
apr_pool_t *p,
int type, int idx,
modperl_handler_action_e action,
const char **desc);
MpAV **modperl_handler_get_handlers(request_rec *r, conn_rec *c,server_rec *s,
apr_pool_t *p, const char *name,
modperl_handler_action_e action);
int modperl_handler_push_handlers(pTHX_ apr_pool_t *p,
MpAV *handlers, SV *sv);
SV *modperl_handler_perl_get_handlers(pTHX_ MpAV **handp, apr_pool_t *p);
int modperl_handler_perl_add_handlers(pTHX_
request_rec *r,
conn_rec *c,
server_rec *s,
apr_pool_t *p,
const char *name,
SV *sv,
modperl_handler_action_e action);
#endif /* MODPERL_HANDLER_H */
/*
* Local Variables:
* c-basic-offset: 4
* indent-tabs-mode: nil
* End:
*/