You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by wa...@apache.org on 2012/05/03 22:36:56 UTC

[2/4] git commit: TS-1239 Fixed missing implementation of TSHttpTxnServerAddrSet

TS-1239 Fixed missing implementation of TSHttpTxnServerAddrSet


Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo
Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/904de854
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/904de854
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/904de854

Branch: refs/heads/master
Commit: 904de854a1aad100d2445962c30ccb18d071eaa1
Parents: 0e20aad
Author: Bart Wyatt <wa...@apache.org>
Authored: Thu May 3 15:14:31 2012 -0500
Committer: Bart Wyatt <wa...@apache.org>
Committed: Thu May 3 15:14:31 2012 -0500

----------------------------------------------------------------------
 proxy/InkAPI.cc           |   15 +++++++++++++++
 proxy/http/HttpSM.cc      |   21 ++++++++++++++++++---
 proxy/http/HttpTransact.h |    2 ++
 3 files changed, 35 insertions(+), 3 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/904de854/proxy/InkAPI.cc
----------------------------------------------------------------------
diff --git a/proxy/InkAPI.cc b/proxy/InkAPI.cc
index 1027288..4b3ed35 100644
--- a/proxy/InkAPI.cc
+++ b/proxy/InkAPI.cc
@@ -5307,6 +5307,21 @@ TSHttpTxnServerAddrGet(TSHttpTxn txnp)
   return &sm->t_state.server_info.addr.sa;
 }
 
+TSReturnCode
+TSHttpTxnServerAddrSet(TSHttpTxn txnp, struct sockaddr const* addr)
+{
+  sdk_assert(sdk_sanity_check_txn(txnp) == TS_SUCCESS);
+
+  HttpSM *sm = reinterpret_cast<HttpSM *>(txnp);
+  if (ats_ip_copy(&sm->t_state.server_info.addr.sa, addr)) {
+    sm->t_state.api_server_addr_set = true;
+    return TS_SUCCESS;
+  } else {
+    return TS_ERROR;
+  }
+}
+
+
 // [amc] This might use the port. The code path should do that but it
 // hasn't been tested.
 TSReturnCode

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/904de854/proxy/http/HttpSM.cc
----------------------------------------------------------------------
diff --git a/proxy/http/HttpSM.cc b/proxy/http/HttpSM.cc
index e014afa..8e85793 100644
--- a/proxy/http/HttpSM.cc
+++ b/proxy/http/HttpSM.cc
@@ -4114,11 +4114,15 @@ HttpSM::do_http_server_open(bool raw)
              t_state.req_flavor == HttpTransact::REQ_FLAVOR_REVPROXY);
 
   ink_assert(pending_action == NULL);
-  ink_assert(t_state.current.server->port > 0);
 
   HSMresult_t shared_result;
 
-  t_state.current.server->addr.port() = htons(t_state.current.server->port);
+  if (false == t_state.api_server_addr_set) {
+    ink_assert(t_state.current.server->port > 0);
+    t_state.current.server->addr.port() = htons(t_state.current.server->port);
+  } else {
+    ink_assert(ats_ip_port_cast(&t_state.current.server->addr) != 0);
+  }
 
   char addrbuf[INET6_ADDRPORTSTRLEN];
   DebugSM("http", "[%" PRId64 "] open connection to %s: %s",
@@ -6460,7 +6464,18 @@ HttpSM::set_next_state()
     {
       sockaddr const* addr;
 
-      if (url_remap_mode == 2 && t_state.first_dns_lookup) {
+      if (t_state.api_server_addr_set) {
+        /* If the API has set the server address before the OS DNS lookup
+         * then we can skip the lookup
+         */
+        ip_text_buffer ipb;
+        DebugSM("dns", "[HttpTransact::HandleRequest] Skipping DNS lookup for API supplied target %s.\n", ats_ip_ntop(&t_state.server_info.addr, ipb, sizeof(ipb)));
+        // this seems wasteful as we will just copy it right back
+        ats_ip_copy(t_state.host_db_info.ip(), &t_state.server_info.addr);
+        t_state.dns_info.lookup_success = true;
+        call_transact_and_set_next_state(NULL);
+        break;
+      } else if (url_remap_mode == 2 && t_state.first_dns_lookup) {
         DebugSM("cdn", "Skipping DNS Lookup");
         // skip the DNS lookup
         t_state.first_dns_lookup = false;

http://git-wip-us.apache.org/repos/asf/trafficserver/blob/904de854/proxy/http/HttpTransact.h
----------------------------------------------------------------------
diff --git a/proxy/http/HttpTransact.h b/proxy/http/HttpTransact.h
index 0a9f7dd..694ac04 100644
--- a/proxy/http/HttpTransact.h
+++ b/proxy/http/HttpTransact.h
@@ -1025,6 +1025,7 @@ public:
     bool api_server_request_body_set;
     bool api_req_cacheable;
     bool api_resp_cacheable;
+    bool api_server_addr_set;
     UpdateCachedObject_t api_update_cached_object;
     LockUrl_t api_lock_url;
     StateMachineAction_t saved_update_next_action;
@@ -1128,6 +1129,7 @@ public:
         api_server_request_body_set(false),
         api_req_cacheable(false),
         api_resp_cacheable(false),
+        api_server_addr_set(false),
         api_update_cached_object(UPDATE_CACHED_OBJECT_NONE),
         api_lock_url(LOCK_URL_FIRST),
         saved_update_next_action(STATE_MACHINE_ACTION_UNDEFINED),