⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 libnetfilter_queue_python.i

📁 此包是为perl或者 Python等高级语言提供一个库
💻 I
字号:
// Grab a Python function object as a Python object.%typemap(in) PyObject *pyfunc {  if (!PyCallable_Check($input)) {      PyErr_SetString(PyExc_TypeError, "Need a callable object!");      return NULL;  }  $1 = $input;}%{#include <arpa/inet.h>#include <linux/netfilter.h>#include <linux/ip.h>#include <nfq_utils.h>int  swig_nfq_callback(struct nfq_q_handle *qh, struct nfgenmsg *nfmsg,                       struct nfq_data *nfad, void *data){        int id = 0;        struct nfqnl_msg_packet_hdr *ph;        int ret;        char *payload_data;        int payload_len;        struct timeval tv1, tv2, diff;        if (data == NULL) {                fprintf(stderr,"No callback set !\n");                return -1;        }        ph = nfq_get_msg_packet_hdr(nfad);        if (ph){                id = ntohl(ph->packet_id);        }        ret = nfq_get_payload(nfad, &payload_data);        payload_len = ret;        gettimeofday(&tv1, NULL);        /*printf("callback called\n");        printf("callback argument: %p\n",data);*/        {                PyObject *func, *arglist, *payload_obj;                PyObject *result;                struct payload *p;                SWIG_PYTHON_THREAD_BEGIN_ALLOW;                func = (PyObject *) data;                p = malloc(sizeof(struct payload));                p->data = payload_data;                p->len = payload_len;                p->id = id;                p->qh = qh;                p->nfad = nfad;                payload_obj = SWIG_NewPointerObj((void*) p, SWIGTYPE_p_payload, 1);                arglist = Py_BuildValue("(i,O)",42,payload_obj);                /*printf("will call python object\n");*/                result = PyEval_CallObject(func,arglist);                /*printf("result: %p\n", result);*/                free(p);                Py_DECREF(arglist);                if (result) {                        Py_DECREF(result);                }                result = PyErr_Occurred();                if (result) {                        printf("callback failure !\n");                        PyErr_Print();                }                SWIG_PYTHON_THREAD_END_ALLOW;        }        gettimeofday(&tv2, NULL);        timeval_subtract(&diff, &tv2, &tv1);        printf("python callback call: %d sec %d usec\n",                (int)diff.tv_sec,                (int)diff.tv_usec);        return nfq_set_verdict(qh, id, NF_ACCEPT, 0, NULL);}void raise_swig_error(const char *errstr){        fprintf(stderr,"ERROR %s\n",errstr);        SWIG_Error(SWIG_RuntimeError, errstr); }%}%extend queue {int set_callback(PyObject *pyfunc){        self->_cb = (void*)pyfunc;        /*printf("callback argument: %p\n",pyfunc);*/        Py_INCREF(pyfunc);        return 0;}};%typemap (out) const char* get_data {        $result = PyString_FromStringAndSize($1,arg1->len); // blah}%extend payload {const char* get_data(void) {        return self->data;}};

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -