docs: def handle(self, pkt, raddress, rport):
          "Handle an initial WRQ packet as a server."
          log.debug("In TftpStateServerRecvWRQ.handle")
          sendoack = self.serverInitial(pkt, raddress, rport)
          path = self.full_path
          if self.context.upload_open:
              f = self.context.upload_open(path, self.context)
              if f is None:
                  self.sendError(TftpErrors.AccessViolation)
                  raise TftpException("Dynamic path %s not permitted" % path)
              else:
                  self.context.fileobj = f
          else:
              log.info("Opening file %s for writing" % path)
              if os.path.exists(path):
                  # FIXME: correct behavior?
                  log.warning("File %s exists already, overwriting..." % (
                      self.context.file_to_transfer))
              # FIXME: I think we should upload to a temp file and not overwrite
              # the existing file until the file is successfully uploaded.
              self.make_subdirs()
              self.context.fileobj = open(path, "wb")
  
          # Options negotiation.
          if sendoack:
              log.debug("Sending OACK to client")
              self.sendOACK()
          else:
              log.debug("No requested options, expecting transfer to begin...")
              self.sendACK()
          # Whether we're sending an oack or not, we're expecting a DAT for
          # block 1
          self.context.next_block = 1
          # We may have sent an OACK, but we're expecting a DAT as the response
          # to either the OACK or an ACK, so lets unconditionally use the
          # TftpStateExpectDAT state.
          return TftpStateExpectDAT(self.context)