diff options
Diffstat (limited to 'protocols/Yahoo/src/file_transfer.cpp')
-rw-r--r-- | protocols/Yahoo/src/file_transfer.cpp | 447 |
1 files changed, 229 insertions, 218 deletions
diff --git a/protocols/Yahoo/src/file_transfer.cpp b/protocols/Yahoo/src/file_transfer.cpp index f49661869c..fc6a6ae290 100644 --- a/protocols/Yahoo/src/file_transfer.cpp +++ b/protocols/Yahoo/src/file_transfer.cpp @@ -19,14 +19,14 @@ YList *file_transfers=NULL;
-static y_filetransfer* new_ft(CYahooProto* ppro, int id, MCONTACT hContact, const char *who, const char *msg,
- const char *url, const char *ft_token, int y7, YList *fs, int sending)
+static y_filetransfer* new_ft(CYahooProto* ppro, int id, MCONTACT hContact, const char *who, const char *msg,
+ const char *url, const char *ft_token, int y7, YList *fs, int sending)
{
LOG(("[new_ft] id: %d, who: %s, msg: %s, ft_token: %s, y7: %d, sending: %d", id, who, msg, ft_token, y7, sending));
- y_filetransfer* ft = (y_filetransfer*) calloc(1, sizeof(y_filetransfer));
+ y_filetransfer* ft = (y_filetransfer*)calloc(1, sizeof(y_filetransfer));
ft->ppro = ppro;
- ft->id = id;
+ ft->id = id;
ft->who = strdup(who);
ft->hWaitEvent = INVALID_HANDLE_VALUE;
@@ -39,25 +39,25 @@ static y_filetransfer* new_ft(CYahooProto* ppro, int id, MCONTACT hContact, cons ft->cancel = 0;
ft->y7 = y7;
-
+
ft->hWaitEvent = CreateEvent(NULL, FALSE, FALSE, NULL);
ft->pfts.cbSize = sizeof(PROTOFILETRANSFERSTATUS);
ft->pfts.hContact = hContact;
- ft->pfts.flags = PFTS_TCHAR;
+ ft->pfts.flags = PFTS_TCHAR;
ft->pfts.flags |= (sending != 0) ? PFTS_SENDING : PFTS_RECEIVING;
-
+
ft->pfts.tszWorkingDir = NULL;
ft->pfts.currentFileTime = 0;
ft->pfts.totalFiles = y_list_length(fs);
- ft->pfts.ptszFiles = (TCHAR**) mir_calloc(ft->pfts.totalFiles * sizeof(TCHAR *));
+ ft->pfts.ptszFiles = (TCHAR**)mir_calloc(ft->pfts.totalFiles * sizeof(TCHAR *));
ft->pfts.totalBytes = 0;
-
- int i=0;
- for(YList *l=fs; l; l=l->next) {
- yahoo_file_info *fi = ( yahoo_file_info* )l->data;
+
+ int i = 0;
+ for (YList *l = fs; l; l = l->next) {
+ yahoo_file_info *fi = (yahoo_file_info*)l->data;
ft->pfts.ptszFiles[i++] = mir_utf8decodeT(fi->filename);
ft->pfts.totalBytes += fi->filesize;
@@ -65,23 +65,23 @@ static y_filetransfer* new_ft(CYahooProto* ppro, int id, MCONTACT hContact, cons ft->pfts.currentFileNumber = 0;
- yahoo_file_info *fi = ( yahoo_file_info* )fs->data;
+ yahoo_file_info *fi = (yahoo_file_info*)fs->data;
ft->pfts.tszCurrentFile = _tcsdup(ft->pfts.ptszFiles[ft->pfts.currentFileNumber]);
- ft->pfts.currentFileSize = fi->filesize;
+ ft->pfts.currentFileSize = fi->filesize;
file_transfers = y_list_prepend(file_transfers, ft);
LOG(("[/new_ft]"));
-
+
return ft;
}
-y_filetransfer* find_ft(const char *ft_token, const char *who)
+y_filetransfer* find_ft(const char *ft_token, const char *who)
{
LOG(("[find_ft] Searching for: %s", ft_token));
-
- for(YList *l = file_transfers; l; l = y_list_next(l)) {
- y_filetransfer *f = (y_filetransfer* )l->data;
+
+ for (YList *l = file_transfers; l; l = y_list_next(l)) {
+ y_filetransfer *f = (y_filetransfer*)l->data;
if (mir_strcmp(f->ftoken, ft_token) == 0 && mir_strcmp(f->who, who) == 0) {
LOG(("[find_ft] Got it!"));
return f;
@@ -95,8 +95,8 @@ y_filetransfer* find_ft(const char *ft_token, const char *who) static void free_ft(y_filetransfer *ft)
{
LOG(("[free_ft] token: %s", ft->ftoken));
-
- for(YList *l = file_transfers; l; l = y_list_next(l)) {
+
+ for (YList *l = file_transfers; l; l = y_list_next(l)) {
if (l->data == ft) {
LOG(("[free_ft] Ft found and removed from the list"));
file_transfers = y_list_remove_link(file_transfers, l);
@@ -105,42 +105,42 @@ static void free_ft(y_filetransfer *ft) }
}
- if ( ft->hWaitEvent != INVALID_HANDLE_VALUE )
- CloseHandle( ft->hWaitEvent );
-
+ if (ft->hWaitEvent != INVALID_HANDLE_VALUE)
+ CloseHandle(ft->hWaitEvent);
+
FREE(ft->who);
FREE(ft->msg);
FREE(ft->url);
FREE(ft->ftoken);
FREE(ft->relay);
-
+
LOG(("[free_ft] About to free the File List."));
-
- while(ft->files) {
+
+ while (ft->files) {
YList *tmp = ft->files;
- yahoo_file_info * c = ( yahoo_file_info* )ft->files->data;
+ yahoo_file_info * c = (yahoo_file_info*)ft->files->data;
FREE(c->filename);
FREE(c);
ft->files = y_list_remove_link(ft->files, ft->files);
y_list_free_1(tmp);
}
-
+
LOG(("[free_ft] About to free PFTS."));
-
- for (int i=0; i< ft->pfts.totalFiles; i++)
+
+ for (int i = 0; i < ft->pfts.totalFiles; i++)
mir_free(ft->pfts.ptszFiles[i]);
-
+
mir_free(ft->pfts.ptszFiles);
FREE(ft->pfts.tszCurrentFile);
FREE(ft->pfts.tszWorkingDir);
FREE(ft);
-
+
LOG(("[/free_ft]"));
}
-static void upload_file(int id, INT_PTR fd, int error, void *data)
+static void upload_file(int id, INT_PTR fd, int error, void *data)
{
- y_filetransfer *sf = (y_filetransfer*) data;
+ y_filetransfer *sf = (y_filetransfer*)data;
struct yahoo_file_info *fi = (struct yahoo_file_info *)sf->files->data;
char buf[1024];
unsigned long size = 0;
@@ -155,13 +155,13 @@ static void upload_file(int id, INT_PTR fd, int error, void *data) if (!error) {
HANDLE myhFile = CreateFile(sf->pfts.tszCurrentFile,
GENERIC_READ,
- FILE_SHARE_READ|FILE_SHARE_WRITE,
+ FILE_SHARE_READ | FILE_SHARE_WRITE,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL | FILE_FLAG_SEQUENTIAL_SCAN,
0);
- if (myhFile !=INVALID_HANDLE_VALUE) {
+ if (myhFile != INVALID_HANDLE_VALUE) {
DWORD lNotify = GetTickCount();
LOG(("proto: %s, hContact: %p", sf->ppro->m_szModuleName, sf->hContact));
@@ -179,7 +179,8 @@ static void upload_file(int id, INT_PTR fd, int error, void *data) LOG(("Upload Failed. Send error? Got: %d", rw));
error = 1;
break;
- } else
+ }
+ else
size += rw;
if (GetTickCount() >= lNotify + 500 || rw < 1024 || size == fi->filesize) {
@@ -187,7 +188,7 @@ static void upload_file(int id, INT_PTR fd, int error, void *data) sf->pfts.totalProgress = size;
sf->pfts.currentFileProgress = size;
- ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_DATA, sf, (LPARAM) & sf->pfts);
+ ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_DATA, sf, (LPARAM)& sf->pfts);
lNotify = GetTickCount();
}
@@ -198,17 +199,17 @@ static void upload_file(int id, INT_PTR fd, int error, void *data) error = 1;
break;
}
- } while ( rw > 0 && dw > 0 && !error);
+ } while (rw > 0 && dw > 0 && !error);
CloseHandle(myhFile);
sf->pfts.totalProgress = size;
sf->pfts.currentFileProgress = size;
- ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_DATA, sf, (LPARAM) & sf->pfts);
+ ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_DATA, sf, (LPARAM)& sf->pfts);
}
- }
+ }
if (fd > 0) {
int tr = 0;
@@ -223,11 +224,11 @@ static void upload_file(int id, INT_PTR fd, int error, void *data) if (rw > 12) {
if (buf[9] != '2' || buf[10] != '0' || buf[11] != '0') {
LOG(("File Transfer Failed: %c%c%c", buf[9], buf[10], buf[11]));
- error=1;
+ error = 1;
}
}
}
- tr +=rw;
+ tr += rw;
} while (rw > 0);
Netlib_CloseHandle((HANDLE)fd);
@@ -235,62 +236,64 @@ static void upload_file(int id, INT_PTR fd, int error, void *data) LOG(("File send complete!"));
- if (! error) {
+ if (!error) {
sf->pfts.currentFileNumber++;
if (sf->pfts.currentFileNumber >= sf->pfts.totalFiles) {
ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_SUCCESS, sf, 0);
- } else {
+ }
+ else {
// Do Next file
FREE(sf->pfts.tszCurrentFile);
-
+
YList *l = sf->files;
-
- fi = ( yahoo_file_info* )l->data;
+
+ fi = (yahoo_file_info*)l->data;
FREE(fi->filename);
FREE(fi);
-
+
sf->files = y_list_remove_link(sf->files, l);
y_list_free_1(l);
-
+
// need to move to the next file on the list and fill the file information
- struct yahoo_file_info *fi = ( yahoo_file_info* )sf->files->data;
+ struct yahoo_file_info *fi = (yahoo_file_info*)sf->files->data;
sf->pfts.tszCurrentFile = _tcsdup(sf->pfts.ptszFiles[sf->pfts.currentFileNumber]);
- sf->pfts.currentFileSize = fi->filesize;
+ sf->pfts.currentFileSize = fi->filesize;
sf->pfts.currentFileProgress = 0;
-
+
ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_NEXTFILE, sf, 0);
LOG(("Waiting for next file request packet..."));
}
- } else {
+ }
+ else {
ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_FAILED, sf, 0);
}
}
-static void dl_file(int id, INT_PTR fd, int error, const char *filename, unsigned long size, void *data)
+static void dl_file(int id, INT_PTR fd, int error, const char *filename, unsigned long size, void *data)
{
- y_filetransfer *sf = (y_filetransfer*) data;
+ y_filetransfer *sf = (y_filetransfer*)data;
struct yahoo_file_info *fi = (struct yahoo_file_info *)sf->files->data;
- char buf[1024];
- unsigned long rsize = 0;
+ char buf[1024];
+ unsigned long rsize = 0;
DWORD dw, c;
if (fd < 0) {
LOG(("[get_url] Connect Failed!"));
-
+
if (sf->ftoken != NULL) {
LOG(("[get_url] DC Detected: asking sender to upload to Yahoo FileServers!"));
- yahoo_ftdc_deny(id, sf->who, fi->filename, sf->ftoken, 3);
+ yahoo_ftdc_deny(id, sf->who, fi->filename, sf->ftoken, 3);
}
-
+
error = 1;
}
-
- if (!error) {
+
+ if (!error) {
HANDLE myhFile;
TCHAR filefull[MAX_PATH];
-
+
/*
* We need FULL Path for File Resume to work properly!!!
*
@@ -298,141 +301,145 @@ static void dl_file(int id, INT_PTR fd, int error, const char *filename, unsigne */
mir_sntprintf(filefull, SIZEOF(filefull), _T("%s\\%s"), sf->pfts.tszWorkingDir, sf->pfts.tszCurrentFile);
FREE(sf->pfts.tszCurrentFile);
- sf->pfts.tszCurrentFile = _tcsdup(filefull);
-
+ sf->pfts.tszCurrentFile = _tcsdup(filefull);
+
ResetEvent(sf->hWaitEvent);
-
- if ( sf->ppro->ProtoBroadcastAck( sf->hContact, ACKTYPE_FILE, ACKRESULT_FILERESUME, sf, (LPARAM)&sf->pfts )) {
- WaitForSingleObject( sf->hWaitEvent, INFINITE );
-
- LOG(("[dl_file] Got action: %ld", sf->action));
-
- switch(sf->action) {
- case FILERESUME_RENAME:
- case FILERESUME_OVERWRITE:
- case FILERESUME_RESUME:
- // no action needed at this point, just break out of the switch statement
- break;
- case FILERESUME_CANCEL :
- sf->cancel = 1;
- break;
+ if (sf->ppro->ProtoBroadcastAck(sf->hContact, ACKTYPE_FILE, ACKRESULT_FILERESUME, sf, (LPARAM)&sf->pfts)) {
+ WaitForSingleObject(sf->hWaitEvent, INFINITE);
- case FILERESUME_SKIP :
- default:
- sf->cancel = 2;
- break;
- }
+ LOG(("[dl_file] Got action: %ld", sf->action));
+
+ switch (sf->action) {
+ case FILERESUME_RENAME:
+ case FILERESUME_OVERWRITE:
+ case FILERESUME_RESUME:
+ // no action needed at this point, just break out of the switch statement
+ break;
+
+ case FILERESUME_CANCEL:
+ sf->cancel = 1;
+ break;
+
+ case FILERESUME_SKIP:
+ default:
+ sf->cancel = 2;
+ break;
+ }
}
-
-
- if (! sf->cancel) {
-
- myhFile = CreateFile(sf->pfts.tszCurrentFile,
- GENERIC_WRITE,
- FILE_SHARE_WRITE,
- NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
-
- if (myhFile !=INVALID_HANDLE_VALUE) {
+
+
+ if (!sf->cancel) {
+
+ myhFile = CreateFile(sf->pfts.tszCurrentFile,
+ GENERIC_WRITE,
+ FILE_SHARE_WRITE,
+ NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
+
+ if (myhFile != INVALID_HANDLE_VALUE) {
DWORD lNotify = GetTickCount();
-
+
SetEndOfFile(myhFile);
-
+
LOG(("proto: %s, hContact: %p", sf->ppro->m_szModuleName, sf->hContact));
-
+
ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_CONNECTED, sf, 0);
-
+
do {
dw = Netlib_Recv((HANDLE)fd, buf, 1024, MSG_NODUMP);
-
+
if (dw > 0) {
WriteFile(myhFile, buf, dw, &c, NULL);
rsize += dw;
sf->pfts.totalProgress += dw;
sf->pfts.currentFileProgress += dw;
-
+
if (GetTickCount() >= lNotify + 500 || dw <= 0 || rsize == size) {
-
+
LOG(("DOING UI Notify. Got %lu/%lu", rsize, size));
-
- ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_DATA, sf, (LPARAM) & sf->pfts);
+
+ ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_DATA, sf, (LPARAM)& sf->pfts);
lNotify = GetTickCount();
}
-
- } else {
+
+ }
+ else {
LOG(("Recv Failed! Socket Error?"));
error = 1;
break;
}
-
+
if (sf->cancel) {
LOG(("Recv Cancelled! "));
error = 1;
break;
}
- } while ( dw > 0 && rsize < size);
-
- while (dw > 0 && ! sf->cancel && ! error) {
+ } while (dw > 0 && rsize < size);
+
+ while (dw > 0 && !sf->cancel && !error) {
dw = Netlib_Recv((HANDLE)fd, buf, 1024, MSG_NODUMP);
LOG(("Ack."));
}
-
- ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_DATA, sf, (LPARAM) & sf->pfts);
-
+
+ ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_DATA, sf, (LPARAM)& sf->pfts);
+
LOG(("[Finished DL] Got %lu/%lu", rsize, size));
CloseHandle(myhFile);
-
- } else {
+
+ }
+ else {
LOG(("Can not open file for writing: %s", buf));
error = 1;
}
-
- }
- }
-
+
+ }
+ }
+
if (fd > 0) {
LOG(("Closing connection: %d", fd));
Netlib_CloseHandle((HANDLE)fd);
-
+
if (sf->cancel || error) {
/* abort FT transfer */
yahoo_ft7dc_abort(id, sf->who, sf->ftoken);
}
}
-
- if (! error) {
+
+ if (!error) {
sf->pfts.currentFileNumber++;
-
+
LOG(("File %d/%d download complete!", sf->pfts.currentFileNumber, sf->pfts.totalFiles));
-
+
if (sf->pfts.currentFileNumber >= sf->pfts.totalFiles) {
ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_SUCCESS, sf, 0);
- } else {
+ }
+ else {
// Do Next file
yahoo_ft7dc_nextfile(id, sf->who, sf->ftoken);
FREE(sf->pfts.tszCurrentFile);
-
+
YList *l = sf->files;
-
- fi = ( yahoo_file_info* )l->data;
+
+ fi = (yahoo_file_info*)l->data;
FREE(fi->filename);
FREE(fi);
-
+
sf->files = y_list_remove_link(sf->files, l);
y_list_free_1(l);
-
+
// need to move to the next file on the list and fill the file information
- struct yahoo_file_info *fi = ( yahoo_file_info* )sf->files->data;
+ struct yahoo_file_info *fi = (yahoo_file_info*)sf->files->data;
sf->pfts.tszCurrentFile = _tcsdup(sf->pfts.ptszFiles[sf->pfts.currentFileNumber]);
- sf->pfts.currentFileSize = fi->filesize;
+ sf->pfts.currentFileSize = fi->filesize;
sf->pfts.currentFileProgress = 0;
-
+
ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_NEXTFILE, sf, 0);
}
- } else {
+ }
+ else {
LOG(("File download failed!"));
-
+
ProtoBroadcastAck(sf->ppro->m_szModuleName, sf->hContact, ACKTYPE_FILE, ACKRESULT_FAILED, sf, 0);
}
}
@@ -440,18 +447,18 @@ static void dl_file(int id, INT_PTR fd, int error, const char *filename, unsigne //=======================================================
//File Transfer
//=======================================================
-void __cdecl CYahooProto::recv_filethread(void *psf)
+void __cdecl CYahooProto::recv_filethread(void *psf)
{
- y_filetransfer *sf = ( y_filetransfer* )psf;
+ y_filetransfer *sf = (y_filetransfer*)psf;
struct yahoo_file_info *fi = (struct yahoo_file_info *)sf->files->data;
-
+
ProtoBroadcastAck(sf->hContact, ACKTYPE_FILE, ACKRESULT_CONNECTING, sf, 0);
-
+
debugLogA("[yahoo_recv_filethread] who: %s, msg: %s, filename: %s ", sf->who, sf->msg, fi->filename);
-
-
+
+
yahoo_get_url_handle(m_id, sf->url, &dl_file, sf);
-
+
if (sf->pfts.currentFileNumber >= sf->pfts.totalFiles)
free_ft(sf);
else
@@ -463,7 +470,7 @@ void CYahooProto::ext_got_file(const char *me, const char *who, const char *url, LOG(("[ext_yahoo_got_file] ident:%s, who: %s, url: %s, expires: %lu, msg: %s, fname: %s, fsize: %lu ftoken: %s y7: %d", me, who, url, expires, msg, fname, fesize, ft_token == NULL ? "NULL" : ft_token, y7));
MCONTACT hContact = getbuddyH(who);
- if (hContact == NULL)
+ if (hContact == NULL)
hContact = add_buddy(who, who, 0 /* NO FT for other IMs */, PALF_TEMPORARY);
char fn[1024];
@@ -475,25 +482,26 @@ void CYahooProto::ext_got_file(const char *me, const char *who, const char *url, char *start, *end;
/* based on how gaim does this */
- start = ( char* )strrchr(url, '/');
+ start = (char*)strrchr(url, '/');
if (start)
start++;
- end = ( char* )strrchr(url, '?');
+ end = (char*)strrchr(url, '?');
if (start && *start && end) {
- mir_strncpy(fn, start, end-start+1);
- } else
+ mir_strncpy(fn, start, end - start + 1);
+ }
+ else
mir_strcpy(fn, "filename.ext");
}
- yahoo_file_info *fi = y_new(struct yahoo_file_info,1);
+ yahoo_file_info *fi = y_new(struct yahoo_file_info, 1);
fi->filename = strdup(fn);
fi->filesize = fesize;
YList *files = y_list_append(NULL, fi);
- y_filetransfer *ft = new_ft(this, m_id, hContact, who, msg, url, ft_token, y7, files, 0 /* downloading */);
+ y_filetransfer *ft = new_ft(this, m_id, hContact, who, msg, url, ft_token, y7, files, 0 /* downloading */);
if (ft == NULL) {
y_list_free(files);
debugLogA("SF IS NULL!!!");
@@ -502,7 +510,7 @@ void CYahooProto::ext_got_file(const char *me, const char *who, const char *url, TCHAR* ptszFileName = mir_a2t(fn);
- PROTORECVFILET pre = {0};
+ PROTORECVFILET pre = { 0 };
pre.dwFlags = PRFF_TCHAR;
pre.fileCount = 1;
pre.timestamp = time(NULL);
@@ -523,7 +531,7 @@ void CYahooProto::ext_got_files(const char *me, const char *who, const char *ft_ LOG(("[ext_yahoo_got_files] ident:%s, who: %s, ftoken: %s ", me, who, ft_token == NULL ? "NULL" : ft_token));
MCONTACT hContact = getbuddyH(who);
- if (hContact == NULL)
+ if (hContact == NULL)
hContact = add_buddy(who, who, 0 /* NO FT for other IMs */, PALF_TEMPORARY);
y_filetransfer *ft = new_ft(this, m_id, hContact, who, NULL, NULL, ft_token, y7, files, 0 /* downloading */);
@@ -533,7 +541,7 @@ void CYahooProto::ext_got_files(const char *me, const char *who, const char *ft_ }
fn[0] = '\0';
- for (YList *f=files; f; f = y_list_next(f)) {
+ for (YList *f = files; f; f = y_list_next(f)) {
char z[1024];
struct yahoo_file_info *fi = (struct yahoo_file_info *) f->data;
@@ -547,7 +555,7 @@ void CYahooProto::ext_got_files(const char *me, const char *who, const char *ft_ }
- PROTORECVFILET pre = {0};
+ PROTORECVFILET pre = { 0 };
pre.fileCount = 1;
pre.timestamp = time(NULL);
pre.descr.a = "";
@@ -559,55 +567,57 @@ void CYahooProto::ext_got_files(const char *me, const char *who, const char *ft_ void CYahooProto::ext_got_file7info(const char *me, const char *who, const char *url, const char *fname, const char *ft_token)
{
LOG(("[ext_yahoo_got_file7info] ident:%s, who: %s, url: %s, fname: %s, ft_token: %s", me, who, url, fname, ft_token));
-
+
y_filetransfer *ft = find_ft(ft_token, who);
-
+
if (ft == NULL) {
LOG(("ERROR: Can't find the token: %s in my file transfers list...", ft_token));
return;
}
-
- ProtoBroadcastAck(ft->hContact, ACKTYPE_GETINFO, ACKRESULT_SUCCESS, (HANDLE) 1, 0);
-
+
+ ProtoBroadcastAck(ft->hContact, ACKTYPE_GETINFO, ACKRESULT_SUCCESS, (HANDLE)1, 0);
+
FREE(ft->url);
-
+
ft->url = strdup(url);
-
+
ForkThread(&CYahooProto::recv_filethread, ft);
}
void ext_yahoo_send_file7info(int id, const char *me, const char *who, const char *ft_token)
{
LOG(("[ext_yahoo_send_file7info] id: %i, ident:%s, who: %s, ft_token: %s", id, me, who, ft_token));
-
+
y_filetransfer *ft = find_ft(ft_token, who);
-
+
if (ft == NULL) {
LOG(("ERROR: Can't find the token: %s in my file transfers list...", ft_token));
return;
}
-
- yahoo_file_info *fi = (yahoo_file_info *) ft->files->data;
-
+
+ yahoo_file_info *fi = (yahoo_file_info *)ft->files->data;
+
char *c = strrchr(fi->filename, '\\');
if (c != NULL) {
c++;
- } else {
+ }
+ else {
c = fi->filename;
}
-
+
LOG(("Resolving relay.msg.yahoo.com..."));
PHOSTENT he = gethostbyname("relay.msg.yahoo.com");
-
+
if (he) {
- ft->relay = strdup( inet_ntoa(*( PIN_ADDR )he->h_addr_list[0]));
+ ft->relay = strdup(inet_ntoa(*(PIN_ADDR)he->h_addr_list[0]));
LOG(("Got Relay IP: %s", ft->relay));
- } else {
+ }
+ else {
ft->relay = strdup("98.136.112.33");
LOG(("DNS Lookup failed. Using Relay IP: %s", ft->relay));
}
-
- yahoo_send_file7info(id, me, who, ft_token, c, ft->relay );
+
+ yahoo_send_file7info(id, me, who, ft_token, c, ft->relay);
}
struct _sfs{
@@ -619,44 +629,45 @@ struct _sfs{ void CYahooProto::ext_ft7_send_file(const char *me, const char *who, const char *filename, const char *token, const char *ft_token)
{
LOG(("[ext_yahoo_send_file7info] ident:%s, who: %s, ft_token: %s", me, who, ft_token));
-
+
y_filetransfer *sf = find_ft(ft_token, who);
-
+
if (sf == NULL) {
LOG(("ERROR: Can't find the token: %s in my file transfers list...", ft_token));
return;
}
- struct _sfs *s = (struct _sfs *) malloc( sizeof( struct _sfs ));
-
+ struct _sfs *s = (struct _sfs *) malloc(sizeof(struct _sfs));
+
s->me = strdup(me);
s->token = strdup(token);
s->sf = sf;
-
+
ForkThread(&CYahooProto::send_filethread, s);
}
/**************** Send File ********************/
-void __cdecl CYahooProto::send_filethread(void *psf)
+void __cdecl CYahooProto::send_filethread(void *psf)
{
- struct _sfs *s = ( struct _sfs * )psf;
+ struct _sfs *s = (struct _sfs *)psf;
y_filetransfer *sf = s->sf;
struct yahoo_file_info *fi = (struct yahoo_file_info *)sf->files->data;
-
+
ProtoBroadcastAck(sf->hContact, ACKTYPE_FILE, ACKRESULT_CONNECTING, sf, 0);
-
+
LOG(("who %s, msg: %s, filename: %s filesize: %ld", sf->who, sf->msg, fi->filename, fi->filesize));
-
- yahoo_send_file_y7(sf->id, s->me, sf->who, sf->relay, fi->filesize, s->token, &upload_file, sf);
-
+
+ yahoo_send_file_y7(sf->id, s->me, sf->who, sf->relay, fi->filesize, s->token, &upload_file, sf);
+
FREE(s->me);
FREE(s->token);
FREE(s);
-
+
if (sf->pfts.currentFileNumber >= sf->pfts.totalFiles) {
free_ft(sf);
- } else {
+ }
+ else {
debugLogA("[yahoo_send_filethread] More files coming?");
}
}
@@ -668,50 +679,50 @@ void __cdecl CYahooProto::send_filethread(void *psf) HANDLE __cdecl CYahooProto::SendFile(MCONTACT hContact, const TCHAR *szDescription, TCHAR **ppszFiles)
{
LOG(("[YahooSendFile]"));
-
- if ( !m_bLoggedIn )
+
+ if (!m_bLoggedIn)
return 0;
DBVARIANT dbv;
if (!getString(hContact, YAHOO_LOGINID, &dbv)) {
long tFileSize = 0;
struct _stat statbuf;
- YList *fs=NULL;
-
- int i=0;
- for (;ppszFiles[i] != NULL;i++) {
- if ( _tstat( ppszFiles[i], &statbuf ) == 0)
+ YList *fs = NULL;
+
+ int i = 0;
+ for (; ppszFiles[i] != NULL; i++) {
+ if (_tstat(ppszFiles[i], &statbuf) == 0)
tFileSize = statbuf.st_size;
-
- struct yahoo_file_info *fi = y_new(struct yahoo_file_info,1);
-
+
+ struct yahoo_file_info *fi = y_new(struct yahoo_file_info, 1);
+
fi->filename = strdup(T2Utf(ppszFiles[i]));
fi->filesize = tFileSize;
-
+
fs = y_list_append(fs, fi);
}
-
- y_filetransfer *sf = new_ft(this, m_id, hContact, dbv.pszVal, ( char* )szDescription,
- NULL, NULL, 0, fs, 1 /* sending */);
-
+
+ y_filetransfer *sf = new_ft(this, m_id, hContact, dbv.pszVal, (char*)szDescription,
+ NULL, NULL, 0, fs, 1 /* sending */);
+
db_free(&dbv);
-
+
if (sf == NULL) {
debugLogA("SF IS NULL!!!");
return 0;
}
LOG(("who: %s, msg: %s, # files: %d", sf->who, sf->msg, i));
-
- sf->ftoken=yahoo_ft7dc_send(m_id, sf->who, fs);
-
+
+ sf->ftoken = yahoo_ft7dc_send(m_id, sf->who, fs);
+
LOG(("Exiting SendRequest..."));
-
+
return sf;
}
-
+
LOG(("[/YahooSendFile]"));
-
+
return 0;
}
@@ -725,12 +736,12 @@ HANDLE __cdecl CYahooProto::FileAllow(MCONTACT hContact, HANDLE hTransfer, const debugLogA("[YahooFileAllow]");
//LOG(LOG_INFO, "[%s] Requesting file from %s", ft->cookie, ft->user);
- ft->pfts.tszWorkingDir = _tcsdup( szPath );
+ ft->pfts.tszWorkingDir = _tcsdup(szPath);
size_t len = mir_tstrlen(ft->pfts.tszWorkingDir) - 1;
if (ft->pfts.tszWorkingDir[len] == '\\')
ft->pfts.tszWorkingDir[len] = 0;
-
+
if (ft->y7) {
debugLogA("[YahooFileAllow] Trying to relay Y7 transfer.");
//void yahoo_ft7dc_accept(int id, const char *buddy, const char *ft_token);
@@ -751,18 +762,18 @@ int __cdecl CYahooProto::FileCancel(MCONTACT hContact, HANDLE hTransfer) debugLogA("[YahooFileCancel]");
y_filetransfer* ft = (y_filetransfer*)hTransfer;
-
- if (! (ft->pfts.flags & PFTS_SENDING) && ! ft->cancel) {
+
+ if (!(ft->pfts.flags & PFTS_SENDING) && !ft->cancel) {
/* abort FT transfer */
yahoo_ft7dc_abort(ft->id, ft->who, ft->ftoken);
}
-
- if ( ft->hWaitEvent != INVALID_HANDLE_VALUE )
- SetEvent( ft->hWaitEvent );
+
+ if (ft->hWaitEvent != INVALID_HANDLE_VALUE)
+ SetEvent(ft->hWaitEvent);
ft->action = FILERESUME_CANCEL;
ft->cancel = 1;
-
+
return 0;
}
|