native-fetcher: fix to work with nginx 1.5.8+
nginx 1.5.8 changed the resolver api, which the native fetcher uses. Fixes #578. Squash-merge of @dinic's #581.
This commit is contained in:
+20
-1
@@ -24,6 +24,10 @@
|
|||||||
// - The read handler parses the response. Add the response to the buffer at
|
// - The read handler parses the response. Add the response to the buffer at
|
||||||
// last.
|
// last.
|
||||||
|
|
||||||
|
extern "C" {
|
||||||
|
#include <nginx.h>
|
||||||
|
}
|
||||||
|
|
||||||
#include "ngx_fetch.h"
|
#include "ngx_fetch.h"
|
||||||
#include "net/instaweb/util/public/basictypes.h"
|
#include "net/instaweb/util/public/basictypes.h"
|
||||||
#include "base/logging.h"
|
#include "base/logging.h"
|
||||||
@@ -164,7 +168,11 @@ namespace net_instaweb {
|
|||||||
resolver_ctx_->data = this;
|
resolver_ctx_->data = this;
|
||||||
resolver_ctx_->name.data = url_.host.data;
|
resolver_ctx_->name.data = url_.host.data;
|
||||||
resolver_ctx_->name.len = url_.host.len;
|
resolver_ctx_->name.len = url_.host.len;
|
||||||
|
|
||||||
|
#if (nginx_version < 1005008)
|
||||||
resolver_ctx_->type = NGX_RESOLVE_A;
|
resolver_ctx_->type = NGX_RESOLVE_A;
|
||||||
|
#endif
|
||||||
|
|
||||||
resolver_ctx_->handler = NgxFetchResolveDone;
|
resolver_ctx_->handler = NgxFetchResolveDone;
|
||||||
resolver_ctx_->timeout = fetcher_->resolver_timeout_;
|
resolver_ctx_->timeout = fetcher_->resolver_timeout_;
|
||||||
|
|
||||||
@@ -299,9 +307,20 @@ namespace net_instaweb {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
ngx_memzero(&fetch->sin_, sizeof(fetch->sin_));
|
ngx_memzero(&fetch->sin_, sizeof(fetch->sin_));
|
||||||
|
|
||||||
|
#if (nginx_version < 1005008)
|
||||||
|
fetch->sin_.sin_addr.s_addr = resolver_ctx->addrs[0];
|
||||||
|
#else
|
||||||
|
|
||||||
|
struct sockaddr_in *sin;
|
||||||
|
sin = reinterpret_cast<struct sockaddr_in *>(
|
||||||
|
resolver_ctx->addrs[0].sockaddr);
|
||||||
|
fetch->sin_.sin_family = sin->sin_family;
|
||||||
|
fetch->sin_.sin_addr.s_addr = sin->sin_addr.s_addr;
|
||||||
|
#endif
|
||||||
|
|
||||||
fetch->sin_.sin_family = AF_INET;
|
fetch->sin_.sin_family = AF_INET;
|
||||||
fetch->sin_.sin_port = htons(fetch->url_.port);
|
fetch->sin_.sin_port = htons(fetch->url_.port);
|
||||||
fetch->sin_.sin_addr.s_addr = resolver_ctx->addrs[0];
|
|
||||||
|
|
||||||
char* ip_address = inet_ntoa(fetch->sin_.sin_addr);
|
char* ip_address = inet_ntoa(fetch->sin_.sin_addr);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user