Mercurial > hg > freeDiameter-dtls
annotate extensions/dbg_interactive/hooks.i @ 1176:f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
author | Sebastien Decugis <sdecugis@freediameter.net> |
---|---|
date | Mon, 03 Jun 2013 14:18:43 +0800 |
parents | |
children |
rev | line source |
---|---|
1176
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
1 /********************************************************************************************************* |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
2 * Software License Agreement (BSD License) * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
4 * * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
5 * Copyright (c) 2013, WIDE Project and NICT * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
6 * All rights reserved. * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
7 * * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
8 * Redistribution and use of this software in source and binary forms, with or without modification, are * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
9 * permitted provided that the following conditions are met: * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
10 * * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
11 * * Redistributions of source code must retain the above * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
12 * copyright notice, this list of conditions and the * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
13 * following disclaimer. * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
14 * * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
15 * * Redistributions in binary form must reproduce the above * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
16 * copyright notice, this list of conditions and the * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
17 * following disclaimer in the documentation and/or other * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
18 * materials provided with the distribution. * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
19 * * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
20 * * Neither the name of the WIDE Project or NICT nor the * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
21 * names of its contributors may be used to endorse or * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
22 * promote products derived from this software without * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
23 * specific prior written permission of WIDE Project and * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
24 * NICT. * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
25 * * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
34 *********************************************************************************************************/ |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
35 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
36 /* Do not include this directly, use dbg_interactive.i instead */ |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
37 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
38 /****** HOOKS *********/ |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
39 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
40 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
41 /* Functions to handle the PMD */ |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
42 %{ |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
43 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
44 struct fd_hook_permsgdata { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
45 PyObject *PyPML; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
46 }; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
47 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
48 static void init_permsgdata (struct fd_hook_permsgdata * pmd) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
49 /* The PMD is None by default */ |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
50 Py_INCREF(Py_None); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
51 pmd->PyPML = Py_None; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
52 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
53 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
54 static void fini_permsgdata (struct fd_hook_permsgdata * pmd) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
55 Py_DECREF(pmd->PyPML); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
56 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
57 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
58 %} |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
59 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
60 struct fd_hook_data_hdl { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
61 }; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
62 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
63 %nodefaultctor fd_hook_data_hdl; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
64 %extend fd_hook_data_hdl { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
65 fd_hook_data_hdl() { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
66 struct fd_hook_data_hdl * hdl = NULL; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
67 int ret; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
68 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
69 ret = fd_hook_data_register ( sizeof(struct fd_hook_permsgdata), init_permsgdata, fini_permsgdata, &hdl ); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
70 if (ret != 0) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
71 DI_ERROR(ret, NULL, NULL); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
72 return NULL; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
73 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
74 return hdl; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
75 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
76 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
77 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
78 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
79 /* Now the hook itself */ |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
80 %{ |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
81 static void call_the_python_hook_callback(enum fd_hook_type type, struct msg * msg, struct peer_hdr * peer, void * other, struct fd_hook_permsgdata *pmd, void * regdata) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
82 PyObject *cb, *result = NULL; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
83 PyObject *PyType, *PyMsg, *PyPeer, *PyOther, *PyOldPmd; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
84 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
85 if (!regdata) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
86 LOG_E("Internal error: missing the callback!"); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
87 return; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
88 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
89 cb = regdata; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
90 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
91 SWIG_PYTHON_THREAD_BEGIN_BLOCK; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
92 /* Convert the arguments */ |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
93 PyType = PyLong_FromLong(type); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
94 Py_INCREF(PyType); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
95 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
96 PyMsg = SWIG_NewPointerObj((void *) msg, SWIGTYPE_p_msg, 0 ); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
97 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
98 PyPeer = SWIG_NewPointerObj((void *) peer, SWIGTYPE_p_peer_hdr, 0 ); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
99 if (other == NULL) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
100 PyOther=Py_None; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
101 Py_INCREF(Py_None); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
102 } else { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
103 switch (type) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
104 case HOOK_DATA_RECEIVED: |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
105 PyOther= SWIG_NewPointerObj( other, SWIGTYPE_p_fd_cnx_rcvdata, 0 ); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
106 break; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
107 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
108 case HOOK_MESSAGE_RECEIVED: |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
109 case HOOK_MESSAGE_ROUTING_ERROR: |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
110 case HOOK_MESSAGE_DROPPED: |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
111 case HOOK_PEER_CONNECT_FAILED: |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
112 PyOther= SWIG_NewPointerObj( other, SWIGTYPE_p_char, 0 ); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
113 break; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
114 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
115 case HOOK_MESSAGE_PARSING_ERROR: |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
116 if (msg) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
117 PyOther= SWIG_NewPointerObj( other, SWIGTYPE_p_char, 0 ); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
118 } else { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
119 PyOther= SWIG_NewPointerObj( other, SWIGTYPE_p_fd_cnx_rcvdata, 0 ); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
120 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
121 break; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
122 default: |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
123 /* In other cases, other should be NULL */ |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
124 LOG_E("Internal error: got a value of *other"); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
125 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
126 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
127 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
128 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
129 if (pmd == NULL) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
130 Py_INCREF(Py_None); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
131 PyOldPmd=Py_None; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
132 } else { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
133 PyOldPmd=pmd->PyPML; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
134 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
135 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
136 /* Call the function */ |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
137 result = PyObject_CallFunction(cb, "(OOOOO)", PyType, PyMsg, PyPeer, PyOther, PyOldPmd); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
138 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
139 SWIG_PYTHON_THREAD_END_BLOCK; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
140 if (pmd == NULL) |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
141 return; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
142 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
143 Py_DECREF(pmd->PyPML); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
144 Py_INCREF(result); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
145 pmd->PyPML = result; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
146 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
147 %} |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
148 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
149 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
150 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
151 struct fd_hook_hdl { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
152 }; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
153 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
154 %nodefaultctor fd_hook_hdl; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
155 %extend fd_hook_hdl { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
156 fd_hook_hdl(uint32_t type_mask, PyObject * PyCb) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
157 struct fd_hook_hdl *hdl; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
158 int ret; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
159 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
160 Py_XINCREF(PyCb); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
161 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
162 ret = fd_hook_register ( type_mask, call_the_python_hook_callback, PyCb, NULL, &hdl ); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
163 if (ret != 0) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
164 DI_ERROR(ret, NULL, NULL); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
165 return NULL; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
166 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
167 return hdl; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
168 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
169 fd_hook_hdl(uint32_t type_mask, PyObject * PyCb, struct fd_hook_data_hdl *datahdl) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
170 struct fd_hook_hdl *hdl; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
171 int ret; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
172 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
173 Py_XINCREF(PyCb); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
174 |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
175 ret = fd_hook_register ( type_mask, call_the_python_hook_callback, PyCb, datahdl, &hdl ); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
176 if (ret != 0) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
177 DI_ERROR(ret, NULL, NULL); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
178 return NULL; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
179 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
180 return hdl; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
181 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
182 ~fd_hook_hdl() { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
183 struct fd_hook_hdl * hdl = self; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
184 int ret = fd_hook_unregister(hdl); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
185 if (ret != 0) { |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
186 DI_ERROR(ret, NULL, NULL); |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
187 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
188 return; |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
189 } |
f0b328ea2fdb
Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents:
diff
changeset
|
190 } |