Thread: Donations
View Single Post
Old 01-19-2004, 10:08 PM  
darkone
Disabled
 
darkone's Avatar
 
Join Date: Dec 2001
Posts: 2,230
Default

Heh, missed by a day I started coding new socket API for myself to use, and it took 22hours to finnish


// SSL Handshake
if (lpData->bProtected)
{
// Init secure socket
Secure_Init_Socket(&lpData->Socket,
lpUser->Connection.lpService, SSL_ACCEPT|SSL_CONNECT|SSL_LARGE_BUFFER);

Buffer[0].dwType = PACKAGE_SSL_ACCEPT;
Buffer[0].dwTimerType = TIMER_PER_PACKAGE;
Buffer[0].dwTimeOut = SSL_TIMEOUT;
dwBuffers++;
}
else if (! Service_RequireSecureData(lpUser->Connection.lpService, lpUser->UserFile))
{
lpData->dwLastError = IO_ENCRYPTION_REQUIRED;

EndJob(lpUser->Connection.dwUniqueId, 201);
return FALSE;
}

// Data transfer
if (lpData->bSpecial == LIST)
{
Buffer[dwBuffers].dwType = PACKAGE_BUFFER;
}
else if (lpData->bDirection == SEND)
{
Buffer[dwBuffers].dwType = PACKAGE_FILE_READ;
Buffer[dwBuffers].File.Handle = &lpData->IoFile;
}
else
{
Buffer[dwBuffers].dwType = PACKAGE_FILE_WRITE;
Buffer[dwBuffers].File.Handle = &lpData->IoFile;
}
Buffer[dwBuffers].buf = lpData->Buffer.buf;
Buffer[dwBuffers].size = lpData->Buffer.size;
Buffer[dwBuffers].len = lpData->Buffer.len;
Buffer[dwBuffers].dwTimerType = TIMER_PER_TRANSMIT;
Buffer[dwBuffers++].dwTimeOut = FTP_DATA_TIMEOUT;

// SSL Shutdown
if (lpData->bProtected)
{
Buffer[dwBuffers].dwType = PACKAGE_SSL_CLOSE;
Buffer[dwBuffers].dwTimerType = TIMER_PER_PACKAGE;
Buffer[dwBuffers++].dwTimeOut = SSL_TIMEOUT;
}

// TCP Shutdown
if (lpData->bDirection == SEND)
{
Buffer[dwBuffers].dwType = PACKAGE_SHUTDOWN;
Buffer[dwBuffers].dwTimerType = TIMER_PER_PACKAGE;
Buffer[dwBuffers++].dwTimeOut = 5000;
}

// Set socket options
SetSocketOption(&lpData->Socket, IO_SOCKET, SEND_LIMIT, (PCHAR)&lpUser->UserFile->Limits[0], sizeof(DWORD));
SetSocketOption(&lpData->Socket, IO_SOCKET, RECEIVE_LIMIT, (PCHAR)&lpUser->UserFile->Limits[1], sizeof(DWORD));
SetSocketOption(&lpData->Socket, SOL_SOCKET, SO_SNDBUF, (PCHAR)&FtpSettings.dwDataSocketBuffer[0], sizeof(DWORD));
SetSocketOption(&lpData->Socket, SOL_SOCKET, SO_SNDBUF, (PCHAR)&FtpSettings.dwDataSocketBuffer[1], sizeof(DWORD));
SetSocketOption(&lpData->Socket, IPPROTO_TCP, TCP_NODELAY, (PCHAR)&FtpSettings.bNagle, sizeof(BOOL));

// Bind socket to completion port
BindCompletionPort((HANDLE)lpData->Socket.Socket);

if (! QueueIoEx(lpUser->Connection.dwUniqueId,
&lpData->Socket, 202, TERTIARY, NULL, NULL, NULL, 0))
{
if (! TransmitPackages(&lpData->Socket, Buffer, dwBuffers, NULL, FTP_TransferComplete, lpUser))
{
lpData->dwLastError = GetLastError();
EndJob(lpUser->Connection.dwUniqueId, 202);
}
}
else lpData->dwLastError = WSAETIMEDOUT;



Isn't it nice :?
darkone is offline   Reply With Quote