Serveur Minitel web

Récupérer la librairie ofxLibwebsockets sur Github. Placer le répertoire décompressé dans le répertoire addons de votre OpenFrameworks.

Inclure addon Linux

sudo nano /home/pi/openFrameworks/apps/myApps/ServeurMinitelWeb/addons.make

Inclure dans le fichier :

ofxLibwebsockets

Ctrl-O pour sauvegarder et Ctrl-X pour sortir. Installer git :

$ sudo apt-get install git-core

Installer cmake : $ sudo apt-get install cmake

Installer LibWebSocket : Installation de LibWebSockets

Créer un projet avec projectGenerator en incluant l'addon ofxLibwebsockets.

Copier les fichiers de données dans le répertoire bin/data de votre projet.

Configurer sa box :

https://ressources.labomedia.org/labom_yunohost_sur_raspberrypi#si_on_ne_dispose_pas_de_nom_de_domaine_nohostme

LibWebSockets

https://stackoverflow.com/questions/35341871/how-to-solve-the-linking-error-in-libwebsockets

LibWebSockets en C++

https://github.com/mnisjk/cppWebSockets

https://medium.com/@martin.sikora/libwebsockets-simple-websocket-server-68195343d64b

// gcc -Wall testServeur.c -o testServeur -lwebsockets
 
 
#include <stdio.h>
#include <stdlib.h>
#include <libwebsockets.h>
 
static int
lws_callback_http(
 
                  struct lws *wsi,
                  enum lws_callback_reasons reason,
                  void *user,
                  void *in,
                  size_t len
                  ) {
    switch (reason) {
        case LWS_CALLBACK_ESTABLISHED:
            printf("connection established\n");
            break;
        case LWS_CALLBACK_RECEIVE: {
            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 + (len - 1) - i ] =
                ((char *) in)[i];
            }
 
            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",   // name
        lws_callback_http, // callback
        0              // per_session_data_size
    },
    {
        NULL, NULL, 0   /* End of list */
    }
};
 
static const struct lws_extension exts[] = {
    {
        "permessage-deflate",
        lws_extension_callback_pm_deflate,
        "permessage-deflate"
    },
    { NULL, NULL, NULL /* terminator */ }
};
 
int main(void) {
    int port = 9000;
    const char *interface = NULL;
    struct lws_context *context;
    int opts = 0;
 
    // create libwebsocket context representing this server
    struct lws_context_creation_info info;
 
    memset(&info, 0, sizeof info);
    info.port = port;
    info.iface = interface;
    info.protocols = protocols;
    info.extensions = exts;
    //if (!use_ssl) {
    info.ssl_cert_filepath = NULL;
    info.ssl_private_key_filepath = NULL;
    //} else {
    //  info.ssl_cert_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.pem";
    //  info.ssl_private_key_filepath = LOCAL_RESOURCE_PATH"/libwebsockets-test-server.key.pem";
    //}
    info.gid = -1;
    info.uid = -1;
    info.options = opts;
 
    context = lws_create_context(&info);
 
    if (context == NULL) {
        fprintf(stderr, "libwebsocket init failed\n");
        return -1;
    }
 
    printf("starting server...\n");
    while (1) {
        lws_service(context, 50);
    }
 
    lws_context_destroy(context);
 
    return 0;
}

Compiler le tout :

gcc -Wall serveurWebsocket.c -o serveurWebsocket -lwebsockets
sudo ldconfig
./serveurWebsocket
  • serveur_minitel_web.txt
  • Dernière modification: 2019/07/04 02:13
  • par Benjamin Labomedia