mruby mbed

Dependencies:   EthernetInterface SDFileSystem mbed-rtos mbed-src mruby-mbed

main.cpp

Committer:
mzta
Date:
2015-03-25
Revision:
0:4bb480aaa402

File content as of revision 0:4bb480aaa402:

#include <string>

#include "mbed.h"
#include "SDFileSystem.h"
#include "EthernetInterface.h"
#include "htmlcontent.h"
#include "cmd.h"

#define RBFILE "/sd/test.rb"
#define ENABLE_DHCP

SDFileSystem sd(P8_5, P8_6, P8_3, P8_4, "sd");

Serial pc(USBTX, USBRX);
char i_buff[1024*3];
char o_buff[1024*3];

int mruby_argc = 2;
char *mruby_argv[] = {
    "mruby",
    RBFILE
};

int getRequestBody(char *request, char *buff, int *size)
{
    string req(request);
    int sp = req.find("Content-Length", 0);
    int ep = req.find("\r\n", sp);
    int len = 0;
    sscanf(req.substr(sp, ep-sp).c_str(), "Content-Length: %d", &len);

    sp = req.find("\r\n\r\n", 0) + 4;
    string body = req.substr(sp, len);
    *size = len;
    sprintf(buff, body.c_str());
}

int writeScriptFile(char *buff, int size)
{
    int i;
    FILE *f = fopen(RBFILE, "w");
 
    for (i=0; i < size; i++) {
        fprintf(f, "%c", buff[i]);
    }

    fclose(f);
}

int main() {
    EthernetInterface eth0;

    printf("Init network interface...\n");
#ifdef ENABLE_DHCP
    eth0.init();
#else
    eth0.init("192.168.1.100", "255.255.255.0", "192.168.1.1");
#endif
    eth0.connect();
    printf("IP Address: %s\n", eth0.getIPAddress());
    printf("done!\n\n");
 
    TCPSocketServer server;
    TCPSocketConnection conn;
    server.bind(80);
    server.listen();
     
    while (true) {
        server.accept(conn);
        conn.receive(i_buff, sizeof(i_buff));
        
        if (i_buff[0] == 'P') {
            int size;
            getRequestBody(i_buff, o_buff, &size);
            writeScriptFile(o_buff, size);
            cmd_mruby(mruby_argc, mruby_argv);
        } else {
            sprintf(o_buff, EDITPAGE);        
        }
        
        conn.send(o_buff, sizeof(EDITPAGE));
        conn.close();
    }
 
    server.close();
    eth0.disconnect();
}