Esempio n. 1
0
void __fastcall directPacketInit(icq_packet *pPacket, DWORD dwSize)
{
	pPacket->wPlace = 0;
	pPacket->wLen   = (WORD)dwSize;
	pPacket->pData  = (BYTE *)SAFE_MALLOC(dwSize + 2);

	packLEWord(pPacket, pPacket->wLen);
}
Esempio n. 2
0
static void file_sendNick(CIcqProto* ppro, directconnect* dc)
{
	icq_packet packet;
	char* szNick;
	WORD wNickLen;
  DBVARIANT dbv = {DBVT_DELETED};

	if (ppro->getSettingString(NULL, "Nick", &dbv))
		szNick = "";
	else
		szNick = dbv.pszVal;

	wNickLen = strlennull(szNick);

	directPacketInit(&packet, (WORD)(8 + wNickLen));
	packByte(&packet, PEER_FILE_INIT_ACK); /* Ident */
	packLEDWord(&packet, dc->ft->dwTransferSpeed);
	packLEWord(&packet, (WORD)(wNickLen + 1));
	packBuffer(&packet, (LPBYTE)szNick, (WORD)(wNickLen + 1));
	ppro->sendDirectPacket(dc, &packet);
	ICQFreeVariant(&dbv);
}
Esempio n. 3
0
static void file_sendNextFile(CIcqProto* ppro, directconnect* dc)
{
	icq_packet packet;
	struct _stati64 statbuf;
	char szThisSubDir[MAX_PATH];

	if (dc->ft->iCurrentFile >= (int)dc->ft->dwFileCount)
	{
		ppro->BroadcastAck(dc->ft->hContact, ACKTYPE_FILE, ACKRESULT_SUCCESS, dc->ft, 0);
		ppro->CloseDirectConnection(dc);
		dc->ft->hConnection = NULL;
		return;
	}

	dc->ft->szThisFile = dc->ft->pszFiles[dc->ft->iCurrentFile];
	if (FileStatUtf(dc->ft->szThisFile, &statbuf))
	{
		ppro->icq_LogMessage(LOG_ERROR, LPGEN("Your file transfer has been aborted because one of the files that you selected to send is no longer readable from the disk. You may have deleted or moved it."));
		ppro->CloseDirectConnection(dc);
		dc->ft->hConnection = NULL;
		return;
	}

	char *pszThisFileName = FindFilePathContainer((LPCSTR*)dc->ft->pszFiles, dc->ft->iCurrentFile, szThisSubDir);

	if (statbuf.st_mode&_S_IFDIR)
	{
		dc->ft->currentIsDir = 1;
	}
	else
	{
		dc->ft->currentIsDir = 0;
		dc->ft->fileId = OpenFileUtf(dc->ft->szThisFile, _O_BINARY | _O_RDONLY, _S_IREAD);
		if (dc->ft->fileId == -1)
		{
			ppro->icq_LogMessage(LOG_ERROR, LPGEN("Your file transfer has been aborted because one of the files that you selected to send is no longer readable from the disk. You may have deleted or moved it."));
			ppro->CloseDirectConnection(dc);
			dc->ft->hConnection = NULL;
			return;
		}

	}
	dc->ft->dwThisFileSize = statbuf.st_size;
	dc->ft->dwThisFileDate = statbuf.st_mtime;
	dc->ft->dwFileBytesDone = 0;

	char *szThisFileNameAnsi = NULL, *szThisSubDirAnsi = NULL;
	if (!utf8_decode(pszThisFileName, &szThisFileNameAnsi))
		szThisFileNameAnsi = NULL;
	if (!utf8_decode(szThisSubDir, &szThisSubDirAnsi))
		szThisSubDirAnsi = NULL;
	WORD wThisFileNameLen = strlennull(szThisFileNameAnsi);
	WORD wThisSubDirLen = strlennull(szThisSubDirAnsi);

	directPacketInit(&packet, (WORD)(20 + wThisFileNameLen + wThisSubDirLen));
	packByte(&packet, PEER_FILE_NEXTFILE); /* Ident */
	packByte(&packet, (BYTE)((statbuf.st_mode & _S_IFDIR) != 0)); // Is subdir
	packLEWord(&packet, (WORD)(wThisFileNameLen + 1));
	packBuffer(&packet, (LPBYTE)szThisFileNameAnsi, (WORD)(wThisFileNameLen + 1));
	packLEWord(&packet, (WORD)(wThisSubDirLen + 1));
	packBuffer(&packet, (LPBYTE)szThisSubDirAnsi, (WORD)(wThisSubDirLen + 1));
	packLEDWord(&packet, dc->ft->dwThisFileSize);
	packLEDWord(&packet, statbuf.st_mtime);
	packLEDWord(&packet, dc->ft->dwTransferSpeed);
	SAFE_FREE(&szThisFileNameAnsi);
	SAFE_FREE(&szThisSubDirAnsi);
	ppro->sendDirectPacket(dc, &packet);

	ppro->BroadcastAck(dc->ft->hContact, ACKTYPE_FILE, ACKRESULT_NEXTFILE, dc->ft, 0);
}