Commit 0071bc67de282fc624a8d0a70654eb27433991de
1 parent
75c12334
update web/CXM_multihost_http_server to manage timeout in read function
add FTP constant definition change net_services functions that now use MessageQueue instead of RWStream socket
Showing
5 changed files
with
48 additions
and
40 deletions
Show diff stats
calexium_lib/CXM_message_constants.anubis
| ... | ... | @@ -39,3 +39,7 @@ public define Int32 _CXM_ACK_RESULT_MSG = 0x33771002. // |
| 39 | 39 | |
| 40 | 40 | public define Int32 _CXM_FTP_SERVICE_MSG_BASIS = 0x33771400. // |
| 41 | 41 | public define Int32 _CXM_FTP_SERVICE_ID = 0x33771401. |
| 42 | +public define Int32 _CXM_FTP_GET_FILE = 0x33771402. | |
| 43 | +public define Int32 _CXM_FTP_START_TRANSFERT = 0x33771403. | |
| 44 | +public define Int32 _CXM_FTP_DATA = 0x33771404. | |
| 45 | + | ... | ... |
calexium_lib/net_services/CXM_generic_protocol.anubis
| ... | ... | @@ -10,7 +10,7 @@ |
| 10 | 10 | read system/muscle.anubis |
| 11 | 11 | read system/data_io.anubis |
| 12 | 12 | read tools/basis.anubis |
| 13 | - | |
| 13 | +read system/message_queue.anubis | |
| 14 | 14 | read calexium_lib/CXM_message_constants.anubis |
| 15 | 15 | |
| 16 | 16 | public define Int32 _CXM_ERROR = 0. |
| ... | ... | @@ -20,31 +20,30 @@ public define Int32 _CXM_UNKNOW_CMD = 2. |
| 20 | 20 | public define One |
| 21 | 21 | send_ACK_error |
| 22 | 22 | ( |
| 23 | - RWStream conn, | |
| 23 | + MessageQueue queue, | |
| 24 | 24 | Int32 cmd_id |
| 25 | 25 | )= |
| 26 | 26 | with err_msg = message(_CXM_ACK), |
| 27 | 27 | forget(add_int32(err_msg, "CMD", cmd_id)); |
| 28 | 28 | forget(add_int32(err_msg, "STATUS", _CXM_ERROR)); |
| 29 | - forget(send_message_by_Stream(conn, err_msg)) | |
| 30 | - . | |
| 29 | + forget(queue.add_Message_to_send(err_msg)). | |
| 31 | 30 | |
| 32 | 31 | public define One |
| 33 | 32 | send_ACK_ok |
| 34 | 33 | ( |
| 35 | - RWStream conn, | |
| 36 | - Int32 cmd_id | |
| 34 | + MessageQueue queue, | |
| 35 | + Int32 cmd_id | |
| 37 | 36 | )= |
| 38 | 37 | with ok_msg = message(_CXM_ACK), |
| 39 | 38 | forget(add_int32(ok_msg, "CMD", cmd_id)); |
| 40 | 39 | forget(add_int32(ok_msg, "STATUS", _CXM_OK)); |
| 41 | - forget(send_message_by_Stream(conn, ok_msg)) | |
| 40 | + forget(queue.add_Message_to_send(ok_msg)) | |
| 42 | 41 | . |
| 43 | 42 | |
| 44 | 43 | public define One |
| 45 | 44 | send_ACK_ok |
| 46 | 45 | ( |
| 47 | - RWStream conn, | |
| 46 | + MessageQueue queue, | |
| 48 | 47 | Int32 cmd_id, |
| 49 | 48 | Message result |
| 50 | 49 | )= |
| ... | ... | @@ -52,24 +51,24 @@ public define One |
| 52 | 51 | forget(add_int32(ok_msg, "CMD", cmd_id)); |
| 53 | 52 | forget(add_int32(ok_msg, "STATUS", _CXM_OK)); |
| 54 | 53 | forget(add_message(ok_msg, "RESULT", result)); |
| 55 | - forget(send_message_by_Stream(conn, ok_msg)) | |
| 54 | + forget(queue.add_Message_to_send(ok_msg)) | |
| 56 | 55 | . |
| 57 | 56 | |
| 58 | 57 | public define One |
| 59 | 58 | send_result |
| 60 | 59 | ( |
| 61 | - RWStream conn, | |
| 60 | + MessageQueue queue, | |
| 62 | 61 | Int32 cmd_id, |
| 63 | 62 | Maybe(Message) mb_msg |
| 64 | 63 | )= |
| 65 | 64 | if mb_msg is |
| 66 | 65 | { |
| 67 | - failure then send_ACK_error(conn, cmd_id), | |
| 68 | - success(msg) then send_ACK_ok(conn, cmd_id, msg) | |
| 66 | + failure then send_ACK_error(queue, cmd_id), | |
| 67 | + success(msg) then send_ACK_ok(queue, cmd_id, msg) | |
| 69 | 68 | } |
| 70 | 69 | . |
| 71 | 70 | |
| 72 | -public define Maybe(Message) | |
| 71 | + public define Maybe(Message) | |
| 73 | 72 | wait_for_reply |
| 74 | 73 | ( |
| 75 | 74 | RWStream conn | ... | ... |
calexium_lib/net_services/CXM_net_services.anubis
| ... | ... | @@ -11,7 +11,8 @@ read system/convert.anubis |
| 11 | 11 | read system/string.anubis |
| 12 | 12 | read system/muscle.anubis |
| 13 | 13 | read system/data_io.anubis |
| 14 | - | |
| 14 | +read system/message_queue.anubis | |
| 15 | +read system/message_transceiver.anubis | |
| 15 | 16 | read CXM_generic_protocol.anubis |
| 16 | 17 | read calexium_lib/CXM_message_constants.anubis |
| 17 | 18 | |
| ... | ... | @@ -20,7 +21,7 @@ public type NetService: |
| 20 | 21 | Int32 version, |
| 21 | 22 | Int32 id, |
| 22 | 23 | String name, |
| 23 | - (RWStream) -> One handler | |
| 24 | + (MessageQueue) -> One handler | |
| 24 | 25 | ). |
| 25 | 26 | |
| 26 | 27 | define One |
| ... | ... | @@ -62,17 +63,17 @@ define Maybe(NetService) |
| 62 | 63 | define Maybe(NetService) |
| 63 | 64 | has_service |
| 64 | 65 | ( |
| 65 | - RWStream conn, | |
| 66 | - Message msg, | |
| 66 | + MessageQueue queue, | |
| 67 | + Message msg, | |
| 67 | 68 | List(NetService) net_services |
| 68 | 69 | )= |
| 69 | 70 | if find_int32(msg, "service") is |
| 70 | 71 | { |
| 71 | - failure then send_ACK_error(conn, _CXM_REQUEST_FOR_SERVICE); failure, | |
| 72 | + failure then send_ACK_error(queue, _CXM_REQUEST_FOR_SERVICE); failure, | |
| 72 | 73 | success(service_id) then |
| 73 | 74 | if find_int32(msg, "version") is |
| 74 | 75 | { |
| 75 | - failure then send_ACK_error(conn, _CXM_REQUEST_FOR_SERVICE);failure, | |
| 76 | + failure then send_ACK_error(queue, _CXM_REQUEST_FOR_SERVICE);failure, | |
| 76 | 77 | success(service_version) then find_service(net_services, service_id, service_version) |
| 77 | 78 | } |
| 78 | 79 | }. |
| ... | ... | @@ -85,18 +86,18 @@ define Maybe(NetService) |
| 85 | 86 | define One |
| 86 | 87 | service_negociation |
| 87 | 88 | ( |
| 88 | - RWStream conn, | |
| 89 | - Message msg, | |
| 89 | + MessageQueue queue, | |
| 90 | + Message msg, | |
| 90 | 91 | List(NetService) net_services |
| 91 | 92 | )= |
| 92 | 93 | print("MESSAGE [" + to_ascii(*msg.what) + "] received\n"); |
| 93 | 94 | if * msg.what = _CXM_REQUEST_FOR_SERVICE then |
| 94 | - if has_service(conn, msg, net_services) is | |
| 95 | + if has_service(queue, msg, net_services) is | |
| 95 | 96 | { |
| 96 | 97 | failure then unique, |
| 97 | 98 | success(net_service) then |
| 98 | - send_ACK_ok(conn, _CXM_REQUEST_FOR_SERVICE); | |
| 99 | - net_service.handler(conn) | |
| 99 | + send_ACK_ok(queue, _CXM_REQUEST_FOR_SERVICE); | |
| 100 | + net_service.handler(queue) | |
| 100 | 101 | } |
| 101 | 102 | else |
| 102 | 103 | unique |
| ... | ... | @@ -110,19 +111,17 @@ define One |
| 110 | 111 | define One |
| 111 | 112 | message_receiver |
| 112 | 113 | ( |
| 113 | - RWStream conn, | |
| 114 | + MessageQueue queue, | |
| 114 | 115 | List(NetService) net_services |
| 115 | 116 | ) = |
| 116 | 117 | |
| 117 | - if unflatten_message(make_data_io(weaken(conn))) is | |
| 118 | + if queue.get_next_received_Message(10) is | |
| 118 | 119 | { |
| 119 | - failure then | |
| 120 | - //print("can't unflatten any message\n"); | |
| 121 | - sleep(1); | |
| 122 | - message_receiver(conn, net_services), | |
| 123 | - success(msg) then | |
| 124 | - service_negociation(conn, msg, net_services); | |
| 125 | - message_receiver(conn, net_services) | |
| 120 | + timeout then message_receiver(queue, net_services), | |
| 121 | + closed then unique, | |
| 122 | + msg(msg) then | |
| 123 | + service_negociation(queue, msg, net_services); | |
| 124 | + message_receiver(queue, net_services) | |
| 126 | 125 | }. |
| 127 | 126 | |
| 128 | 127 | define Server -> (RWStream) -> One |
| ... | ... | @@ -137,7 +136,9 @@ define Server -> (RWStream) -> One |
| 137 | 136 | // print("NET SERVICES Accepting connection with "+peer+"\n"); |
| 138 | 137 | |
| 139 | 138 | //now managing the list of SERVICES |
| 140 | - message_receiver(conn, net_services). | |
| 139 | + with queue = create_MessageQueue, | |
| 140 | + message_transceiver(conn, queue); | |
| 141 | + message_receiver(queue, net_services). | |
| 141 | 142 | |
| 142 | 143 | |
| 143 | 144 | public define Maybe(Server) | ... | ... |
calexium_lib/net_services_protocols/pkg_updater_protocol.anubis
calexium_lib/web/CXM_multihost_http_server.anubis
| ... | ... | @@ -696,9 +696,10 @@ define Result(Error,Word8) |
| 696 | 696 | //if now > dead_line then record_dubious_connection(connection,dead_line,dos) else |
| 697 | 697 | if read(connection,1,600) is // the connection is closed after 10 minutes of inactivity |
| 698 | 698 | { |
| 699 | - failure then error(cannot_read_from_connection), | |
| 699 | + error then error(cannot_read_from_connection), | |
| 700 | + timeout then error(timeout(600)), | |
| 700 | 701 | //record_dubious_connection(connection,dead_line,dos), |
| 701 | - success(ba) then if nth(0,ba) is | |
| 702 | + ok(ba) then if nth(0,ba) is | |
| 702 | 703 | { |
| 703 | 704 | failure then error(cannot_read_from_connection), |
| 704 | 705 | success(c) then ok(c) |
| ... | ... | @@ -1631,8 +1632,9 @@ define Result(Error,ByteArray) |
| 1631 | 1632 | if retries =< 0 then error(cannot_read_from_connection) else |
| 1632 | 1633 | if read(connection,body_size,60) is |
| 1633 | 1634 | { |
| 1634 | - failure then error(cannot_read_from_connection), | |
| 1635 | - success(new_bytes) then with | |
| 1635 | + error then error(cannot_read_from_connection), | |
| 1636 | + timeout then error(timeout(60)), | |
| 1637 | + ok(new_bytes) then with | |
| 1636 | 1638 | ba = so_far + new_bytes, // contains all the bytes read so far |
| 1637 | 1639 | nr = length(ba), // total read since the beginning |
| 1638 | 1640 | nn = length(new_bytes), // number of bytes just read |
| ... | ... | @@ -1881,8 +1883,9 @@ define One |
| 1881 | 1883 | if sent >= size then unique else |
| 1882 | 1884 | if read(file,min(10000,size-sent),60) is |
| 1883 | 1885 | { |
| 1884 | - failure then log_journal_msg(desc,"Cannot read from file '"+filename+"'.\n"), | |
| 1885 | - success(ba) then | |
| 1886 | + error then log_journal_msg(desc,"Cannot read from file '"+filename+"'.\n"), | |
| 1887 | + timeout then log_journal_msg(desc,"Cannot read from file timeoput'"+filename+"'.\n"), | |
| 1888 | + ok(ba) then | |
| 1886 | 1889 | with nr = length(ba), // get the number of bytes read |
| 1887 | 1890 | if reliable_write(connection,ba) is |
| 1888 | 1891 | { | ... | ... |