967e5f3c25249c779575864692935627004d3f9eChristian Maeder/* Licensed to the Apache Software Foundation (ASF) under one or more
967e5f3c25249c779575864692935627004d3f9eChristian Maeder * contributor license agreements. See the NOTICE file distributed with
967e5f3c25249c779575864692935627004d3f9eChristian Maeder * this work for additional information regarding copyright ownership.
967e5f3c25249c779575864692935627004d3f9eChristian Maeder * The ASF licenses this file to You under the Apache License, Version 2.0
967e5f3c25249c779575864692935627004d3f9eChristian Maeder * (the "License"); you may not use this file except in compliance with
967e5f3c25249c779575864692935627004d3f9eChristian Maeder * the License. You may obtain a copy of the License at
967e5f3c25249c779575864692935627004d3f9eChristian Maeder *
967e5f3c25249c779575864692935627004d3f9eChristian Maeder * http://www.apache.org/licenses/LICENSE-2.0
967e5f3c25249c779575864692935627004d3f9eChristian Maeder *
967e5f3c25249c779575864692935627004d3f9eChristian Maeder * Unless required by applicable law or agreed to in writing, software
967e5f3c25249c779575864692935627004d3f9eChristian Maeder * distributed under the License is distributed on an "AS IS" BASIS,
967e5f3c25249c779575864692935627004d3f9eChristian Maeder * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
967e5f3c25249c779575864692935627004d3f9eChristian Maeder * See the License for the specific language governing permissions and
967e5f3c25249c779575864692935627004d3f9eChristian Maeder * limitations under the License.
967e5f3c25249c779575864692935627004d3f9eChristian Maeder */
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian Maeder#include "httpd.h"
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder#include "http_log.h"
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder#include "ap_mpm.h"
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder#include <netware.h>
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder#include <nks/netware.h>
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder#include <nks/vm.h>
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maedervoid ap_down_server_cb(void *, void *);
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maedervoid ap_dummy_cb(void *, void *);
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maedervoid ap_cb_destroy(void *);
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maederint nlmUnloadSignaled(int wait);
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maederevent_handle_t eh;
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian MaederWarn_t ref;
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian MaederReport_t dum;
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian MaederAP_DECLARE(apr_status_t) ap_os_create_privileged_process(
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder const request_rec *r,
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder apr_proc_t *newproc, const char *progname,
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder const char * const *args,
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder const char * const *env,
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder apr_procattr_t *attr, apr_pool_t *p)
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder{
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder return apr_proc_create(newproc, progname, args, env, attr, p);
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder}
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maederint _NonAppCheckUnload(void)
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder{
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder return nlmUnloadSignaled(1);
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder}
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder/* down server event callback */
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maedervoid ap_down_server_cb(void *a, void *b)
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder{
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder nlmUnloadSignaled(0);
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder return;
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder}
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder/* Required place holder event callback */
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maedervoid ap_dummy_cb(void *a, void *b)
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder{
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder return;
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder}
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder/* destroy callback resources */
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maedervoid ap_cb_destroy(void *a)
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder{
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder /* cleanup down event notification */
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder UnRegisterEventNotification(eh);
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder NX_UNWRAP_INTERFACE(ref);
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder NX_UNWRAP_INTERFACE(dum);
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder}
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maederint _NonAppStart
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder(
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder void *NLMHandle,
fd896e2068ad7e50aed66ac18c3720ea7ff2619fChristian Maeder void *errorScreen,
967e5f3c25249c779575864692935627004d3f9eChristian Maeder const char *cmdLine,
967e5f3c25249c779575864692935627004d3f9eChristian Maeder const char *loadDirPath,
967e5f3c25249c779575864692935627004d3f9eChristian Maeder size_t uninitializedDataLength,
967e5f3c25249c779575864692935627004d3f9eChristian Maeder void *NLMFileHandle,
967e5f3c25249c779575864692935627004d3f9eChristian Maeder int (*readRoutineP)( int conn, void *fileHandle, size_t offset,
967e5f3c25249c779575864692935627004d3f9eChristian Maeder size_t nbytes, size_t *bytesRead, void *buffer ),
967e5f3c25249c779575864692935627004d3f9eChristian Maeder size_t customDataOffset,
967e5f3c25249c779575864692935627004d3f9eChristian Maeder size_t customDataSize,
967e5f3c25249c779575864692935627004d3f9eChristian Maeder int messageCount,
967e5f3c25249c779575864692935627004d3f9eChristian Maeder const char **messages
967e5f3c25249c779575864692935627004d3f9eChristian Maeder)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder{
967e5f3c25249c779575864692935627004d3f9eChristian Maeder#pragma unused(cmdLine)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder#pragma unused(loadDirPath)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder#pragma unused(uninitializedDataLength)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder#pragma unused(NLMFileHandle)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder#pragma unused(readRoutineP)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder#pragma unused(customDataOffset)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder#pragma unused(customDataSize)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder#pragma unused(messageCount)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder#pragma unused(messages)
967e5f3c25249c779575864692935627004d3f9eChristian Maeder
967e5f3c25249c779575864692935627004d3f9eChristian Maeder /* register for down server event */
967e5f3c25249c779575864692935627004d3f9eChristian Maeder rtag_t rt = AllocateResourceTag(NLMHandle, "Apache2 Down Server Callback",
EventSignature);
NX_WRAP_INTERFACE((void *)ap_down_server_cb, 2, (void **)&ref);
NX_WRAP_INTERFACE((void *)ap_dummy_cb, 2, (void **)&dum);
eh = RegisterForEventNotification(rt, EVENT_DOWN_SERVER,
EVENT_PRIORITY_APPLICATION,
ref, dum, NULL);
/* clean-up */
NXVmRegisterExitHandler(ap_cb_destroy, NULL);
return 0;
}