Commit 3eb6214f6176b5344897908a713fbf65728e2900
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
Showing
2 changed files
with
357 additions
and
345 deletions
Show diff stats
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) | ... | ... |