summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorme_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac>2014-06-28 22:03:12 +0000
committerme_desk <me_desk@fb96df88-216d-11de-830c-f3023f12d8ac>2014-06-28 22:03:12 +0000
commit2ca40dbee2a3d7bb320d03395e51297af5d481fb (patch)
tree39a679f968df01fcdd9ffbf1e02a3995edcaaa49
parent5876e52dfae8a7a682bfc9404c3ad343af219ecb (diff)
downloadpica-pica-2ca40dbee2a3d7bb320d03395e51297af5d481fb.tar.gz
pica-pica-2ca40dbee2a3d7bb320d03395e51297af5d481fb.zip
added file_finished() callback
git-svn-id: svn://localhost/project_picapica/trunk@313 fb96df88-216d-11de-830c-f3023f12d8ac
-rwxr-xr-xPICA_client.c25
-rwxr-xr-xPICA_client.h2
-rw-r--r--pica-client/filetransfercontroller.cpp12
-rw-r--r--pica-client/filetransfercontroller.h5
-rw-r--r--pica-client/skynet.cpp23
-rw-r--r--pica-client/skynet.h6
6 files changed, 62 insertions, 11 deletions
diff --git a/PICA_client.c b/PICA_client.c
index 3116c3a..25e92f7 100755
--- a/PICA_client.c
+++ b/PICA_client.c
@@ -795,17 +795,20 @@ if (fwrite(buf + 4, nb - 4, 1, chan->recvfile_stream) != 1)
chan->recvfile_pos += (nb - 4);
+
+if (chan->recvfile_pos > chan->recvfile_size) //received more than file_size
+ return 0;
+
+callbacks.file_progress(chan->peer_id, 0, chan->recvfile_pos);
+
if (chan->recvfile_pos == chan->recvfile_size)
{
chan->recvfilestate = PICA_CHANRECVFILESTATE_IDLE;
fclose(chan->recvfile_stream);
chan->recvfile_stream = NULL;
- }
-if (chan->recvfile_pos > chan->recvfile_size) //received more than file_size
- return 0;
-
-callbacks.file_progress(chan->peer_id, 0, chan->recvfile_pos);
+ callbacks.file_finished(chan->peer_id, 0);
+ }
return 1;
}
@@ -818,7 +821,7 @@ unsigned int sender_cmd, receiver_cmd;
sender_cmd = buf[2];
receiver_cmd = buf[3];
-fprintf(stderr, "procmsg_FILECONTROL sender_cmd = %i receiver_cmd = %i\n", sender_cmd, receiver_cmd);
+fprintf(stderr, "procmsg_FILECONTROL sender_cmd = %i receiver_cmd = %i\n", sender_cmd, receiver_cmd);//debug
if ((chan->sendfilestate == PICA_CHANSENDFILESTATE_IDLE || chan->sendfilestate == PICA_CHANSENDFILESTATE_SENTREQ)
&& receiver_cmd != PICA_PROTO_FILECONTROL_VOID)
@@ -1351,6 +1354,7 @@ if (ret>0)
{
if (PICA_OK != (ret = PICA_read_c2c(ipt)) )
{
+ puts("PICA_read_c2c() failed");//debug
callbacks.channel_closed_cb(ipt->peer_id, ret);
kill_ptr = ipt;
}
@@ -1393,6 +1397,7 @@ while(ipt)
{
if (PICA_OK != (ret = PICA_write_c2c(ipt)))
{
+ fprintf(stderr,"PICA_write_c2c() failed, ret = %i\n", ret);//debug
callbacks.channel_closed_cb(ipt->peer_id, ret);
kill_ptr = ipt;
}
@@ -1767,6 +1772,8 @@ int PICA_pause_file(struct PICA_chaninfo *chan, int sending)
int senderctl = PICA_PROTO_FILECONTROL_VOID;
int receiverctl = PICA_PROTO_FILECONTROL_VOID;
+fprintf(stderr, "PICA_pause_file(%p, %i)\n", chan, sending);//debug
+
if (sending)
{
if (chan->sendfilestate != PICA_CHANSENDFILESTATE_SENDING)
@@ -1820,6 +1827,8 @@ int PICA_send_filecontrol(struct PICA_chaninfo *chan, int senderctl, int receive
{
struct PICA_proto_msg *mp;
+fprintf(stderr, "PICA_send_filecontrol(%p, %i, %i)\n", chan, senderctl, receiverctl);//debug
+
if ((mp = c2c_writebuf_push(chan, PICA_PROTO_FILECONTROL, PICA_PROTO_FILECONTROL_SIZE)))
{
mp->tail[0] = senderctl; //sender's command
@@ -1871,6 +1880,8 @@ if (chn->sendfile_pos >= chn->sendfile_size)
chn->sendfilestate = PICA_CHANSENDFILESTATE_IDLE;
fclose(chn->sendfile_stream);
chn->sendfile_stream = NULL;
+
+ callbacks.file_finished(chn->peer_id, 1);
}
if (chn->sendfile_pos > chn->sendfile_size)
@@ -1883,7 +1894,7 @@ void PICA_close_channel(struct PICA_chaninfo *chn)
{
struct PICA_chaninfo *ipt;
-//puts("PICA_close_channel");//debug
+fprintf(stderr, "PICA_close_channel(%p)\n", chn);//debug
ipt=chn->conn->chan_list_head;
//puts("PICA_close_channel_chkp0");//debug
diff --git a/PICA_client.h b/PICA_client.h
index fd3762d..81aec89 100755
--- a/PICA_client.h
+++ b/PICA_client.h
@@ -207,6 +207,8 @@ void (*denied_file_cb)(const unsigned char *peer_id);
void (*file_progress)(const unsigned char *peer_id, uint64_t sent, uint64_t received);
void (*file_control)(const unsigned char *peer_id, unsigned int sender_cmd, unsigned int receiver_cmd);
+
+void (*file_finished)(const unsigned char *peer_id, int sending);
};
diff --git a/pica-client/filetransfercontroller.cpp b/pica-client/filetransfercontroller.cpp
index 61534c9..a293827 100644
--- a/pica-client/filetransfercontroller.cpp
+++ b/pica-client/filetransfercontroller.cpp
@@ -20,6 +20,17 @@ FileTransferController::FileTransferController(QObject *parent) :
connect(skynet, SIGNAL(OutgoingFileRequestDenied(QByteArray)), this, SLOT(file_denied_by_peer(QByteArray)));
}
+void FileTransferController::file_finished_incoming(QByteArray peer_id)
+{
+ if (ftdialogs_in.contains(peer_id))
+ ftdialogs_in.remove(peer_id);
+}
+
+void FileTransferController::file_finished_outgoing(QByteArray peer_id)
+{
+ if (ftdialogs_out.contains(peer_id))
+ ftdialogs_out.remove(peer_id);
+}
void FileTransferController::file_progress(QByteArray peer_id, quint64 bytes_sent, quint64 bytes_received)
{
@@ -44,7 +55,6 @@ void FileTransferController::file_request(QByteArray peer_id, quint64 file_size,
FileTransferDialog *ftd = new FileTransferDialog(peer_id, filename, file_size, FileTransferDialog::RECEIVING);
ftdialogs_in[peer_id] = ftd;
- fsizes[peer_id] = file_size;
fnames[peer_id] = filename;
connect(ftd, SIGNAL(acceptedFile(QByteArray)), this, SLOT(file_accepted_by_me(QByteArray)));
diff --git a/pica-client/filetransfercontroller.h b/pica-client/filetransfercontroller.h
index f261605..99282c6 100644
--- a/pica-client/filetransfercontroller.h
+++ b/pica-client/filetransfercontroller.h
@@ -18,7 +18,6 @@ private:
QMap<QByteArray, FileTransferDialog*> ftdialogs_in;
QMap<QByteArray, FileTransferDialog*> ftdialogs_out;
- QMap<QByteArray, quint64> fsizes;
QMap<QByteArray, QString> fnames;
@@ -40,6 +39,8 @@ public slots:
void file_cancelled_outgoing(QByteArray peer_id);
void file_ioerror_outgoing(QByteArray peer_id);
+ void file_finished_incoming(QByteArray peer_id);
+
//from me (file transfer dialog shown to user) to remote peer
void file_accepted_by_me(QByteArray peer_id);
void file_denied_by_me(QByteArray peer_id);
@@ -49,6 +50,8 @@ public slots:
void send_file(QByteArray peer_id);
+ void file_finished_outgoing(QByteArray peer_id);
+
};
#endif // FILETRANSFERCONTROLLER_H
diff --git a/pica-client/skynet.cpp b/pica-client/skynet.cpp
index 462ad02..6426538 100644
--- a/pica-client/skynet.cpp
+++ b/pica-client/skynet.cpp
@@ -28,7 +28,8 @@ PICA_client_callbacks cbs = {
accepted_file_cb,
denied_file_cb,
file_progress,
- file_control
+ file_control,
+ file_finished
};
PICA_client_init(&cbs);
@@ -565,6 +566,16 @@ void SkyNet::emit_OutgoingFileResumed(QByteArray peer_id)
emit OutgoingFileResumed(peer_id);
}
+void SkyNet::emit_OutgoingFileFinished(QByteArray peer_id)
+{
+ emit OutgoingFileFinished(peer_id);
+}
+
+void SkyNet::emit_IncomingFileFinished(QByteArray peer_id)
+{
+ emit IncomingFileFinished(peer_id);
+}
+
//callbacks
//all callbacks are executed in separate thread, created in Nodethread instance, REMEMBER THAT !!!
@@ -616,7 +627,8 @@ void SkyNet::notfound_cb(const unsigned char *callee_id)
void SkyNet::channel_closed_cb(const unsigned char *peer_id, int reason)
{
- qDebug()<<"channel closed ("<<QByteArray((const char*)peer_id, PICA_ID_SIZE).toBase64()<<")\n";
+ qDebug()<<"channel closed ("<<QByteArray((const char*)peer_id, PICA_ID_SIZE).toBase64()
+ <<", error_code =" << reason << ")\n";
}
@@ -713,3 +725,10 @@ void SkyNet::file_control(const unsigned char *peer_id, unsigned int sender_cmd,
}
}
+void SkyNet::file_finished(const unsigned char *peer_id, int sending)
+{
+ if (sending)
+ skynet->emit_OutgoingFileFinished(QByteArray((const char *)peer_id, PICA_ID_SIZE));
+ else
+ skynet->emit_IncomingFileFinished(QByteArray((const char *)peer_id, PICA_ID_SIZE));
+}
diff --git a/pica-client/skynet.h b/pica-client/skynet.h
index a053083..91eb2f1 100644
--- a/pica-client/skynet.h
+++ b/pica-client/skynet.h
@@ -51,6 +51,8 @@ signals:
void OutgoingFileCancelled(QByteArray peer_id);
void OutgoingFileIoError(QByteArray peer_id);
void OutgoingFileResumed(QByteArray peer_id);
+ void OutgoingFileFinished(QByteArray peer_id);
+ void IncomingFileFinished(QByteArray peer_id);
private:
Nodes nodes;
@@ -88,6 +90,8 @@ private:
void emit_OutgoingFileIoError(QByteArray peer_id);
void emit_OutgoingFileResumed(QByteArray peer_id);
+ void emit_OutgoingFileFinished(QByteArray peer_id);
+ void emit_IncomingFileFinished(QByteArray peer_id);
//получение сообщения.
static void newmsg_cb(const unsigned char *peer_id,const char* msgbuf,unsigned int nb,int type);
@@ -118,6 +122,8 @@ private:
static void file_control(const unsigned char *peer_id, unsigned int sender_cmd, unsigned int receiver_cmd);
+ static void file_finished(const unsigned char *peer_id, int sending);
+
private slots:
void nodethread_finished();
void nodethread_connected(QString addr, quint16 port, NodeThread *thread);