DialogTemplate::operator DLGTEMPLATE *(void) { DLGTEMPLATE *lpDLGTEMPLATE(0); DLGITEMTEMPLATE *lpDLGITEMTEMPLATE; String workString; BYTE *lpCharByte; DWORD sizeData; if(!itemCount())return lpDLGTEMPLATE; sizeData=sizeof(DLGITEMTEMPLATE)*itemCount()+sizeof(DLGTEMPLATE); for(short itemIndex=0;itemIndex #include #include // ***************************** void finger(String userHostName); void ftp(String userHostName); void errorMessage(String messageString); #if 0 int PASCAL WinMain(HINSTANCE /*hInstance*/,HINSTANCE /*hPrevInstance*/,LPSTR /*lpszCmdLine*/,int /*nCmdShow*/) { WSADATA wskData; WORD wVersion=MAKEWORD(1,1); if(!::WSAStartup(wVersion,&wskData)) { ftp("sean@cnct.com"); } ::WSACleanup(); return FALSE; } #endif void finger(String userHostName) { struct hostent FAR *lpHostEntry; struct sockaddr_in anaddr; struct servent FAR *lpServent; short fingerPort; SOCKET clientSocket; WORD receiveCount; WORD stringLength(4096); String receiveString; String userName; String hostName; userName=userHostName.betweenString(0,'@'); hostName=userHostName.betweenString('@','\0'); receiveString.reserve(stringLength); if((lpHostEntry=::gethostbyname(hostName))==NULL){errorMessage("unknown host");return;} ::memcpy(&anaddr.sin_addr.s_addr,lpHostEntry->h_addr,lpHostEntry->h_length); if((lpServent=::getservbyname("finger","tcp"))==NULL){errorMessage("cannot determine port number for finger daemon.");return;} fingerPort=::htons(lpServent->s_port); if((clientSocket=::socket(PF_INET,SOCK_STREAM,0))==INVALID_SOCKET){errorMessage("unable to create socket.");return;} anaddr.sin_family=PF_INET; anaddr.sin_port=::htons(fingerPort); if(::connect(clientSocket,(struct sockaddr FAR *)&anaddr,sizeof(anaddr))) {errorMessage("unable to connect to finger daemon");::closesocket(clientSocket);return;} userName+="\r\n"; if(::send(clientSocket,userName,userName.length(),0)h_addr,lpHostEntry->h_length); if((lpServent=::getservbyname("ftp","tcp"))==NULL){errorMessage("cannot determine port number for ftp daemon.");return;} ftpPort=::htons(lpServent->s_port); if((clientSocket=::socket(PF_INET,SOCK_STREAM,0))==INVALID_SOCKET){errorMessage("unable to create socket.");return;} anaddr.sin_family=PF_INET; anaddr.sin_port=::htons(ftpPort); if(::connect(clientSocket,(struct sockaddr FAR *)&anaddr,sizeof(anaddr))) {errorMessage("unable to connect to ftp daemon");::closesocket(clientSocket);return;} if((receiveCount=::recv(clientSocket,receiveString,stringLength,0L))==SOCKET_ERROR) {errorMessage("error reading data from ftp daemon");::closesocket(clientSocket);return;} if(!receiveCount){errorMessage("no data received from ftp daemon");::closesocket(clientSocket);return;} errorMessage(receiveString); String ftpString("USER sean@cnct.com"); ftpString+="\r\n"; if(::send(clientSocket,ftpString,ftpString.length(),0)0)return TRUE; if(!acquireData)return FALSE; return cacheData(); } if(!(itemsInCache()>0)) { if(!waitForData&&!isReady(TRUE))return FALSE; if(!cacheData())return FALSE; } //WORD Socket::hasData(WORD useWait)const //{ // fd_set setDescriptor; // timeval waitTime; // // setDescriptor.fd_count=1; // setDescriptor.fd_array[0]=mSocket; // if(useWait){waitTime.tv_sec=WaitTime;waitTime.tv_usec=0;} // else {waitTime.tv_sec=0;waitTime.tv_usec=500;} // return ::select(0,&setDescriptor,0,0,&waitTime); //} class EchoServer : public GenericServer { public: EchoServer(void); virtual ~EchoServer(); protected: WORD charHandler(const char &charData); void acceptHandler(void); void message(const String &message); private: Console mWinConsole; }; EchoServer::EchoServer(void) { } EchoServer::~EchoServer() { mWinConsole.writeLine("ECHO server is destructing..."); mWinConsole.read(); } void EchoServer::acceptHandler(void) { char charData; send(TelnetPacket::InterpretAsCommand); send(TelnetPacket::Do); send(TelnetPacket::TermType); send(TelnetPacket::InterpretAsCommand); send(TelnetPacket::Do); send(TelnetPacket::Authentication); receive(charData); receive(charData); receive(charData); receive(charData); receive(charData); receive(charData); send("welcome to generic server, please login:"); } WORD EchoServer::charHandler(const char &charData) { String strVal; char rcvChar; ::sprintf(strVal,"received : (%lx)(%c)",(int)charData,charData); message(strVal); return TRUE; } void EchoServer::message(const String &message) { mWinConsole.writeLine(message); } #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 WORD Socket::receiveBinary(String pathFileName,TimeInfo &someTimeInfo) { Profile iniProfile; char rcvChar[BlockLength]; DWORD bufferLength(sizeof(rcvChar)); DWORD receiveCount(0); if(!isConnected())return FALSE; // mReceiveCache.reset(); iniProfile.makeFileName(pathFileName); if(pathFileName.isNull())return FALSE; FileHandle writeFile(pathFileName,FileHandle::Write,FileHandle::ShareNone,FileHandle::Create); someTimeInfo.startTime(); while(TRUE) { while(!mReceiveCache.isReady(FALSE)); // if((bufferLength=::recv(mSocket,rcvChar,bufferLength,0L))==SOCKET_ERROR||!bufferLength)break; if(!mReceiveCache.receive(rcvChar,sizeof(rcvChar),bufferLength))break; writeFile.write((unsigned char*)rcvChar,bufferLength); receiveCount+=bufferLength; if(!isConnected())break; } someTimeInfo.endTime(receiveCount); return TRUE; } WORD Socket::receiveBinary(String pathFileName,DWORD sizeData,TimeInfo &someTimeInfo) { String strDirectory(pathFileName); DiskInfo diskInfo; Profile iniProfile; char rcvChar[BlockLength]; DWORD bufferLength; DWORD receiveCount(0); if(!isConnected())return FALSE; // mReceiveCache.reset(); if(diskInfo.getDiskFreeSpace()sizeData)bufferLength=sizeData-receiveCount; else bufferLength=sizeof(rcvChar); while(!mReceiveCache.isReady(FALSE)); // if((bufferLength=::recv(mSocket,rcvChar,bufferLength,0L))==SOCKET_ERROR||!bufferLength)return FALSE; if(!mReceiveCache.receive(rcvChar,sizeof(rcvChar),bufferLength))break; writeFile.write((unsigned char*)rcvChar,bufferLength); receiveCount+=bufferLength; if(!isConnected())break; } someTimeInfo.endTime(sizeData); return TRUE; }