+++ /dev/null
-[global]
-
-address = 0.0.0.0
-port = 5222
+++ /dev/null
-#include <glib.h>
-#include <gnet.h>
-#include <stdio.h>
-
-void client_event (GConn* conn, GConnEvent* event, gpointer data)
-{
- GConn* server;
- server = (GConn*) data;
- switch (event->type)
- {
- case GNET_CONN_CONNECT:
- fprintf (stderr, "Connected to localhost:80.\n");
- gnet_conn_read (conn);
- break;
- case GNET_CONN_READ:
- if (server == NULL)
- {
- fprintf (stderr, "Establishing connection to localhost:80.\n");
- server = gnet_conn_new ("127.0.0.1", 80, client_event, (gpointer) conn);
- gnet_conn_connect (server);
- gnet_conn_set_callback (conn, client_event, (gpointer) server);
- }
- gnet_conn_write (server, event->buffer, event->length);
- gnet_conn_read (conn);
- break;
- case GNET_CONN_WRITE:
- break;
- default:
- fprintf (stderr, "Received an unexpected client event.\n");
- break;
- }
-}
-
-void new_client (GServer* server, GConn* conn, gpointer data)
-{
- if (conn == NULL)
- {
- fprintf (stderr, "Server has received an error event.\n");
- return;
- }
- gnet_conn_set_callback (conn, client_event, NULL);
- gnet_conn_read (conn);
-}
-
-int main ()
-{
-
- GKeyFile *keyfile;
- GInetAddr* inetaddr;
- gchar* conf_address;
- gint port;
-
- gnet_init ();
-
- keyfile = g_key_file_new ();
-
- g_key_file_load_from_file (keyfile, "conf", G_KEY_FILE_NONE, NULL);
-
- conf_address = g_key_file_get_string (keyfile, "global", "address", NULL);
- port = g_key_file_get_integer (keyfile, "global", "port", NULL);
-
- printf ("Listen address is %s:%d\n", conf_address, port);
-
- inetaddr = gnet_inetaddr_new_nonblock (conf_address, port);
- gnet_server_new (inetaddr, port, new_client, NULL);
-
- g_main_loop_run (g_main_loop_new (g_main_context_default (), TRUE));
-
- return 0;
-
-}
--- /dev/null
+#include <glib.h>
+#include <gnet.h>
+#include <stdio.h>
+
+void client_event (GConn* conn, GConnEvent* event, gpointer data)
+{
+ GConn* server;
+ server = (GConn*) data;
+ switch (event->type)
+ {
+ case GNET_CONN_CONNECT:
+ fprintf (stderr, "Connected to localhost:80.\n");
+ gnet_conn_read (conn);
+ break;
+ case GNET_CONN_READ:
+ if (server == NULL)
+ {
+ fprintf (stderr, "Establishing connection to localhost:80.\n");
+ server = gnet_conn_new ("127.0.0.1", 80, client_event, (gpointer) conn);
+ gnet_conn_connect (server);
+ gnet_conn_set_callback (conn, client_event, (gpointer) server);
+ }
+ gnet_conn_write (server, event->buffer, event->length);
+ gnet_conn_read (conn);
+ break;
+ case GNET_CONN_WRITE:
+ break;
+ default:
+ fprintf (stderr, "Received an unexpected client event.\n");
+ break;
+ }
+}
+
+void new_client (GServer* server, GConn* conn, gpointer data)
+{
+ if (conn == NULL)
+ {
+ fprintf (stderr, "Server has received an error event.\n");
+ return;
+ }
+ gnet_conn_set_callback (conn, client_event, NULL);
+ gnet_conn_read (conn);
+}
+
+int main ()
+{
+
+ GKeyFile *keyfile;
+ GInetAddr* inetaddr;
+ gchar* conf_address;
+ gint port;
+
+ gnet_init ();
+
+ keyfile = g_key_file_new ();
+
+ g_key_file_load_from_file (keyfile, "conf", G_KEY_FILE_NONE, NULL);
+
+ conf_address = g_key_file_get_string (keyfile, "global", "address", NULL);
+ port = g_key_file_get_integer (keyfile, "global", "port", NULL);
+
+ printf ("Listen address is %s:%d\n", conf_address, port);
+
+ inetaddr = gnet_inetaddr_new_nonblock (conf_address, port);
+ gnet_server_new (inetaddr, port, new_client, NULL);
+
+ g_main_loop_run (g_main_loop_new (g_main_context_default (), TRUE));
+
+ return 0;
+
+}
--- /dev/null
+[global]
+
+address = 0.0.0.0
+port = 5222
+++ /dev/null
-#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;
-}