1/*
2 * pythonmod.h: module header file
3 *
4 * Copyright (c) 2009, Zdenek Vasicek (vasicek AT fit.vutbr.cz)
5 *                     Marek Vavrusa  (xvavru00 AT stud.fit.vutbr.cz)
6 *
7 * This software is open source.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 *
13 *    * Redistributions of source code must retain the above copyright notice,
14 *      this list of conditions and the following disclaimer.
15 *
16 *    * Redistributions in binary form must reproduce the above copyright notice,
17 *      this list of conditions and the following disclaimer in the documentation
18 *      and/or other materials provided with the distribution.
19 *
20 *    * Neither the name of the organization nor the names of its
21 *      contributors may be used to endorse or promote products derived from this
22 *      software without specific prior written permission.
23 *
24 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
25 * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
26 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
27 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE
28 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
29 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
30 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
32 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
33 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
34 * POSSIBILITY OF SUCH DAMAGE.
35 */
36/**
37 * \file
38 * Python module for unbound.  Calls python script.
39 */
40#ifndef PYTHONMOD_H
41#define PYTHONMOD_H
42#include "util/module.h"
43#include "services/outbound_list.h"
44
45/**
46 * Get the module function block.
47 * @return: function block with function pointers to module methods.
48 */
49struct module_func_block* pythonmod_get_funcblock(void);
50
51/** python module init */
52int pythonmod_init(struct module_env* env, int id);
53
54/** python module deinit */
55void pythonmod_deinit(struct module_env* env, int id);
56
57/** python module operate on a query */
58void pythonmod_operate(struct module_qstate* qstate, enum module_ev event,
59	int id, struct outbound_entry* outbound);
60
61/** python module  */
62void pythonmod_inform_super(struct module_qstate* qstate, int id,
63	struct module_qstate* super);
64
65/** python module cleanup query state */
66void pythonmod_clear(struct module_qstate* qstate, int id);
67
68/** python module alloc size routine */
69size_t pythonmod_get_mem(struct module_env* env, int id);
70
71/** Declared here for fptr_wlist access. The definition is in interface.i. */
72int python_inplace_cb_reply_generic(struct query_info* qinfo,
73	struct module_qstate* qstate, struct reply_info* rep, int rcode,
74	struct edns_data* edns, struct edns_option** opt_list_out,
75	struct comm_reply* repinfo, struct regional* region,
76	struct timeval* start_time, int id, void* python_callback);
77
78/** Declared here for fptr_wlist access. The definition is in interface.i. */
79int python_inplace_cb_query_generic(
80        struct query_info* qinfo, uint16_t flags, struct module_qstate* qstate,
81        struct sockaddr_storage* addr, socklen_t addrlen,
82        uint8_t* zone, size_t zonelen, struct regional* region, int id,
83        void* python_callback);
84
85/** Declared here for fptr_wlist access. The definition is in interface.i. */
86int python_inplace_cb_query_response(struct module_qstate* qstate,
87    struct dns_msg* response, int id, void* python_callback);
88
89/** Declared here for fptr_wlist access. The definition is in interface.i. */
90int python_inplace_cb_edns_back_parsed_call(struct module_qstate* qstate,
91    int id, void* python_callback);
92
93#endif /* PYTHONMOD_H */
94