Implement traversing of linestack.
[jelmer/ctrlproxy.git] / libirc / python / irc.h
1 /*    ctrlproxy: A modular IRC proxy
2  *    (c) 2002-2009 Jelmer Vernooij <jelmer@nl.linux.org>
3  *     vim: expandtab
4  *
5  *    This program is free software; you can redistribute it and/or modify
6  *    it under the terms of the GNU General Public License as published by
7  *    the Free Software Foundation; either version 3 of the License, or
8  *    (at your option) any later version.
9  *
10  *    This program is distributed in the hope that it will be useful,
11  *    but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13  *    GNU General Public License for more details.
14  *
15  *    You should have received a copy of the GNU General Public License
16  *    along with this program; if not, write to the Free Software
17  *    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18  */
19
20 #ifndef __LIBIRC_PYTHON_H__
21 #define __LIBIRC_PYTHON_H__
22
23 #include <Python.h>
24
25 /* network nick */
26 PyTypeObject PyNetworkNickType;
27 typedef struct {
28     PyObject_HEAD
29     PyObject *parent;
30     struct network_nick *nick;
31 } PyNetworkNickObject;
32
33
34 /* network info */
35 PyTypeObject PyNetworkInfoType;
36 typedef struct {
37     PyObject_HEAD
38     struct irc_network_info *info;
39     PyObject *parent;
40 } PyNetworkInfoObject;
41
42
43 PyTypeObject PyNetworkChannelDictType;
44 PyTypeObject PyChannelNickDictType;
45 PyTypeObject PyChannelModeDictType;
46
47 /* transport */
48
49 typedef struct {
50     PyObject_HEAD
51     struct irc_transport *transport;
52     PyObject *parent;
53 } PyTransportObject;
54 PyTypeObject PyTransportType;
55 struct irc_transport *wrap_py_transport(PyObject *obj);
56 struct irc_transport_ops py_transport_ops;
57
58 /* linestack */
59
60 typedef struct {
61     PyObject_HEAD
62     struct linestack_context *linestack;
63     PyObject *parent;
64 } PyLinestackObject;
65 PyTypeObject PyLinestackType;
66 PyTypeObject PyLinestackIterType;
67
68 /* GList iterator */
69 PyObject *py_g_list_iter(GList *list, PyObject *parent, PyObject *(*converter) (PyObject *parent, void *));
70
71 typedef struct {
72     PyObject_HEAD
73     GList *iter;
74     PyObject *(*converter) (PyObject *parent, void *);
75     PyObject *parent;
76 } PyGListIterObject;
77
78 /* line */
79 PyTypeObject PyLineType;
80 typedef struct {
81     PyObject_HEAD
82     const struct irc_line *line;
83 } PyLineObject;
84
85 struct irc_line *PyObject_AsLine(PyObject *obj);
86
87 /* network state */
88 PyTypeObject PyNetworkStateType;
89 typedef struct {
90     PyObject_HEAD
91     struct irc_network_state *state;
92     PyObject *parent;
93 } PyNetworkStateObject;
94
95 struct irc_network_state *PyObject_AsNetworkState(PyObject *obj);
96
97 PyTypeObject PyChannelStateType;
98
99 typedef struct {
100     PyObject_HEAD
101     struct irc_channel_state *state;
102     PyObject *parent;
103 } PyChannelStateObject;
104
105 void g_error_set_python(GError **error);
106
107 /* network */
108 PyTypeObject PyNetworkType;
109 typedef struct {
110     PyObject_HEAD
111     struct irc_network *network;
112 } PyNetworkObject;
113
114 /* query stack */
115 typedef struct {
116     PyObject_HEAD
117     struct query_stack *stack;
118     PyObject *parent;
119     void *(*export_userdata) (PyObject *);
120     PyObject *(*import_userdata) (void *);
121 } PyQueryStackObject;
122 PyTypeObject PyQueryStackType;
123
124 /* client */
125 struct irc_client *PyObject_AsClient(PyObject *obj);
126
127 #endif