diff options
author | Jhon Honce <jhonce@redhat.com> | 2019-05-08 16:45:12 -0700 |
---|---|---|
committer | Jhon Honce <jhonce@redhat.com> | 2019-05-14 12:19:28 -0700 |
commit | bd3154fcf6a48b37cfde5d9b1226900cd863c0d9 (patch) | |
tree | a898754ae35bdb97d52c359131ef5fff63d4b18b /pkg/varlinkapi/transfers.go | |
parent | a261b60cc8851c04efd191be6f6e2e4598439822 (diff) | |
download | podman-bd3154fcf6a48b37cfde5d9b1226900cd863c0d9.tar.gz podman-bd3154fcf6a48b37cfde5d9b1226900cd863c0d9.tar.bz2 podman-bd3154fcf6a48b37cfde5d9b1226900cd863c0d9.zip |
Add VarlinkCall.RequiresUpgrade() type and method
Type varlinkapi.VarlinkCall currently only used as receiver for
RequiresUpgrade() future helpers could be added to this type.
RequiresUpgrade() verifies caller has given correct options to the call
for the given operation.
Signed-off-by: Jhon Honce <jhonce@redhat.com>
Diffstat (limited to 'pkg/varlinkapi/transfers.go')
-rw-r--r-- | pkg/varlinkapi/transfers.go | 35 |
1 files changed, 19 insertions, 16 deletions
diff --git a/pkg/varlinkapi/transfers.go b/pkg/varlinkapi/transfers.go index 96f76bcdc..7b38ec5e6 100644 --- a/pkg/varlinkapi/transfers.go +++ b/pkg/varlinkapi/transfers.go @@ -15,58 +15,61 @@ import ( // SendFile allows a client to send a file to the varlink server func (i *LibpodAPI) SendFile(call iopodman.VarlinkCall, ftype string, length int64) error { - if !call.WantsUpgrade() { - return call.ReplyErrorOccurred("client must use upgraded connection to send files") + varlink := VarlinkCall{&call} + if err := varlink.RequiresUpgrade(); err != nil { + return varlink.ReplyErrorOccurred(err.Error()) } outputFile, err := ioutil.TempFile("", "varlink_send") if err != nil { - return call.ReplyErrorOccurred(err.Error()) + return varlink.ReplyErrorOccurred(err.Error()) } defer outputFile.Close() - if err = call.ReplySendFile(outputFile.Name()); err != nil { - return call.ReplyErrorOccurred(err.Error()) + if err = varlink.ReplySendFile(outputFile.Name()); err != nil { + return varlink.ReplyErrorOccurred(err.Error()) } writer := bufio.NewWriter(outputFile) defer writer.Flush() - reader := call.Call.Reader + reader := varlink.Call.Reader if _, err := io.CopyN(writer, reader, length); err != nil { return err } logrus.Debugf("successfully received %s", outputFile.Name()) // Send an ACK to the client - call.Call.Writer.WriteString(fmt.Sprintf("%s:", outputFile.Name())) - call.Call.Writer.Flush() + varlink.Call.Writer.WriteString(fmt.Sprintf("%s:", outputFile.Name())) + varlink.Call.Writer.Flush() return nil } // ReceiveFile allows the varlink server to send a file to a client func (i *LibpodAPI) ReceiveFile(call iopodman.VarlinkCall, filepath string, delete bool) error { - if !call.WantsUpgrade() { - return call.ReplyErrorOccurred("client must use upgraded connection to send files") + varlink := VarlinkCall{&call} + if err := varlink.RequiresUpgrade(); err != nil { + return varlink.ReplyErrorOccurred(err.Error()) } + fs, err := os.Open(filepath) if err != nil { - return call.ReplyErrorOccurred(err.Error()) + return varlink.ReplyErrorOccurred(err.Error()) } fileInfo, err := fs.Stat() if err != nil { - return call.ReplyErrorOccurred(err.Error()) + return varlink.ReplyErrorOccurred(err.Error()) } // Send the file length down to client // Varlink connection upraded - if err = call.ReplyReceiveFile(fileInfo.Size()); err != nil { - return call.ReplyErrorOccurred(err.Error()) + if err = varlink.ReplyReceiveFile(fileInfo.Size()); err != nil { + return varlink.ReplyErrorOccurred(err.Error()) } reader := bufio.NewReader(fs) - _, err = reader.WriteTo(call.Writer) + _, err = reader.WriteTo(varlink.Writer) if err != nil { return err } @@ -75,5 +78,5 @@ func (i *LibpodAPI) ReceiveFile(call iopodman.VarlinkCall, filepath string, dele return err } } - return call.Writer.Flush() + return varlink.Writer.Flush() } |