From 3e1c3cd989180d2085ce5af7f4db2b156d5df578 Mon Sep 17 00:00:00 2001 From: me_desk Date: Fri, 4 Jul 2014 01:03:36 +0000 Subject: implemented file transfer cancellation git-svn-id: svn://localhost/project_picapica/trunk@315 fb96df88-216d-11de-830c-f3023f12d8ac --- PICA_client.c | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'PICA_client.c') diff --git a/PICA_client.c b/PICA_client.c index 6d428e4..50751d4 100755 --- a/PICA_client.c +++ b/PICA_client.c @@ -1827,6 +1827,39 @@ if (sending) return PICA_send_filecontrol(chan, senderctl, receiverctl); } +int PICA_cancel_file(struct PICA_chaninfo *chan, int sending) +{ +int senderctl = PICA_PROTO_FILECONTROL_VOID; +int receiverctl = PICA_PROTO_FILECONTROL_VOID; + +if (sending) + { + if (chan->sendfilestate != PICA_CHANSENDFILESTATE_SENDING + && chan->sendfilestate != PICA_CHANSENDFILESTATE_PAUSED) + return PICA_ERRINVARG; + + fclose(chan->sendfile_stream); + chan->sendfile_stream = NULL; + chan->sendfilestate = PICA_CHANSENDFILESTATE_IDLE; + + senderctl = PICA_PROTO_FILECONTROL_CANCEL; + } + else + { + if (chan->recvfilestate != PICA_CHANRECVFILESTATE_RECEIVING + && chan->recvfilestate != PICA_CHANRECVFILESTATE_PAUSED) + return PICA_ERRINVARG; + + fclose(chan->recvfile_stream); + chan->recvfile_stream = NULL; + chan->recvfilestate = PICA_CHANRECVFILESTATE_IDLE; + + receiverctl = PICA_PROTO_FILECONTROL_CANCEL; + } + +return PICA_send_filecontrol(chan, senderctl, receiverctl); +} + int PICA_send_filecontrol(struct PICA_chaninfo *chan, int senderctl, int receiverctl) { struct PICA_proto_msg *mp; -- cgit v1.2.1