annotate doc/dbg_interactive.py.sample @ 1562:6219359a36a9 default tip

Merge latest changes from proposed branch
author Sebastien Decugis <sdecugis@freediameter.net>
date Mon, 21 Jun 2021 19:08:18 +0800
parents e5010975da35
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
1 # Example file for the dbg_interactive.fdx extension.
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
2 #
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
3 # This extension provides an interactive python interpreter console that allows
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
4 # interacting with freeDiameter framework.
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
5 #
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
6 # The adaptation layer between Python and C is provided by SWIG (http://swig.org).
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
7 # You may refer to SWIG documentation for more information on how the wrapper is generated and used.
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
8 # The name of the module wrapping freeDiameter framework is: _fDpy
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
9 #
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
10 # Similar to all freeDiameter extensions, an optional filename can be specified in the
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
11 # main freeDiameter.conf configuration file for the dbg_interactive.fdx extension.
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
12 # If such file is provided, it will be passed to the python interpreter as a python script
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
13 # to execute. Otherwise, the interpreter will be interactive.
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
14 #
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
15 # SWIG deals with structures as follow:
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
16 # Given the structure:
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
17 # struct foo { int a; }
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
18 # The following functions are available to python (their C equivalent processing is given in [ ]):
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
19 # s = new_foo() [ s = calloc(1, sizeof(struct foo)) ]
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
20 # foo_a_set(s, 2) [ s->a = 2 ]
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
21 # foo_a_get(s) [ returns s->a value ]
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
22 # delete_foo(s) [ free(s) ]
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
23 #
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
24 # In addition, thanks to the proxy (aka shadow) class, we can also do the more user-friendly:
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
25 # s = foo()
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
26 # s.a = 2
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
27 # s.a
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
28 # del s
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
29 #
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
30
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
31 # The remaining of this file gives some examples of how to use the python interpreter.
1169
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
32 # Note that at the moment not 100% of the framework is usable.
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
33 # You may have to extend some classes or write some typemaps in the source code
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
34 # of the extension to do what you want.
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
35
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
36
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
37 ############# Compilation-time constants (from freeDiameter-host.h) ############
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
38
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
39 # Display current version
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
40 print "%s %d.%d.%d" % (FD_PROJECT_NAME, FD_PROJECT_VERSION_MAJOR, FD_PROJECT_VERSION_MINOR, FD_PROJECT_VERSION_REV)
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
41
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
42
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
43 ############# Debug ############
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
44
623
fc4f5815f0aa Continued work on dbg_interactive.fdx
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 622
diff changeset
45 # Change the global debug level of the framework (cvar contains all global variables)
1169
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
46 cvar.fd_g_debug_lvl = 1
623
fc4f5815f0aa Continued work on dbg_interactive.fdx
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 622
diff changeset
47
fc4f5815f0aa Continued work on dbg_interactive.fdx
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 622
diff changeset
48
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
49 # Turn on debug for a specific function (if framework compiled with DEBUG support)
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
50 cvar.fd_debug_one_function = "gc_th_fct"
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
51
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
52
623
fc4f5815f0aa Continued work on dbg_interactive.fdx
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 622
diff changeset
53 # Print messages to freeDiameter's debug facility
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
54 # Note: the python version does not support printf-like argument list. The formating should be done in python.
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
55 # See SWIG documentation about varargs functions for more information.
1169
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
56 fd_log(FD_LOG_NOTICE, "3 + 4 = %d" % (7))
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
57
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
58
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
59 # Display some framework state information
1169
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
60 conf = fd_conf_dump();
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
61 print conf;
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
62
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
63 fd_peer_dump_list(0)
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
64 fd_servers_dump(0)
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
65 fd_ext_dump(0)
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
66
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
67
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
68 ############# Global variables ############
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
69
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
70 # Display the local Diameter Identity:
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
71 print "Local Diameter Identity:", cvar.fd_g_config.cnf_diamid
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
72
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
73 # Display realm, using the low-level functions (skip proxy classe definitions):
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
74 print "Realm:", _fDpy.fd_config_cnf_diamrlm_get(_fDpy.cvar.fd_g_config)
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
75
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
76
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
77
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
78 ############# Lists ############
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
79
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
80 # Note: we use different names from the C API here, for usability.
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
81 l1 = fd_list() # Will be our sentinel
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
82 l2 = fd_list()
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
83 l3 = fd_list()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
84 l1.isempty()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
85 l1.insert_next(l2) # l1 -> l2
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
86 l1.isempty()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
87 l1.insert_prev(l3) # l1 -> l2 -> l3 (circular list)
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
88 l1.dump()
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
89 l3.detach() # l1 -> l2
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
90 l4=fd_list()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
91 l5=fd_list()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
92 l3.insert_next(l4) # l3 -> l4
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
93 l3.insert_next(l5) # l3 -> l5 -> l4
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
94 l1.concat(l3) # l1 -> l2 -> l5 -> l4
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
95
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
96 elements = l1.enum_as() # default: enumerates as fd_list. Warning: this a copy, changing the python list has no effect on the underlying fd_list.
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
97 for li in elements:
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
98 li.dump()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
99
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
100 del elements
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
101 del l2
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
102 del l3
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
103 del l4
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
104 del l5
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
105 l1.isempty() # The destructor has an implicit fd_list_unlink call
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
106 del l1
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
107
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
108
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
109 ############# Hash ############
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
110
706
4ffbc9f1e922 Large UNTESTED commit with the following changes:
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 688
diff changeset
111 hex(fd_os_hash("hello world")) # It accepts binary data
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
112
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
113
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
114 ############# Dictionary ############
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
115
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
116 ##### Create a dedicated dictionary for our tests
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
117 d = dictionary()
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
118 d.dump()
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
119
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
120 # New vendor
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
121 v = dict_vendor_data()
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
122 v.vendor_id = 123
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
123 v.vendor_name = "My test vendor"
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
124 my_vendor = d.new_obj(DICT_VENDOR, v)
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
125 del v
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
126 d.dump()
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
127 d.vendors_list()
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
128
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
129 # Compact invocation also possible:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
130 v2 = dict_vendor_data(124, "My test vendor 2")
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
131 del v2
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
132
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
133 # New application
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
134 a = dict_application_data()
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
135 a.application_id = 99
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
136 a.application_name = "My test appl"
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
137 my_appl = d.new_obj(DICT_APPLICATION, a, my_vendor)
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
138 del a
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
139
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
140 a2 = dict_application_data(99, "My test appl 2")
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
141 del a2
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
142
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
143 # New type (callbacks are not supported yet...)
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
144 t = dict_type_data()
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
145 t.type_base = AVP_TYPE_INTEGER32
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
146 t.type_name = "My integer AVP"
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
147 my_type_int = d.new_obj(DICT_TYPE, t, my_appl)
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
148 t.type_base = AVP_TYPE_OCTETSTRING
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
149 t.type_name = "My binary buffer AVP"
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
150 my_type_os = d.new_obj(DICT_TYPE, t, my_appl)
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
151 del t
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
152
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
153 t2 = dict_type_data(AVP_TYPE_UNSIGNED32, "u32 type")
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
154 del t2
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
155
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
156 # Constants
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
157 c = dict_enumval_data()
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
158 c.enum_name = "AVP_VALUE_TROIS"
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
159 c.enum_value.i32 = 3
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
160 d.new_obj(DICT_ENUMVAL, c, my_type_int)
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
161
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
162 c.enum_name = "A_BUFFER_CONSTANT"
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
163 c.enum_value.os = "This is a very long AVP value that we prefer to represent as a constant"
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
164 c.enum_value.os.dump()
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
165 d.new_obj(DICT_ENUMVAL, c, my_type_os)
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
166 del c
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
167
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
168 c2 = dict_enumval_data("enum 23", 23) # The constructor only accepts unsigned32, for other values, set them afterwards
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
169 c3 = dict_enumval_data("enum other")
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
170 c3.os = "other value"
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
171 del c2
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
172 del c3
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
173
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
174 # AVP
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
175 a = dict_avp_data()
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
176 a.avp_code = 234
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
177 a.avp_name = "my integer avp"
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
178 a.avp_flag_mask = AVP_FLAG_MANDATORY
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
179 a.avp_basetype = AVP_TYPE_INTEGER32
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
180 my_avp_int = d.new_obj(DICT_AVP, a, my_type_int)
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
181
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
182 a.avp_vendor = 123
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
183 a.avp_name = "my OS avp"
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
184 a.avp_flag_mask = AVP_FLAG_MANDATORY + AVP_FLAG_VENDOR
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
185 a.avp_flag_val = AVP_FLAG_VENDOR
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
186 a.avp_basetype = AVP_TYPE_OCTETSTRING
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
187 my_avp_os = d.new_obj(DICT_AVP, a, my_type_os)
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
188 del a
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
189
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
190 a2 = dict_avp_data(235, "no vendor, not mandatory", AVP_TYPE_OCTETSTRING)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
191 a3 = dict_avp_data(236, "vendor 12, not mandatory", AVP_TYPE_OCTETSTRING, 12)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
192 a4 = dict_avp_data(237, "vendor 12, mandatory", AVP_TYPE_OCTETSTRING, 12, 1)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
193 a5 = dict_avp_data(238, "no vendor, mandatory", AVP_TYPE_OCTETSTRING, 0, 1)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
194 del a2
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
195 del a3
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
196 del a4
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
197 del a5
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
198
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
199
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
200 # Command
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
201 c = dict_cmd_data()
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
202 c.cmd_code = 345
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
203 c.cmd_name = "My-Python-Request"
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
204 c.cmd_flag_mask = CMD_FLAG_REQUEST + CMD_FLAG_PROXIABLE
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
205 c.cmd_flag_val = CMD_FLAG_REQUEST + CMD_FLAG_PROXIABLE
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
206 my_req = d.new_obj(DICT_COMMAND, c, my_appl)
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
207 c.cmd_name = "My-Python-Answer"
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
208 c.cmd_flag_val = CMD_FLAG_PROXIABLE
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
209 my_ans = d.new_obj(DICT_COMMAND, c, my_appl)
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
210 del c
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
211
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
212 c2 = dict_cmd_data(346, "Second-Request", 1) # Default created with PROXIABLE flag.
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
213 c3 = dict_cmd_data(346, "Second-Answer", 0)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
214 del c2
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
215 del c3
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
216
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
217 # Rule
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
218 r = dict_rule_data()
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
219 r.rule_avp = my_avp_int
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
220 r.rule_position = RULE_REQUIRED
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
221 r.rule_min = -1
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
222 r.rule_max = -1
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
223 d.new_obj(DICT_RULE, r, my_req)
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
224 d.new_obj(DICT_RULE, r, my_ans)
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
225 r.rule_avp = my_avp_os
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
226 d.new_obj(DICT_RULE, r, my_req)
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
227 d.new_obj(DICT_RULE, r, my_ans)
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
228 del r
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
229
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
230 r2 = dict_rule_data(my_avp_int, RULE_REQUIRED) # min & max are optional parameters, default to -1
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
231 r3 = dict_rule_data(my_avp_int, RULE_REQUIRED, 2, 3) # min is 2, max is 3
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
232 r4 = dict_rule_data(my_avp_int, RULE_FIXED_HEAD) # The r4.rule_order = 1 by default, change afterwards if needed.
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
233 del r2
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
234 del r3
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
235 del r4
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
236
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
237 d.dump()
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
238 del d
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
239
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
240 ####### Now play with the "real" dictionary
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
241
627
330be61dbf43 Improvements to usability, still work ongoing
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 624
diff changeset
242 gdict = cvar.fd_g_config.cnf_dict
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
243
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
244 appl = gdict.search ( DICT_APPLICATION, APPLICATION_BY_ID, 3 )
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
245 appl.dump()
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
246 avp = gdict.search ( DICT_AVP, AVP_BY_NAME, "Origin-Host")
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
247 avp.dump()
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
248 errcmd = gdict.error_cmd()
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
249
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
250 v = avp.getval()
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
251 print v.avp_code
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
252 del v
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
253
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
254 t = avp.gettype()
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
255 print t
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
256 del t
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
257
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
258 dict = avp.getdict()
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
259 del dict
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
260
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
261
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
262 ############# Sessions ############
624
a5682d003ed9 Finally got the proxy aka shadow class to work
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 623
diff changeset
263
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
264 # handler
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
265 def my_cleanup(state,sid):
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
266 print "Cleaning up python state for session:", sid
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
267 print "Received state:", state
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
268 del state
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
269
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
270 hdl = session_handler(my_cleanup)
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
271 hdl.dump()
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
272 del hdl
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
273
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
274 # Session
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
275 hdl = session_handler(my_cleanup)
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
276 s1 = session()
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
277 s1.getsid()
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
278 s2 = session("this.is.a.full.session.id")
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
279 r,s3,isnew = fd_sess_fromsid("this.is.a.full.session.id") # use this call if "isnew" is really needed...
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
280 s4 = session("host.id", "optional.part")
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
281 s4.settimeout(30) # the python wrapper takes a number of seconds as parameter for simplicity
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
282 s4.dump()
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
283
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
284 # states
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
285 mystate = [ 34, "blah", [ 32, 12 ] ]
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
286 s1.store(hdl, mystate)
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
287 del mystate
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
288 gotstate = s1.retrieve(hdl)
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
289 print gotstate
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
290 del gotstate
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
291
624
a5682d003ed9 Finally got the proxy aka shadow class to work
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 623
diff changeset
292
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
293 ############# Routing ############
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
294
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
295 rd = rt_data()
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
296
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
297 rd.add("p1.testbed.aaa", "testbed.aaa")
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
298 rd.add("p2.testbed.aaa", "testbed.aaa")
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
299 rd.add("p3.testbed.aaa", "testbed.aaa")
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
300 rd.add("p4.testbed.aaa", "testbed.aaa")
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
301
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
302 rd.remove("p2.testbed.aaa")
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
303
636
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
304 rd.error("p3.testbed.aaa", "relay.testbed.aaa", 3002)
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
305
c23ca590fa57 Still making progress on the dbg_interactive interface.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 635
diff changeset
306 list = rd.extract(-1)
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
307 for c in list.enum_as("struct rtd_candidate *"):
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
308 print "%s (%s): %s" % (c.diamid, c.realm, c.score)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
309
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
310 del rd
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
311
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
312
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
313 # A rt_fwd callback has the following prototype:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
314 def my_rtfwd_cb(msg):
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
315 print "Forwarding the following message:"
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
316 msg.dump()
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
317 return [ 0, msg ] # return None instead of msg to stop forwarding.
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
318
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
319 fwdhdl = fd_rt_fwd_hdl( my_rtfwd_cb, RT_FWD_REQ )
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
320
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
321
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
322 # A rt_out cb has the following prototype:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
323 def my_rtout_cb(msg, list):
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
324 print "Sending out the following message:"
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
325 msg.dump()
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
326 print "The possible candidates are:"
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
327 for c in list.enum_as("struct rtd_candidate *"):
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
328 print "%s (%s): %s" % (c.diamid, c.realm, c.score)
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
329 return 0 # returns an error code (standard errno values)
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
330
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
331 outhdl = fd_rt_out_hdl( my_rtout_cb ) # a priority can be specified as 2nd parameter, default is 0.
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
332
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
333
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
334
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
335
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
336
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
337 ############# Messages, AVPs ############
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
338
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
339 ## AVP
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
340
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
341 # Create empty
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
342 blank_avp = avp()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
343 del blank_avp
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
344
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
345 # Create from dictionary definitions
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
346 oh = avp(cvar.fd_g_config.cnf_dict.search ( DICT_AVP, AVP_BY_NAME, "Origin-Host")) # Octet String
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
347 vi = avp(cvar.fd_g_config.cnf_dict.search ( DICT_AVP, AVP_BY_NAME, "Vendor-Id")) # U32
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
348 vsai = avp(cvar.fd_g_config.cnf_dict.search ( DICT_AVP, AVP_BY_NAME, "Vendor-Specific-Application-Id")) # Grouped
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
349
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
350 # Set values
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
351 val = avp_value()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
352 val.u32 = 123
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
353 vi.setval(None) # this cleans a previous value (usually not needed)
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
354 vi.setval(val)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
355 val.os = "my.origin.host"
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
356 oh.setval(val)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
357 vsai.add_child(vi) # call as add_child(vi, 1) to add the new AVP at the beginning, default is at the end
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
358
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
359 # It is possible to initialize the AVP with a blank value as follow:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
360 blank_with_value = avp(None, AVPFL_SET_BLANK_VALUE)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
361 # it enables this without doing the setval call:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
362 blank_with_value.header().avp_value.u32 = 12
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
363
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
364
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
365 ## Messages
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
366
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
367 # Create empt (as for avps, pass None or a dictionary object as 1st param, and flags as optional 2nd param)y
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
368 a_msg = msg()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
369 a_msg.dump()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
370 del a_msg
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
371
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
372 # It is also possible to pass MSGFL_* flags in second parameter (ALLOC_ETEID is default)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
373 msg_no_eid = msg(None, 0)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
374 msg_no_eid.dump()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
375 del msg_no_eid
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
376
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
377 # Create from dictionary
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
378 dwr_dict = cvar.fd_g_config.cnf_dict.search ( DICT_COMMAND, CMD_BY_NAME, "Device-Watchdog-Request" )
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
379 dwr = msg(dwr_dict)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
380 dwr.dump()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
381
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
382 # Create msg from a binary buffer (then you should call parse_dict and parse_rules methods)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
383 dwr2 = msg("\x01\x00\x00\x14\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x00\x00\x1b\xf0\x00\x01")
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
384
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
385 # Create answer from request (optional parameters: dictionary to use, and flags):
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
386 dwr3 = msg(cvar.fd_g_config.cnf_dict.search ( DICT_COMMAND, CMD_BY_NAME, "Device-Watchdog-Request" ))
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
387 dwa3 = dwr3.create_answer()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
388 dwr3cpy = dwa3.get_query()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
389
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
390
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
391 ## Other functions with AVPs & messages
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
392
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
393 # Add the AVPs in the message
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
394 dwr.add_child(oh)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
395 oh.add_next(vsai) # equivalent to add_child on the parent
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
396
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
397 # Create a network byte buffer from the message
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
398 dwr.bufferize()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
399
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
400 # Get first child AVP (fast)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
401 avp = dwr.first_child()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
402
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
403 # then:
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
404 avp = avp.get_next() # when last AVP, returns None
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
405
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
406
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
407 # Get all 1st level children (slower) -- warning, changes to the python list will not be reflected on the underlying message. read-only use.
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
408 dwr.children()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
409 # example use:
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
410 for a in dwr.children():
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
411 a.dump(0) # 0 means: dump only this object, do not walk the tree
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
412
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
413
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
414 # Search the first AVP of a given type
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
415 oh_dict = cvar.fd_g_config.cnf_dict.search( DICT_AVP, AVP_BY_NAME, "Origin-Host")
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
416 oh = dwr.search( oh_dict )
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
417
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
418 # After adding AVPs, the length in the message header is outdated, refresh as follow:
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
419 dwr.update_length()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
420
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
421 # Get dictionary model for a message or avp
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
422 dwr.model()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
423 oh.model().dump()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
424
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
425 # Retrieve the header of messages & avp:
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
426 dwr_hdr = dwr.header()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
427 dwr_hdr.msg_version
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
428 dwr_hdr.msg_hbhid
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
429
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
430 oh_hdr = oh.header()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
431 hex(oh_hdr.avp_flags)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
432 oh_hdr.avp_vendor
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
433 oh_hdr.avp_value.os.as_str()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
434
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
435
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
436 # Get or set the routing data
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
437 rd = rt_data()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
438 dwr.set_rtd(rd)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
439 rd = dwr.get_rtd()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
440
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
441 # Test if message is routable
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
442 dwr.is_routable()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
443
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
444 # Which peer the message was received from (when received from network)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
445 dwr.source()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
446
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
447 # The session corresponding to this message (returns None when no Session-Id AVP is included)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
448 dwr.get_session()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
449
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
450
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
451 # Parse a buffer
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
452 buf = "\x01\x00\x00@\x80\x00\x01\x18\x00\x00\x00\x00\x00\x00\x00\x00N\x10\x00\x00\x00\x00\x01\x08@\x00\x00\x16my.origin.host\x00\x00\x00\x00\x01\x04@\x00\x00\x14\x00\x00\x01\n@\x00\x00\x0c\x00\x00\x00{"
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
453 mydwr = msg(buf)
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
454 # Resolve objects in the dictionary. Return value is None or a struct pei_error in case of problem.
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
455 mydwr.parse_dict() # if not using the fD global dict, pass it as parameter
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
456 err = mydwr.parse_rules()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
457 err.pei_errcode
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
458
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
459
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
460 # Grouped AVPs are browsed with same methods as messages:
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
461 gavp = dwr.children()[1]
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
462 gavp.first_child().dump()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
463 gavp.children()
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
464
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
465
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
466 # Send a message:
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
467 mydwr = msg(buf)
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
468 mydwr.send()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
469
1228
e5010975da35 Fix typo in comment.
Thomas Klausner <tk@giga.or.at>
parents: 1176
diff changeset
470 # Optionally, a callback can be registered when a request is sent, with an optional object.
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
471 # This callback takes the answer message as parameter and should return None or a message. (cf. fd_msg_send)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
472 def send_callback(msg, obj):
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
473 print "Received answer:"
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
474 msg.dump()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
475 print "Associated data:"
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
476 obj
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
477 return None
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
478
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
479 mydwr = msg(buf)
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
480 mydwr.send(send_callback, some_object)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
481
1228
e5010975da35 Fix typo in comment.
Thomas Klausner <tk@giga.or.at>
parents: 1176
diff changeset
482 # Again optionally, a time limit can be specified in this case as follow:
649
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
483 mydwr.send(send_callback, some_object, 10)
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
484 # In that case, if no answer / error is received after 10 seconds (the value specified),
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
485 # the callback is called with the request as parameter.
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
486 # Testing for timeout case is done by using msg.is_request()
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
487 def send_callback(msg, obj):
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
488 if (msg.is_request()):
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
489 print "Request timed out without answer:"
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
490 else:
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
491 print "Received answer:"
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
492 msg.dump()
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
493 print "Associated data:"
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
494 obj
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
495 return None
5e5d8152c229 Implemented fd_msg_send_timeout to close #10. Not tested yet.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 641
diff changeset
496
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
497
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
498 # Set a result code in an answer message.
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
499 mydwr = msg(buf)
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
500 dwa = mydwr.create_answer()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
501 dwa.rescode_set() # This adds the DIAMETER_SUCCESS result code
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
502 dwa.rescode_set("DIAMETER_LIMITED_SUCCESS" ) # This adds a different result code
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
503 dwa.rescode_set("DIAMETER_LIMITED_SUCCESS", "Something went not so well" ) # This adds a different result code + specified Error-Message
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
504 dwa.rescode_set("DIAMETER_INVALID_AVP", None, faulty_avp ) # This adds a Failed-AVP
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
505 dwa.rescode_set("DIAMETER_SUCCESS", None, None, 1 ) # This adds origin information (see fd_msg_rescode_set's type_id for more info)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
506
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
507 # Set the origin to local host
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
508 mydwr.add_origin() # adds Origin-Host & Origin-Realm
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
509 mydwr.add_origin(1) # adds Origin-State-Id in addition.
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
510
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
511
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
512 ############# DISPATCH (aka. server application) ############
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
513
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
514 # As for sessions, only one dispatch handler can be registered in this extension at the moment.
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
515 # The callback for the handler has the following syntax:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
516 def dispatch_cb_model(inmsg, inavp, insession):
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
517 print "Callback trigged on message: "
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
518 inmsg.dump()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
519 # inavp is None or the AVP that trigged the callback, depending on how it was registered.
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
520 if inavp:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
521 print "From the following AVP:"
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
522 inavp.dump()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
523 else:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
524 print "No AVP"
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
525 # Session is provided only if a Session-Id is in the message
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
526 if insession:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
527 print "The session is: ", insession.getsid()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
528 else:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
529 print "No session"
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
530 # Now, for the return value.
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
531 # This callback must return 3 elements:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
532 # - an integer which is interpreted as an error code (errno.h)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
533 # - a message or None, depending on the next item
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
534 # - an enum disp_action value, with the same meaning as in C (see libfreeDiameter.h)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
535 del inmsg
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
536 return [ 0, None, DISP_ACT_CONT ]
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
537
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
538
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
539 ### Example use: rebuild the server-side of test_app.fdx in python
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
540
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
541 # The following block defines the dictionary objects from the test_app.fdx application that we use on the remote peer
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
542 gdict = cvar.fd_g_config.cnf_dict
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
543 d_si = gdict.search ( DICT_AVP, AVP_BY_NAME, "Session-Id" )
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
544 d_oh = gdict.search ( DICT_AVP, AVP_BY_NAME, "Origin-Host" )
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
545 d_or = gdict.search ( DICT_AVP, AVP_BY_NAME, "Origin-Realm" )
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
546 d_dh = gdict.search ( DICT_AVP, AVP_BY_NAME, "Destination-Host" )
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
547 d_dr = gdict.search ( DICT_AVP, AVP_BY_NAME, "Destination-Realm" )
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
548 d_rc = gdict.search ( DICT_AVP, AVP_BY_NAME, "Result-Code" )
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
549 d_vnd = gdict.new_obj(DICT_VENDOR, dict_vendor_data(999999, "app_test_py vendor") )
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
550 d_app = gdict.new_obj(DICT_APPLICATION, dict_application_data(0xffffff, "app_test_py appli"), d_vnd)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
551 d_req = gdict.new_obj(DICT_COMMAND, dict_cmd_data(0xfffffe, "Test_py-Request", 1), d_app)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
552 d_ans = gdict.new_obj(DICT_COMMAND, dict_cmd_data(0xfffffe, "Test_py-Answer", 0), d_app)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
553 d_avp = gdict.new_obj(DICT_AVP, dict_avp_data(0xffffff, "app_test_py avp", AVP_TYPE_INTEGER32, 999999 ))
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
554 gdict.new_obj(DICT_RULE, dict_rule_data(d_si, RULE_FIXED_HEAD, 1, 1), d_req)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
555 gdict.new_obj(DICT_RULE, dict_rule_data(d_si, RULE_FIXED_HEAD, 1, 1), d_ans)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
556 gdict.new_obj(DICT_RULE, dict_rule_data(d_avp, RULE_REQUIRED, 1, 1), d_req)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
557 gdict.new_obj(DICT_RULE, dict_rule_data(d_avp, RULE_REQUIRED, 1, 1), d_ans)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
558 gdict.new_obj(DICT_RULE, dict_rule_data(d_oh, RULE_REQUIRED, 1, 1), d_req)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
559 gdict.new_obj(DICT_RULE, dict_rule_data(d_oh, RULE_REQUIRED, 1, 1), d_ans)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
560 gdict.new_obj(DICT_RULE, dict_rule_data(d_or, RULE_REQUIRED, 1, 1), d_req)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
561 gdict.new_obj(DICT_RULE, dict_rule_data(d_or, RULE_REQUIRED, 1, 1), d_ans)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
562 gdict.new_obj(DICT_RULE, dict_rule_data(d_dr, RULE_REQUIRED, 1, 1), d_req)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
563 gdict.new_obj(DICT_RULE, dict_rule_data(d_dh, RULE_OPTIONAL, 0, 1), d_req)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
564 gdict.new_obj(DICT_RULE, dict_rule_data(d_rc, RULE_REQUIRED, 1, 1), d_ans)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
565
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
566 # Now, create the Test_app server callback:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
567 def test_app_cb(inmsg, inavp, insession):
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
568 tval = inmsg.search(d_avp).header().avp_value.u32
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
569 print "Py ECHO Test message from '%s' with test value %x, replying..." % (inmsg.search(d_oh).header().avp_value.os.as_str(), tval)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
570 answ = inmsg.create_answer()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
571 answ.rescode_set()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
572 answ.add_origin()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
573 ta = avp(d_avp, AVPFL_SET_BLANK_VALUE)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
574 ta.header().avp_value.u32 = tval
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
575 answ.add_child(ta)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
576 return [ 0, answ, DISP_ACT_SEND ]
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
577
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
578 # Register the callback for dispatch thread:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
579 hdl = disp_hdl(test_app_cb, DISP_HOW_CC, disp_when(d_app, d_req)) # disp_when() takes 0 to 4 arguments as follow: (app=NULL, cmd=NULL, avp=NULL, val=NULL)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
580
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
581 # Don't forget to register the application in the daemon for CER/CEA capabilities.
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
582 fd_disp_app_support ( d_app, d_vnd, 1, 0 )
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
583
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
584
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
585 ### For the fun, the client part of the test_app:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
586
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
587 def receive_answer(ans, testval):
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
588 try:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
589 tval = ans.search(d_avp).header().avp_value.u32
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
590 except:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
591 print "Error in receive_answer: no Test-AVP included"
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
592 tval = 0
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
593 try:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
594 print "Py RECV %x (expected: %x) Status: %d From: '%s'" % (tval, testval, ans.search(d_rc).header().avp_value.u32, ans.search(d_oh).header().avp_value.os.as_str())
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
595 except:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
596 print "Error in receive_answer: Result-Code or Origin-Host are missing"
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
597 del ans
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
598 return None
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
599
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
600 import random
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
601
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
602 def send_query(destrealm="localdomain"):
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
603 qry = msg(d_req)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
604 sess = session()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
605 tv = random.randint(1, 1<<32)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
606 # Session-Id
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
607 a = avp(d_si, AVPFL_SET_BLANK_VALUE)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
608 a.header().avp_value.os = sess.getsid()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
609 qry.add_child(a)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
610 # Destination-Realm
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
611 a = avp(d_dr, AVPFL_SET_BLANK_VALUE)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
612 a.header().avp_value.os = destrealm
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
613 qry.add_child(a)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
614 # Origin-Host, Origin-Realm
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
615 qry.add_origin()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
616 # Test-AVP
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
617 a = avp(d_avp, AVPFL_SET_BLANK_VALUE)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
618 a.header().avp_value.u32 = tv
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
619 qry.add_child(a)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
620 print "Py SEND %x to '%s'" % (tv, destrealm)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
621 qry.send(receive_answer, tv)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
622
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
623 send_query()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
624
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
625
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
626 ############# FIFO queues ############
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
627
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
628 myqueue = fifo()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
629
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
630 # enqueue any object
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
631 myqueue.post(3)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
632 myqueue.post("blah")
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
633 myqueue.post( [ 3, 2 ] )
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
634
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
635 # Simple get (blocks when the queue is empty)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
636 myqueue.get()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
637
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
638 # Try get: returns the next object, or None if the queue is empty
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
639 myqueue.tryget()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
640
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
641 # timed get: like get, but returns None after x seconds
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
642 myqueue.timedget(3)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
643
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
644 # Show the number of items in the queue
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
645 myqueue.length()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
646
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
647
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
648 ## Variants:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
649 # All the previous calls are suitable to queue Python objects.
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
650 # In order to interact with objects queued / poped by C counterpart,
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
651 # a second parameter must be passed to specify the object type,
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
652 # as follow:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
653 ev = fd_event()
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
654 ev.code = FDEV_DUMP_EXT
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
655 cvar.fd_g_config.cnf_main_ev.post(ev, "struct fd_event *")
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
656
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
657 # Similarly, for *get, we can specify the structure that was queued:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
658 myqueue.get("struct fd_event *")
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
659 myqueue.tryget("struct fd_event *")
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
660 myqueue.timedget(3, "struct fd_event *")
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
661
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
662 del myqueue
637
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
663
22e8fac3b2d6 Split interface file in modules
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 636
diff changeset
664
1169
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
665 ############# HOOKS ############
11724ff78638 Some cleanups in dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1078
diff changeset
666
1176
f0b328ea2fdb Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
667 def my_hook_cb(type, msg, peer, other, oldpmd):
f0b328ea2fdb Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
668 print "callback type ", type, " called: ", msg, other, oldpmd
f0b328ea2fdb Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
669 return "this is the new pmd"
f0b328ea2fdb Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
670
f0b328ea2fdb Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
671 # Create a wrapped fd_hook_data_hdl:
f0b328ea2fdb Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
672 datahdl = fd_hook_data_hdl()
f0b328ea2fdb Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
673
f0b328ea2fdb Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
674 # Register the hook callback:
f0b328ea2fdb Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
675 hdl = fd_hook_hdl(1 << HOOK_MESSAGE_SENT, my_hook_cb, datahdl)
f0b328ea2fdb Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
676
f0b328ea2fdb Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
677
f0b328ea2fdb Added initial support for hooks in the dbg_interactive extension
Sebastien Decugis <sdecugis@freediameter.net>
parents: 1169
diff changeset
678
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
679
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
680 ############# PEERS ############
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
681
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
682 # Get the list of peers defined in the system
641
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
683 # (we are supposed to readlock fd_g_peers_rw before accessing this list)
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
684 cvar.fd_g_peers_rw.rdlock()
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
685 peers = cvar.fd_g_peers.enum_as("struct peer_hdr *")
641
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
686 cvar.fd_g_peers_rw.unlock()
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
687 for p in peers:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
688 print "Peer:", p.info.pi_diamid
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
689
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
690
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
691 # Create a new peer
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
692 np = peer_info()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
693 np.pi_diamid = "nas.localdomain"
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
694 np.config.pic_flags.pro4 = PI_P4_TCP
635
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
695
134e4fb9eef5 Continued work on python interface
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 627
diff changeset
696
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
697 # Add this peer into the framework.
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
698 np.add()
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
699
639
95a784729cac Added new opaque pointer to fd_sess_handler_create and fd_disp_register for usability. Bumped API version number.
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 638
diff changeset
700 # It is possible to specify a callback for when the connection completes or fails with this peer.
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
701 # The prototype is as follow:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
702 def add_cb(peer):
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
703 if peer:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
704 if peer.runtime.pir_state == STATE_OPEN:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
705 print "Connection to peer '%s' completed" % (peer.pi_diamid)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
706 # can find more information in peer.runtime.*
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
707 else:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
708 print "Connection to peer '%s' failed (state:%d)" % (peer.pi_diamid, peer.runtime.pir_state)
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
709 else:
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
710 print "The peer has been destroyed before it completed the connection."
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
711
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
712 # Then add the peer like this:
638
9448cba86673 Improved usability of dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 637
diff changeset
713 np.add(add_cb)
622
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
714
cfbf7ed5dccd Added some limited example for dbg_interactive
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff changeset
715
640
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
716 # Search a peer by its diameter id (returns a peer_hdr object if found) -- similar to fd_peer_getbyid
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
717 p = peer_search("nas.domain.aaa")
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
718
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
719
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
720 ## Validation callback (see fd_peer_validate_register documentation)
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
721
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
722 # cb2 prototype:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
723 def my_validate_cb2(pinfo):
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
724 print "Cb2 callback trigged for peer %s" % (pinfo.pi_diamid)
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
725 # Usually, this would be used only to check some TLS properties,
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
726 # which is not really possible yet through the python interpreter...
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
727 return 0 # return an error code if the peer is not validated
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
728
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
729 # cb prototype:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
730 def my_validate_cb(pinfo):
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
731 print "Validate callback trigged for peer %s" % (pinfo.pi_diamid)
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
732 # If the peer is not allowed to connect:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
733 #return -1
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
734 # If the peer is authorized:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
735 #return 1
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
736 # In addition, if IPsec is allowed,
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
737 #pinfo.config.pic_flags.sec = PI_SEC_NONE
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
738 # If no decision has been made:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
739 #return 0
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
740 # If the peer is temporarily authorized but a second callback must be called after TLS negociation:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
741 return my_validate_cb2
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
742
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
743 # Register the callback, it will be called on new incoming connections.
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
744 peer_validate_register(my_validate_cb)
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
745
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
746
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
747
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
748 ############# ENDPOINTS ############
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
749
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
750 ep = fd_endpoint("129.168.168.192")
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
751
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
752 # with port:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
753 ep = fd_endpoint("129.168.168.192", 3868)
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
754
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
755 # With different flags:
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
756 ep = fd_endpoint("129.168.168.192", 3868, EP_FL_PRIMARY)
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
757
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
758 # Add IP information for the peer
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
759 np = peer_info()
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
760 ep.add_merge(np.pi_endpoints)
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
761 fd_ep_dump(0, np.pi_endpoints)
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
762
237cf6339546 dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 639
diff changeset
763
641
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
764
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
765 ############# POSIX functions wrappers ############
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
766
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
767 # The interface also provides wrappers around base POSIX
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
768 # synchronization functions:
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
769
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
770 m = pthread_mutex_t()
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
771 m.lock()
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
772 m.unlock()
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
773
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
774 c = pthread_cond_t()
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
775 c.signal()
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
776 c.broadcast()
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
777 c.wait(m)
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
778 c.timedwait(m, 5) # it takes a relative time
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
779
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
780 r = pthread_rwlock_t()
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
781 r.rdlock()
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
782 r.unlock()
69d3579f6c6c First version of dbg_interactive is complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents: 640
diff changeset
783 r.wrlock()
"Welcome to our mercurial repository"