2 AcessOS Test Network Application
\r
4 #include <acess/sys.h>
\r
7 #include <readline.h>
\r
12 // === PROTOTYPES ===
\r
13 int main(int argc, char *argv[], char *envp[]);
\r
14 int OpenTCP(const char *AddressString, short PortNumber);
\r
17 int main(int argc, char *argv[], char *envp[])
\r
20 int client_running = 1;
\r
21 int bUseReadline = !!argv[3]; // HACK: If third argument is present, use ReadLine
\r
22 tReadline *readline_info;
\r
25 if( argc < 2 || argc > 3 ) {
\r
26 fprintf(stderr, "Usage: telnet <host> [<port>]\n Port defaults to 23\n");
\r
31 port = atoi(argv[2]);
\r
35 // Connect to the remove server
\r
36 server_fd = OpenTCP( argv[1], port );
\r
37 if( server_fd == -1 ) {
\r
38 fprintf(stderr, "Unable to create socket\n");
\r
42 // Create a ReadLine instance with no history
\r
43 readline_info = Readline_Init(0);
\r
45 while( client_running )
\r
49 char buffer[BUFSIZ];
\r
53 FD_ZERO(&fds); FD_ZERO(&err_fds);
\r
54 FD_SET(0, &fds); FD_SET(0, &err_fds);
\r
55 FD_SET(server_fd, &fds); FD_SET(server_fd, &err_fds);
\r
57 // Wait for data (no timeout)
\r
58 rv = select(server_fd+1, &fds, NULL, &err_fds, NULL);
\r
61 // Check for remote data avaliable
\r
62 if( FD_ISSET(server_fd, &fds) )
\r
64 // Read from server, and write to stdout
\r
67 len = read(server_fd, buffer, BUFSIZ);
\r
68 write(1, buffer, len);
\r
69 } while( len == BUFSIZ );
\r
72 // Check for local data input
\r
73 if( FD_ISSET(0, &fds) )
\r
75 // Read from stdin, and write to server
\r
78 char *line = Readline_NonBlock(readline_info);
\r
81 write(server_fd, line, strlen(line));
\r
82 write(server_fd, "\n", 1);
\r
89 len = read(0, buffer, BUFSIZ);
\r
90 write(server_fd, buffer, len);
\r
91 write(1, buffer, len);
\r
92 } while( len == BUFSIZ );
\r
96 // If there was an error, quit
\r
97 if( FD_ISSET(server_fd, &err_fds) )
\r
99 printf("\nRemote connection lost\n");
\r
109 * \brief Initialise a TCP connection to \a AddressString on port \a PortNumber
\r
111 int OpenTCP(const char *AddressString, short PortNumber)
\r
114 uint8_t addrBuffer[16];
\r
116 // Parse IP Address
\r
117 addrType = Net_ParseAddress(AddressString, addrBuffer);
\r
118 if( addrType == 0 ) {
\r
119 fprintf(stderr, "Unable to parse '%s' as an IP address\n", AddressString);
\r
123 // Opens a R/W handle
\r
124 fd = Net_OpenSocket(addrType, addrBuffer, "tcpc");
\r
127 fprintf(stderr, "Unable to open TCP Client\n");
\r
131 // Set remote port and address
\r
132 ioctl(fd, 5, &PortNumber);
\r
133 ioctl(fd, 6, addrBuffer);
\r
136 if( ioctl(fd, 7, NULL) == 0 ) {
\r
137 fprintf(stderr, "Unable to start connection\n");
\r
141 printf("Connection opened\n");
\r
143 // Return descriptor
\r