本文整理汇总了C++中INIT_LOCAL函数的典型用法代码示例。如果您正苦于以下问题:C++ INIT_LOCAL函数的具体用法?C++ INIT_LOCAL怎么用?C++ INIT_LOCAL使用的例子?那么恭喜您, 这里精选的函数代码示例或许可以为您提供帮助。
在下文中一共展示了INIT_LOCAL函数的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: t01_server_min
void t01_server_min(){
INIT_LOCAL();
onion *server=onion_new(0);
onion_listen_point *lp=onion_buffer_listen_point_new();
onion_add_listen_point(server,NULL,NULL,lp);
onion_set_root_handler(server, onion_handler_static("Succedded", 200));
onion_request *req=onion_request_new(lp);
onion_request_write(req, "GET ",4);
onion_request_write(req, "/",1);
onion_request_write(req, " HTTP/1.1\r\n",11);
onion_request_write(req, "\r\n",2);
const char *buffer=onion_buffer_listen_point_get_buffer_data(req);
FAIL_IF_EQUAL_STR(buffer,"");
FAIL_IF_NOT_STRSTR(buffer, "HTTP/1.1 200 OK\r\n");
FAIL_IF_NOT_STRSTR(buffer, "\r\nContent-Length: 9\r\n");
FAIL_IF_NOT_STRSTR(buffer, "libonion");
FAIL_IF_NOT_STRSTR(buffer, "\r\n\r\nSuccedded");
onion_request_free(req);
onion_free(server);
END_LOCAL();
}
示例2: t01_handle_static_request
void t01_handle_static_request(){
INIT_LOCAL();
char ok;
onion *server=onion_new(0);
onion_listen_point *lp=onion_buffer_listen_point_new();
onion_add_listen_point(server, NULL, NULL, lp);
onion_request *request=onion_request_new(lp);
FILL(request,"GET / HTTP/1.1\n");
onion_handler *handler=onion_handler_static("Not ready",302);
FAIL_IF_NOT(handler);
onion_set_root_handler(server, handler);
onion_response *response=onion_response_new(request);
ok=onion_handler_handle(handler, request, response);
FAIL_IF_NOT_EQUAL(ok, OCS_PROCESSED);
onion_response_free(response);
const char *buffer=onion_buffer_listen_point_get_buffer_data(request);
FAIL_IF_EQUAL_STR(buffer,"");
FAIL_IF_NOT_STRSTR(buffer, "HTTP/1.1 302 REDIRECT\r\n");
FAIL_IF_NOT_STRSTR(buffer, "\r\nContent-Length: 9\r\n");
FAIL_IF_NOT_STRSTR(buffer, "libonion");
FAIL_IF_STRSTR(buffer, "License: AGPL"); // License is now LGPL, no need to advertise
FAIL_IF_STRSTR(buffer, "License");
FAIL_IF_NOT_STRSTR(buffer, "\r\n\r\nNot ready");
onion_request_free(request);
onion_free(server);
END_LOCAL();
}
示例3: t01_codecs_base64_decode
void t01_codecs_base64_decode(){
INIT_LOCAL();
{
/// Text from wikipedia. Leviathan by Hobbes.
char *orig ="dGVzdDphYWE=";
char *realtext="test:aaa";
char *res=onion_base64_decode(orig, NULL);
FAIL_IF_NOT_EQUAL_STR(res,realtext);
free(res);
}
{
/// Text from wikipedia. Leviathan by Hobbes.
char *orig ="TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz\n"
"IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg\n"
"dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu\n"
"dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo\n"
"ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=\n";
char *realtext="Man is distinguished, not only by his reason, but by this singular passion from other animals,"
" which is a lust of the mind, that by a perseverance of delight in the continued and"
" indefatigable generation of knowledge, exceeds the short vehemence of any carnal pleasure.";
int l;
char *res=onion_base64_decode(orig, &l);
//fprintf(stderr,"l %d len %ld\n",l,strlen(realtext));
FAIL_IF_NOT_EQUAL(l,strlen(realtext));
FAIL_IF_NOT_EQUAL_STR(res,realtext);
free(res);
}
END_LOCAL();
}
示例4: t05_post_content_json
void t05_post_content_json(){
INIT_LOCAL();
onion *server=onion_new(0);
onion_listen_point *lp=onion_buffer_listen_point_new();
json_response post_json = { 0 };
onion_add_listen_point(server,NULL,NULL,lp);
onion_set_root_handler(server, onion_handler_new((void*)&post_json_check,&post_json,NULL));
onion_request *req=onion_request_new(lp);
#define POST_HEADER "POST / HTTP/1.1\nContent-Type: application/json\nContent-Length: %d\n\n"
char tmp[1024];
int json_length=sizeof(JSON_EXAMPLE);
ONION_DEBUG("Post size is about %d",json_length);
snprintf(tmp, sizeof(tmp), POST_HEADER, json_length);
// ONION_DEBUG("%s",tmp);
onion_request_write(req,tmp,strlen(tmp));
onion_request_write(req,JSON_EXAMPLE,json_length);
// ONION_DEBUG("%s",JSON_EXAMPLE);
FAIL_IF_NOT_EQUAL_INT(post_json.processed, 2);
onion_request_free(req);
onion_free(server);
END_LOCAL();
}
示例5: t08_server_with_error_404
void t08_server_with_error_404(){
INIT_LOCAL();
onion *server=onion_new(0);
onion_listen_point *lp=onion_buffer_listen_point_new();
onion_add_listen_point(server,NULL,NULL,lp);
onion_url *urls=onion_url_new();
onion_set_root_handler(server, onion_url_to_handler(urls));
onion_request *req=onion_request_new(lp);
#define S "GET / HTTP/1.1"
onion_request_write(req, S,sizeof(S)-1); // send it all, but the final 0.
#undef S
const char *buffer=onion_buffer_listen_point_get_buffer_data(req);
FAIL_IF_NOT_EQUAL_STR(buffer,"");
onion_request_write(req, "\n",1); // finish this request. no \n\n before to check possible bugs.
onion_request_write(req, "\n",1); // finish this request. no \n\n before to check possible bugs. The last \n was not processed, as was overflowing.
buffer=onion_buffer_listen_point_get_buffer_data(req);
FAIL_IF_EQUAL_STR(buffer,"");
FAIL_IF_NOT_STRSTR(buffer, "HTTP/1.1 404 NOT FOUND\r\n");
FAIL_IF_NOT_STRSTR(buffer, "libonion");
onion_request_free(req);
onion_free(server);
END_LOCAL();
}
示例6: t16_soft_dup_dict_in_dict
void t16_soft_dup_dict_in_dict(){
INIT_LOCAL();
onion_dict *orig=onion_dict_new();
char tmp[9];
int i;
for (i=0;i<256;i++){
sprintf(tmp,"%08X",rand());
onion_dict_add(orig, tmp, tmp, OD_DUP_ALL);
}
onion_dict_add(orig, "0", "no frees", 0);
onion_dict *subdict=onion_dict_new();
onion_dict_add(subdict,"subdict","test",0);
onion_dict_add(orig, "subdict", subdict, OD_DICT|OD_FREE_VALUE);
onion_dict *dest=onion_dict_dup(orig);
FAIL_IF_NOT(orig==dest);
/// Check they have exactly the same keys.
onion_dict_preorder(orig, cmpdict, dest);
onion_dict_preorder(dest, cmpdict, orig);
onion_dict_free(orig);
onion_dict_free(dest);
END_LOCAL();
}
示例7: t04_server_overflow
void t04_server_overflow(){
INIT_LOCAL();
onion *server=onion_new(0);
onion_listen_point *lp=onion_buffer_listen_point_new();
onion_add_listen_point(server,NULL,NULL,lp);
onion_set_root_handler(server, onion_handler_static("Succedded", 200));
onion_block *long_req=onion_block_new();
onion_block_add_str(long_req,"GET / HTTP/1.1\n");
int i;
for(i=0;i<1000;i++){
onion_block_add_str(long_req,"Header-1: This is header1 Header-2: This is header 2 ");
}
onion_request *req=onion_request_new(lp);
onion_request_write(req, onion_block_data(long_req),onion_block_size(long_req)-1); // send it all, but the final 0.
const char *buffer=onion_buffer_listen_point_get_buffer_data(req);
FAIL_IF_NOT_EQUAL_STR(buffer,"");
onion_request_write(req, "\n\n",2); // finish this request. no \n\n before to check possible bugs.
buffer=onion_buffer_listen_point_get_buffer_data(req);
FAIL_IF_EQUAL_STR(buffer,"");
FAIL_IF_NOT_STRSTR(buffer, "HTTP/1.1 200 OK\r\n");
FAIL_IF_NOT_STRSTR(buffer, "\r\nContent-Length: 9\r\n");
FAIL_IF_NOT_STRSTR(buffer, "libonion");
FAIL_IF_NOT_STRSTR(buffer, "\r\n\r\nSuccedded");
onion_block_free(long_req);
onion_request_free(req);
onion_free(server);
END_LOCAL();
}
示例8: t06_empty
void t06_empty(){
INIT_LOCAL();
onion *server=onion_new(0);
onion_add_listen_point(server,NULL,NULL,onion_buffer_listen_point_new());
onion_request *request;
char buffer[4096];
memset(buffer,0,sizeof(buffer));
request=onion_request_new(server->listen_points[0]);
onion_response *response=onion_response_new(request);
// onion_response_write_headers(response);
onion_response_flush(response);
onion_response_free(response);
buffer[sizeof(buffer)-1]=0;
strncpy(buffer,onion_buffer_listen_point_get_buffer_data(request),sizeof(buffer)-1);
onion_request_free(request);
onion_free(server);
FAIL_IF_NOT_STRSTR(buffer, "Server:");
FAIL_IF_NOT_STRSTR(buffer, "Content-Type:");
// ONION_DEBUG(buffer);
END_LOCAL();
}
示例9: t01_create_add_free
void t01_create_add_free(){
INIT_LOCAL();
onion_dict *dict;
const char *value;
dict=onion_dict_new();
FAIL_IF_EQUAL(dict,NULL);
// Get before anything in
value=onion_dict_get(dict, "Request");
FAIL_IF_NOT_EQUAL(value,NULL);
// basic add
onion_dict_add(dict, "Request", "GET /", OD_DUP_ALL);
value=onion_dict_get(dict, "Request");
FAIL_IF_NOT_EQUAL_STR(value,"GET /");
// basic remove
onion_dict_remove(dict, "Request");
value=onion_dict_get(dict, "Request");
FAIL_IF_NOT_EQUAL(value,NULL);
onion_dict_free(dict);
END_LOCAL();
}
示例10: t02_full_cycle_http10
void t02_full_cycle_http10(){
INIT_LOCAL();
onion *server=onion_new(0);
onion_add_listen_point(server,NULL,NULL,onion_buffer_listen_point_new());
onion_request *request;
char buffer[4096];
memset(buffer,0,sizeof(buffer));
request=onion_request_new(server->listen_points[0]);
onion_response *response=onion_response_new(request);
onion_response_set_length(response, 30);
FAIL_IF_NOT_EQUAL(response->length,30);
onion_response_write_headers(response);
onion_response_write0(response,"123456789012345678901234567890");
FAIL_IF_NOT_EQUAL(response->sent_bytes,30);
onion_response_free(response);
strncpy(buffer,onion_buffer_listen_point_get_buffer_data(request),sizeof(buffer));
onion_request_free(request);
onion_free(server);
FAIL_IF_NOT_STRSTR(buffer, "HTTP/1.0 200 OK\r\n");
FAIL_IF_NOT_STRSTR(buffer, "Connection: Keep-Alive\r\n");
FAIL_IF_NOT_STRSTR(buffer, "Content-Length: 30\r\n");
FAIL_IF_NOT_STRSTR(buffer, "Server: libonion");
FAIL_IF_NOT_STRSTR(buffer, "coralbits");
FAIL_IF_NOT_STRSTR(buffer, "\r\n\r\n123456789012345678901234567890");
END_LOCAL();
}
示例11: t05_printf
void t05_printf(){
INIT_LOCAL();
onion *server=onion_new(0);
onion_add_listen_point(server,NULL,NULL,onion_buffer_listen_point_new());
onion_request *request;
char buffer[4096];
memset(buffer,0,sizeof(buffer));
request=onion_request_new(server->listen_points[0]);
onion_response *response=onion_response_new(request);
onion_response_printf(response, "%s %d %p", "Hello world", 123, NULL);
onion_response_flush(response);
onion_response_free(response);
buffer[sizeof(buffer)-1]=0;
strncpy(buffer,onion_buffer_listen_point_get_buffer_data(request),sizeof(buffer)-1);
onion_request_free(request);
onion_free(server);
FAIL_IF_NOT_STRSTR(buffer, "Hello world 123 (nil)");
END_LOCAL();
}
示例12: t10_repeated_header
void t10_repeated_header(){
INIT_LOCAL();
onion_request *req;
int ok;
onion_set_max_post_size(server, 1024);
req=onion_request_new(custom_io);
FAIL_IF_EQUAL(req,NULL);
FAIL_IF_NOT_EQUAL(req->connection.fd, -1);
{
const char *query="GET / HTTP/1.0\n"
"Content-Type: application/x-www-form-urlencoded\n"
"Host: 127.0.0.1\n\r"
"Content-Length: 24\n"
"Accept-Language: en\n"
"Content-Type: application/x-www-form-urlencoded-bis\n\n";
ok=onion_request_write(req,query,strlen(query));
}
FAIL_IF_EQUAL(ok,OCS_INTERNAL_ERROR);
FAIL_IF_NOT_EQUAL_STR(onion_request_get_header(req,"Host"),"127.0.0.1");
FAIL_IF_NOT_EQUAL_STR(onion_request_get_header(req,"Content-Length"),"24");
FAIL_IF_NOT_EQUAL_STR(onion_request_get_header(req,"Content-Type"),"application/x-www-form-urlencoded");
onion_request_free(req);
END_LOCAL();
}
示例13: t06_create_add_free_POST_toobig
void t06_create_add_free_POST_toobig(){
INIT_LOCAL();
onion_request *req;
int ok;
req=onion_request_new(custom_io);
FAIL_IF_EQUAL(req,NULL);
FAIL_IF_NOT_EQUAL(req->connection.fd, -1);
onion_set_max_post_size(server, 10); // Very small limit
const char *query="POST /myurl%20/is/very/deeply/nested?test=test&query2=query%202&more_query=%20more%20query+10 HTTP/1.0\n"
"Host: 127.0.0.1\n\rContent-Length: 24\n"
"Other-Header: My header is very long and with spaces...\r\n\r\npost_data=1&post_data2=2&post_data=1&post_data2=2";
int i; // Straight write, with clean (keep alive like)
for (i=0;i<10;i++){
FAIL_IF_NOT_EQUAL(req->flags,0);
ok=REQ_WRITE(req,query);
FAIL_IF_NOT_EQUAL(ok,OCS_INTERNAL_ERROR);
onion_request_clean(req);
FAIL_IF_NOT_EQUAL(req->GET,NULL);
}
onion_request_free(req);
END_LOCAL();
}
示例14: t06_codecs_c_unicode
void t06_codecs_c_unicode(){
INIT_LOCAL();
const char *text="\302Hola!";
char *res=onion_c_quote_new(text);
FAIL_IF_NOT_STRSTR(res,"\\302");
FAIL_IF_NOT_STRSTR(res,"\\302Hola!");
free(res);
text="€";
res=onion_c_quote_new(text);
FAIL_IF_NOT_STRSTR(text,"€");
FAIL_IF_NOT_EQUAL_STR(res,"\"\\342\\202\\254\"");
free(res);
text="\377";
res=onion_c_quote_new(text);
FAIL_IF_NOT_EQUAL_STR(res,"\"\\377\"");
free(res);
END_LOCAL();
}
示例15: t02_server_full
void t02_server_full(){
INIT_LOCAL();
onion *server=onion_new(0);
onion_listen_point *lp=onion_buffer_listen_point_new();
onion_add_listen_point(server,NULL,NULL,lp);
onion_set_root_handler(server, onion_handler_static("Succedded", 200));
onion_request *req=onion_request_new(lp);
#define S "GET / HTTP/1.1\r\nHeader-1: This is header1\r\nHeader-2: This is header 2\r\n"
onion_request_write(req, S,sizeof(S)-1); // send it all, but the final 0.
#undef S
const char *buffer=onion_buffer_listen_point_get_buffer_data(req);
FAIL_IF_NOT_EQUAL_STR(buffer,"");
onion_request_write(req, "\n",1); // finish this request. no \n\n before to check possible bugs.
buffer=onion_buffer_listen_point_get_buffer_data(req);
FAIL_IF_EQUAL_STR(buffer,"");
FAIL_IF_NOT_STRSTR(buffer, "HTTP/1.1 200 OK\r\n");
FAIL_IF_NOT_STRSTR(buffer, "\r\nContent-Length: 9\r\n");
FAIL_IF_NOT_STRSTR(buffer, "libonion");
FAIL_IF_NOT_STRSTR(buffer, "\r\n\r\nSuccedded");
onion_request_free(req);
onion_free(server);
END_LOCAL();
}