-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <netdb.h>
-
-int server_create ()
-{
-
- int fd;
- struct sockaddr_in saddr;
-
- fd = socket (PF_INET, SOCK_STREAM, 0);
-
- saddr.sin_family = AF_INET;
- saddr.sin_port = htons (5222);
- saddr.sin_addr.s_addr = INADDR_ANY;
-
- bind (fd, (struct sockaddr*) &saddr, sizeof (struct sockaddr_in));
-
- listen (fd, 5);
-
- return fd;
-
-}
-
-int server_loop (int fd)
-{
- int client;
- struct sockaddr_in saddr;
- socklen_t saddr_size;
- saddr_size = sizeof (struct sockaddr_in);
- client = accept (fd, (struct sockaddr*) &saddr, &saddr_size);
- fprintf (stderr, "Accepted connection from %s:%d.\n",
- inet_ntoa (saddr.sin_addr), ntohs (saddr.sin_port));
- return client;
-}
-
-int client_create ()
-{
-
- int fd;
- struct sockaddr_in saddr;
- struct hostent* host;
-
- host = gethostbyname ("jabber.org");
-
- fd = socket (PF_INET, SOCK_STREAM, 0);
-
- saddr.sin_family = AF_INET;
- saddr.sin_port = htons (5222);
- saddr.sin_addr = *(struct in_addr*) host->h_addr;
-
- if (connect (fd, (struct sockaddr*) &saddr, sizeof (struct sockaddr_in)) < 0)
- {
- fprintf (stderr, "%s\n", strerror (errno));
- exit (1);
- }
- else
- {
- fprintf (stderr, "Connected to jabber.org:5222.\n");
- }
-
- return fd;
-
-}
-
-int client_loop (int client, int server)
-{
-
- char buffer[256];
- int r;
-
- fd_set fds;
-
- while (1)
- {
- FD_ZERO (&fds);
- FD_SET (client, &fds);
- FD_SET (server, &fds);
- select (FD_SETSIZE, &fds, NULL, NULL, NULL);
- if (FD_ISSET (client, &fds))
- {
- r = read (client, buffer, 256);
- if (r <= 0)
- {
- close (client);
- close (server);
- return r;
- }
- write (server, buffer, r);
- }
- if (FD_ISSET (server, &fds))
- {
- r = read (server, buffer, 256);
- if (r <= 0)
- {
- close (client);
- close (server);
- return r;
- }
- write (client, buffer, r);
- }
- }
-
- return r;
-
-}
-
-int main ()
-{
- int proxy;
- int client;
- int server;
- proxy = server_create ();
- client = server_loop (proxy);
- server = client_create ();
- if (client_loop (client, server) < 0)
- {
- fprintf (stderr, "%s\n", strerror (errno));
- exit (1);
- }
- return 0;
-}