trafficserver-commits mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From bc...@apache.org
Subject svn commit: r1199560 - in /trafficserver/plugins/trunk/hipes: ./ LICENSE README gen_escape.c hipes.cc
Date Wed, 09 Nov 2011 00:09:02 GMT
Author: bcall
Date: Wed Nov  9 00:09:02 2011
New Revision: 1199560

URL: http://svn.apache.org/viewvc?rev=1199560&view=rev
Log:
Hipes plugin.  Code came from Yahoo!.

Added:
    trafficserver/plugins/trunk/hipes/
    trafficserver/plugins/trunk/hipes/LICENSE
    trafficserver/plugins/trunk/hipes/README
    trafficserver/plugins/trunk/hipes/gen_escape.c
    trafficserver/plugins/trunk/hipes/hipes.cc

Added: trafficserver/plugins/trunk/hipes/LICENSE
URL: http://svn.apache.org/viewvc/trafficserver/plugins/trunk/hipes/LICENSE?rev=1199560&view=auto
==============================================================================
--- trafficserver/plugins/trunk/hipes/LICENSE (added)
+++ trafficserver/plugins/trunk/hipes/LICENSE Wed Nov  9 00:09:02 2011
@@ -0,0 +1,427 @@
+
+                                 Apache License
+                           Version 2.0, January 2004
+                        http://www.apache.org/licenses/
+
+   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+   1. Definitions.
+
+      "License" shall mean the terms and conditions for use, reproduction,
+      and distribution as defined by Sections 1 through 9 of this document.
+
+      "Licensor" shall mean the copyright owner or entity authorized by
+      the copyright owner that is granting the License.
+
+      "Legal Entity" shall mean the union of the acting entity and all
+      other entities that control, are controlled by, or are under common
+      control with that entity. For the purposes of this definition,
+      "control" means (i) the power, direct or indirect, to cause the
+      direction or management of such entity, whether by contract or
+      otherwise, or (ii) ownership of fifty percent (50%) or more of the
+      outstanding shares, or (iii) beneficial ownership of such entity.
+
+      "You" (or "Your") shall mean an individual or Legal Entity
+      exercising permissions granted by this License.
+
+      "Source" form shall mean the preferred form for making modifications,
+      including but not limited to software source code, documentation
+      source, and configuration files.
+
+      "Object" form shall mean any form resulting from mechanical
+      transformation or translation of a Source form, including but
+      not limited to compiled object code, generated documentation,
+      and conversions to other media types.
+
+      "Work" shall mean the work of authorship, whether in Source or
+      Object form, made available under the License, as indicated by a
+      copyright notice that is included in or attached to the work
+      (an example is provided in the Appendix below).
+
+      "Derivative Works" shall mean any work, whether in Source or Object
+      form, that is based on (or derived from) the Work and for which the
+      editorial revisions, annotations, elaborations, or other modifications
+      represent, as a whole, an original work of authorship. For the purposes
+      of this License, Derivative Works shall not include works that remain
+      separable from, or merely link (or bind by name) to the interfaces of,
+      the Work and Derivative Works thereof.
+
+      "Contribution" shall mean any work of authorship, including
+      the original version of the Work and any modifications or additions
+      to that Work or Derivative Works thereof, that is intentionally
+      submitted to Licensor for inclusion in the Work by the copyright owner
+      or by an individual or Legal Entity authorized to submit on behalf of
+      the copyright owner. For the purposes of this definition, "submitted"
+      means any form of electronic, verbal, or written communication sent
+      to the Licensor or its representatives, including but not limited to
+      communication on electronic mailing lists, source code control systems,
+      and issue tracking systems that are managed by, or on behalf of, the
+      Licensor for the purpose of discussing and improving the Work, but
+      excluding communication that is conspicuously marked or otherwise
+      designated in writing by the copyright owner as "Not a Contribution."
+
+      "Contributor" shall mean Licensor and any individual or Legal Entity
+      on behalf of whom a Contribution has been received by Licensor and
+      subsequently incorporated within the Work.
+
+   2. Grant of Copyright License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      copyright license to reproduce, prepare Derivative Works of,
+      publicly display, publicly perform, sublicense, and distribute the
+      Work and such Derivative Works in Source or Object form.
+
+   3. Grant of Patent License. Subject to the terms and conditions of
+      this License, each Contributor hereby grants to You a perpetual,
+      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+      (except as stated in this section) patent license to make, have made,
+      use, offer to sell, sell, import, and otherwise transfer the Work,
+      where such license applies only to those patent claims licensable
+      by such Contributor that are necessarily infringed by their
+      Contribution(s) alone or by combination of their Contribution(s)
+      with the Work to which such Contribution(s) was submitted. If You
+      institute patent litigation against any entity (including a
+      cross-claim or counterclaim in a lawsuit) alleging that the Work
+      or a Contribution incorporated within the Work constitutes direct
+      or contributory patent infringement, then any patent licenses
+      granted to You under this License for that Work shall terminate
+      as of the date such litigation is filed.
+
+   4. Redistribution. You may reproduce and distribute copies of the
+      Work or Derivative Works thereof in any medium, with or without
+      modifications, and in Source or Object form, provided that You
+      meet the following conditions:
+
+      (a) You must give any other recipients of the Work or
+          Derivative Works a copy of this License; and
+
+      (b) You must cause any modified files to carry prominent notices
+          stating that You changed the files; and
+
+      (c) You must retain, in the Source form of any Derivative Works
+          that You distribute, all copyright, patent, trademark, and
+          attribution notices from the Source form of the Work,
+          excluding those notices that do not pertain to any part of
+          the Derivative Works; and
+
+      (d) If the Work includes a "NOTICE" text file as part of its
+          distribution, then any Derivative Works that You distribute must
+          include a readable copy of the attribution notices contained
+          within such NOTICE file, excluding those notices that do not
+          pertain to any part of the Derivative Works, in at least one
+          of the following places: within a NOTICE text file distributed
+          as part of the Derivative Works; within the Source form or
+          documentation, if provided along with the Derivative Works; or,
+          within a display generated by the Derivative Works, if and
+          wherever such third-party notices normally appear. The contents
+          of the NOTICE file are for informational purposes only and
+          do not modify the License. You may add Your own attribution
+          notices within Derivative Works that You distribute, alongside
+          or as an addendum to the NOTICE text from the Work, provided
+          that such additional attribution notices cannot be construed
+          as modifying the License.
+
+      You may add Your own copyright statement to Your modifications and
+      may provide additional or different license terms and conditions
+      for use, reproduction, or distribution of Your modifications, or
+      for any such Derivative Works as a whole, provided Your use,
+      reproduction, and distribution of the Work otherwise complies with
+      the conditions stated in this License.
+
+   5. Submission of Contributions. Unless You explicitly state otherwise,
+      any Contribution intentionally submitted for inclusion in the Work
+      by You to the Licensor shall be under the terms and conditions of
+      this License, without any additional terms or conditions.
+      Notwithstanding the above, nothing herein shall supersede or modify
+      the terms of any separate license agreement you may have executed
+      with Licensor regarding such Contributions.
+
+   6. Trademarks. This License does not grant permission to use the trade
+      names, trademarks, service marks, or product names of the Licensor,
+      except as required for reasonable and customary use in describing the
+      origin of the Work and reproducing the content of the NOTICE file.
+
+   7. Disclaimer of Warranty. Unless required by applicable law or
+      agreed to in writing, Licensor provides the Work (and each
+      Contributor provides its Contributions) on an "AS IS" BASIS,
+      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
+      implied, including, without limitation, any warranties or conditions
+      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
+      PARTICULAR PURPOSE. You are solely responsible for determining the
+      appropriateness of using or redistributing the Work and assume any
+      risks associated with Your exercise of permissions under this License.
+
+   8. Limitation of Liability. In no event and under no legal theory,
+      whether in tort (including negligence), contract, or otherwise,
+      unless required by applicable law (such as deliberate and grossly
+      negligent acts) or agreed to in writing, shall any Contributor be
+      liable to You for damages, including any direct, indirect, special,
+      incidental, or consequential damages of any character arising as a
+      result of this License or out of the use or inability to use the
+      Work (including but not limited to damages for loss of goodwill,
+      work stoppage, computer failure or malfunction, or any and all
+      other commercial damages or losses), even if such Contributor
+      has been advised of the possibility of such damages.
+
+   9. Accepting Warranty or Additional Liability. While redistributing
+      the Work or Derivative Works thereof, You may choose to offer,
+      and charge a fee for, acceptance of support, warranty, indemnity,
+      or other liability obligations and/or rights consistent with this
+      License. However, in accepting such obligations, You may act only
+      on Your own behalf and on Your sole responsibility, not on behalf
+      of any other Contributor, and only if You agree to indemnify,
+      defend, and hold each Contributor harmless for any liability
+      incurred by, or claims asserted against, such Contributor by reason
+      of your accepting any such warranty or additional liability.
+
+   END OF TERMS AND CONDITIONS
+
+   APPENDIX: How to apply the Apache License to your work.
+
+      To apply the Apache License to your work, attach the following
+      boilerplate notice, with the fields enclosed by brackets "[]"
+      replaced with your own identifying information. (Don't include
+      the brackets!)  The text should be enclosed in the appropriate
+      comment syntax for the file format. We also recommend that a
+      file or class name and description of purpose be included on the
+      same "printed page" as the copyright notice for easier
+      identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Apache License, Version 2.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://www.apache.org/licenses/LICENSE-2.0
+
+   Unless required by applicable law or agreed to in writing, software
+   distributed under the License is distributed on an "AS IS" BASIS,
+   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+   See the License for the specific language governing permissions and
+   limitations under the License.
+
+~~~
+
+Copyright (C) 2009 Yahoo! Inc.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+   http://www.apache.org/licenses/LICENSE-2.0
+
+~~~
+
+Mersenne Twister License
+
+   Copyright (C) 2004, Makoto Matsumoto and Takuji Nishimura,
+   All rights reserved.                          
+
+   Redistribution and use in source and binary forms, with or without
+   modification, are permitted provided that the following conditions
+   are met:
+
+     1. Redistributions of source code must retain the above copyright
+        notice, this list of conditions and the following disclaimer.
+
+     2. Redistributions in binary form must reproduce the above copyright
+        notice, this list of conditions and the following disclaimer in the
+        documentation and/or other materials provided with the distribution.
+
+     3. The names of its contributors may not be used to endorse or promote 
+        products derived from this software without specific prior written 
+        permission.
+
+   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+   A PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE COPYRIGHT OWNER OR
+   CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
+   EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
+   PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
+   PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
+   LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
+   NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
+   SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+~~~
+
+TK 8.3 License
+
+This software is copyrighted by the Regents of the University of
+California, Sun Microsystems, Inc., and other parties.  The following
+terms apply to all files associated with the software unless explicitly
+disclaimed in individual files.
+
+The authors hereby grant permission to use, copy, modify, distribute,
+and license this software and its documentation for any purpose, provided
+that existing copyright notices are retained in all copies and that this
+notice is included verbatim in any distributions. No written agreement,
+license, or royalty fee is required for any of the authorized uses.
+Modifications to this software may be copyrighted by their authors
+and need not follow the licensing terms described here, provided that
+the new terms are clearly indicated on the first page of each file where
+they apply.
+
+IN NO EVENT SHALL THE AUTHORS OR DISTRIBUTORS BE LIABLE TO ANY PARTY
+FOR DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES
+ARISING OUT OF THE USE OF THIS SOFTWARE, ITS DOCUMENTATION, OR ANY
+DERIVATIVES THEREOF, EVEN IF THE AUTHORS HAVE BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGE.
+
+THE AUTHORS AND DISTRIBUTORS SPECIFICALLY DISCLAIM ANY WARRANTIES,
+INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE, AND NON-INFRINGEMENT.  THIS SOFTWARE
+IS PROVIDED ON AN "AS IS" BASIS, AND THE AUTHORS AND DISTRIBUTORS HAVE
+NO OBLIGATION TO PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR
+MODIFICATIONS.
+
+GOVERNMENT USE: If you are acquiring this software on behalf of the
+U.S. government, the Government shall have only "Restricted Rights"
+in the software and related documentation as defined in the Federal
+Acquisition Regulations (FARs) in Clause 52.227.19 (c) (2).  If you
+are acquiring the software on behalf of the Department of Defense, the
+software shall be classified as "Commercial Computer Software" and the
+Government shall have only "Restricted Rights" as defined in Clause
+252.227-7013 (c) (1) of DFARs.  Notwithstanding the foregoing, the
+authors grant the U.S. Government and others acting in its behalf
+permission to use and distribute the software in accordance with the
+terms specified in this license.
+
+~~~
+
+BIND license
+
+Copyright (c) 1985, 1989, 1993
+   The Regents of the University of California.  All rights reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. Neither the name of the University nor the names of its contributors
+   may be used to endorse or promote products derived from this software
+   without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+
+
+Portions Copyright (c) 1993 by Digital Equipment Corporation.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies, and that
+the name of Digital Equipment Corporation not be used in advertising or
+publicity pertaining to distribution of the document or software without
+specific, written prior permission.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND DIGITAL EQUIPMENT CORP. DISCLAIMS ALL
+WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES
+OF MERCHANTABILITY AND FITNESS.   IN NO EVENT SHALL DIGITAL EQUIPMENT
+CORPORATION BE LIABLE FOR ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL
+DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR
+PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS
+ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS
+SOFTWARE.
+
+
+
+Copyright (c) 2004 by Internet Systems Consortium, Inc. ("ISC")
+Portions Copyright (c) 1996-1999 by Internet Software Consortium.
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS.  IN NO EVENT SHALL ISC BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT
+OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+
+~~~
+
+Copyright (c) 1994-2011 John Bradley Plevyak, All Rights Reserved.
+
+Redistribution and use in source and binary forms, with or without
+modification, are permitted provided that the following conditions
+are met:
+1. Redistributions of source code must retain the above copyright
+   notice, this list of conditions and the following disclaimer.
+2. Redistributions in binary form must reproduce the above copyright
+   notice, this list of conditions and the following disclaimer in the
+   documentation and/or other materials provided with the distribution.
+3. The name of the author may be used to endorse or promote products derived
+   from this software without specific prior written permission.
+
+THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
+ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
+FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+SUCH DAMAGE.
+
+~~~
+
+Copyright (C) 2007 Ariya Hidayat (ariya@kde.org)
+Copyright (C) 2006 Ariya Hidayat (ariya@kde.org)
+Copyright (C) 2005 Ariya Hidayat (ariya@kde.org)
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
+
+
+For the strlcat, strlcpy in inktomi++/ink_string.cc:
+
+Copyright (c) 1998 Todd C. Miller <Todd.Miller@courtesan.com>
+
+Permission to use, copy, modify, and distribute this software for any
+purpose with or without fee is hereby granted, provided that the above
+copyright notice and this permission notice appear in all copies.
+
+THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
+WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
+ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
+WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
+ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
+OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
+

Added: trafficserver/plugins/trunk/hipes/README
URL: http://svn.apache.org/viewvc/trafficserver/plugins/trunk/hipes/README?rev=1199560&view=auto
==============================================================================
--- trafficserver/plugins/trunk/hipes/README (added)
+++ trafficserver/plugins/trunk/hipes/README Wed Nov  9 00:09:02 2011
@@ -0,0 +1,25 @@
+This plugin implements the HIPES system.
+
+Plugin configuration
+--------------------
+
+   server:<host>	Name of the server to send this request to
+   urlp:<name>		Name of the query parameter for the service URL [url]
+   path:<path>		Path to use for the service URL [/]
+   ssl			Use SSL when connecting to the service [no]
+   service		Service server, host[:port]  [no default]
+   server		Name of HIPES server, host[:port]   [hipes.yimg.com]
+   active_timeout	The active connection timeout in ms [no default]
+   no_activity_timeout	The no activity timeout in ms [no default]
+   connect_timeout	The connect timeout in ms [no default]
+   dns_timeout		The DNS timeout [no default]
+
+
+The timeout options override the server defaults (from records.config),
+and only apply to the connection to the specific "service" host.
+
+RELEASES
+--------
+
+Version 1.0 (??/??/10)
+  - First release.

Added: trafficserver/plugins/trunk/hipes/gen_escape.c
URL: http://svn.apache.org/viewvc/trafficserver/plugins/trunk/hipes/gen_escape.c?rev=1199560&view=auto
==============================================================================
--- trafficserver/plugins/trunk/hipes/gen_escape.c (added)
+++ trafficserver/plugins/trunk/hipes/gen_escape.c Wed Nov  9 00:09:02 2011
@@ -0,0 +1,30 @@
+#include <stdio.h>
+#include <string.h>
+
+
+int main() {
+  unsigned char codes[32];
+  unsigned char hex;
+  int c;
+
+  memset(codes, 0, sizeof(codes));
+
+  for (c = 0; c <= 255; ++c) {
+    if ( ( (c >= '0') && (c <= '9') ) ||
+         ( (c >= 'A') && (c <= 'Z') ) ||
+         ( (c >= 'a') && (c <= 'z') ) ||
+         ( (c == '_') ) ||
+         ( (c == '-') ) ||
+         ( (c == '.') ) ) {
+    } else {
+      codes[c / 8] |= (1 << (7 - c % 8));
+    }
+  }
+
+  for (hex = 0; hex < 32; ++hex) {
+    printf("0x%02lX, ", codes[hex]);
+    if (!((hex+1) % 4))
+      printf("\n");
+  }
+  
+}

Added: trafficserver/plugins/trunk/hipes/hipes.cc
URL: http://svn.apache.org/viewvc/trafficserver/plugins/trunk/hipes/hipes.cc?rev=1199560&view=auto
==============================================================================
--- trafficserver/plugins/trunk/hipes/hipes.cc (added)
+++ trafficserver/plugins/trunk/hipes/hipes.cc Wed Nov  9 00:09:02 2011
@@ -0,0 +1,535 @@
+//////////////////////////////////////////////////////////////////////////////////////////////
+// hipes: plugin for the HIPES services.
+// ------
+//
+// To use this plugin, configure a remap.config rule like
+//
+//   map http://foo.com http://bar.com @plugin=hipes.so @pparam=<parameter> ...
+//
+//
+// The list of of all available parameters is in the README.
+//
+//
+//
+
+#define UNUSED __attribute__ ((unused))
+static char UNUSED rcsId__url_remap_cc[] = "@(#) $Id: yfor_remap.cc 218 2009-04-25 01:29:16Z
leifh $ built on " __DATE__ " " __TIME__;
+
+
+#include <stdio.h>
+#include <sys/time.h>
+#include <string.h>
+#include <stdlib.h>
+#include <string>
+
+#include <ts/remap.h>
+#include <ts/ts.h>
+
+const char* HIPES_SERVER_NAME="hipes.yimg.com";
+
+
+///////////////////////////////////////////////////////////////////////////////
+// Escape a URL string.
+//
+int
+escapify_url(const char *src, int src_len, char* dst, int dst_len)
+{
+  // This bitmap is generated using the gen_escape.c prog.
+  static unsigned char codes_to_escape[32] = {
+    0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xF9, 0x00, 0x3F, 
+    0x80, 0x00, 0x00, 0x1E, 
+    0x80, 0x00, 0x00, 0x1F, 
+    0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF, 
+    0xFF, 0xFF, 0xFF, 0xFF
+  };
+
+  static char hex_digit[16] = {
+    '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C',
+    'D', 'E', 'F'
+  };
+
+  const char* from = src;
+  char* to = dst;
+  int len = 0;
+
+  // Sanity check
+  if (!src)
+    return -1;
+
+  while (from < (src + src_len)) {
+    register unsigned char c = *from;
+
+    if (len >= dst_len)
+      return -1; // Does not fit.... abort!
+
+    if (codes_to_escape[c / 8] & (1 << (7 - c % 8))) {
+      *to++ = '%';
+      *to++ = hex_digit[c / 16];
+      *to++ = hex_digit[c % 16];
+      len += 3;
+    } else {
+      *to++ = *from;
+      ++len;
+    }
+    ++from;
+  }
+  *to = '\0';
+
+  return len;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// Unescape a string. Have to make sure the destination buffer is at least as
+// long as the source buffer.
+//
+char*
+unescapify(const char* src, char* dst, int len) {
+  const char* cur = src;
+  char* next;
+  char subStr[3];
+  int size;
+
+  subStr[2] = '\0';
+  while ((next = (char*)memchr(cur, '%', len))) {
+    size = next - cur;
+    if (size > 0) {
+      memcpy(dst, cur, size);
+      dst += size;
+      cur += size;
+      len -= size;
+    }
+
+    if (len > 2  && (*cur+1) != '\0' && *(cur+2) != '\0') {
+      subStr[0] = *(++cur);
+      subStr[1] = *(++cur);
+      len -= 2;
+      *dst = (char)strtol(subStr, (char**)NULL, 16);
+    } else {
+      *dst = *cur;
+    }
+    ++dst;
+    ++cur;
+    --len;
+  }
+
+  if (len > 0) {
+    memcpy(dst, cur, len);
+    dst += len;
+  }
+
+  return dst;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// Class encapsulating one service configuration
+//
+struct HIPESService
+{
+  HIPESService() :
+    url_param("url"), path(""), svc_server(""), svc_port(80), ssl(false), hipes_server(HIPES_SERVER_NAME),
+    hipes_port(80), default_redirect_flag(1), x_hipes_header("X-HIPES-Redirect"),
+    active_timeout(-1), no_activity_timeout(-1), connect_timeout(-1), dns_timeout(-1)
+  { };
+
+  std::string url_param;
+  std::string path;
+  std::string svc_server;
+  int svc_port;
+  bool ssl;
+  std::string hipes_server;
+  int hipes_port;
+  unsigned int default_redirect_flag;
+  std::string x_hipes_header;
+  int active_timeout;
+  int no_activity_timeout;
+  int connect_timeout;
+  int dns_timeout;
+};
+
+
+
+///////////////////////////////////////////////////////////////////////////////
+// Initialize the plugin.
+//
+int
+tsremap_init(TSREMAP_INTERFACE *api_info, char *errbuf, int errbuf_size)
+{
+  if (!api_info) {
+    strncpy(errbuf, "[tsremap_init] - Invalid TSREMAP_INTERFACE argument", errbuf_size -
1);
+    return -1;
+  }
+
+  if (api_info->size < sizeof(TSREMAP_INTERFACE)) {
+    strncpy(errbuf, "[tsremap_init] - Incorrect size of TSREMAP_INTERFACE structure", errbuf_size
- 1);
+    return -2;
+  }
+
+  if (api_info->tsremap_version < TSREMAP_VERSION) {
+    snprintf(errbuf, errbuf_size - 1, "[tsremap_init] - Incorrect API version %ld.%ld",
+             api_info->tsremap_version >> 16, (api_info->tsremap_version &
0xffff));
+    return -3;
+  }
+
+  INKDebug("hipes", "plugin is succesfully initialized");
+  return 0;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// One instance per remap.config invocation.
+//
+int
+tsremap_new_instance(int argc, char *argv[], ihandle *ih, char *errbuf, int errbuf_size)
+{
+  HIPESService* ri = new HIPESService;
+
+  *ih = static_cast<ihandle>(ri);
+
+  if (ri == NULL) {
+    INKError("Unable to create remap instance");
+    return -5;
+  }
+
+  for (int ix=2; ix < argc; ++ix) {
+    std::string arg = argv[ix];
+    std::string::size_type sep = arg.find_first_of(":");
+
+    if (sep == std::string::npos) {
+      INKError("Malformed options in url_remap: %s", argv[ix]);
+    } else {
+      std::string arg_val = arg.substr(sep + 1, std::string::npos);
+
+      if (arg.compare(0, 4, "urlp") == 0) {
+        ri->url_param = arg_val;
+      } else if (arg.compare(0, 4, "path") == 0) {
+        ri->path = arg_val;
+        if (arg_val[0] == '/')
+          ri->path = arg_val.substr(1);
+        else
+          ri->path = arg_val;
+      } else if (arg.compare(0, 3, "ssl") == 0) {
+        ri->ssl = true;
+      } else if (arg.compare(0, 7, "service") == 0) {
+        std::string::size_type port = arg_val.find_first_of(":");
+
+        if (port == std::string::npos) {
+          ri->svc_server = arg_val;
+        } else {
+          ri->svc_server = arg_val.substr(0, port);
+          ri->svc_port = atoi(arg_val.substr(port+1).c_str());
+        }
+      } else if (arg.compare(0, 6, "server") == 0) {
+        std::string::size_type port = arg_val.find_first_of(":");
+
+        if (port == std::string::npos) {
+          ri->hipes_server = arg_val;
+        } else {
+          ri->hipes_server = arg_val.substr(0, port);
+          ri->hipes_port = atoi(arg_val.substr(port+1).c_str());
+        }
+      } else if (arg.compare(0, 14, "active_timeout") == 0) {
+        ri->active_timeout = atoi(arg_val.c_str());
+      } else if (arg.compare(0, 19, "no_activity_timeout") == 0) {
+        ri->no_activity_timeout = atoi(arg_val.c_str());
+      } else if (arg.compare(0, 15, "connect_timeout") == 0) {
+        ri->connect_timeout = atoi(arg_val.c_str());
+      } else if (arg.compare(0, 11, "dns_timeout") == 0) {
+        ri->dns_timeout = atoi(arg_val.c_str());
+      } else {
+        INKError("Unknown url_remap option: %s", argv[ix]);
+      }
+    }
+  }
+
+  return 0;
+}
+
+void
+tsremap_delete_instance(ihandle ih)
+{
+  HIPESService* ri = static_cast<HIPESService*>(ih);
+
+  delete ri;
+}
+
+
+///////////////////////////////////////////////////////////////////////////////
+// This is the main "entry" point for the plugin, called for every request.
+//
+int
+tsremap_remap(ihandle ih, rhandle rh, REMAP_REQUEST_INFO *rri)
+{
+  const char* slash;
+  char* ptr;
+  HIPESService* h_conf = static_cast<HIPESService*>(ih);
+
+  if (NULL == h_conf) {
+    INKDebug("hipes", "Falling back to default URL on URL remap without rules");
+    return 0;
+  }
+
+  // Make sure we have a matrix parameter, anything without is a bogus request.
+  if (rri->request_matrix_size <= 0) {
+    INKHttpTxnSetHttpRetStatus((INKHttpTxn)rh, INK_HTTP_STATUS_BAD_REQUEST);
+    return 0;
+  }
+
+  // Don't think this can/should happen, but safety first ...
+  if (rri->request_matrix_size > TSREMAP_RRI_MAX_PATH_SIZE) {
+    INKHttpTxnSetHttpRetStatus((INKHttpTxn)rh, INK_HTTP_STATUS_REQUEST_URI_TOO_LONG);
+    return 0;
+  }
+
+  // If there is a '/' in the matrix parameters, we know there are multiple service requests
in
+  // the incoming URL, so nibble off the first one, and pass the rest as a HIPES URL to the
service.
+  if ((slash = static_cast<const char*>(memchr(rri->request_matrix, '/', rri->request_matrix_size))))
{
+    char svc_url[TSREMAP_RRI_MAX_PATH_SIZE + 1];
+    char svc_url_esc[TSREMAP_RRI_MAX_PATH_SIZE + 1];
+    int len, query_len;
+
+    // Create the escaped URL, which gets passed over to the service as a url= param.
+    len = 8 + h_conf->hipes_server.size() + (rri->request_matrix_size - (slash - rri->request_matrix)
- 1);
+    if (len > TSREMAP_RRI_MAX_PATH_SIZE) {
+      INKHttpTxnSetHttpRetStatus((INKHttpTxn)rh, INK_HTTP_STATUS_REQUEST_URI_TOO_LONG);
+      return 0;
+    }
+    snprintf(svc_url, TSREMAP_RRI_MAX_PATH_SIZE, "http://%s/%.*s", h_conf->hipes_server.c_str(),
len, slash + 1);
+    INKDebug("hipes", "Service URL is %s", svc_url);
+
+    len = escapify_url(svc_url, len, svc_url_esc, TSREMAP_RRI_MAX_PATH_SIZE);
+    if (len < 0) {
+      return 0;
+    }
+    INKDebug("hipes", "Escaped service URL is %s(%d)", svc_url_esc, len);
+
+    // Prepare the new query arguments, make sure it fits
+    if (( (slash - rri->request_matrix) + 2 + h_conf->url_param.size() + len) >
TSREMAP_RRI_MAX_PATH_SIZE) {
+      INKHttpTxnSetHttpRetStatus((INKHttpTxn)rh, INK_HTTP_STATUS_REQUEST_URI_TOO_LONG);
+      return 0;
+    }
+
+    query_len = (slash - rri->request_matrix);
+    memcpy(rri->new_query, rri->request_matrix, query_len);
+    ptr = rri->new_query;
+    while ((ptr = static_cast<char*>(memchr(ptr, ';', (rri->new_query + query_len)
- ptr))))
+      *ptr = '&';
+
+    rri->new_query[query_len++] = '&';
+    memcpy(rri->new_query + query_len, h_conf->url_param.c_str(), h_conf->url_param.size());
+    query_len += h_conf->url_param.size();
+    rri->new_query[query_len++] = '=';
+
+    memcpy(rri->new_query + query_len, svc_url_esc, len);
+    rri->new_query_size = query_len + len;
+    INKDebug("hipes", "New query is %.*s(%d)", rri->new_query_size, rri->new_query,
rri->new_query_size);
+  } else {
+    // This is the "final" step in this HIPES URL, so don't point back to HIPES (or we'll
never leave)
+    rri->new_query_size = rri->request_matrix_size;
+    memcpy(rri->new_query, rri->request_matrix, rri->request_matrix_size);
+    ptr = rri->new_query;
+    while ((ptr = static_cast<char*>(memchr(ptr, ';', (rri->new_query + rri->new_query_size)
- ptr))))
+      *ptr = '&';
+
+    INKDebug("hipes", "New query is %.*s(%d)", rri->new_query_size, rri->new_query,
rri->new_query_size);
+  }
+
+  // Test if we should redirect or not
+  bool do_redirect = false;
+  int redirect_flag = h_conf->default_redirect_flag;
+  char* pos = rri->new_query;
+
+  while (pos && (pos = (char*)memchr(pos, '_', rri->new_query_size - (pos - rri->new_query))))
{
+    if (pos) {
+      ++pos;
+      if ((rri->new_query_size - (pos - rri->new_query)) < 10) { // redirect=n
+        pos = NULL;
+      } else {
+        if ((*pos == 'r') && (!strncmp(pos, "redirect=", 9))) {
+          redirect_flag = *(pos + 9) - '0';
+          if ((redirect_flag < 0) || (redirect_flag > 2))
+            redirect_flag = h_conf->default_redirect_flag;
+          INKDebug("hipes", "Found _redirect flag in URL: %d\n", redirect_flag);
+          pos = NULL;
+        }
+      }
+    }
+  }
+
+  if (redirect_flag > 0) {
+    // Now check the incoming request header, and match up.
+    INKMBuffer bufp;
+    INKMLoc hdr_loc, field_loc;
+    bool has_error = false;
+
+    if (INKHttpTxnClientReqGet((INKHttpTxn)rh, &bufp, &hdr_loc)) {
+      field_loc = INKMimeHdrFieldFind(bufp, hdr_loc, h_conf->x_hipes_header.c_str(), h_conf->x_hipes_header.size());
+      if (field_loc) {
+        int hdr_flag;
+
+        if (INKMimeHdrFieldValueIntGet(bufp, hdr_loc, field_loc, 0, &hdr_flag) == INK_SUCCESS)
{
+          // Alright, now match up this header flag with the request (or default) flag
+          INKDebug("hipes", "Extracted %s header with value %d", h_conf->x_hipes_header.c_str(),
hdr_flag);
+          switch (redirect_flag) {
+          case 0:
+            if (hdr_flag == 2) {
+              INKHttpTxnSetHttpRetStatus((INKHttpTxn)rh, INK_HTTP_STATUS_BAD_REQUEST);
+              has_error = true;
+            } // Everything else is a "no"
+            break;
+          case 1:
+            if (hdr_flag == 2) {
+              do_redirect = true;
+            } // Everything else is a "no"
+            break;
+          case 2:
+            if (hdr_flag == 2) {
+              do_redirect = true;
+            } else {
+              INKHttpTxnSetHttpRetStatus((INKHttpTxn)rh, INK_HTTP_STATUS_BAD_REQUEST);
+              has_error = true;
+            }
+            break;
+          default:
+            INKHttpTxnSetHttpRetStatus((INKHttpTxn)rh, INK_HTTP_STATUS_BAD_REQUEST);
+            has_error = true;
+            break;
+          }
+        }
+        INKHandleMLocRelease(bufp, hdr_loc, field_loc);
+      }
+      INKHandleMLocRelease(bufp, INK_NULL_MLOC, hdr_loc);
+    }
+    if (has_error)
+      return 1;
+  }
+
+  // If we redirect, just generate a 302 URL, otherwise update the RRI struct properly.
+  if (do_redirect) {
+    int len; 
+
+    if (h_conf->ssl) {
+      // https://<host>:<port>/<path>?<query?\0
+      len = 5 + 3 + h_conf->svc_server.size() + 6 + 1 + h_conf->path.size() + 1 + rri->new_query_size
+ 1;
+    } else {
+      // http://<host>:<port>/<path>?<query?\0
+      len = 4 + 3 + h_conf->svc_server.size() + 6 + 1 + h_conf->path.size() + 1 + rri->new_query_size
+ 1;
+    }
+
+    if (len > TSREMAP_RRI_MAX_REDIRECT_URL) {
+      INKError("Redirect in HIPES URL too long");
+      INKHttpTxnSetHttpRetStatus((INKHttpTxn)rh, (INKHttpStatus)414);
+    } else {
+      int port = -1;
+
+      pos = rri->redirect_url;
+
+      // HTTP vs HTTPS
+      if (h_conf->ssl) {
+        memcpy(pos, "https://", 8);
+        pos += 8;
+        if (h_conf->svc_port != 443)
+          port = h_conf->svc_port;
+      } else {
+        memcpy(pos, "http://", 7);
+        pos += 7;
+        if (h_conf->svc_port != 80)
+          port = h_conf->svc_port;
+      }
+
+      // Server
+      memcpy(pos, h_conf->svc_server.c_str(), h_conf->svc_server.size());
+      pos += h_conf->svc_server.size();
+
+      // Port
+      if (port != -1)
+        pos += snprintf(pos, 6, ":%d", port);
+
+      // Path
+      *(pos++) = '/';
+      if (h_conf->path.size() > 0) {
+        memcpy(pos, h_conf->path.c_str(), h_conf->path.size());
+        pos += h_conf->path.size();
+      }
+
+      // Query
+      if (rri->new_query_size > 0) {
+        *(pos++) = '?';
+        memcpy(pos, rri->new_query, rri->new_query_size);
+        pos += rri->new_query_size;
+      }
+
+      // NULL terminate the URL.
+      *pos = '\0';
+
+      rri->redirect_url_size = pos - rri->redirect_url + 1;
+      INKDebug("hipes", "Redirecting to %.*s", rri->redirect_url_size, rri->redirect_url);
+      *(rri->new_query) = '\0';
+      rri->new_query_size = 0;
+      INKHttpTxnSetHttpRetStatus((INKHttpTxn)rh, INK_HTTP_STATUS_MOVED_TEMPORARILY);
+    }
+  } else { // Not a redirect, so proceed normally
+    // Set timeouts (if requested)
+    if (h_conf->active_timeout > -1) {
+      INKDebug("hipes", "Setting active timeout to %d", h_conf->active_timeout);
+      INKHttpTxnActiveTimeoutSet((INKHttpTxn)rh, h_conf->active_timeout);
+    }
+    if (h_conf->no_activity_timeout > -1) {
+      INKDebug("hipes", "Setting no activity timeout to %d", h_conf->no_activity_timeout);
+      INKHttpTxnNoActivityTimeoutSet((INKHttpTxn)rh, h_conf->no_activity_timeout);
+    }
+    if (h_conf->connect_timeout > -1) {
+      INKDebug("hipes", "Setting connect timeout to %d", h_conf->connect_timeout);
+      INKHttpTxnConnectTimeoutSet((INKHttpTxn)rh, h_conf->connect_timeout);
+    }
+    if (h_conf->dns_timeout > -1) {
+      INKDebug("hipes", "Setting DNS timeout to %d", h_conf->dns_timeout);
+      INKHttpTxnDNSTimeoutSet((INKHttpTxn)rh, h_conf->dns_timeout);
+    }
+
+    // Set server ...
+    rri->new_host_size = h_conf->svc_server.size();
+    memcpy(rri->new_host, h_conf->svc_server.c_str(), rri->new_host_size);
+    INKDebug("hipes", "New server is %.*s", rri->new_host_size, rri->new_host);
+
+    // ... and port
+    rri->new_port = h_conf->svc_port;
+    INKDebug("hipes", "New port is %d", rri->new_port);
+
+    // Update the path
+    rri->new_path_size = h_conf->path.size();
+    memcpy(rri->new_path, h_conf->path.c_str(), rri->new_path_size);
+    INKDebug("hipes", "New path is %.*s", rri->new_path_size, rri->new_path);
+
+    // Enable SSL?
+    if (h_conf->ssl)
+      rri->require_ssl = 1;
+
+    // Clear previous matrix params
+    rri->new_matrix_size = -1;
+  }
+
+  // Step 3: Profit
+  return 1;
+}
+
+
+
+/*
+  local variables:
+  mode: C++
+  indent-tabs-mode: nil
+  c-basic-offset: 2
+  c-comment-only-line-offset: 0
+  c-file-offsets: ((statement-block-intro . +)
+  (label . 0)
+  (statement-cont . +)
+
+  end:
+
+  Indent with: /usr/bin/indent -ncs -nut -npcs -l 120 logstats.cc
+*/



Mime
View raw message