File: ping-server.c

package info (click to toggle)
event-dance 0.1.20-2
  • links: PTS
  • area: main
  • in suites: wheezy
  • size: 5,068 kB
  • sloc: ansic: 25,946; sh: 11,340; makefile: 418; xml: 249; python: 27
file content (116 lines) | stat: -rw-r--r-- 2,832 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
/*
 * ping-server.c
 *
 * EventDance examples
 *
 * Copyright (C) 2010, Igalia S.L.
 *
 * Authors:
 *   Eduardo Lima Mitev <elima@igalia.com>
 */

#include <evd.h>

#define LISTEN_PORT 8080

static EvdDaemon *evd_daemon;

static void
on_listen (GObject      *service,
           GAsyncResult *result,
           gpointer      user_data)
{
  GError *error = NULL;

  if (evd_service_listen_finish (EVD_SERVICE (service), result, &error))
    {
      gchar *url;

      url = g_strdup_printf ("http://localhost:%d/ping.html", LISTEN_PORT);
      g_debug ("Listening, now point your browser to %s", url);
      g_free (url);
    }
  else
    {
      g_debug ("%s", error->message);
      g_error_free (error);

      evd_daemon_quit (evd_daemon, -1);
    }
}

static void
transport_on_receive (EvdTransport *transport,
                      EvdPeer      *peer,
                      gpointer      user_data)
{
  const gchar *buf;

  buf = evd_transport_receive_text (transport, peer);

  evd_transport_send_text (transport, peer, buf, NULL);
}

gint
main (gint argc, gchar *argv[])
{
  EvdWebTransportServer *transport;
  EvdWebDir *web_dir;
  EvdWebSelector *selector;
  EvdTlsCredentials *cred;
  gchar *addr;

  g_type_init ();
  evd_tls_init (NULL);

  /* daemon */
  evd_daemon = evd_daemon_get_default (&argc, &argv);

  /* web transport */
  transport = evd_web_transport_server_new (NULL);
  g_signal_connect (transport,
                    "receive",
                    G_CALLBACK (transport_on_receive),
                    NULL);

  /* web dir */
  web_dir = evd_web_dir_new ();
  evd_web_dir_set_root (web_dir, EXAMPLES_COMMON_DIR);

  /* web selector */
  selector = evd_web_selector_new ();

  evd_web_selector_set_default_service (selector, EVD_SERVICE (web_dir));
  evd_web_transport_server_set_selector (transport, selector);

  /*  evd_service_set_tls_autostart (EVD_SERVICE (selector), TRUE); */
  cred = evd_service_get_tls_credentials (EVD_SERVICE (selector));
  evd_tls_credentials_add_certificate_from_file (cred,
                                          "../tests/certs/x509-server.pem",
                                          "../tests/certs/x509-server-key.pem",
                                          NULL,
                                          NULL,
                                          NULL);

  /* start listening */
  addr = g_strdup_printf ("0.0.0.0:%d", LISTEN_PORT);
  evd_service_listen (EVD_SERVICE (selector),
                      addr,
                      NULL,
                      on_listen,
                      NULL);
  g_free (addr);

  /* start the show */
  evd_daemon_run (evd_daemon, NULL);

  /* free stuff */
  g_object_unref (transport);
  g_object_unref (selector);
  g_object_unref (web_dir);
  g_object_unref (evd_daemon);

  evd_tls_deinit ();

  return 0;
}