[ 
https://issues.apache.org/jira/browse/TS-4135?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15116435#comment-15116435
 ] 

Sandeep Davu edited comment on TS-4135 at 1/26/16 8:18 PM:
-----------------------------------------------------------

[~briang] Here is a simple redirect implementation that will lead to coredump.

{code:title=ClientRedirect.cc|borderStyle=solid}
class ClientRedirectTransactionPlugin : public atscppapi::TransactionPlugin {
public:
  ClientRedirectTransactionPlugin(Transaction &transaction, const string 
&location)
     : TransactionPlugin(transaction), location_(location) {
    TransactionPlugin::registerHook(HOOK_SEND_RESPONSE_HEADERS);
  }

  void handleSendResponseHeaders(Transaction &transaction) {
    transaction.redirectTo("http://test.com/";);
    transaction.resume();
  }
  virtual ~ClientRedirectTransactionPlugin() { }
};

class ClientRedirectGlobalPlugin : public GlobalPlugin {
public:
  ClientRedirectGlobalPlugin() {
    registerHook(HOOK_SEND_REQUEST_HEADERS);
  }

  void handleSendRequestHeaders(Transaction &transaction) {
    if(transaction.getClientRequest().getUrl().getQuery().find("redirect=1") != 
string::npos) {
      transaction.addPlugin(new ClientRedirectTransactionPlugin(transaction, 
"http://www.test.com/";));
    }
    transaction.resume();
  }

};

void TSPluginInit(int argc ATSCPPAPI_UNUSED, const char *argv[] 
ATSCPPAPI_UNUSED) {
  RegisterGlobalPlugin("CPP_Example_ClientRedirect", "apache", 
"d...@trafficserver.apache.org");
  new ClientRedirectGlobalPlugin();
}
{code}



was (Author: sdavu):
[~briang] Here is a simple redirect implementation that will lead to coredump.

{code:title=ClientRedirect.cc|borderStyle=solid}
class ClientRedirectTransactionPlugin : public atscppapi::TransactionPlugin {
public:
  ClientRedirectTransactionPlugin(Transaction &transaction, const string 
&location)
     : TransactionPlugin(transaction), location_(location) {
    TransactionPlugin::registerHook(HOOK_SEND_RESPONSE_HEADERS);
    transaction.resume();
  }

  void handleSendResponseHeaders(Transaction &transaction) {
    transaction.redirectTo("http://test.com/";);
    transaction.resume();
  }
  virtual ~ClientRedirectTransactionPlugin() { }
};

class ClientRedirectGlobalPlugin : public GlobalPlugin {
public:
  ClientRedirectGlobalPlugin() {
    registerHook(HOOK_SEND_REQUEST_HEADERS);
  }

  void handleSendRequestHeaders(Transaction &transaction) {
    if(transaction.getClientRequest().getUrl().getQuery().find("redirect=1") != 
string::npos) {
      transaction.addPlugin(new ClientRedirectTransactionPlugin(transaction, 
"http://www.test.com/";));
    }
    transaction.resume();
  }

};

void TSPluginInit(int argc ATSCPPAPI_UNUSED, const char *argv[] 
ATSCPPAPI_UNUSED) {
  RegisterGlobalPlugin("CPP_Example_ClientRedirect", "apache", 
"d...@trafficserver.apache.org");
  new ClientRedirectGlobalPlugin();
}
{code}


> C++ api coredumps when used with other plugins using TSHttpTxnRedirectUrlSet.
> -----------------------------------------------------------------------------
>
>                 Key: TS-4135
>                 URL: https://issues.apache.org/jira/browse/TS-4135
>             Project: Traffic Server
>          Issue Type: Bug
>          Components: CPP API
>            Reporter: Sandeep Davu
>            Assignee: Brian Geffon
>              Labels: crash
>             Fix For: 6.2.0
>
>
> There are  multiple TS_EVENT_HTTP_SEND_REQUEST_HDR and 
> TS_EVENT_HTTP_READ_RESPONSE_HDR for plugins that use TSHttpTxnRedirectUrlSet.
> Transaction object ignores these events.
> Ideally these events should be handled by reinitializing the server_request 
> and server_response.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to