annotate extensions/dbg_interactive/messages.i @ 1212:c38bb8b69c43

Fix message rtd handling for extensions based on this data
author Sebastien Decugis <sdecugis@freediameter.net>
date Mon, 17 Jun 2013 18:19:53 +0800
parents 1af09cc156d6
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1 /*********************************************************************************************************
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2 * Software License Agreement (BSD License) *
740
4a9f08d6b6ba Updated my mail address
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 706
diff changeset
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> *
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 * *
1127
1af09cc156d6 Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1088
diff changeset
5 * Copyright (c) 2013, WIDE Project and NICT *
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
6 * All rights reserved. *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
7 * *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
8 * Redistribution and use of this software in source and binary forms, with or without modification, are *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
9 * permitted provided that the following conditions are met: *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
10 * *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
11 * * Redistributions of source code must retain the above *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
12 * copyright notice, this list of conditions and the *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
13 * following disclaimer. *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
14 * *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
15 * * Redistributions in binary form must reproduce the above *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
16 * copyright notice, this list of conditions and the *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
17 * following disclaimer in the documentation and/or other *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
18 * materials provided with the distribution. *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
19 * *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
20 * * Neither the name of the WIDE Project or NICT nor the *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
21 * names of its contributors may be used to endorse or *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
22 * promote products derived from this software without *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
23 * specific prior written permission of WIDE Project and *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
24 * NICT. *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
25 * *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
34 *********************************************************************************************************/
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
35
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
36 /* Do not include this directly, use dbg_interactive.i instead */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
37
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
38 /****** MESSAGES *********/
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
39
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
40 %{
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
41 struct anscb_py_layer {
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
42 PyObject * cb;
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
43 PyObject * expcb;
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
44 PyObject * data;
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
45 };
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
46
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
47 /* If a python callback was provided, it is received in cbdata */
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
48 static void anscb_python(void *cbdata, struct msg ** msg) {
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
49 /* The python callback is received in cbdata */
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
50 PyObject * result, *PyMsg;
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
51 struct anscb_py_layer * l = cbdata;
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
52
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
53 if (!l) {
979
b90cb4c07160 Remove more newlines.
Thomas Klausner <tk@giga.or.at>
parents: 740
diff changeset
54 fd_log_debug("Internal error! Python callback disappeared...");
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
55 return;
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
56 }
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
57
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
58 if (l->cb) {
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
59
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
60 SWIG_PYTHON_THREAD_BEGIN_BLOCK;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
61
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
62 if (!msg || !*msg) {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
63 PyMsg = Py_None;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
64 } else {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
65 PyMsg = SWIG_NewPointerObj((void *)*msg, SWIGTYPE_p_msg, 0 );
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
66 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
67
1013
7b5c46505e09 Replace calls to PyEval_CallFunction by PyObject_CallFunction
Sebastien Decugis <sdecugis@freediameter.net>
parents: 979
diff changeset
68 result = PyObject_CallFunction(l->cb, "(OO)", PyMsg, l->data);
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
69 Py_XDECREF(l->cb);
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
70 Py_XDECREF(l->expcb);
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
71 Py_XDECREF(l->data);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
72 free(l);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
73
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
74 /* The callback is supposed to return a message or NULL */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
75 if (!SWIG_IsOK(SWIG_ConvertPtr(result, (void *)msg, SWIGTYPE_p_msg, SWIG_POINTER_DISOWN))) {
979
b90cb4c07160 Remove more newlines.
Thomas Klausner <tk@giga.or.at>
parents: 740
diff changeset
76 fd_log_debug("Error: Cannot convert the return value to message.");
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
77 *msg = NULL;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
78 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
79
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
80 Py_XDECREF(result);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
81
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
82 SWIG_PYTHON_THREAD_END_BLOCK;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
83
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
84 }
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
85 /* else */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
86 /* Only the timeout was specified, without a callback */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
87 /* in this case, just delete the message */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
88 /* it actually happens automatically when we do nothing. */
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
89 }
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
90
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
91 static void expcb_python(void *cbdata, DiamId_t sentto, size_t senttolen, struct msg ** msg) {
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
92 /* The python callback is received in cbdata */
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
93 PyObject * result, *PyMsg;
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
94 struct anscb_py_layer * l = cbdata;
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
95
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
96 if (!l) {
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
97 fd_log_debug("Internal error! Python callback disappeared...");
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
98 return;
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
99 }
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
100
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
101 SWIG_PYTHON_THREAD_BEGIN_BLOCK;
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
102
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
103 if (!msg || !*msg) {
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
104 PyMsg = Py_None;
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
105 } else {
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
106 PyMsg = SWIG_NewPointerObj((void *)*msg, SWIGTYPE_p_msg, 0 );
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
107 }
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
108
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
109 result = PyObject_CallFunction(l->expcb, "(Os#O)", PyMsg, sentto, senttolen, l->data);
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
110 Py_XDECREF(l->cb);
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
111 Py_XDECREF(l->expcb);
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
112 Py_XDECREF(l->data);
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
113 free(l);
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
114
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
115 /* The callback is supposed to return a message or NULL */
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
116 if (!SWIG_IsOK(SWIG_ConvertPtr(result, (void *)msg, SWIGTYPE_p_msg, SWIG_POINTER_DISOWN))) {
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
117 fd_log_debug("Error: Cannot convert the return value to message.");
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
118 *msg = NULL;
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
119 }
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
120
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
121 Py_XDECREF(result);
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
122
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
123 SWIG_PYTHON_THREAD_END_BLOCK;
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
124
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
125 }
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
126
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
127
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
128
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
129 %}
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
130
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
131 struct msg {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
132 };
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
133
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
134 %extend msg {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
135 msg(struct dict_object * model=NULL, int flags = MSGFL_ALLOC_ETEID) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
136 struct msg * m = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
137 int ret = fd_msg_new( model, flags, &m);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
138 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
139 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
140 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
141 return m;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
142 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
143 /* construct also from a binary buffer */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
144 msg(char * STRING, size_t LENGTH) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
145 int ret;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
146 struct msg * m = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
147 /* First, copy the string */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
148 unsigned char * buf = malloc(LENGTH);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
149 if (buf == NULL) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
150 DI_ERROR_MALLOC;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
151 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
152 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
153 memcpy(buf, STRING, LENGTH);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
154 ret = fd_msg_parse_buffer(&buf, LENGTH, &m);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
155 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
156 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
157 free(buf);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
158 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
159 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
160 return m;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
161 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
162 ~msg() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
163 int ret = fd_msg_free($self);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
164 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
165 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
166 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
167 }
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
168
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
169 /* SEND THE MESSAGE */
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
170 %delobject send; /* when this has been called, the msg must not be freed anymore */
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
171 void send(PyObject * PyCb = NULL, PyObject * data = NULL, PyObject * PyExpCb = NULL, unsigned int timeout = 0) {
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
172 int ret;
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
173 struct msg * m = $self;
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
174 struct anscb_py_layer * l = NULL;
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
175
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
176 if (PyCb || timeout) {
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
177 l = malloc(sizeof(struct anscb_py_layer));
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
178 if (!l) {
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
179 DI_ERROR_MALLOC;
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
180 return;
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
181 }
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
182
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
183 Py_XINCREF(PyCb);
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
184 Py_XINCREF(data);
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
185 Py_XINCREF(PyExpCb);
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
186 l->expcb = PyExpCb;
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
187 l->cb = PyCb;
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
188 l->data = data;
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
189 }
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
190
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
191 if (timeout) {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
192 struct timespec ts;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
193 (void) clock_gettime(CLOCK_REALTIME, &ts);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
194 ts.tv_sec += timeout;
1014
908ffbb81f60 Added a second callback in fd_msg_send_timeout to handle more easily the timeout situation
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1013
diff changeset
195 ret = fd_msg_send_timeout(&m, anscb_python, l, expcb_python, &ts);
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
196 } else {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
197 ret = fd_msg_send(&m, PyCb ? anscb_python : NULL, l);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
198 }
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
199 if (ret != 0) {
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
200 DI_ERROR(ret, NULL, NULL);
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
201 }
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
202 }
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
203
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
204 /* Create an answer */
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
205 %delobject create_answer; /* when this has been called, the original msg should not be freed anymore */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
206 struct msg * create_answer(struct dictionary * dict = NULL, int flags = 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
207 /* if dict is not provided, attempt to get it from the request model */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
208 struct dictionary * d = dict;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
209 struct msg * m = $self;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
210 int ret;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
211 if (!d) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
212 struct dict_object * mo = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
213 ret = fd_msg_model($self, &mo);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
214 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
215 DI_ERROR(ret, NULL, "Error retrieving query model.");
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
216 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
217 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
218 if (mo == NULL) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
219 /* use the fD dictionary by default */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
220 d = fd_g_config->cnf_dict;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
221 } else {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
222 ret = fd_dict_getdict ( mo, &d );
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
223 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
224 DI_ERROR(ret, NULL, "Error retrieving query's dictionary.");
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
225 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
226 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
227 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
228 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
229 ret = fd_msg_new_answer_from_req(d, &m, flags);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
230 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
231 DI_ERROR(ret, NULL, "Cannot guess the dictionary to use, please provide it as parameter.");
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
232 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
233 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
234
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
235 return m;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
236 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
237 /* Return the first child AVP if any */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
238 struct avp * first_child() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
239 struct avp * a = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
240 int ret = fd_msg_browse($self, MSG_BRW_FIRST_CHILD, &a, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
241 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
242 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
243 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
244 return a;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
245 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
246
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
247 /* Enumerable list of children AVP */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
248 %newobject children;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
249 PyObject * children() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
250 struct avp * a = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
251 PyObject * rl;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
252 int ret = fd_msg_browse($self, MSG_BRW_FIRST_CHILD, &a, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
253 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
254 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
255 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
256 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
257 SWIG_PYTHON_THREAD_BEGIN_BLOCK;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
258 rl = PyList_New(0);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
259 while (a) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
260 PyList_Append(rl, SWIG_NewPointerObj((void *)a, SWIGTYPE_p_avp, 0 /* do not own the AVPs */ ));
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
261 ret = fd_msg_browse(a, MSG_BRW_NEXT, &a, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
262 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
263 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
264 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
265 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
266 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
267 Py_XINCREF(rl);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
268 SWIG_PYTHON_THREAD_END_BLOCK;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
269 return rl;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
270 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
271
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
272 /* Add a new AVP */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
273 void add_child(struct avp *DISOWN, int begin = 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
274 int ret = fd_msg_avp_add ( $self, begin ? MSG_BRW_FIRST_CHILD : MSG_BRW_LAST_CHILD, DISOWN);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
275 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
276 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
277 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
278 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
279
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
280 /* Search an AVP */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
281 struct avp * search(struct dict_object * what) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
282 struct avp * a = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
283 int ret = fd_msg_search_avp($self, what, &a);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
284 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
285 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
286 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
287 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
288 return a;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
289 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
290
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
291 /* Dump */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
292 void dump (int tree = 1) {
1088
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
293 char * buf = NULL;
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
294 size_t len;
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
295 printf("%s", fd_msg_dump_treeview(&buf, &len, NULL, $self, NULL, 0, tree));
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
296 free(buf);
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
297 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
298
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
299 /* Model */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
300 struct dict_object * model() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
301 struct dict_object * m = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
302 int ret = fd_msg_model($self, &m);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
303 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
304 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
305 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
306 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
307 return m;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
308 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
309
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
310 /* Header */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
311 struct msg_hdr * header() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
312 struct msg_hdr * h = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
313 int ret = fd_msg_hdr($self, &h);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
314 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
315 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
316 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
317 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
318 return h;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
319 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
320
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
321 /* Get query if message is an answer */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
322 struct msg * get_query() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
323 struct msg * q = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
324 int ret = fd_msg_answ_getq($self, &q);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
325 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
326 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
327 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
328 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
329 return q;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
330 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
331
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
332 /* Get / Set routing data */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
333 struct rt_data * get_rtd() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
334 struct rt_data * r = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
335 int ret = fd_msg_rt_get($self, &r);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
336 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
337 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
338 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
339 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
340 return r;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
341 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
342 void set_rtd(struct rt_data *DISOWN) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
343 struct rt_data * r = DISOWN;
1212
c38bb8b69c43 Fix message rtd handling for extensions based on this data
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1127
diff changeset
344 int ret = fd_msg_rt_associate($self, r);
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
345 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
346 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
347 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
348 return;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
349 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
350
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
351 /* Is routable? */
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
352 PyObject * is_routable() {
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
353 PyObject * r;
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
354 if (fd_msg_is_routable($self))
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
355 r = Py_True;
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
356 else
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
357 r = Py_False;
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
358 Py_XINCREF(r);
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
359 return r;
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
360 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
361
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
362 /* Is request? (shortcut) */
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
363 PyObject * is_request() {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
364 PyObject * r;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
365 int ret;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
366 struct msg_hdr * h;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
367
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
368 ret = fd_msg_hdr($self, &h);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
369 if (ret != 0) {
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
370 DI_ERROR(ret, NULL, NULL);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
371 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
372 if (h->msg_flags & CMD_FLAG_REQUEST)
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
373 r = Py_True;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
374 else
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
375 r = Py_False;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
376 Py_XINCREF(r);
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
377 return r;
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
378 }
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
379
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
380 /* Get the source */
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 688
diff changeset
381 %cstring_output_allocate_size(char ** outid, size_t * outlen, /* do not free */);
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 688
diff changeset
382 void source(char ** outid, size_t * outlen) {
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 688
diff changeset
383 int ret = fd_msg_source_get($self, outid, outlen);
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
384 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
385 DI_ERROR(ret, NULL, NULL);
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 688
diff changeset
386 return;
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
387 }
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 688
diff changeset
388 return;
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
389 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
390
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
391 /* Get the session */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
392 %newobject get_session; /* it may be created or not, it is harmless because we only reclaim in ~session */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
393 struct session *get_session(struct dictionary * dict = NULL) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
394 struct session *s = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
395 struct dictionary * d = dict;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
396 int ret = 0;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
397 if (d == NULL)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
398 d = fd_g_config->cnf_dict; /* default: use daemon's */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
399 ret = fd_msg_sess_get(d, $self, &s, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
400 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
401 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
402 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
403 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
404 return s;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
405 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
406
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
407 /* Bufferize */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
408 %cstring_output_allocate_size(char ** outbuffer, size_t * outlen, free(*$1));
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
409 void bufferize ( char ** outbuffer, size_t * outlen ) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
410 int ret = fd_msg_bufferize ( $self, (void *)outbuffer, outlen );
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
411 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
412 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
413 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
414 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
415
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
416 /* Dictionary parsing */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
417 %newobject parse_dict;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
418 struct fd_pei * parse_dict(struct dictionary * dict=NULL) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
419 int ret;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
420 struct fd_pei pei, *e = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
421 struct dictionary * d = dict;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
422 memset(&pei, 0, sizeof(struct fd_pei));
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
423 if (d == NULL)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
424 d = fd_g_config->cnf_dict; /* default: use daemon's */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
425
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
426 ret = fd_msg_parse_dict ( $self, d, &pei );
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
427 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
428 e = malloc(sizeof(struct fd_pei));
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
429 if (!e) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
430 DI_ERROR_MALLOC;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
431 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
432 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
433 memcpy(e, &pei, sizeof(struct fd_pei));
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
434 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
435 return e; /* returns NULL when everything went OK */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
436 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
437
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
438 /* Rules parsing */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
439 %newobject parse_rules;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
440 struct fd_pei * parse_rules(struct dictionary * dict=NULL) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
441 int ret;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
442 struct fd_pei pei, *e = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
443 struct dictionary * d = dict;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
444 memset(&pei, 0, sizeof(struct fd_pei));
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
445 if (d == NULL)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
446 d = fd_g_config->cnf_dict; /* default: use daemon's */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
447
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
448 ret = fd_msg_parse_rules ( $self, d, &pei );
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
449 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
450 e = malloc(sizeof(struct fd_pei));
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
451 if (!e) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
452 DI_ERROR_MALLOC;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
453 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
454 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
455 memcpy(e, &pei, sizeof(struct fd_pei));
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
456 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
457 return e; /* returns NULL when everything went OK */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
458 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
459
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
460 /* Update the length info in header */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
461 void update_length() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
462 int ret = fd_msg_update_length ( $self );
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
463 if (ret) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
464 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
465 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
466 }
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
467
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
468 /* Set the result code */
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
469 void rescode_set(char * rescode = "DIAMETER_SUCCESS", char * errormsg = NULL, struct avp * optavp = NULL, int type_id = 0) {
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
470 int ret = fd_msg_rescode_set( $self, rescode, errormsg, optavp, type_id );
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
471 if (ret) {
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
472 DI_ERROR(ret, NULL, NULL);
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
473 }
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
474 }
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
475
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
476 /* Add the origin */
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
477 void add_origin(int osi = 0) {
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
478 int ret = fd_msg_add_origin( $self, osi );
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
479 if (ret) {
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
480 DI_ERROR(ret, NULL, NULL);
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
481 }
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
482 }
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
483
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
484 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
485
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
486 struct avp {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
487 };
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
488
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
489 %extend avp {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
490 avp(struct dict_object * model = NULL, int flags = 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
491 struct avp * a = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
492 int ret = fd_msg_avp_new( model, flags, &a);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
493 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
494 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
495 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
496 return a;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
497 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
498 ~avp() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
499 int ret = fd_msg_free($self);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
500 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
501 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
502 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
503 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
504
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
505 /* Return the first child AVP if any */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
506 struct avp * first_child() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
507 struct avp * a = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
508 int ret = fd_msg_browse($self, MSG_BRW_FIRST_CHILD, &a, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
509 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
510 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
511 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
512 return a;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
513 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
514
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
515 /* Enumerable list of children AVP */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
516 %newobject children;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
517 PyObject * children() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
518 struct avp * a = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
519 PyObject * rl;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
520 int ret = fd_msg_browse($self, MSG_BRW_FIRST_CHILD, &a, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
521 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
522 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
523 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
524 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
525 SWIG_PYTHON_THREAD_BEGIN_BLOCK;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
526 rl = PyList_New(0);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
527 while (a) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
528 PyList_Append(rl, SWIG_NewPointerObj((void *)a, SWIGTYPE_p_avp, 0 /* the AVPs are not owned */ ));
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
529 ret = fd_msg_browse(a, MSG_BRW_NEXT, &a, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
530 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
531 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
532 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
533 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
534 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
535 Py_XINCREF(rl);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
536 SWIG_PYTHON_THREAD_END_BLOCK;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
537 return rl;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
538 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
539
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
540 /* Add a new AVP */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
541 void add_next(struct avp *avp) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
542 int ret = fd_msg_avp_add ( $self, MSG_BRW_NEXT, avp);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
543 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
544 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
545 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
546 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
547 void add_prev(struct avp *avp) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
548 int ret = fd_msg_avp_add ( $self, MSG_BRW_PREV, avp);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
549 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
550 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
551 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
552 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
553 void add_child(struct avp *DISOWN, int begin = 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
554 int ret = fd_msg_avp_add ( $self, begin ? MSG_BRW_FIRST_CHILD : MSG_BRW_LAST_CHILD, DISOWN);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
555 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
556 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
557 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
558 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
559
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
560 /* Get the next AVP at the same level */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
561 struct avp * get_next() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
562 struct avp * a = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
563 int ret = fd_msg_browse($self, MSG_BRW_NEXT, &a, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
564 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
565 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
566 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
567 return a;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
568 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
569
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
570 /* Dump */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
571 void dump (int tree = 1) {
1088
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
572 char * buf = NULL;
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
573 size_t len;
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
574 printf("%s", fd_msg_dump_treeview(&buf, &len, NULL, $self, NULL, 0, tree));
1d1a20a0779d Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
575 free(buf);
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
576 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
577
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
578 /* Model */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
579 struct dict_object * model() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
580 struct dict_object * m = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
581 int ret = fd_msg_model($self, &m);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
582 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
583 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
584 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
585 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
586 return m;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
587 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
588
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
589 /* Header */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
590 struct avp_hdr * header() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
591 struct avp_hdr * h = NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
592 int ret = fd_msg_avp_hdr($self, &h);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
593 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
594 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
595 return NULL;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
596 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
597 return h;
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
598 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
599
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
600 /* set value */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
601 void setval(union avp_value * val) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
602 int ret = fd_msg_avp_setvalue ( $self, val );
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
603 if (ret != 0) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
604 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
605 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
606 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
607
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
608 /* Update the length info in header */
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
609 void update_length() {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
610 int ret = fd_msg_update_length ( $self );
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
611 if (ret) {
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
612 DI_ERROR(ret, NULL, NULL);
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
613 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
614 }
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
615 }
"Welcome to our mercurial repository"