static void conn_cb (GConn * conn, GConnEvent * event, gpointer data) { GMainLoop *loop = (GMainLoop *) data; switch (event->type) { case GNET_CONN_CONNECT: { const gchar req[] = "GET / HTTP/1.0\r\n" "Accept: */*\r\nConnection: Close\r\n" "\r\n"; g_print ("Connected.\n"); /* using _write_direct() here on purpose to test that code path too */ gnet_conn_write_direct (conn, g_strdup (req), strlen (req), (GDestroyNotify) g_free); break; } case GNET_CONN_WRITE: g_print ("Sent request.\n"); gnet_conn_read (conn); break; case GNET_CONN_READ: g_print ("."); /* write (1, event->buffer, event->length); */ gnet_conn_read (conn); break; case GNET_CONN_READABLE: g_error ("READABLE event shouldn't have happened without explicit watch"); break; case GNET_CONN_WRITABLE: g_error ("WRITABLE event shouldn't have happened without explicit watch"); break; case GNET_CONN_CLOSE: g_print ("\nConnection closed by server.\n"); g_main_loop_quit (loop); break; case GNET_CONN_TIMEOUT: g_print ("Timeout.\n"); g_main_loop_quit (loop); break; case GNET_CONN_ERROR: g_print ("Connection error.\n"); g_main_loop_quit (loop); break; default: g_error ("Unexpected event type %d", event->type); break; } }
/* Handle GConn events */ static void ob_conn_func (GConn* conn, GConnEvent* event, gpointer user_data) { switch (event->type) { case GNET_CONN_CONNECT: { gnet_conn_timeout (conn, 0); /* reset timeout */ printf ("Connected to server\n"); gnet_conn_read (conn); break; } case GNET_CONN_READ: { /* Write line out */ net_event_header_t hdr; light_temp_event_t ev; gnet_unpack ("!iiliii", event->buffer, sizeof (hdr) + sizeof (ev), &hdr.size, &hdr.event_type, &hdr.time_seconds, &ev.node_id, &ev.light, &ev.temp); printf ("Got an event: %d %d %ld %d %d %d\n", hdr.size, hdr.event_type, hdr.time_seconds, ev.node_id, ev.light, ev.temp); xml_write_node (ev.node_id, ev.light, ev.temp, hdr.time_seconds); /* Check if done */ if (read_eof) { exit (EXIT_SUCCESS); } /* Read another line */ gnet_conn_read (conn); break; } case GNET_CONN_WRITE: { /* do nothing */ break; } case GNET_CONN_CLOSE: { gnet_conn_delete (conn); exit (EXIT_SUCCESS); break; } case GNET_CONN_TIMEOUT: { gnet_conn_delete (conn); fprintf (stderr, "Connection timeout\n"); exit (EXIT_FAILURE); break; } case GNET_CONN_ERROR: { gnet_conn_delete (conn); fprintf (stderr, "Connection failure\n"); exit (EXIT_FAILURE); break; } default: g_assert_not_reached (); } }