12 static const char response_template[] =
14 "Server: Ecore_Con custom server\r\n"
15 "Content-Length: %zd\r\n"
16 "Content-Type: text/html; charset=UTF-8\r\n"
17 "Set-Cookie: MYCOOKIE=1; path=/; expires=%s\r\n"
18 "Set-Cookie: SESSIONCOOKIE=1; path=/\r\n"
28 _add(void *data __UNUSED__, int type __UNUSED__, Ecore_Con_Event_Client_Add *ev)
30 struct _Client *client = malloc(sizeof(*client));
32 static char buf[4096];
33 char welcome[] = "Welcome to Ecore_Con server!";
36 printf("Client with ip %s, port %d, connected = %d!\n",
37 ecore_con_client_ip_get(ev->client),
38 ecore_con_client_port_get(ev->client),
39 ecore_con_client_connected_get(ev->client));
41 ecore_con_client_data_set(ev->client, client);
45 snprintf(buf, sizeof(buf), response_template, sizeof(welcome) - 1, ctime(&t), welcome);
47 ecore_con_client_send(ev->client, buf, strlen(buf));
48 ecore_con_client_flush(ev->client);
50 return ECORE_CALLBACK_RENEW;
54 _del(void *data __UNUSED__, int type __UNUSED__, Ecore_Con_Event_Client_Del *ev)
56 struct _Client *client;
59 return ECORE_CALLBACK_RENEW;
61 client = ecore_con_client_data_get(ev->client);
63 printf("Lost client with ip %s!\n", ecore_con_client_ip_get(ev->client));
64 printf("Total data received from this client: %d\n", client->sdata);
65 printf("Client was connected for %0.3f seconds.\n",
66 ecore_con_client_uptime_get(ev->client));
71 ecore_con_client_del(ev->client);
73 return ECORE_CALLBACK_RENEW;
77 _data(void *data __UNUSED__, int type __UNUSED__, Ecore_Con_Event_Client_Data *ev)
80 struct _Client *client = ecore_con_client_data_get(ev->client);
82 snprintf(fmt, sizeof(fmt),
83 "\nReceived %i bytes from client %s port %d:\n"
87 ev->size, ecore_con_client_ip_get(ev->client),
88 ecore_con_client_port_get(ev->client), ev->size);
90 printf(fmt, ev->data);
92 client->sdata += ev->size;
94 return ECORE_CALLBACK_RENEW;
100 Ecore_Con_Server *svr;
101 Ecore_Con_Client *cl;
102 const Eina_List *clients, *l;
108 if (!(svr = ecore_con_server_add(ECORE_CON_REMOTE_TCP, "127.0.0.1", 8080, NULL)))
111 ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_ADD, (Ecore_Event_Handler_Cb)_add, NULL);
112 ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DEL, (Ecore_Event_Handler_Cb)_del, NULL);
113 ecore_event_handler_add(ECORE_CON_EVENT_CLIENT_DATA, (Ecore_Event_Handler_Cb)_data, NULL);
114 ecore_con_server_client_limit_set(svr, 3, 0);
116 ecore_main_loop_begin();
118 clients = ecore_con_server_clients_get(svr);
119 printf("Clients still connected to this server when exiting: %d\n",
120 eina_list_count(clients));
121 EINA_LIST_FOREACH(clients, l, cl)
123 printf("%s\n", ecore_con_client_ip_get(cl));
124 free(ecore_con_client_data_get(cl));
127 printf("Server was up for %0.3f seconds\n",
128 ecore_con_server_uptime_get(svr));
130 ecore_con_shutdown();