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,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) |