diff --git a/exec/load/binkp.js b/exec/load/binkp.js index 7b52de60de3200996f1b8130a440f4076838dac2..0093bfc0c1a49312883772f4888516ea1b0e0448 100644 --- a/exec/load/binkp.js +++ b/exec/load/binkp.js @@ -75,7 +75,7 @@ function BinkP(name_ver, inbound, rx_callback) this.system_name = system.name; this.system_operator = system.operator; this.system_location = system.location; - system.fido_addr_list.forEach(function(faddr){this.addr_list.push(faddr);}, this); + system.fido_addr_list.forEach(function(faddr){this.addr_list.push(FIDO.parse_addr(faddr, this.default_zone));}, this); this.want_callback = this.default_want; this.sent_files = []; @@ -418,8 +418,8 @@ BinkP.prototype.session = function() case this.command.M_GOT: args = this.parseArgs(pkt.data); for (i=0; i<this.pending_ack.length; i++) { - if (file_getname(this.pending_ack[i]) == args[0]) { - this.sent_files.push(this.pending_ack[i]); + if (this.pending_ack[i].sendas == args[0]) { + this.sent_files.push(this.pending_ack[i].file.name); this.pending_ack.splice(i, 1); i--; } @@ -447,25 +447,25 @@ BinkP.prototype.session = function() } // Now, simply adjust the position in a pending file for (i=0; i<this.tx_queue.length; i++) { - if (file_getname(this.tx_queue[i].name) === args[0]) { + if (file_getname(this.tx_queue[i].file.name) === args[0]) { // Validate the size, date, and offset... - if (this.tx_queue[i].length != parseInt(args[1], 10) || this.tx_queue[i].date != parseInt(args[2], 10) || this.tx_queue[i].length < parseInt(args[3], 10)) + if (this.tx_queue[i].file.length != parseInt(args[1], 10) || this.tx_queue[i].file.date != parseInt(args[2], 10) || this.tx_queue[i].file.length < parseInt(args[3], 10)) break; - this.tx_queue[i].position = parseInt(args[3], 10); + this.tx_queue[i].file.position = parseInt(args[3], 10); } } break; case this.command.M_SKIP: args = this.parseArgs(pkt.data); for (i=0; i<this.pending_ack.length; i++) { - if (file_getname(this.pending_ack[i]) == args[0]) { + if (this.pending_ack[i].sendas == args[0]) { this.pending_ack.splice(i, 1); i--; } } - if (file_getname(this.sending) === args[0]) { - this.sending.close(); - this.failed_sent_files.push(this.sending.name); + if (file_getname(this.sending.sendas) === args[0]) { + this.sending.file.close(); + this.failed_sent_files.push(this.sending.file.name); this.sending = undefined; } break; @@ -497,20 +497,20 @@ BinkP.prototype.session = function() this.sendCmd(this.command.M_EOB); } else { - this.pending_ack.push(file_getname(this.sending.name)); + this.pending_ack.push(this.sending); if (this.nonreliable) - this.sendCmd(this.command.M_FILE, this.escapeFileName(file_getname(this.sending.name))+' '+this.sending.length+' '+this.sending.date+' -1'); + this.sendCmd(this.command.M_FILE, this.escapeFileName(this.sending.sendas)+' '+this.sending.file.length+' '+this.sending.file.date+' -1'); else - this.sendCmd(this.command.M_FILE, this.escapeFileName(file_getname(this.sending.name))+' '+this.sending.length+' '+this.sending.date+' '+this.sending.position); + this.sendCmd(this.command.M_FILE, this.escapeFileName(this.sending.sendas)+' '+this.sending.file.length+' '+this.sending.file.date+' '+this.sending.file.position); if (this.ver1_1) this.goteob = false; } } if (this.sending !== undefined) { - if(this.sendData(this.sending.read(32767))) + if(this.sendData(this.sending.file.read(32767))) last = Date.now(); - if (this.eof || this.sending.position >= this.sending.length) { - this.sending.close(); + if (this.eof || this.sending.file.position >= this.sending.file.length) { + this.sending.file.close(); this.sending = undefined; } } @@ -533,9 +533,9 @@ BinkP.prototype.close = function() this.ack_file(); // Any still pending have failed. for (i=0; i<this.pending_ack.length; i++) - this.failed_sent_files.push(this.pending_ack[i]); + this.failed_sent_files.push(this.pending_ack[i].file.name); for (i=0; i<this.tx_queue.length; i++) - this.failed_sent_files.push(this.tx_queue[i].name); + this.failed_sent_files.push(this.tx_queue[i].file.name); if ((!this.goteob) || this.tx_queue.length || this.pending_ack.length || this.pending_get.length) { this.sendCmd(this.command.M_ERR, "Forced Shutdown"); } @@ -545,7 +545,7 @@ BinkP.prototype.close = function() } } this.tx_queue.forEach(function(file) { - file.close(); + file.file.close(); }); }; BinkP.prototype.sendCmd = function(cmd, data) @@ -696,8 +696,12 @@ BinkP.prototype.recvFrame = function(timeout) this.sendCmd(this.command.M_ERR, "Address already received."); return undefined; } - else - this.remote_addrs = ret.data.split(/ /); + else { + this.remote_addrs = []; + ret.data.split(/ /).forEach(function(addr) { + this.remote_addrs.push(FIDO.parse_addr(addr, this.default_zone)); + }, this); + } break; case this.command.M_OK: if (this.authenticated !== undefined) { @@ -753,13 +757,15 @@ BinkP.prototype.recvFrame = function(timeout) } return ret; }; -BinkP.prototype.addFile = function(name) +BinkP.prototype.addFile = function(path, sendas) { var file = new File(name); + if (sendas === undefined) + sendas = file_getname(path); if (!file.open("rb", true)) return false; if (this.ver1_1) this.senteob = false; - this.tx_queue.push(file); + this.tx_queue.push({file:file, sendas:sendas}); };