92 lines
3.6 KiB
C++
92 lines
3.6 KiB
C++
#include <socket/socket.hpp>
|
|
#include <socket/wsadata.hpp>
|
|
#include <socket/inaddr.hpp>
|
|
#include <socket/hostent.hpp>
|
|
#include <socket/servent.hpp>
|
|
//#include <winsock2.h>
|
|
|
|
|
|
#define SIO_GET_INTERFACE_LIST _IOR('t', 127, u_long) // <TBD>
|
|
|
|
typedef struct _INTERFACE_INFO
|
|
{
|
|
u_long iiFlags; /* Interface flags */
|
|
struct sockaddr iiAddress; /* Interface address */
|
|
struct sockaddr iiBroadcastAddress; /* Broadcast address */
|
|
struct sockaddr iiNetmask; /* Network mask */
|
|
} INTERFACE_INFO, FAR * LPINTERFACE_INFO;
|
|
|
|
void message(const String &message);
|
|
|
|
void main(void)
|
|
{
|
|
WSASystem wsaSystem;
|
|
String hostName("li.net");
|
|
HostEnt hostEntry;
|
|
ServEnt serverEntry;
|
|
InternetAddress internetAddress(hostName);
|
|
INETSocketAddress inetSocketAddress;
|
|
Socket ftpControl;
|
|
|
|
message(String("trying ")+hostName+String("..."));
|
|
if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return;}}
|
|
else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return;}
|
|
message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")"));
|
|
inetSocketAddress.internetAddress((hostEntry.addresses())[0]);
|
|
if(!serverEntry.serviceByName("ftp","tcp")){message("cannot determine port number for ftp daemon.");return;}
|
|
if(!ftpControl.openSocket()){message("unable to create socket.");return;}
|
|
inetSocketAddress.family(PF_INET);
|
|
inetSocketAddress.port(serverEntry.port());
|
|
if(!ftpControl.connect(inetSocketAddress)){message("unable to connect to ftp daemon");return;}
|
|
// if(!receive(mAckConnectionResponseStrings))return FALSE;
|
|
ftpControl.getSocketName(inetSocketAddress);
|
|
message(String("my IP address is..")+(String)inetSocketAddress.internetAddress());
|
|
|
|
|
|
INETSocketAddress inetAddress;
|
|
int length(sizeof(sockaddr_in));
|
|
::getpeername(ftpControl,(sockaddr*)((sockaddr_in*)&inetAddress),&length);
|
|
message((String)inetAddress.internetAddress());
|
|
|
|
// return mFTPControl.isConnected();
|
|
|
|
|
|
// char bigBuff[256];
|
|
// ::memset(bigBuff,0,sizeof(bigBuff));
|
|
INTERFACE_INFO interfaceInfo;
|
|
::memset(&interfaceInfo,0,sizeof(interfaceInfo));
|
|
ioctlsocket(ftpControl,SIO_GET_INTERFACE_LIST,(ULONG*)&interfaceInfo);
|
|
message("ioctl succeeded");
|
|
INTERFACE_INFO *pI=&interfaceInfo;
|
|
return;
|
|
}
|
|
|
|
void message(const String &message)
|
|
{
|
|
::OutputDebugString(message+String("\n"));
|
|
}
|
|
|
|
|
|
#if 0
|
|
WORD FTPClient::open(String hostName)
|
|
{
|
|
HostEnt hostEntry;
|
|
ServEnt serverEntry;
|
|
|
|
message(String("trying ")+hostName+String("..."));
|
|
if(!mWSASystem.isInitialized()){message("WINSOCK initialization failure.");return FALSE;}
|
|
InternetAddress internetAddress(hostName);
|
|
if(!internetAddress.isZero()){if(!hostEntry.hostByAddress(internetAddress)){message(String("no DNS entry for ")+hostName);return FALSE;}}
|
|
else if(!hostEntry.hostByName(hostName)){message(String("no DNS entry for ")+hostName);return FALSE;}
|
|
message(String("connect...")+String("'")+hostEntry.hostName()+String("' (")+(String)(hostEntry.addresses())[0]+String(")"));
|
|
INETSocketAddress::internetAddress((hostEntry.addresses())[0]);
|
|
if(!serverEntry.serviceByName("ftp","tcp")){message("cannot determine port number for ftp daemon.");return FALSE;}
|
|
if(!mFTPControl.openSocket()){message("unable to create socket.");return FALSE;}
|
|
INETSocketAddress::family(PF_INET);
|
|
INETSocketAddress::port(serverEntry.port());
|
|
if(!mFTPControl.connect((INETSocketAddress&)*this)){message("unable to connect to ftp daemon");return FALSE;}
|
|
if(!receive(mAckConnectionResponseStrings))return FALSE;
|
|
mFTPControl.getSocketName((INETSocketAddress&)*this);
|
|
return mFTPControl.isConnected();
|
|
}
|
|
#endif
|