#include #include #include static int callback_http(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { return 0; } static int callback_dumb_increment(struct lws *wsi, enum lws_callback_reasons reason, void *user, void *in, size_t len) { switch (reason) { case LWS_CALLBACK_ESTABLISHED: printf("connection etablie\n"); break; case LWS_CALLBACK_RECEIVE: { //creation d'un buffer pour receptionner les messages ICMP/ethernet/etc unsigned char *buf = (unsigned char*) malloc(LWS_SEND_BUFFER_PRE_PADDING + len + LWS_SEND_BUFFER_POST_PADDING); int i; for (i=0; i < len; i++) { buf[LWS_SEND_BUFFER_PRE_PADDING + i ] = ((char *) in)[i]; } // log what we recieved and what we're going to send as a response. printf("received data: %s, replying: %.*s\n", (char *) in, (int) len, buf + LWS_SEND_BUFFER_PRE_PADDING); //lws_write(wsi, &buf[LWS_SEND_BUFFER_PRE_PADDING], len, LWS_WRITE_TEXT); free(buf); break; } default: break; } return 0; } static struct lws_protocols protocols[] = { {"http-only",callback_http,0}, {"dumb-increment-protocol",callback_dumb_increment,0}, {NULL, NULL, 0} }; int main(void) { int port = 9800; struct lws_context *context; struct lws_context_creation_info context_info = { .port = port, .iface = NULL, .protocols = protocols, .extensions = NULL, .ssl_cert_filepath = NULL, .ssl_private_key_filepath = NULL, .ssl_ca_filepath = NULL, .gid = -1, .uid = -1, .options = 0, NULL, .ka_time = 0, .ka_probes = 0, .ka_interval = 0 }; context = lws_create_context(&context_info); if (context == NULL) { fprintf(stderr, "lws init failed\n"); return -1; } printf("starting server...\n"); while (1) {lws_service(context, 50);} lws_context_destroy(context); return 0; }