예제 #1
0
struct pvm_object
pvm_get_class_name( struct pvm_object o )
{
    struct pvm_object c = o.data->_class;
    if(c.data->_flags & PHANTOM_OBJECT_STORAGE_FLAG_IS_CLASS)
    {
        struct data_area_4_class *da = (struct data_area_4_class *)&(c.data->da);
        ref_inc_o( da->class_name );
        return da->class_name;
    }
    else
        return pvm_create_string_object("(class corrupt?)");
}
예제 #2
0
static pvm_object_t cn_url_blocking_syscall_worker( pvm_object_t conn, struct data_area_4_thread *tc, int nmethod, pvm_object_t arg )
{
    (void) conn;
    (void) tc;
    (void) arg;

    struct data_area_4_connection *c = pvm_object_da( conn, connection );

    //struct cn_url_volatile   *vp = c->v_kernel_state;
    struct cn_url_persistent *pp = c->p_kernel_state;

    char buf[4096];

    errno_t e = 0;


    switch( nmethod )
    {
    default:
    case CONN_OP_READ:
        e = net_curl( pp->url, buf, sizeof(buf) );
        break;

    case CONN_OP_WRITE:
    case CONN_OP_BIND:
        e = ENOSYS;
        break;
    }


//ret:
    if( e )
    {
        SHOW_ERROR( 1, "err %d", e );
        // err_ret:
        return pvm_create_string_object("");
    }

    char *bp = buf;

    // Skip HTTP headers

    for( ; *bp ; bp++ )
    {
        if( (bp[0] == '\r') && (bp[1] == '\n') && (bp[2] == '\r') && (bp[3] == '\n') )
        {
            bp += 4;
            goto done;
        }

        if( (bp[0] == '\n') && (bp[1] == '\n') )
        {
            bp += 2;
            goto done;
        }
    }
    // fall through if no headers, ignore?
    SHOW_ERROR( 1, "no headers in '%s'", buf );
    // goto err_ret;

done:
    return pvm_create_string_object(bp);
}
예제 #3
0
static int tostring_5(struct pvm_object me , struct data_area_4_thread *tc )
{
    (void) me;
    DEBUG_INFO;
    SYSCALL_RETURN( pvm_create_string_object( "tty window" ));
}