winserv.c revision 04bdb234571448ed6194e1d4048e6512f2446f1c
/*
* winserv.c - mDNS Proxy, WIN32 Service Specific Functions
*/
/*
* Copyright (c) 2000 Japan Network Information Center. All rights reserved.
*
* By using this file, you agree to the terms and conditions set forth bellow.
*
* LICENSE TERMS AND CONDITIONS
*
* The following License Terms and Conditions apply, unless a different
* license is obtained from Japan Network Information Center ("JPNIC"),
* a Japanese association, Fuundo Bldg., 1-2 Kanda Ogawamachi, Chiyoda-ku,
* Tokyo, Japan.
*
* 1. Use, Modification and Redistribution (including distribution of any
* under this License Terms and Conditions.
*
* 2. Redistribution of source code must retain the copyright notices as they
* appear in each source code file, this License Terms and Conditions.
*
* 3. Redistribution in binary form must reproduce the Copyright Notice,
* materials provided with the distribution. For the purposes of binary
* distribution the "Copyright Notice" refers to the following language:
* "Copyright (c) Japan Network Information Center. All rights reserved."
*
* 4. Neither the name of JPNIC may be used to endorse or promote products
* derived from this Software without specific prior written approval of
* JPNIC.
*
* 5. Disclaimer/Limitation of Liability: THIS SOFTWARE IS PROVIDED BY JPNIC
* "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 JPNIC 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 DAMAGES.
*
* 6. Indemnification by Licensee
* this License Terms and Conditions shall defend indemnify and hold
* harmless JPNIC from and against any and all judgements damages,
* expenses, settlement liabilities, cost and other liabilities of any
* kind as a result of use and redistribution of this Software or any
* claim, suite, action, litigation or proceeding by any third party
* arising out of or relates to this License Terms and Conditions.
*
* 7. Governing Law, Jurisdiction and Venue
* This License Terms and Conditions shall be governed by and and
* construed in accordance with the law of Japan. Any person or entities
* Conditions hereby agrees and consent to the personal and exclusive
* jurisdiction and venue of Tokyo District Court of Japan.
*/
#ifndef lint
#endif
#ifdef WIN32
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <tchar.h>
#include "dnsproxy.h" /* Common definitions for mDNS proxy */
#include "winserv.h" /* Windows's Service Specific */
/*
* Parameters for WIN32 Service
*/
#define SERVICENAME "dnsproxy"
#define DISPLAYNAME "mDNS Proxy"
/*
* getFileName - get fullpath and split it
*/
static void getFileName(void)
{
}
/*
* Service management Varibales
*/
SERVICE_STATUS ServiceStatusRecord = { 0 } ;
int ServiceErrorCode = 0 ;
{
char msgbuff[256] ;
char *strings[2] ;
ServiceErrorCode = GetLastError() ;
0,
0,
NULL,
2,
0,
(const char **) strings,
NULL) ;
}
/* TRACE("%s %s\n", msgbuff, msg) ; */
}
{
char msgbuff[256] ;
char *strings[2] ;
ServiceErrorCode = GetLastError() ;
0,
0,
NULL,
2,
0,
(const char **) strings,
NULL) ;
}
/* FATAL("%s %s\n", msgbuff, msg) ; */
}
/*
* serviceReport - report service status
*/
{
if (state == SERVICE_START_PENDING) {
} else {
}
} else {
}
}
/*
* ServiceCtrl - service control handler
*/
{
switch (opcode) {
case SERVICE_CONTROL_STOP :
serviceLogTrace("ServiceCtrl STOP") ;
/* nofity later, so set status only */
server_stop() ; /* stop server loop */
break ;
case SERVICE_CONTROL_INTERROGATE :
/* query, report later */
serviceLogTrace("ServiceCtrl INTERROGATE") ;
break ;
default :
break ;
}
}
/*
* ServiceMain - as name describes
*/
{
/*
* initialize service status
*/
/*
* register Service Control Handler
*/
if (ServiceStatusHandle == (SERVICE_STATUS_HANDLE) 0) {
serviceLogError("RegisterServiceCtrlHandler failed") ;
return ;
}
/*
* Initialize & Run service
*/
serviceLogTrace("start initializing") ;
serviceLogError("cannot initialize server") ;
serviceReport(SERVICE_STOPPED, 0, 0) ;
return ;
}
serviceLogError("cannot initialize WinSock") ;
serviceReport(SERVICE_STOPPED, 0, 0) ;
return ;
}
serviceLogError("cannot initialize server") ;
serviceReport(SERVICE_STOPPED, 0, 0) ;
WSACleanup() ;
return ;
}
serviceLogTrace("initialization done, running now") ;
server_loop() ; /* do service here */
serviceLogTrace("service loop finished, closing") ;
server_done() ; /* cleaup */
WSACleanup() ;
serviceLogTrace("service finised") ;
log_terminate() ;
}
/*
* serviceRun - run Service
*/
static SERVICE_TABLE_ENTRY ServiceTable[] = {
} ;
{
serviceLogTrace("serviceRun - start") ;
if (StartServiceCtrlDispatcher(ServiceTable) == 0) {
serviceLogError("StartServiceCtrlDispatcher failed") ;
}
}
/*
* serviceInstall - install service
*/
{
getFileName() ;
#ifdef DEBUG
#endif
/*
* open Service Manager
*/
if (hSCManager == NULL) {
return ;
}
#ifdef DEBUG
#endif
/*
* prepare service path (exe path with arguments)
*/
#ifdef DEBUG
#endif
/*
* create service entry
*/
hSCManager, /* SCManager database */
SERVICE_ALL_ACCESS, /* desired access */
SERVICE_WIN32_OWN_PROCESS, /* service type */
SERVICE_DEMAND_START, /* start type */
SERVICE_ERROR_IGNORE, /* error control type */
NULL, /* no load order */
NULL, /* no tag identifier */
NULL, /* no dependencies */
NULL, /* LocalSystem account */
NULL) ; /* no password */
return ;
}
}
/*
* serviceRemove - remove service
*/
{
getFileName() ;
#ifdef DEBUG
#endif
/*
* open Service Manager
*/
if (hSCManager == NULL) {
return ;
}
#ifdef DEBUG
#endif
/*
* delete service
*/
hSCManager, /* SCManager database */
DELETE) ; /* type of access */
return ;
}
if (DeleteService(hService) == 0) {
return ;
}
}
#endif /* WIN32 */