Updated Branches:
  refs/heads/master e2aff41f8 -> 41f1c2e14

Drop in libloader code.

Necessary build and docs to follow.


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

Branch: refs/heads/master
Commit: 5654cf4c4b22e0c81d56f1b8d0afeafaed8a8133
Parents: eabab3e
Author: niq <n...@apache.org>
Authored: Sat Apr 6 00:32:59 2013 +0100
Committer: niq <n...@apache.org>
Committed: Sat Apr 6 00:32:59 2013 +0100

----------------------------------------------------------------------
 plugins/libloader/libloader.c |   85 ++++++++++++++++++++++++++++++++++++
 1 files changed, 85 insertions(+), 0 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/trafficserver/blob/5654cf4c/plugins/libloader/libloader.c
----------------------------------------------------------------------
diff --git a/plugins/libloader/libloader.c b/plugins/libloader/libloader.c
new file mode 100644
index 0000000..ef84c2f
--- /dev/null
+++ b/plugins/libloader/libloader.c
@@ -0,0 +1,85 @@
+/*****************************************************************************
+ * Copyright (C) 2011-13 Qualys, Inc
+ * Copyright (C) 2013 The Apache Software Foundation
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * QUALYS licenses this file to You 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.
+ ****************************************************************************/
+
+/* libloader: load libraries, making all symbols exported
+ * universally visible.  Equivalent to LoadFile in HTTPD.
+ *
+ * Written for ironbee plugin, whose module architecture
+ * is not compatible with trafficserver's plugins.
+ * May be useful for other plugins with non-trivial
+ * library dependencies.
+ */
+
+#include <dlfcn.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <ts/ts.h>
+
+typedef struct {
+    void *handle;
+    void *next;
+} link_handle;
+
+static link_handle *libs = NULL;
+
+static void unloadlibs(void)
+{
+    link_handle *p = libs;
+    while (p != NULL) {
+        link_handle *next = p->next;
+        dlclose(p->handle);
+        TSfree(p);
+        p = next;
+    }
+    libs = NULL;
+}
+
+void TSPluginInit(int argc, const char *argv[])
+{
+    int i;
+    TSPluginRegistrationInfo info;
+
+    info.plugin_name = (char *)"libloader";
+    info.vendor_name = (char *)"Apache Software Foundation";
+    info.support_email = (char *)"us...@trafficserver.apache.org";
+
+    if (TSPluginRegister(TS_SDK_VERSION_3_0, &info) != TS_SUCCESS) {
+        TSError("[libloader] Plugin registration failed.\n");
+        return;
+    }
+
+    atexit(unloadlibs);
+
+    for (i = 1; i < argc; ++i) {
+        const char *lib = argv[i];
+        void *handle = dlopen(lib, RTLD_GLOBAL|RTLD_NOW);
+        if (handle) {
+            link_handle *l = TSmalloc(sizeof(link_handle));
+            l->handle = handle;
+            l->next = libs;
+            libs = l;
+            TSDebug("libloader", " loaded %s\n", lib);
+        }
+        else {
+            TSError("[libloader] failed to load %s: %s\n", lib, dlerror());
+        }
+    }
+    return;
+}

Reply via email to