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
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
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 }
"Welcome to our mercurial repository"