public function wrq($filename, $mode) { $this->log_debug("WRQ: filename $filename in $mode mode"); if($this->state != TFTPTransferState::READY) return $this->illegal_operation("WRQ", "Not in ready state"); if(!$this->_server->writable($this->peer, $filename)) return $this->terminal_info(TFTPError::ACCESS_VIOLATION, "File $filename is not writable"); if($this->tsize != 0 && $this->tsize > $this->_server->max_put_size) return $this->terminal_info(TFTPError::DISK_FULL, "File too big, " . $this->tsize . "(tsize) > " . $this->_server->max_put_size); $this->state = TFTPTransferState::RECEIVING; $this->_filename = $filename; $this->_mode = $mode; $this->_last_sent_ack = time(); $this->log_debug("WRQ: ack request"); if($this->use_extensions()) return $this->packet_oack(); else return TFTPServer::packet_ack(0); }