Reactos
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
40void TNetwork::SetSocket(SOCKET s) {
41 socket = s;
42 net_type = TN_NETSOCKET;
43 local_echo = line_mode = 1;
44}
45
46void 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
53int 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
67int 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
81void 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
88void TNetwork::SetLocalAddress(char *buf) {
89 local_address = new char[strlen(buf) + 1];
90 strcpy(local_address, buf);
91}
92