Explorar el Código

Revert "Add Python module, still WIP, but should be usable. No xml"
This commit is named "I hate GIT"!

This reverts commit a527b1eb527ede4523610903c7efe7b22e276514.

sobomax hace 15 años
padre
commit
4351ffe98d

+ 0 - 31
modules/app_python/Makefile

@@ -1,31 +0,0 @@
-# $Id$
-#
-# 
-# WARNING: do not run this directly, it should be run by the master Makefile
-
-include ../../Makefile.defs
-auto_gen=
-NAME=app_python.so
-
-# If you have multiple Python versions installed make sure to modify the
-# the following to point to the correct instance. Module has been tested
-# to work with 2.6 and 2.5. Python 2.4 has been only confirmed to compile,
-# but no testing has been done with that.
-PYTHON?=python
-
-PYTHON_VERSION=${shell ${PYTHON} -c "import distutils.sysconfig;print distutils.sysconfig.get_config_var('VERSION')"}
-PYTHON_LIBDIR=${shell ${PYTHON} -c "import distutils.sysconfig;print distutils.sysconfig.get_config_var('LIBDIR')"}
-PYTHON_LDFLAGS=${shell ${PYTHON} -c "import distutils.sysconfig;print distutils.sysconfig.get_config_var('LINKFORSHARED')"}
-PYTHON_INCDIR=${shell ${PYTHON} -c "import distutils.sysconfig;print distutils.sysconfig.get_python_inc()"}
-
-LIBS=-L${PYTHON_LIBDIR} ${PYTHON_LDFLAGS} -lpython${PYTHON_VERSION}
-
-ifeq ($(OS), freebsd)
-LIBS+=-pthread
-endif
-
-DEFS+=-I${PYTHON_INCDIR}
-DEFS+=-DOPENSER_MOD_INTERFACE
-
-include ../../Makefile.modules
-

+ 0 - 26
modules/app_python/handler.py

@@ -1,26 +0,0 @@
-import sys
-from Router import LM_ERR
-
-class test:
-    def __init__(self):
-        LM_ERR('test.__init__\n')
-
-    def child_init(self, y):
-        LM_ERR('test.child_init(%d)\n' % y)
-        return 0
-
-    def handler(self, msg, args):
-        LM_ERR('test.handler(%s, %s)\n' % (msg.Type, str(arg)))
-        if msg.Type == 'SIP_REQUEST':
-            if msg.Method == 'INVITE':
-                msg.rewrite_ruri('sip:[email protected]:5073')
-            LM_ERR('SIP request, method = %s, RURI = %s, From = %s\n' % (msg.Method, msg.RURI, msg.getHeader('from')))
-            LM_ERR('received from %s:%d\n' % msg.src_address)
-        else:
-            LM_ERR('SIP reply, status = %s\n' % msg.Status)
-            LM_ERR('received from %s:%d\n' % msg.src_address)
-        msg.call_function('append_hf', 'This-is: test\r\n')
-        return 1
-
-def mod_init():
-    return test()

+ 0 - 125
modules/app_python/python_exec.c

@@ -1,125 +0,0 @@
-/* $Id$
- *
- * Copyright (C) 2009 Sippy Software, Inc., http://www.sippysoft.com
- *
- * This file is part of SIP-Router, a free SIP server.
- *
- * SIP-Router is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * SIP-Router is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
-*/
-
-#include <Python.h>
-
-#include "../../mem/mem.h"
-#include "../../data_lump.h"
-#include "../../parser/parse_param.h"
-#include "../../parser/msg_parser.h"
-#include "../../dprint.h"
-#include "../../action.h"
-#include "../../config.h"
-#include "../../parser/parse_uri.h"
-
-#include "python_exec.h"
-#include "python_mod.h"
-#include "python_msgobj.h"
-#include "python_support.h"
-
-int
-python_exec1(struct sip_msg* _msg, char* method_name, char *foobar)
-{
-    return python_exec2(_msg, method_name, NULL);
-}
-
-int
-python_exec2(struct sip_msg *_msg, char *method_name, char *mystr)
-{
-    PyObject *pFunc, *pArgs, *pValue, *pResult;
-    PyObject *msg;
-    int rval;
-
-    PyEval_AcquireLock();
-    PyThreadState_Swap(myThreadState);
-
-    pFunc = PyObject_GetAttrString(handler_obj, method_name);
-    if (pFunc == NULL || !PyCallable_Check(pFunc)) {
-        LM_ERR("%s not found or is not callable\n", method_name);
-        Py_XDECREF(pFunc);
-        PyThreadState_Swap(NULL);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    msg = newmsgobject(_msg);
-    if (msg == NULL) {
-        LM_ERR("can't create MSGtype instance\n");
-        Py_DECREF(pFunc);
-        PyThreadState_Swap(NULL);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    pArgs = PyTuple_New(mystr == NULL ? 1 : 2);
-    if (pArgs == NULL) {
-        LM_ERR("PyTuple_New() has failed\n");
-        msg_invalidate(msg);
-        Py_DECREF(msg);
-        Py_DECREF(pFunc);
-        PyThreadState_Swap(NULL);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-    PyTuple_SetItem(pArgs, 0, msg);
-    /* Tuple steals msg */
-
-    if (mystr != NULL) {
-        pValue = PyString_FromString(mystr);
-        if (pValue == NULL) {
-            LM_ERR("PyString_FromString(%s) has failed\n", mystr);
-            msg_invalidate(msg);
-            Py_DECREF(pArgs);
-            Py_DECREF(pFunc);
-            PyThreadState_Swap(NULL);
-            PyEval_ReleaseLock();
-            return -1;
-        }
-        PyTuple_SetItem(pArgs, 1, pValue);
-        /* Tuple steals pValue */
-    }
-
-    pResult = PyObject_CallObject(pFunc, pArgs);
-    msg_invalidate(msg);
-    Py_DECREF(pArgs);
-    Py_DECREF(pFunc);
-    if (PyErr_Occurred()) {
-        Py_XDECREF(pResult);
-        python_handle_exception("python_exec2");
-        PyThreadState_Swap(NULL);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    if (pResult == NULL) {
-        LM_ERR("PyObject_CallObject() returned NULL\n");
-        PyThreadState_Swap(NULL);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    rval = PyInt_AsLong(pResult);
-    Py_DECREF(pResult);
-    PyThreadState_Swap(NULL);
-    PyEval_ReleaseLock();
-    return rval;
-}

+ 0 - 31
modules/app_python/python_exec.h

@@ -1,31 +0,0 @@
-/* $Id$
- *
- * Copyright (C) 2009 Sippy Software, Inc., http://www.sippysoft.com
- *
- * This file is part of SIP-Router, a free SIP server.
- *
- * SIP-Router is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * SIP-Router is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
-*/
-
-#ifndef _PYTHON_EXEC_H
-#define  _PYTHON_EXEC_H
-
-#include "../../parser/msg_parser.h"
-
-int python_exec1(struct sip_msg *, char *, char *);
-int python_exec2(struct sip_msg *, char *, char *);
-
-#endif

+ 0 - 49
modules/app_python/python_iface.c

@@ -1,49 +0,0 @@
-/* $Id$
- *
- * Copyright (C) 2009 Sippy Software, Inc., http://www.sippysoft.com
- *
- * This file is part of SIP-Router, a free SIP server.
- *
- * SIP-Router is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * SIP-Router is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
-*/
-
-#include "../../action.h"
-#include "../../dprint.h"
-#include "../../route_struct.h"
-#include "python_exec.h"
-
-#include <Python.h>
-
-/* Return the number of arguments of the application command line */
-static PyObject*
-router_LM_ERR(PyObject *self, PyObject *args)
-{
-    char *msg;
-
-    if(!PyArg_ParseTuple(args, "s:LM_ERR", &msg))
-        return NULL;
-
-    LM_ERR("%s", msg);
-
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-
-PyMethodDef RouterMethods[] = {
-    {"LM_ERR", router_LM_ERR, METH_VARARGS,
-     "Pring error message."},
-    {NULL, NULL, 0, NULL}
-};

+ 0 - 30
modules/app_python/python_iface.h

@@ -1,30 +0,0 @@
-/* $Id$
- *
- * Copyright (C) 2009 Sippy Software, Inc., http://www.sippysoft.com
- *
- * This file is part of SIP-Router, a free SIP server.
- *
- * SIP-Router is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * SIP-Router is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
-*/
-
-#ifndef _PYTHON_IFACE_H
-#define  _PYTHON_IFACE_H
-
-#include <Python.h>
-
-extern PyMethodDef RouterMethods[];
-
-#endif

+ 0 - 291
modules/app_python/python_mod.c

@@ -1,291 +0,0 @@
-/* $Id$
- *
- * Copyright (C) 2009 Sippy Software, Inc., http://www.sippysoft.com
- *
- * This file is part of SIP-Router, a free SIP server.
- *
- * SIP-Router is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * SIP-Router is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
-*/
-
-#include "../../str.h"
-#include "../../sr_module.h"
-
-#include "python_exec.h"
-#include "python_iface.h"
-#include "python_msgobj.h"
-#include "python_support.h"
-
-#include <Python.h>
-#include <libgen.h>
-
-MODULE_VERSION
-
-static int mod_init(void);
-static int child_init(int rank);
-static void mod_destroy(void);
-
-static str script_name = {.s = "/usr/local/etc/sip-router/handler.py", .len = 0};
-static str mod_init_fname = { .s = "mod_init", .len = 0};
-static str child_init_mname = { .s = "child_init", .len = 0};
-PyObject *handler_obj;
-PyObject *format_exc_obj;
-
-PyThreadState *myThreadState;
-
-/** module parameters */
-static param_export_t params[]={
-    {"script_name",        STR_PARAM, &script_name },
-    {"mod_init_function",  STR_PARAM, &mod_init_fname },
-    {"child_init_method",  STR_PARAM, &child_init_mname },
-    {0,0,0}
-};
-
-/*
- * Exported functions
- */
-static cmd_export_t cmds[] = {
-    { "python_exec", (cmd_function)python_exec1, 1,  NULL, 0,
-      REQUEST_ROUTE | FAILURE_ROUTE
-      | ONREPLY_ROUTE | BRANCH_ROUTE },
-    { "python_exec", (cmd_function)python_exec2, 2,  NULL, 0,
-      REQUEST_ROUTE | FAILURE_ROUTE
-      | ONREPLY_ROUTE | BRANCH_ROUTE },
-    { 0, 0, 0, 0, 0, 0 }
-};
-
-/** module exports */
-struct module_exports exports = {
-    "app_python",                   /* module name */
-    RTLD_NOW | RTLD_GLOBAL,         /* dlopen flags */
-    cmds,                           /* exported functions */
-    params,                         /* exported parameters */
-    0,                              /* exported statistics */
-    0,                              /* exported MI functions */
-    0,                              /* exported pseudo-variables */
-    0,                              /* extra processes */
-    mod_init,                       /* module initialization function */
-    (response_function) NULL,       /* response handling function */
-    (destroy_function) mod_destroy, /* destroy function */
-    child_init                      /* per-child init function */
-};
-
-static int
-mod_init(void)
-{
-    char *dname, *bname;
-    int i;
-    PyObject *sys_path, *pDir, *pModule, *pFunc, *pArgs;
-    PyThreadState *mainThreadState;
-
-    if (script_name.len == 0) {
-        script_name.len = strlen(script_name.s);
-    }
-    if (mod_init_fname.len == 0) {
-        mod_init_fname.len = strlen(mod_init_fname.s);
-    }
-    if (child_init_mname.len == 0) {
-        child_init_mname.len = strlen(child_init_mname.s);
-    }
-
-    dname = dirname(script_name.s);
-    if (strlen(dname) == 0)
-        dname = ".";
-    bname = basename(script_name.s);
-    i = strlen(bname);
-    if (bname[i - 1] == 'c' || bname[i - 1] == 'o')
-        i -= 1;
-    if (bname[i - 3] == '.' && bname[i - 2] == 'p' && bname[i - 1] == 'y') {
-        bname[i - 3] = '\0';
-    } else {
-        LM_ERR("%s: script_name doesn't look like a python script\n",
-          script_name.s);
-        return -1;
-    }
-
-    Py_Initialize();
-    PyEval_InitThreads();
-    mainThreadState = PyThreadState_Get();
-
-    Py_InitModule("Router", RouterMethods);
-
-    if (python_msgobj_init() != 0) {
-        LM_ERR("python_msgobj_init() has failed\n");
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    sys_path = PySys_GetObject("path");
-    /* PySys_GetObject doesn't pass reference! No need to DEREF */
-    if (sys_path == NULL) {
-        LM_ERR("cannot import sys.path\n");
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    pDir = PyString_FromString(dname);
-    if (pDir == NULL) {
-        LM_ERR("PyString_FromString() has filed\n");
-        PyEval_ReleaseLock();
-        return -1;
-    }
-    PyList_Insert(sys_path, 0, pDir);
-    Py_DECREF(pDir);
-
-    pModule = PyImport_ImportModule(bname);
-    if (pModule == NULL) {
-        LM_ERR("cannot import %s\n", bname);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    pFunc = PyObject_GetAttrString(pModule, mod_init_fname.s);
-    Py_DECREF(pModule);
-    /* pFunc is a new reference */
-    if (pFunc == NULL || !PyCallable_Check(pFunc)) {
-        LM_ERR("cannot locate %s function in %s module\n",
-          mod_init_fname.s, script_name.s);
-        Py_XDECREF(pFunc);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    pModule = PyImport_ImportModule("traceback");
-    if (pModule == NULL) {
-        LM_ERR("cannot import traceback module\n");
-        Py_DECREF(pFunc);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    format_exc_obj = PyObject_GetAttrString(pModule, "format_exception");
-    Py_DECREF(pModule);
-    if (format_exc_obj == NULL || !PyCallable_Check(format_exc_obj)) {
-        LM_ERR("cannot locate format_exception function in" \
-          " traceback module\n");
-        Py_XDECREF(format_exc_obj);
-        Py_DECREF(pFunc);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    pArgs = PyTuple_New(0);
-    if (pArgs == NULL) {
-        LM_ERR("PyTuple_New() has failed\n");
-        Py_DECREF(pFunc);
-        Py_DECREF(format_exc_obj);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    handler_obj = PyObject_CallObject(pFunc, pArgs);
-    Py_DECREF(pFunc);
-    Py_DECREF(pArgs);
-
-    if (PyErr_Occurred()) {
-        python_handle_exception("mod_init");
-        Py_XDECREF(handler_obj);
-        Py_DECREF(format_exc_obj);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    if (handler_obj == NULL) {
-        LM_ERR("%s function has not returned object\n",
-          mod_init_fname.s);
-        Py_DECREF(format_exc_obj);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    myThreadState = PyThreadState_New(mainThreadState->interp);
-    PyEval_ReleaseLock();
-
-    return 0;
-}
-
-static int
-child_init(int rank)
-{
-    PyObject *pFunc, *pArgs, *pValue, *pResult;
-    int rval;
-
-    PyEval_AcquireLock();
-    PyThreadState_Swap(myThreadState);
-
-    pFunc = PyObject_GetAttrString(handler_obj, child_init_mname.s);
-    if (pFunc == NULL || !PyCallable_Check(pFunc)) {
-        LM_ERR("cannot locate %s function\n", child_init_mname.s);
-        if (pFunc != NULL) {
-            Py_DECREF(pFunc);
-        }
-        PyThreadState_Swap(NULL);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    pArgs = PyTuple_New(1);
-    if (pArgs == NULL) {
-        LM_ERR("PyTuple_New() has failed\n");
-        Py_DECREF(pFunc);
-        PyThreadState_Swap(NULL);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    pValue = PyInt_FromLong(rank);
-    if (pValue == NULL) {
-        LM_ERR("PyInt_FromLong() has failed\n");
-        Py_DECREF(pArgs);
-        Py_DECREF(pFunc);
-        PyThreadState_Swap(NULL);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-    PyTuple_SetItem(pArgs, 0, pValue);
-    /* pValue has been stolen */
-
-    pResult = PyObject_CallObject(pFunc, pArgs);
-    Py_DECREF(pFunc);
-    Py_DECREF(pArgs);
-
-    if (PyErr_Occurred()) {
-        python_handle_exception("child_init");
-        Py_XDECREF(pResult);
-        PyThreadState_Swap(NULL);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    if (pResult == NULL) {
-        LM_ERR("PyObject_CallObject() returned NULL but no exception!\n");
-        PyThreadState_Swap(NULL);
-        PyEval_ReleaseLock();
-        return -1;
-    }
-
-    rval = PyInt_AsLong(pResult);
-    Py_DECREF(pResult);
-    PyThreadState_Swap(NULL);
-    PyEval_ReleaseLock();
-    return rval;
-}
-
-static void
-mod_destroy(void)
-{
-
-    return;
-}

+ 0 - 32
modules/app_python/python_mod.h

@@ -1,32 +0,0 @@
-/* $Id$
- *
- * Copyright (C) 2009 Sippy Software, Inc., http://www.sippysoft.com
- *
- * This file is part of SIPRouter, a free SIP server.
- *
- * SIP-Router is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * SIP-Router is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
-*/
-
-#ifndef _PYTHON_MOD_H
-#define  _PYTHON_MOD_H
-
-#include <Python.h>
-
-extern PyObject *handler_obj;
-extern PyObject *format_exc_obj;
-extern PyThreadState *myThreadState;
-
-#endif

+ 0 - 532
modules/app_python/python_msgobj.c

@@ -1,532 +0,0 @@
-/* $Id$
- *
- * Copyright (C) 2009 Sippy Software, Inc., http://www.sippysoft.com
- *
- * This file is part of SIP-Router, a free SIP server.
- *
- * SIP-Router is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * SIP-Router is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
-*/
-
-#include "../../action.h"
-#include "../../mem/mem.h"
-#include "../../sr_module.h"
-#include "../../parser/msg_parser.h"
-
-#include <Python.h>
-#include "structmember.h"
-
-#ifndef Py_TYPE
-#define Py_TYPE(ob)               (((PyObject*)(ob))->ob_type)
-#endif
-
-typedef struct {
-    PyObject_HEAD
-    struct sip_msg *msg;
-} msgobject;
-
-static PyTypeObject MSGtype;
-
-#define is_msgobject(v)         ((v)->ob_type == &MSGtype)
-
-msgobject *
-newmsgobject(struct sip_msg *msg)
-{
-    msgobject *msgp;
-
-    msgp = PyObject_New(msgobject, &MSGtype);
-    if (msgp == NULL)
-        return NULL;
-
-    msgp->msg = msg;
-    return msgp;
-}
-
-void
-msg_invalidate(msgobject *self)
-{
-
-    self->msg = NULL;
-}
-
-static void
-msg_dealloc(msgobject *msgp)
-{
-
-    PyObject_Del(msgp);
-}
-
-static PyObject *
-msg_copy(msgobject *self)
-{
-    msgobject *msgp;
-
-    if ((msgp = newmsgobject(self->msg)) == NULL)
-        return NULL;
-
-    return (PyObject *)msgp;
-}
-
-static PyObject *
-msg_rewrite_ruri(msgobject *self, PyObject *args)
-{
-    char *ruri;
-    struct action act;
-    struct run_act_ctx ra_ctx;
-
-    if (self->msg == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "self->msg is NULL");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    if ((self->msg->first_line).type != SIP_REQUEST) {
-        PyErr_SetString(PyExc_RuntimeError, "Not a request message - "
-          "rewrite is not possible.\n");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    if(!PyArg_ParseTuple(args, "s:rewrite_ruri", &ruri))
-        return NULL;
-
-    memset(&act, '\0', sizeof(act));
-
-    act.type = SET_URI_T;
-    act.val[0].type = STR_ST;
-    act.val[0].u.str.s = ruri;
-    act.val[0].u.str.len = strlen(ruri);
-
-    init_run_actions_ctx(&ra_ctx);
-    if (do_action(&ra_ctx, &act, self->msg) < 0) {
-        LM_ERR("Error in do_action\n");
-        PyErr_SetString(PyExc_RuntimeError, "Error in do_action\n");
-    }
-
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-
-static PyObject *
-msg_set_dst_uri(msgobject *self, PyObject *args)
-{
-    str ruri;
-
-    if (self->msg == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "self->msg is NULL");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    if ((self->msg->first_line).type != SIP_REQUEST) {
-        PyErr_SetString(PyExc_RuntimeError, "Not a request message - "
-          "set destination is not possible.\n");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    if(!PyArg_ParseTuple(args, "s:set_dst_uri", &ruri.s))
-        return NULL;
-
-    ruri.len = strlen(ruri.s);
-
-    if (set_dst_uri(self->msg, &ruri) < 0) {
-        LM_ERR("Error in set_dst_uri\n");
-        PyErr_SetString(PyExc_RuntimeError, "Error in set_dst_uri\n");
-    }
-
-    Py_INCREF(Py_None);
-    return Py_None;
-}
-
-static PyObject *
-msg_getHeader(msgobject *self, PyObject *args)
-{
-    struct hdr_field *hf;
-    str hname, *hbody;
-
-    if (self->msg == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "self->msg is NULL");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    if(!PyArg_ParseTuple(args, "s:getHeader", &hname.s))
-        return NULL;
-    hname.len = strlen(hname.s);
-
-    parse_headers(self->msg, ~0, 0);
-    hbody = NULL;
-    for (hf = self->msg->headers; hf != NULL; hf = hf->next) {
-        if (hname.len == hf->name.len &&
-          strncasecmp(hname.s, hf->name.s, hname.len) == 0) {
-            hbody = &(hf->body);
-            break;
-        }
-    }
-
-    if (hbody == NULL) {
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    return PyString_FromStringAndSize(hbody->s, hbody->len);
-}
-
-static PyObject *
-msg_call_function(msgobject *self, PyObject *args)
-{
-    int i, rval;
-    char *fname, *arg1, *arg2;
-    union cmd_export_u* fexport;
-    struct action *act;
-    action_u_t elems[MAX_ACTIONS];
-    struct run_act_ctx ra_ctx;
-    unsigned mod_ver;
-
-    if (self->msg == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "self->msg is NULL");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    i = PySequence_Size(args);
-    if (i < 1 || i > 3) {
-        PyErr_SetString(PyExc_RuntimeError, "call_function() should " \
-          "have from 1 to 3 arguments");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    if(!PyArg_ParseTuple(args, "s|ss:call_function", &fname, &arg1, &arg2))
-        return NULL;
-
-    fexport = find_export_record(fname, i - 2, 0, &mod_ver);
-    if (fexport == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "no such function");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    elems[0].type = MODEXP_ST;
-    elems[0].u.data = fexport;
-    elems[1].type = STRING_ST;
-    elems[1].u.data = arg1;
-    elems[2].type = STRING_ST;
-    elems[2].u.data = arg2;
-    act = mk_action(MODULE_T, 3, elems, 0);
-
-    if (act == NULL) {
-        PyErr_SetString(PyExc_RuntimeError,
-          "action structure could not be created");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    if (fexport->v1.fixup != NULL) {
-        if (i >= 3) {
-            rval = fexport->v1.fixup(&(act->val[2].u.data), 2);
-            if (rval < 0) {
-                PyErr_SetString(PyExc_RuntimeError, "Error in fixup (2)");
-                Py_INCREF(Py_None);
-                return Py_None;
-            }
-            act->val[2].type = MODFIXUP_ST;
-        }
-        if (i >= 2) {
-            rval = fexport->v1.fixup(&(act->val[1].u.data), 1);
-            if (rval < 0) {
-                PyErr_SetString(PyExc_RuntimeError, "Error in fixup (1)");
-                Py_INCREF(Py_None);
-                return Py_None;
-            }
-            act->val[1].type = MODFIXUP_ST;
-        }
-        if (i == 1) {
-            rval = fexport->v1.fixup(0, 0);
-            if (rval < 0) {
-                PyErr_SetString(PyExc_RuntimeError, "Error in fixup (0)");
-                Py_INCREF(Py_None);
-                return Py_None;
-            }
-        }
-    }
-
-    init_run_actions_ctx(&ra_ctx);
-    rval = do_action(&ra_ctx, act, self->msg);
-
-    if ((act->val[2].type == MODFIXUP_ST) && (act->val[2].u.data)) {
-       pkg_free(act->val[2].u.data);
-    }
-
-    if ((act->val[1].type == MODFIXUP_ST) && (act->val[1].u.data)) {
-        pkg_free(act->val[1].u.data);
-    }
-
-    pkg_free(act);
-
-    return PyInt_FromLong(rval);
-}
-
-PyDoc_STRVAR(copy_doc,
-"copy() -> msg object\n\
-\n\
-Return a copy (``clone'') of the msg object.");
-
-static PyMethodDef msg_methods[] = {
-    {"copy",          (PyCFunction)msg_copy,          METH_NOARGS,  copy_doc},
-    {"rewrite_ruri",  (PyCFunction)msg_rewrite_ruri,  METH_VARARGS,
-      "Rewrite Request-URI."},
-    {"set_dst_uri",   (PyCFunction)msg_set_dst_uri,   METH_VARARGS,
-      "Set destination URI."},
-    {"getHeader",     (PyCFunction)msg_getHeader,     METH_VARARGS,
-      "Get SIP header field by name."},
-    {"call_function", (PyCFunction)msg_call_function, METH_VARARGS,
-      "Invoke function exported by the other module."},
-    {NULL, NULL, 0, NULL}                              /* sentinel */
-};
-
-static PyObject *
-msg_getType(msgobject *self, PyObject *unused)
-{
-    const char *rval;
-
-    if (self->msg == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "self->msg is NULL");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    switch ((self->msg->first_line).type) {
-    case SIP_REQUEST:
-       rval = "SIP_REQUEST";
-       break;
-
-    case SIP_REPLY:
-       rval = "SIP_REPLY";
-       break;
-
-    default:
-       /* Shouldn't happen */
-       abort();
-    }
-    return PyString_FromString(rval);
-}
-
-static PyObject *
-msg_getMethod(msgobject *self, PyObject *unused)
-{
-    str *rval;
-
-    if (self->msg == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "self->msg is NULL");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    if ((self->msg->first_line).type != SIP_REQUEST) {
-        PyErr_SetString(PyExc_RuntimeError, "Not a request message - "
-          "no method available.\n");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-    rval = &((self->msg->first_line).u.request.method);
-    return PyString_FromStringAndSize(rval->s, rval->len);
-}
-
-static PyObject *
-msg_getStatus(msgobject *self, PyObject *unused)
-{
-    str *rval;
-
-    if (self->msg == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "self->msg is NULL");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    if ((self->msg->first_line).type != SIP_REPLY) {
-        PyErr_SetString(PyExc_RuntimeError, "Not a non-reply message - "
-          "no status available.\n");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    rval = &((self->msg->first_line).u.reply.status);
-    return PyString_FromStringAndSize(rval->s, rval->len);
-}
-
-static PyObject *
-msg_getRURI(msgobject *self, PyObject *unused)
-{
-    str *rval;
-
-    if (self->msg == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "self->msg is NULL");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    if ((self->msg->first_line).type != SIP_REQUEST) {
-        PyErr_SetString(PyExc_RuntimeError, "Not a request message - "
-          "RURI is not available.\n");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    rval = &((self->msg->first_line).u.request.uri);
-    return PyString_FromStringAndSize(rval->s, rval->len);
-}
-
-static PyObject *
-msg_get_src_address(msgobject *self, PyObject *unused)
-{
-    PyObject *src_ip, *src_port, *pyRval;
-
-    if (self->msg == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "self->msg is NULL");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    src_ip = PyString_FromString(ip_addr2a(&self->msg->rcv.src_ip));
-    if (src_ip == NULL) {
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    src_port = PyInt_FromLong(self->msg->rcv.src_port);
-    if (src_port == NULL) {
-        Py_DECREF(src_ip);
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    pyRval = PyTuple_Pack(2, src_ip, src_port);
-    Py_DECREF(src_ip);
-    Py_DECREF(src_port);
-    if (pyRval == NULL) {
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    return pyRval;
-}
-
-static PyObject *
-msg_get_dst_address(msgobject *self, PyObject *unused)
-{
-    PyObject *dst_ip, *dst_port, *pyRval;
-
-    if (self->msg == NULL) {
-        PyErr_SetString(PyExc_RuntimeError, "self->msg is NULL");
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    dst_ip = PyString_FromString(ip_addr2a(&self->msg->rcv.dst_ip));
-    if (dst_ip == NULL) {
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    dst_port = PyInt_FromLong(self->msg->rcv.dst_port);
-    if (dst_port == NULL) {
-        Py_DECREF(dst_ip);
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    pyRval = PyTuple_Pack(2, dst_ip, dst_port);
-    Py_DECREF(dst_ip);
-    Py_DECREF(dst_port);
-    if (pyRval == NULL) {
-        Py_INCREF(Py_None);
-        return Py_None;
-    }
-
-    return pyRval;
-}
-
-static PyGetSetDef msg_getseters[] = {
-    {"Type",
-     (getter)msg_getType, NULL, NULL,
-     "Get message type - \"SIP_REQUEST\" or \"SIP_REPLY\"."},
-    {"Method",
-     (getter)msg_getMethod, NULL, NULL,
-     "Get SIP method name."},
-    {"Status",
-     (getter)msg_getStatus, NULL, NULL,
-     "Get SIP status code string."},
-    {"RURI",
-     (getter)msg_getRURI, NULL, NULL,
-     "Get SIP Request-URI."},
-    {"src_address",
-     (getter)msg_get_src_address, NULL, NULL,
-     "Get (IP, port) tuple representing source address of the message."},
-    {"dst_address",
-     (getter)msg_get_dst_address, NULL, NULL,
-     "Get (IP, port) tuple representing destination address of the message."},
-    {NULL, NULL, NULL, NULL, NULL}  /* Sentinel */
-};
-
-static PyTypeObject MSGtype = {
-#if PY_MAJOR_VERSION == 2 && PY_MINOR_VERSION >= 6
-    PyVarObject_HEAD_INIT(NULL, 0)
-#else
-    PyObject_HEAD_INIT(NULL)
-    0,                        /*ob_size*/
-#endif
-    "Router.msg",             /*tp_name*/
-    sizeof(msgobject),        /*tp_size*/
-    0,                        /*tp_itemsize*/
-    /* methods */
-    (destructor)msg_dealloc,  /*tp_dealloc*/
-    0,                        /*tp_print*/
-    0,                        /*tp_getattr*/
-    0,                        /*tp_setattr*/
-    0,                        /*tp_compare*/
-    0,                        /*tp_repr*/
-    0,                        /*tp_as_number*/
-    0,                        /*tp_as_sequence*/
-    0,                        /*tp_as_mapping*/
-    0,                        /*tp_hash*/
-    0,                        /*tp_call*/
-    0,                        /*tp_str*/
-    0,                        /*tp_getattro*/
-    0,                        /*tp_setattro*/
-    0,                        /*tp_as_buffer*/
-    Py_TPFLAGS_DEFAULT,       /*tp_flags*/
-    0,                        /*tp_doc*/
-    0,                        /*tp_traverse*/
-    0,                        /*tp_clear*/
-    0,                        /*tp_richcompare*/
-    0,                        /*tp_weaklistoffset*/
-    0,                        /*tp_iter*/
-    0,                        /*tp_iternext*/
-    msg_methods,              /*tp_methods*/
-    0,                        /*tp_members*/
-    msg_getseters,            /*tp_getset*/
-};
-
-int
-python_msgobj_init(void)
-{
-
-    Py_TYPE(&MSGtype) = &PyType_Type;
-    if (PyType_Ready(&MSGtype) < 0)
-        return -1;
-    return 0;
-}

+ 0 - 34
modules/app_python/python_msgobj.h

@@ -1,34 +0,0 @@
-/* $Id$
- *
- * Copyright (C) 2009 Sippy Software, Inc., http://www.sippysoft.com
- *
- * This file is part of SIP-Router, a free SIP server.
- *
- * SIP-Router is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * SIP-Router is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
-*/
-
-#ifndef _PYTHON_MSGOBJ_H
-#define  _PYTHON_MSGOBJ_H
-
-#include "../../parser/msg_parser.h"
-
-#include <Python.h>
-
-PyObject *newmsgobject(struct sip_msg *);
-int python_msgobj_init(void);
-void msg_invalidate(PyObject *);
-
-#endif

+ 0 - 82
modules/app_python/python_support.c

@@ -1,82 +0,0 @@
-/* $Id$
- *
- * Copyright (C) 2009 Sippy Software, Inc., http://www.sippysoft.com
- *
- * This file is part of SIP-Router, a free SIP server.
- *
- * SIP-Router is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * SIP-Router is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
-*/
-
-#include "../../dprint.h"
-#include "python_mod.h"
-
-#include <stdio.h>
-#include <Python.h>
-
-void
-python_handle_exception(const char *fname)
-{
-    PyObject *pResult;
-    const char *msg;
-    PyObject *exception, *v, *tb, *args;
-    PyObject *line;
-    int i;
-
-    LM_ERR("%s: Unhandled exception in the Python code:\n", fname);
-    PyErr_Fetch(&exception, &v, &tb);
-    PyErr_Clear();
-    if (exception == NULL) {
-        LM_ERR("can't get traceback, PyErr_Fetch() has failed\n");
-        return;
-    }
-    PyErr_NormalizeException(&exception, &v, &tb);
-    if (exception == NULL) {
-        LM_ERR("can't get traceback, PyErr_NormalizeException() has failed\n");
-        return;
-    }
-    args = PyTuple_Pack(3, exception, v, tb ? tb : Py_None);
-    Py_XDECREF(exception);
-    Py_XDECREF(v);
-    Py_XDECREF(tb);
-    if (args == NULL) {
-        LM_ERR("can't get traceback, PyTuple_Pack() has failed\n");
-        return;
-    }
-    pResult = PyObject_CallObject(format_exc_obj, args);
-    Py_DECREF(args);
-    if (pResult == NULL) {
-        LM_ERR("can't get traceback, traceback.format_exception() has failed\n");
-        return;
-    }
-    for (i = 0; i < PySequence_Size(pResult); i++) {
-        line = PySequence_GetItem(pResult, i);
-        if (line == NULL) {
-            LM_ERR("can't get traceback, PySequence_GetItem() has failed\n");
-            Py_DECREF(pResult);
-            return;
-        }
-        msg = PyString_AsString(line);
-        if (msg == NULL) {
-            LM_ERR("can't get traceback, PyString_AsString() has failed\n");
-            Py_DECREF(line);
-            Py_DECREF(pResult);
-            return;
-        }
-        LM_ERR("\t%s", msg);
-        Py_DECREF(line);
-    }
-    Py_DECREF(pResult);
-}

+ 0 - 28
modules/app_python/python_support.h

@@ -1,28 +0,0 @@
-/* $Id$
- *
- * Copyright (C) 2009 Sippy Software, Inc., http://www.sippysoft.com
- *
- * This file is part of SIP-Router, a free SIP server.
- *
- * SIP-Router is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version
- *
- * SIP-Router is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
- *
-*/
-
-#ifndef _PYTHON_SUPPORT_H
-#define  _PYTHON_SUPPORT_H
-
-void python_handle_exception(const char *);
-
-#endif