2 ctrlproxy: A modular IRC proxy
3 (c) 2002-2007 Jelmer Vernooij <jelmer@nl.linux.org>
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.
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.
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.
21 #include "ctrlproxy.h"
23 #include "libirc/python/irc.h"
25 extern struct global *my_global;
27 static PyObject *py_log_global(PyObject *self, PyObject *args)
31 if (!PyArg_ParseTuple(args, "is", &level, &text))
34 log_global(level, "%s", text);
39 static PyMethodDef ctrlproxy_methods[] = {
40 { "log_global", (PyCFunction)py_log_global, METH_VARARGS,
41 "log_global(level, text)\n"
48 } PyNetworkDictObject;
50 static Py_ssize_t py_network_dict_length(PyNetworkDictObject *self)
52 return g_list_length(my_global->networks);
55 static PyObject *py_network_dict_get(PyNetworkDictObject *self, PyObject *py_name)
57 struct irc_network *n;
61 if (!PyString_Check(py_name)) {
62 PyErr_SetNone(PyExc_KeyError);
66 name = PyString_AsString(py_name);
68 n = find_network(my_global->networks, name);
70 PyErr_SetNone(PyExc_KeyError);
74 ret = PyObject_New(PyNetworkObject, &PyNetworkType);
80 return (PyObject *)ret;
83 static PyMappingMethods py_network_dict_mapping = {
84 .mp_length = (lenfunc)py_network_dict_length,
85 .mp_subscript = (binaryfunc)py_network_dict_get,
88 static PyTypeObject PyNetworkDictType = {
89 .tp_name = "NetworkDict",
90 .tp_basicsize = sizeof(PyNetworkDictObject),
91 .tp_dealloc = (destructor)PyObject_Del,
92 .tp_flags = Py_TPFLAGS_DEFAULT,
93 .tp_as_mapping = &py_network_dict_mapping,
96 static PyObject *PyNetworkDict_New(void)
98 PyNetworkDictObject *ret = PyObject_New(PyNetworkDictObject, &PyNetworkDictType);
103 return (PyObject *)ret;
106 void initctrlproxy(void)
108 PyObject *m, *networkdict;
110 if (PyType_Ready(&PyNetworkDictType) < 0)
113 m = Py_InitModule3("ctrlproxy", ctrlproxy_methods,
118 PyModule_AddIntConstant(m, "LOG_DATA", LOG_DATA);
119 PyModule_AddIntConstant(m, "LOG_TRACE", LOG_TRACE);
120 PyModule_AddIntConstant(m, "LOG_INFO", LOG_INFO);
121 PyModule_AddIntConstant(m, "LOG_WARNING", LOG_WARNING);
122 PyModule_AddIntConstant(m, "LOG_ERROR", LOG_ERROR);
123 networkdict = PyNetworkDict_New();
124 if (networkdict == NULL) {
127 PyModule_AddObject(m, "networks", networkdict);