OSSP CVS Repository

ossp - ossp-pkg/sio/sio_test.c 1.2
Not logged in
[Honeypot]  [Browse]  [Directory]  [Home]  [Login
[Reports]  [Search]  [Ticket]  [Timeline
  [Raw

ossp-pkg/sio/sio_test.c 1.2
#include <stdio.h>

#include "al.h"
#include "sio.h"

#include "sa.h"

extern sio_module_t sio_module_sa;
extern sio_module_t sio_module_hello;
extern sio_module_t sio_module_buffer;

#define e(f) rc = f; printf("%s = %s\n",#f, sio_error(rc)); fflush(stdout);
#define s(f) src = f; printf("%s = %s\n",#f, sa_error(src)); fflush(stdout);

int main(int argc, char *argv[])
{
    sio_rc_t rc;
    sio_t *sio;
    sio_stage_t *sios_sa, *sios_hello, *sios_buffer;

    sa_rc_t src;
    sa_addr_t *saa;
    sa_t *msa, *sa;
    char *uri;

    char buf[] = "Hello world\n";

    size_t actual;
    size_t buflen;

    s(sa_create(&msa));
    s(sa_option(msa, SA_OPTION_REUSEADDR, 1));

    s(sa_addr_create(&saa));
    uri = "inet://localhost:25001#tcp";
    s(sa_addr_u2a(saa, uri));
    s(sa_bind(msa,saa));
    s(sa_addr_destroy(saa));
    uri = NULL;

    e(sio_create(&sio));
    e(sio_create_stage(sio, &sio_module_sa, &sios_sa));
    e(sio_create_stage(sio, &sio_module_hello, &sios_hello));
    e(sio_create_stage(sio, &sio_module_buffer, &sios_buffer));

    buflen = 256;
    e(sio_configure_stage(sio, sios_sa, "buflen", &buflen));

    buflen = 1000;
    e(sio_configure_stage(sio, sios_buffer, "outputsize", &buflen));

    s(sa_listen(msa, 5));

    for(;;) {

        s(sa_accept(msa, &saa, &sa));
        s(sa_addr_a2u(saa, &uri));
        printf("Connection from %s\n",uri);
        s(sa_addr_destroy(saa));

        e(sio_configure_stage(sio, sios_sa, "sa", sa));

        e(sio_attach(sio, sios_buffer, SIO_MODE_WRITE));
        e(sio_attach(sio, sios_hello, SIO_MODE_READWRITE));
        e(sio_attach(sio, sios_sa, SIO_MODE_READWRITE));

        e(sio_write(sio, buf, sizeof(buf)-1, &actual));
        e(sio_push(sio));

        e(sio_detach(sio, sios_sa));
        e(sio_detach(sio, sios_hello));
        e(sio_detach(sio, sios_buffer));

        sa_destroy(sa);
    }


    e(sio_destroy_stage(sio, sios_buffer));
    e(sio_destroy_stage(sio, sios_hello));
    e(sio_destroy_stage(sio, sios_sa));

    e(sio_destroy(sio));

    sa_destroy(msa);

    return 0;
}

CVSTrac 2.0.1