xlt
January 23, 2012 07:39AM
Как правильно выделить память из пула для переменной? В первом варианте, не выделяется дополнительно память для 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));
}

}
Subject Author Posted

Вопросы по разработке модуля

xlt January 23, 2012 07:39AM



Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 198
Record Number of Users: 8 on April 13, 2023
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready