You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@trafficserver.apache.org by zw...@apache.org on 2013/04/15 22:46:42 UTC
[35/50] git commit: Drop in libloader code.
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/b18645b3
Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/b18645b3
Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/b18645b3
Branch: refs/heads/3.3.x
Commit: b18645b324db59753844c502c6440e14d8aa0b3e
Parents: bb75f4a
Author: niq <ni...@apache.org>
Authored: Sat Apr 6 00:32:59 2013 +0100
Committer: Leif Hedstrom <zw...@apache.org>
Committed: Mon Apr 15 14:45:44 2013 -0600
----------------------------------------------------------------------
plugins/libloader/libloader.c | 85 ++++++++++++++++++++++++++++++++++++
1 files changed, 85 insertions(+), 0 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/trafficserver/blob/b18645b3/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 *)"users@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;
+}