1 /////////////////////////////////////////////////////////////////////////////// 2 //Telnet Win32 : an ANSI telnet client. 3 //Copyright (C) 1998-2000 Paul Brannan 4 //Copyright (C) 1998 I.Ioannou 5 //Copyright (C) 1997 Brad Johnson 6 // 7 //This program is free software; you can redistribute it and/or 8 //modify it under the terms of the GNU General Public License 9 //as published by the Free Software Foundation; either version 2 10 //of the License, or (at your option) any later version. 11 // 12 //This program is distributed in the hope that it will be useful, 13 //but WITHOUT ANY WARRANTY; without even the implied warranty of 14 //MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15 //GNU General Public License for more details. 16 // 17 //You should have received a copy of the GNU General Public License 18 //along with this program; if not, write to the Free Software 19 //Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. 20 // 21 //I.Ioannou 22 //roryt@hol.gr 23 // 24 /////////////////////////////////////////////////////////////////////////// 25 26 /////////////////////////////////////////////////////////////////////////////// 27 // 28 // Module: tnetwork.cpp 29 // 30 // Contents: telnet network module 31 // 32 // Product: telnet 33 // 34 // Revisions: March 18, 1999 Paul Brannan (pbranna@clemson.edu) 35 // 36 /////////////////////////////////////////////////////////////////////////////// 37 38 #include "precomp.h" 39 40 void TNetwork::SetSocket(SOCKET s) { 41 socket = s; 42 net_type = TN_NETSOCKET; 43 local_echo = line_mode = 1; 44 } 45 46 void TNetwork::SetPipe(HANDLE pIn, HANDLE pOut) { 47 pipeIn = pIn; 48 pipeOut = pOut; 49 net_type = TN_NETPIPE; 50 local_echo = line_mode = 0; 51 } 52 53 int TNetwork::WriteString(const char *str, const int length) { 54 switch(net_type) { 55 case TN_NETSOCKET: 56 return send(socket, str, length, 0); 57 case TN_NETPIPE: 58 { 59 DWORD dwWritten; 60 if(!WriteFile(pipeOut, str, length, &dwWritten, (LPOVERLAPPED)NULL)) return -1; 61 return dwWritten; 62 } 63 } 64 return 0; 65 } 66 67 int TNetwork::ReadString (char *str, const int length) { 68 switch(net_type) { 69 case TN_NETSOCKET: 70 return recv(socket, str, length, 0); 71 case TN_NETPIPE: 72 { 73 DWORD dwRead; 74 if(!ReadFile(pipeIn, str, length, &dwRead, (LPOVERLAPPED)NULL)) return -1; 75 return dwRead; 76 } 77 } 78 return 0; 79 } 80 81 void TNetwork::do_naws(int width, int height) { 82 if(!naws_func) return; 83 char buf[100]; 84 int len = (*naws_func)(buf, width, height); 85 WriteString(buf, len); 86 } 87 88 void TNetwork::SetLocalAddress(char *buf) { 89 local_address = new char[strlen(buf) + 1]; 90 strcpy(local_address, buf); 91 } 92 93