Commit 3eb6214f6176b5344897908a713fbf65728e2900

Authored by totoro
1 parent 222939cb

add management of error when the server to connect to can't be resolved by DNS

add mb_get_ip which return failure if can't resolve address instead of get_ip which return 127.0.0.1 in error case
net_services/CXM_generic_client.anubis
1 -/*  
2 - * Created by PyramIDE.  
3 - * User: ricard  
4 - * Date: 02/02/2008  
5 - * Time: 11:47  
6 - *  
7 - * To change this template use Tools | Options | Coding | Edit Standard Headers.  
8 - */  
9 -  
10 -  
11 -read tools/basis.anubis  
12 -read system/muscle.anubis  
13 -read system/data_io.anubis  
14 -read system/convert.anubis  
15 -read system/string.anubis  
16 -read system/message_queue.anubis  
17 -read system/message_transceiver.anubis  
18 -read tools/connections.anubis  
19 -  
20 -read calexium_lib/CXM_message_constants.anubis  
21 -read calexium_lib/net_services/CXM_net_services.anubis  
22 -read calexium_lib/net_services/CXM_generic_protocol.anubis  
23 -  
24 -// --Generic types---------------------------------------------------------------------  
25 -public type NetServiceAnswer:  
26 - netservice_error (Word32 cmd,  
27 - Word32 result_code,  
28 - String result_string),  
29 - netservice_ok (Word32 cmd,  
30 - Maybe(Message) result_msg).  
31 -  
32 -// --Generic functions---------------------------------------------------------------------  
33 -  
34 -  
35 -/**  
36 - * Sends the message to the server then parses the answer and returns the RESULT message on CMD success.  
37 - */  
38 -public define Maybe(NetServiceAnswer)  
39 - generic_send_message  
40 - (  
41 - MessageQueue queue,  
42 - Message msg_to_send,  
43 - Int timeout,  
44 - (String) -> One logger  
45 - )=  
46 - queue.add_Message_to_send(msg_to_send);  
47 - if queue.get_next_received_Message(timeout) is  
48 - {  
49 - timeout then logger("["+queue.get_name(unique)+"]: receive timeout");failure,  
50 - closed then logger("["+queue.get_name(unique)+"]: socket closed");failure,  
51 - msg(msg) then  
52 - if find_int32(msg, "CMD") is  
53 - {  
54 - failure then logger("["+queue.get_name(unique)+"]: CMD field not found"); failure,  
55 - success(cmd) then  
56 - if find_int32(msg, "STATUS") is  
57 - {  
58 - failure then logger("["+queue.get_name(unique)+"]: STATUS field not found"); failure,  
59 - success(v) then  
60 - if v = _CXM_OK then  
61 - success(netservice_ok(cmd, find_message(msg, "RESULT")))  
62 - else  
63 - with error_string = if find_string(msg, "STATUS_MSG") is success(s) then s else "",  
64 - success(netservice_error(cmd, v, error_string))  
65 - }  
66 - }  
67 - }.  
68 -  
69 -public define Maybe($T)  
70 - simple_handler  
71 - (  
72 - MessageQueue queue,  
73 - String timestamp,  
74 - Int timeout,  
75 - Message msg_to_send,  
76 - (Message, MessageQueue, String) -> Maybe($T) handler,  
77 - (String) -> One logger  
78 - ) =  
79 - if generic_send_message(queue, msg_to_send, timeout, logger) is  
80 - {  
81 - failure then failure,  
82 - success(net_result) then  
83 - if net_result is  
84 - {  
85 - netservice_error(cmd, err_code, err_str) then  
86 - logger("["+queue.get_name(unique)+"]: message status ERROR [0x" + to_hexa(err_code) + ", '" + err_str + "']");  
87 - failure,  
88 - netservice_ok(cmd, mb_msg) then  
89 - if mb_msg is  
90 - {  
91 - failure then logger("["+queue.get_name(unique)+"]: can't find RESULT message."); failure,  
92 - success(result) then handler(result, queue, timestamp)  
93 - }  
94 - }  
95 - }.  
96 -  
97 -public define Maybe(One)  
98 - no_result_handler  
99 - (  
100 - MessageQueue queue,  
101 - Int timeout,  
102 - Message msg_to_send,  
103 - (String) -> One logger  
104 - ) =  
105 - if generic_send_message(queue, msg_to_send, timeout, logger) is  
106 - {  
107 - failure then failure,  
108 - success(net_result) then  
109 - if net_result is  
110 - {  
111 - netservice_error(cmd, err_code, err_str) then  
112 - logger("["+queue.get_name(unique)+"]: message status ERROR [0x" + to_hexa(err_code) + ", '" + err_str + "']");  
113 - failure,  
114 - netservice_ok(cmd, mb_msg) then  
115 - if mb_msg is  
116 - {  
117 - failure then unique,  
118 - success(result) then logger("An unattended RESULT msg was found. Ignoring it...")  
119 - };  
120 - success(unique)  
121 - }  
122 - }.  
123 -  
124 -public define (MessageQueue, String) -> Maybe($T)  
125 - make_generic_handler  
126 - (  
127 - Int timeout,  
128 - Message msg_to_send,  
129 - (Message, MessageQueue, String) -> Maybe($T) handler,  
130 - (String) -> One logger  
131 - ) =  
132 - (MessageQueue queue, String timestamp) |->  
133 - simple_handler(queue, timestamp, timeout, msg_to_send, handler, logger).  
134 -  
135 -define Maybe($T)  
136 - generic_request_for_service  
137 - (  
138 - MessageQueue queue,  
139 - Word32 service_id,  
140 - Word32 service_version,  
141 - String domain,  
142 - (MessageQueue, String) -> Maybe($T) handler,  
143 - (String) -> One logger  
144 - )=  
145 - with test_msg = message(_CXM_REQUEST_FOR_SERVICE),  
146 - forget(add_int32(test_msg, "SERVICE", service_id));  
147 - forget(add_int32(test_msg, "VERSION", service_version));  
148 - forget(add_string(test_msg, "DOMAIN", domain));  
149 - queue.add_Message_to_send(test_msg);  
150 - if queue.get_next_received_Message(10) is  
151 - {  
152 - timeout then logger("["+queue.get_name(unique)+"]: requesting service receive timeout");failure,  
153 - closed then logger("["+queue.get_name(unique)+"]: requesting service socket closed");failure,  
154 - msg(msg) then  
155 - if find_int32(msg, "STATUS") is  
156 - {  
157 - failure then logger("["+queue.get_name(unique)+"]: requesting service STATUS not found");failure,  
158 - success(v) then  
159 - if v = _CXM_OK then  
160 - if find_message(msg, "RESULT") is  
161 - {  
162 - failure then logger("["+queue.get_name(unique)+"]: requesting service RESULT not found");failure,  
163 - success(result) then  
164 - with timestamp = if find_string(result, "TIMESTAMP") is  
165 - {  
166 - failure then logger("["+queue.get_name(unique)+"]: requesting service TIMESTAMP not found"); "",  
167 - success(timestamp) then timestamp  
168 - },  
169 - handler(queue, timestamp)  
170 - }  
171 - else  
172 - logger("["+queue.get_name(unique)+"]: the requested service is not available on server.");failure  
173 - }  
174 - }.  
175 -  
176 -public define Maybe($T)  
177 - generic_connect_to_net_service  
178 - (  
179 - String queue_name,  
180 - Word32 server,  
181 - Word32 port,  
182 - Word32 service_id,  
183 - Word32 service_version,  
184 - String domain,  
185 - (MessageQueue, String) -> Maybe($T) handler,  
186 - (String) -> One logger  
187 - )  
188 - =  
189 - if connect( server, port) is  
190 - {  
191 - error(_) then logger(queue_name + ": Can't connect to service ["+ip_addr_to_string(server)+":"+port+"]");failure,  
192 - ok(conn) then  
193 -// println("[" + virtual_machine_id + "] netservices create queue");  
194 - with queue = create_MessageQueue(queue_name),  
195 - message_transceiver(tcp(conn), queue);  
196 -// println("[" + virtual_machine_id + "] netservices generic_request_for_service()");  
197 - with result = generic_request_for_service(queue, service_id, service_version, domain, handler, logger),  
198 -// println("[" + virtual_machine_id + "] netservices client quit");  
199 - queue.quit(unique);  
200 - result  
201 - }.  
202 -  
203 - //legacy version which not handle the domain  
204 -  
205 -public define Maybe($T)  
206 - generic_connect_to_net_service  
207 - (  
208 - String queue_name,  
209 - Word32 server,  
210 - Word32 port,  
211 - Word32 service_id,  
212 - Word32 service_version,  
213 - (MessageQueue, String) -> Maybe($T) handler,  
214 - (String) -> One logger  
215 - )  
216 - =  
217 - generic_connect_to_net_service(queue_name, server, port, service_id, service_version, "", handler, logger).  
218 -  
219 -define Word32  
220 - get_ip  
221 - (  
222 - String url_or_ip,  
223 - (String) -> One logger  
224 - ) =  
225 - //logInfo(debug_log,"Try to resolve URL [" + url_or_ip+ "].");  
226 - if ip_address(url_or_ip) is success(ip) then  
227 - //logInfo(debug_log,"Try to resolve URL OK ip"+ip);  
228 - ip  
229 - else if dns(url_or_ip) is ok(ip_adr) then  
230 - //logInfo(debug_log,"Try to resolve URL OK dns"+ip_adr);  
231 - ip_adr  
232 - else  
233 - logger("Can't resolve URL [" + url_or_ip+ "]. Using localhost.");  
234 - ip_address((127,0,0,1)).  
235 -  
236 -  
237 -public define Maybe(Word32)  
238 - get_ip  
239 - (  
240 - String url_or_ip  
241 - ) =  
242 - //logInfo(debug_log,"Try to resolve URL [" + url_or_ip+ "].");  
243 - if ip_address(url_or_ip) is success(ip) then  
244 - //logInfo(debug_log,"Try to resolve URL OK ip"+ip);  
245 - success(ip)  
246 - else if dns(url_or_ip) is ok(ip_adr) then  
247 - //logInfo(debug_log,"Try to resolve URL OK dns"+ip_adr);  
248 - success(ip_adr)  
249 - else  
250 - println("Can't resolve URL [" + url_or_ip+ "]. Using localhost.");  
251 - failure.  
252 -  
253 - /* Same version as above, but server is string containing IP or URL  
254 - * It's resolve by get_ip and call generic_connect_to_net_service with IP  
255 - */  
256 -  
257 -public define Maybe($T)  
258 - generic_connect_to_net_service  
259 - (  
260 - String queue_name,  
261 - String server,  
262 - Word32 port,  
263 - Word32 service_id,  
264 - Word32 service_version,  
265 - String domain,  
266 - (MessageQueue, String) -> Maybe($T) handler,  
267 - (String) -> One logger  
268 - )  
269 - = generic_connect_to_net_service(queue_name, get_ip(server, logger), port, service_id, service_version, domain, handler, logger).  
270 -  
271 -public define Maybe($T)  
272 - generic_connect_to_net_service  
273 - (  
274 - String queue_name,  
275 - String server,  
276 - Word32 port,  
277 - Word32 service_id,  
278 - Word32 service_version,  
279 - (MessageQueue, String) -> Maybe($T) handler,  
280 - (String) -> One logger  
281 - )  
282 - = generic_connect_to_net_service(queue_name, server, port, service_id, service_version, "", handler, logger).  
283 -  
284 -public define Maybe($T)  
285 - generic_connect_to_net_service_SSL  
286 - (  
287 - String queue_name,  
288 - String server_name,  
289 - Word32 server_ip,  
290 - Word32 port,  
291 - (Maybe(X509)) -> Bool accept_policy, // your policy for accepting the server certificate in  
292 - // case of an invalid, non trusted or missing certificate  
293 - Word32 service_id,  
294 - Word32 service_version,  
295 - String domain,  
296 - (MessageQueue, String) -> Maybe($T) handler,  
297 - (String) -> One logger  
298 - )  
299 - =  
300 - if open_SSL_connection( server_name, server_ip, port, accept_policy) is  
301 - {  
302 - error(_) then logger(queue_name + ": Can't connect to domain manager ["+ip_addr_to_string(server_ip)+":"+port+"]");failure,  
303 - ok(conn) then  
304 - with queue = create_MessageQueue(queue_name),  
305 - message_transceiver(ssl(conn), queue);  
306 - with result = generic_request_for_service(queue, service_id, service_version, domain, handler, logger),  
307 - queue.quit(unique);  
308 - //logInfo(debug_log,"domain_manager client quit");  
309 - result  
310 - }.  
311 -  
312 -public define Maybe($T)  
313 - generic_connect_to_net_service_SSL  
314 - (  
315 - String queue_name,  
316 - String server_name,  
317 - Word32 server_ip,  
318 - Word32 port,  
319 - (Maybe(X509)) -> Bool accept_policy, // your policy for accepting the server certificate in  
320 - // case of an invalid, non trusted or missing certificate  
321 - Word32 service_id,  
322 - Word32 service_version,  
323 - (MessageQueue, String) -> Maybe($T) handler,  
324 - (String) -> One logger  
325 - )  
326 - = generic_connect_to_net_service_SSL(queue_name, server_name, server_ip, port, accept_policy, service_id, service_version, "", handler, logger).  
327 - 1 +/*
  2 + * Created by PyramIDE.
  3 + * User: ricard
  4 + * Date: 02/02/2008
  5 + * Time: 11:47
  6 + *
  7 + * To change this template use Tools | Options | Coding | Edit Standard Headers.
  8 + */
  9 +
  10 +
  11 +read tools/basis.anubis
  12 +read system/muscle.anubis
  13 +read system/data_io.anubis
  14 +read system/convert.anubis
  15 +read system/string.anubis
  16 +read system/message_queue.anubis
  17 +read system/message_transceiver.anubis
  18 +read tools/connections.anubis
  19 +
  20 +read calexium_lib/CXM_message_constants.anubis
  21 +read calexium_lib/net_services/CXM_net_services.anubis
  22 +read calexium_lib/net_services/CXM_generic_protocol.anubis
  23 +
  24 +// --Generic types---------------------------------------------------------------------
  25 +public type NetServiceAnswer:
  26 + netservice_error (Word32 cmd,
  27 + Word32 result_code,
  28 + String result_string),
  29 + netservice_ok (Word32 cmd,
  30 + Maybe(Message) result_msg).
  31 +
  32 +// --Generic functions---------------------------------------------------------------------
  33 +
  34 +
  35 +/**
  36 + * Sends the message to the server then parses the answer and returns the RESULT message on CMD success.
  37 + */
  38 +public define Maybe(NetServiceAnswer)
  39 + generic_send_message
  40 + (
  41 + MessageQueue queue,
  42 + Message msg_to_send,
  43 + Int timeout,
  44 + (String) -> One logger
  45 + )=
  46 + queue.add_Message_to_send(msg_to_send);
  47 + if queue.get_next_received_Message(timeout) is
  48 + {
  49 + timeout then logger("["+queue.get_name(unique)+"]: receive timeout");failure,
  50 + closed then logger("["+queue.get_name(unique)+"]: socket closed");failure,
  51 + msg(msg) then
  52 + if find_int32(msg, "CMD") is
  53 + {
  54 + failure then logger("["+queue.get_name(unique)+"]: CMD field not found"); failure,
  55 + success(cmd) then
  56 + if find_int32(msg, "STATUS") is
  57 + {
  58 + failure then logger("["+queue.get_name(unique)+"]: STATUS field not found"); failure,
  59 + success(v) then
  60 + if v = _CXM_OK then
  61 + success(netservice_ok(cmd, find_message(msg, "RESULT")))
  62 + else
  63 + with error_string = if find_string(msg, "STATUS_MSG") is success(s) then s else "",
  64 + success(netservice_error(cmd, v, error_string))
  65 + }
  66 + }
  67 + }.
  68 +
  69 +public define Maybe($T)
  70 + simple_handler
  71 + (
  72 + MessageQueue queue,
  73 + String timestamp,
  74 + Int timeout,
  75 + Message msg_to_send,
  76 + (Message, MessageQueue, String) -> Maybe($T) handler,
  77 + (String) -> One logger
  78 + ) =
  79 + if generic_send_message(queue, msg_to_send, timeout, logger) is
  80 + {
  81 + failure then failure,
  82 + success(net_result) then
  83 + if net_result is
  84 + {
  85 + netservice_error(cmd, err_code, err_str) then
  86 + logger("["+queue.get_name(unique)+"]: message status ERROR [0x" + to_hexa(err_code) + ", '" + err_str + "']");
  87 + failure,
  88 + netservice_ok(cmd, mb_msg) then
  89 + if mb_msg is
  90 + {
  91 + failure then logger("["+queue.get_name(unique)+"]: can't find RESULT message."); failure,
  92 + success(result) then handler(result, queue, timestamp)
  93 + }
  94 + }
  95 + }.
  96 +
  97 +public define Maybe(One)
  98 + no_result_handler
  99 + (
  100 + MessageQueue queue,
  101 + Int timeout,
  102 + Message msg_to_send,
  103 + (String) -> One logger
  104 + ) =
  105 + if generic_send_message(queue, msg_to_send, timeout, logger) is
  106 + {
  107 + failure then failure,
  108 + success(net_result) then
  109 + if net_result is
  110 + {
  111 + netservice_error(cmd, err_code, err_str) then
  112 + logger("["+queue.get_name(unique)+"]: message status ERROR [0x" + to_hexa(err_code) + ", '" + err_str + "']");
  113 + failure,
  114 + netservice_ok(cmd, mb_msg) then
  115 + if mb_msg is
  116 + {
  117 + failure then unique,
  118 + success(result) then logger("An unattended RESULT msg was found. Ignoring it...")
  119 + };
  120 + success(unique)
  121 + }
  122 + }.
  123 +
  124 +public define (MessageQueue, String) -> Maybe($T)
  125 + make_generic_handler
  126 + (
  127 + Int timeout,
  128 + Message msg_to_send,
  129 + (Message, MessageQueue, String) -> Maybe($T) handler,
  130 + (String) -> One logger
  131 + ) =
  132 + (MessageQueue queue, String timestamp) |->
  133 + simple_handler(queue, timestamp, timeout, msg_to_send, handler, logger).
  134 +
  135 +define Maybe($T)
  136 + generic_request_for_service
  137 + (
  138 + MessageQueue queue,
  139 + Word32 service_id,
  140 + Word32 service_version,
  141 + String domain,
  142 + (MessageQueue, String) -> Maybe($T) handler,
  143 + (String) -> One logger
  144 + )=
  145 + with test_msg = message(_CXM_REQUEST_FOR_SERVICE),
  146 + forget(add_int32(test_msg, "SERVICE", service_id));
  147 + forget(add_int32(test_msg, "VERSION", service_version));
  148 + forget(add_string(test_msg, "DOMAIN", domain));
  149 + queue.add_Message_to_send(test_msg);
  150 + if queue.get_next_received_Message(10) is
  151 + {
  152 + timeout then logger("["+queue.get_name(unique)+"]: requesting service receive timeout");failure,
  153 + closed then logger("["+queue.get_name(unique)+"]: requesting service socket closed");failure,
  154 + msg(msg) then
  155 + if find_int32(msg, "STATUS") is
  156 + {
  157 + failure then logger("["+queue.get_name(unique)+"]: requesting service STATUS not found");failure,
  158 + success(v) then
  159 + if v = _CXM_OK then
  160 + if find_message(msg, "RESULT") is
  161 + {
  162 + failure then logger("["+queue.get_name(unique)+"]: requesting service RESULT not found");failure,
  163 + success(result) then
  164 + with timestamp = if find_string(result, "TIMESTAMP") is
  165 + {
  166 + failure then logger("["+queue.get_name(unique)+"]: requesting service TIMESTAMP not found"); "",
  167 + success(timestamp) then timestamp
  168 + },
  169 + handler(queue, timestamp)
  170 + }
  171 + else
  172 + logger("["+queue.get_name(unique)+"]: the requested service is not available on server.");failure
  173 + }
  174 + }.
  175 +
  176 +public define Maybe($T)
  177 + generic_connect_to_net_service
  178 + (
  179 + String queue_name,
  180 + Word32 server,
  181 + Word32 port,
  182 + Word32 service_id,
  183 + Word32 service_version,
  184 + String domain,
  185 + (MessageQueue, String) -> Maybe($T) handler,
  186 + (String) -> One logger
  187 + )
  188 + =
  189 + if connect( server, port) is
  190 + {
  191 + error(_) then logger(queue_name + ": Can't connect to service ["+ip_addr_to_string(server)+":"+port+"]");failure,
  192 + ok(conn) then
  193 +// println("[" + virtual_machine_id + "] netservices create queue");
  194 + with queue = create_MessageQueue(queue_name),
  195 + message_transceiver(tcp(conn), queue);
  196 +// println("[" + virtual_machine_id + "] netservices generic_request_for_service()");
  197 + with result = generic_request_for_service(queue, service_id, service_version, domain, handler, logger),
  198 +// println("[" + virtual_machine_id + "] netservices client quit");
  199 + queue.quit(unique);
  200 + result
  201 + }.
  202 +
  203 + //legacy version which not handle the domain
  204 +
  205 +public define Maybe($T)
  206 + generic_connect_to_net_service
  207 + (
  208 + String queue_name,
  209 + Word32 server,
  210 + Word32 port,
  211 + Word32 service_id,
  212 + Word32 service_version,
  213 + (MessageQueue, String) -> Maybe($T) handler,
  214 + (String) -> One logger
  215 + )
  216 + =
  217 + generic_connect_to_net_service(queue_name, server, port, service_id, service_version, "", handler, logger).
  218 +
  219 +define Word32
  220 + get_ip
  221 + (
  222 + String url_or_ip,
  223 + (String) -> One logger
  224 + ) =
  225 + //logInfo(debug_log,"Try to resolve URL [" + url_or_ip+ "].");
  226 + if ip_address(url_or_ip) is success(ip) then
  227 + //logInfo(debug_log,"Try to resolve URL OK ip"+ip);
  228 + ip
  229 + else if dns(url_or_ip) is ok(ip_adr) then
  230 + //logInfo(debug_log,"Try to resolve URL OK dns"+ip_adr);
  231 + ip_adr
  232 + else
  233 + logger("Can't resolve URL [" + url_or_ip+ "]. Using localhost.");
  234 + ip_address((127,0,0,1)).
  235 +
  236 +
  237 +public define Maybe(Word32)
  238 + mb_get_ip
  239 + (
  240 + String url_or_ip
  241 + ) =
  242 + //logInfo(debug_log,"Try to resolve URL [" + url_or_ip+ "].");
  243 + if ip_address(url_or_ip) is success(ip) then
  244 + //logInfo(debug_log,"Try to resolve URL OK ip"+ip);
  245 + success(ip)
  246 + else if dns(url_or_ip) is ok(ip_adr) then
  247 + //logInfo(debug_log,"Try to resolve URL OK dns"+ip_adr);
  248 + success(ip_adr)
  249 + else
  250 + println("Can't resolve URL [" + url_or_ip+ "].");
  251 + failure.
  252 +
  253 +public define Word32
  254 + get_ip
  255 + (
  256 + String url_or_ip
  257 + ) =
  258 + if ip_address(url_or_ip) is success(ip) then ip
  259 + else if dns(url_or_ip) is ok(ip_adr) then ip_adr
  260 + else
  261 + println("Can't resolve URL [" + url_or_ip+ "]. Using localhost.");
  262 + ip_address((127,0,0,1)).
  263 +
  264 + /* Same version as above, but server is string containing IP or URL
  265 + * It's resolve by get_ip and call generic_connect_to_net_service with IP
  266 + */
  267 +
  268 +public define Maybe($T)
  269 + generic_connect_to_net_service
  270 + (
  271 + String queue_name,
  272 + String server,
  273 + Word32 port,
  274 + Word32 service_id,
  275 + Word32 service_version,
  276 + String domain,
  277 + (MessageQueue, String) -> Maybe($T) handler,
  278 + (String) -> One logger
  279 + )
  280 + = generic_connect_to_net_service(queue_name, get_ip(server, logger), port, service_id, service_version, domain, handler, logger).
  281 +
  282 +public define Maybe($T)
  283 + generic_connect_to_net_service
  284 + (
  285 + String queue_name,
  286 + String server,
  287 + Word32 port,
  288 + Word32 service_id,
  289 + Word32 service_version,
  290 + (MessageQueue, String) -> Maybe($T) handler,
  291 + (String) -> One logger
  292 + )
  293 + = generic_connect_to_net_service(queue_name, server, port, service_id, service_version, "", handler, logger).
  294 +
  295 +public define Maybe($T)
  296 + generic_connect_to_net_service_SSL
  297 + (
  298 + String queue_name,
  299 + String server_name,
  300 + Word32 server_ip,
  301 + Word32 port,
  302 + (Maybe(X509)) -> Bool accept_policy, // your policy for accepting the server certificate in
  303 + // case of an invalid, non trusted or missing certificate
  304 + Word32 service_id,
  305 + Word32 service_version,
  306 + String domain,
  307 + (MessageQueue, String) -> Maybe($T) handler,
  308 + (String) -> One logger
  309 + )
  310 + =
  311 + if open_SSL_connection( server_name, server_ip, port, accept_policy) is
  312 + {
  313 + error(_) then logger(queue_name + ": Can't connect to domain manager ["+ip_addr_to_string(server_ip)+":"+port+"]");failure,
  314 + ok(conn) then
  315 + with queue = create_MessageQueue(queue_name),
  316 + message_transceiver(ssl(conn), queue);
  317 + with result = generic_request_for_service(queue, service_id, service_version, domain, handler, logger),
  318 + queue.quit(unique);
  319 + //logInfo(debug_log,"domain_manager client quit");
  320 + result
  321 + }.
  322 +
  323 +public define Maybe($T)
  324 + generic_connect_to_net_service_SSL
  325 + (
  326 + String queue_name,
  327 + String server_name,
  328 + Word32 server_ip,
  329 + Word32 port,
  330 + (Maybe(X509)) -> Bool accept_policy, // your policy for accepting the server certificate in
  331 + // case of an invalid, non trusted or missing certificate
  332 + Word32 service_id,
  333 + Word32 service_version,
  334 + (MessageQueue, String) -> Maybe($T) handler,
  335 + (String) -> One logger
  336 + )
  337 + = generic_connect_to_net_service_SSL(queue_name, server_name, server_ip, port, accept_policy, service_id, service_version, "", handler, logger).
  338 +
net_services_protocols/ftp_client.anubis
@@ -146,24 +146,25 @@ public define Maybe(One) @@ -146,24 +146,25 @@ public define Maybe(One)
146 String local_file, 146 String local_file,
147 Bool ftp, 147 Bool ftp,
148 ) = 148 ) =
149 - if get_ip(server) is success(ip_adr) then  
150 - if connect( ip_adr, ip_port) is  
151 - {  
152 - error(_) then println("can't connect to ftp server"); failure,  
153 - ok(conn) then  
154 - with queue = create_MessageQueue("ftp_get_file"),  
155 - message_transceiver(conn, queue);  
156 - println("request for ftp service");  
157 - if request_for_service(queue) then  
158 - with result = get_file(queue, remote_file, local_file, ftp),  
159 - queue.quit(unique);result  
160 - else  
161 - queue.quit(unique);  
162 - println("Service not found");failure  
163 - }  
164 - else  
165 - println("server "+server+" DNS error");failure  
166 - . 149 + if mb_get_ip(server) is
  150 + {
  151 + failure then println("server "+server+" DNS error");failure,
  152 + success(ip_adr) then
  153 + if connect( ip_adr, ip_port) is
  154 + {
  155 + error(_) then println("can't connect to ftp server"); failure,
  156 + ok(conn) then
  157 + with queue = create_MessageQueue("ftp_get_file"),
  158 + message_transceiver(conn, queue);
  159 + println("request for ftp service");
  160 + if request_for_service(queue) then
  161 + with result = get_file(queue, remote_file, local_file, ftp),
  162 + queue.quit(unique);result
  163 + else
  164 + queue.quit(unique);
  165 + println("Service not found");failure
  166 + }
  167 + }.
167 168
168 /* Exists for backward compatibility. 169 /* Exists for backward compatibility.
169 * The last argument set to false (no ftp directory on the remote, pickup on collection dir) 170 * The last argument set to false (no ftp directory on the remote, pickup on collection dir)