示例#1
0
文件: gcrypt.c 项目: tinkertim/slash
void
sl_init_ext_gcrypt(sl_vm_t* vm)
{
    SLVAL GCrypt = sl_define_class(vm, "GCrypt", vm->lib.Object);
    SLVAL Algorithm = sl_define_class3(vm, sl_make_cstring(vm, "Algorithm"), vm->lib.Object, GCrypt);
    sl_vm_store_put(vm, &cGCrypt, GCrypt);
    sl_vm_store_put(vm, &cGCrypt_Algorithm, Algorithm);
    sl_class_set_allocator(vm, Algorithm, allocate_gcrypt_algorithm);
    
    sl_define_method(vm, Algorithm, "hex_digest", 1, sl_gcrypt_algorithm_hex_digest);
    sl_define_method(vm, Algorithm, "to_s", 0, sl_gcrypt_algorithm_inspect);
    sl_define_method(vm, Algorithm, "inspect", 0, sl_gcrypt_algorithm_inspect);
    
    #define MAKE_ALGO(name) make_algorithm_object(vm, GCrypt, Algorithm, #name, GCRY_MD_##name)
    MAKE_ALGO(MD5);
    MAKE_ALGO(SHA1);
    MAKE_ALGO(SHA224);
    MAKE_ALGO(SHA256);
    MAKE_ALGO(SHA384);
    MAKE_ALGO(SHA512);
    MAKE_ALGO(WHIRLPOOL);
}
示例#2
0
文件: response.c 项目: richo/slash
void
sl_response_set_opts(sl_vm_t* vm, sl_response_opts_t* opts)
{
    sl_response_internal_opts_t* iopts = sl_alloc(vm->arena, sizeof(sl_response_internal_opts_t));
    iopts->status        = 200;
    iopts->buffered      = opts->buffered;
    iopts->output_cap    = 4;
    iopts->output_len    = 0;
    iopts->output        = sl_alloc(vm->arena, sizeof(SLVAL) * iopts->output_cap);
    iopts->write         = opts->write;
    iopts->header_cap    = 2;
    iopts->header_count  = 0;
    iopts->headers       = sl_alloc(vm->arena, sizeof(sl_response_key_value_t) * iopts->header_cap);
    iopts->descriptive_error_pages = opts->descriptive_error_pages;
    sl_vm_store_put(vm, &Response_opts, sl_make_ptr((sl_object_t*)iopts));
}
示例#3
0
文件: request.c 项目: tinkertim/slash
void
sl_request_set_opts(sl_vm_t* vm, sl_request_opts_t* opts)
{
    size_t i;
    SLVAL n, v, cookies;
    sl_string_t* str;
    sl_request_internal_opts_t* req = sl_alloc(vm->arena, sizeof(sl_request_internal_opts_t));
    req->method       = sl_make_cstring(vm, opts->method);
    req->uri          = sl_make_cstring(vm, opts->uri);
    req->path_info    = sl_make_cstring(vm, opts->path_info ? opts->path_info : "");
    req->query_string = sl_make_cstring(vm, opts->query_string ? opts->query_string : "");
    req->remote_addr  = sl_make_cstring(vm, opts->remote_addr);
    req->headers      = sl_make_dict(vm, 0, NULL);
    req->env          = sl_make_dict(vm, 0, NULL);
    req->get          = sl_make_dict(vm, 0, NULL);
    req->post         = sl_make_dict(vm, 0, NULL);
    req->post_data    = sl_make_string(vm, (uint8_t*)opts->post_data, opts->post_length);
    req->cookies      = sl_make_dict(vm, 0, NULL);
    for(i = 0; i < opts->header_count; i++) {
        n = sl_make_cstring(vm, opts->headers[i].name);
        v = sl_make_cstring(vm, opts->headers[i].value);
        sl_dict_set(vm, req->headers, n, v);
    }
    for(i = 0; i < opts->env_count; i++) {
        n = sl_make_cstring(vm, opts->env[i].name);
        v = sl_make_cstring(vm, opts->env[i].value);
        sl_dict_set(vm, req->env, n, v);
    }
    if(opts->query_string) {
        parse_query_string(vm, req->get, strlen(opts->query_string), (uint8_t*)opts->query_string);
    }
    if(opts->content_type && strcmp(opts->content_type, "application/x-www-form-urlencoded") == 0) {
        parse_query_string(vm, req->post, opts->post_length, (uint8_t*)opts->post_data);
    }
    cookies = sl_dict_get(vm, req->headers, sl_make_cstring(vm, "Cookie"));
    if(sl_is_a(vm, cookies, vm->lib.String)) {
        str = (sl_string_t*)sl_get_ptr(cookies);
        parse_cookie_string(vm, req->cookies, str->buff_len, str->buff);
    }
    req->params = sl_dict_merge(vm, req->get, req->post);
    sl_vm_store_put(vm, &Request_opts, sl_make_ptr((sl_object_t*)req));
}
示例#4
0
文件: request.c 项目: tinkertim/slash
void
sl_init_request(sl_vm_t* vm)
{
    SLVAL Request = sl_new(vm, vm->lib.Object, 0, NULL);
    sl_vm_store_put(vm, &Request_, Request);
    sl_define_singleton_method(vm, Request, "get", 0, request_get);
    sl_define_singleton_method(vm, Request, "post", 0, request_post);
    sl_define_singleton_method(vm, Request, "post_data", 0, request_post_data);
    sl_define_singleton_method(vm, Request, "headers", 0, request_headers);
    sl_define_singleton_method(vm, Request, "env", 0, request_env);
    sl_define_singleton_method(vm, Request, "cookies", 0, request_cookies);
    sl_define_singleton_method(vm, Request, "method", 0, request_method);
    sl_define_singleton_method(vm, Request, "safe_method", 0, request_safe_method);
    sl_define_singleton_method(vm, Request, "uri", 0, request_uri);
    sl_define_singleton_method(vm, Request, "path_info", 0, request_path_info);
    sl_define_singleton_method(vm, Request, "query_string", 0, request_query_string);
    sl_define_singleton_method(vm, Request, "remote_addr", 0, request_remote_addr);
    sl_define_singleton_method(vm, Request, "[]", 1, request_index);
    
    sl_class_set_const(vm, vm->lib.Object, "Request", Request);
}