Index: nselib/afp.lua =================================================================== --- nselib/afp.lua (revision 16703) +++ nselib/afp.lua (arbetskopia) @@ -132,7 +132,8 @@ -- Each packet contains a sequential request id -- this number is used within create_fp_packet and increased by one in each call -request_id = 1 +local req_id_tbl = {} +setmetatable(req_id_tbl, {__mode = "kv"}) --- Creates an AFP packet @@ -140,16 +141,15 @@ -- @param command number should be one of the commands in the COMMAND table -- @param data_offset number holding the offset to the data -- @param data the actual data of the request -function create_fp_packet( command, data_offset, data ) - +function create_fp_packet( command, data_offset, data ) local reserved = 0 local data = data or "" local data_len = data:len() - local header = bin.pack("CC>SIII", FLAGS.Request, command, request_id, data_offset, data_len, reserved) - local packet = header .. data + local tid = tostring(coroutine.running()) + local header = bin.pack("CC>SIII", FLAGS.Request, command, req_id_tbl[tid], data_offset, data_len, reserved) - request_id = request_id + 1 - return packet + req_id_tbl[tid] = req_id_tbl[tid] + 1 + return header .. data end --- Parses the FP header (first 16-bytes of packet) @@ -181,9 +181,11 @@ local option = 0x01 -- Attention Quantum local option_len = 4 local quantum = 1024 + local data, packet - local data = bin.pack( "CCI", option, option_len, quantum ) - local packet = create_fp_packet( REQUEST.OpenSession, data_offset, data ) + req_id_tbl[tostring(coroutine.running())]=1 + data = bin.pack( "CCI", option, option_len, quantum ) + packet = create_fp_packet( REQUEST.OpenSession, data_offset, data ) send_fp_packet( socket, packet ) packet = read_fp_packet( socket )