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 146 String local_file,
147 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 169 /* Exists for backward compatibility.
169 170 * The last argument set to false (no ftp directory on the remote, pickup on collection dir)
... ...