Mercurial > hg > freeDiameter
annotate extensions/dbg_interactive/endpoints.i @ 1127:1af09cc156d6
Updated copyright information
author | Sebastien Decugis <sdecugis@freediameter.net> |
---|---|
date | Wed, 15 May 2013 10:39:25 +0800 |
parents | eb4ce68b6e5c |
children |
rev | line source |
---|---|
640
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
1 /********************************************************************************************************* |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
2 * Software License Agreement (BSD License) * |
740
4a9f08d6b6ba
Updated my mail address
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
640
diff
changeset
|
3 * Author: Sebastien Decugis <sdecugis@freediameter.net> * |
640
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
4 * * |
1127
1af09cc156d6
Updated copyright information
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1113
diff
changeset
|
5 * Copyright (c) 2013, WIDE Project and NICT * |
640
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
6 * All rights reserved. * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
7 * * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
8 * Redistribution and use of this software in source and binary forms, with or without modification, are * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
9 * permitted provided that the following conditions are met: * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
10 * * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
11 * * Redistributions of source code must retain the above * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
12 * copyright notice, this list of conditions and the * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
13 * following disclaimer. * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
14 * * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
15 * * Redistributions in binary form must reproduce the above * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
16 * copyright notice, this list of conditions and the * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
17 * following disclaimer in the documentation and/or other * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
18 * materials provided with the distribution. * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
19 * * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
20 * * Neither the name of the WIDE Project or NICT nor the * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
21 * names of its contributors may be used to endorse or * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
22 * promote products derived from this software without * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
23 * specific prior written permission of WIDE Project and * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
24 * NICT. * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
25 * * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
26 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
27 * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
28 * PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
29 * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
30 * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
31 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
32 * TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
33 * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. * |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
34 *********************************************************************************************************/ |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
35 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
36 /* Do not include this directly, use dbg_interactive.i instead */ |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
37 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
38 /****** ENDPOINTS *********/ |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
39 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
40 %{ |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
41 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
42 #include <sys/socket.h> |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
43 #include <netdb.h> |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
44 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
45 %} |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
46 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
47 %extend fd_endpoint { |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
48 fd_endpoint() { |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
49 struct fd_endpoint *np = (struct fd_endpoint *)calloc(1, sizeof(struct fd_endpoint)); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
50 if (!np) { |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
51 DI_ERROR_MALLOC; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
52 return NULL; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
53 } |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
54 fd_list_init(&np->chain, np); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
55 return np; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
56 } |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
57 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
58 fd_endpoint(const char * endpoint, uint16_t port = 0, uint32_t flags = EP_FL_CONF) { |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
59 struct addrinfo hints; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
60 struct addrinfo *ai = NULL; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
61 int ret; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
62 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
63 memset(&hints, 0, sizeof(hints)); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
64 hints.ai_family= AF_UNSPEC; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
65 hints.ai_flags = AI_NUMERICHOST; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
66 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
67 ret = getaddrinfo(endpoint, NULL, &hints, &ai); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
68 if (ret) { |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
69 DI_ERROR(ret, PyExc_ValueError, gai_strerror(ret)); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
70 return NULL; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
71 } |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
72 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
73 if (port) { |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
74 switch (ai->ai_family) { |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
75 case AF_INET: |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
76 ((sSA4 *)ai->ai_addr)->sin_port = htons(port); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
77 break; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
78 case AF_INET6: |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
79 ((sSA6 *)ai->ai_addr)->sin6_port = htons(port); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
80 break; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
81 default: |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
82 DI_ERROR(EINVAL, PyExc_RuntimeError, "Unknown family returned by getaddrinfo"); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
83 return NULL; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
84 } |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
85 } |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
86 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
87 struct fd_endpoint *np = (struct fd_endpoint *)calloc(1, sizeof(struct fd_endpoint)); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
88 if (!np) { |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
89 DI_ERROR_MALLOC; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
90 return NULL; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
91 } |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
92 fd_list_init(&np->chain, np); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
93 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
94 memcpy(&np->s.sa, ai->ai_addr, ai->ai_addrlen); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
95 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
96 freeaddrinfo(ai); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
97 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
98 np->flags = flags; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
99 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
100 return np; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
101 } |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
102 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
103 ~fd_endpoint() { |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
104 fd_list_unlink(&$self->chain); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
105 free($self); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
106 } |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
107 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
108 /* Merge to a list */ |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
109 %delobject add_merge; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
110 void add_merge(struct fd_list * eplist) { |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
111 int ret; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
112 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
113 if (!eplist) { |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
114 DI_ERROR(EINVAL, NULL, NULL); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
115 return; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
116 } |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
117 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
118 ret = fd_ep_add_merge( eplist, &$self->s.sa, sSAlen(&$self->s.sa), $self->flags ); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
119 if (ret) { |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
120 DI_ERROR(ret, NULL, NULL); |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
121 return; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
122 } |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
123 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
124 return; |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
125 } |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
126 |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
127 void dump() { |
1088
1d1a20a0779d
Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents:
978
diff
changeset
|
128 char * buf = NULL; |
1d1a20a0779d
Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents:
978
diff
changeset
|
129 size_t len; |
1113
eb4ce68b6e5c
Added calls to remaining hooks
Sebastien Decugis <sdecugis@freediameter.net>
parents:
1088
diff
changeset
|
130 printf("%s", fd_ep_dump_one(&buf, &len, NULL, 1, $self)); |
1088
1d1a20a0779d
Second part of changeset 1083, now the code compiles again. Still missing some functions implementation, though
Sebastien Decugis <sdecugis@freediameter.net>
parents:
978
diff
changeset
|
131 free(buf); |
640
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
132 } |
237cf6339546
dbg_interactive almost complete
Sebastien Decugis <sdecugis@nict.go.jp>
parents:
diff
changeset
|
133 } |