Как правильно выделить память из пула для переменной? В первом варианте, не выделяется дополнительно память для ngx_html_code, а во втором вариант для ngx_html_code выделяется всего 8 byte. С с знаком не очень хорошо, прошу сильно не пинать.
И второй вопрос, как открыть правильно не блокируемое соединение с другим http сервером, чтобы получить от него данные к примеру в xml формате, и потом распарсерить и на основе этих данных в браузер уже пользователю выбросить результат.
Вариант 1:
static ngx_int_t ngx_http_gogogo_handler(ngx_http_request_t *r){
// то что выдаем в браузер
u_char ngx_html_code[] = "Hello, world!";
//
ngx_int_t rc;
ngx_buf_t *buf;
ngx_chain_t out;
rc = ngx_http_discard_request_body(r);
if (rc != NGX_OK && rc != NGX_AGAIN){
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Failed ngx_http_discard_request_body()");
return rc;
}
// Если размер параметров больше 0 то, выдаем их в браузер
if(r->args.len > 0){
* ngx_html_code = (u_char *) ngx_pcalloc(r->pool, r->args.len + 1);
ngx_cpymem(ngx_html_code, r->args.data, r->args.len);
}
}
Вариант 2:
static ngx_int_t ngx_http_gogogo_handler(ngx_http_request_t *r){
u_char ngx_hello[] = "Hello, world!";
//
ngx_int_t rc;
ngx_buf_t *ngx_html_code;
// очищаем body-раздел
rc = ngx_http_discard_request_body(r);
if (rc != NGX_OK && rc != NGX_AGAIN){
ngx_log_error(NGX_LOG_ERR, r->connection->log, 0, "Failed ngx_http_discard_request_body()");
return rc;
}
if(r->args.len > 0){
ngx_html_code = ngx_pcalloc(r->pool, r->args.len + 1);
if (ngx_html_code == NULL){
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
ngx_cpymem(ngx_html_code, r->args.data, r->args.len);
}else{
ngx_html_code = ngx_pcalloc(r->pool, sizeof(ngx_hello));
if (ngx_html_code == NULL){
return NGX_HTTP_INTERNAL_SERVER_ERROR;
}
ngx_cpymem(ngx_html_code, ngx_hello, sizeof(ngx_hello));
}
}