X-Git-Url: https://git.saurik.com/apple/mdnsresponder.git/blobdiff_plain/b7388343e7dbd0ce526282fbd93d546e3b0610db..8e92c31c9a45a66732f5bc7afbc9f5596c17e91d:/mDNSPosix/ProxyResponder.c diff --git a/mDNSPosix/ProxyResponder.c b/mDNSPosix/ProxyResponder.c index 13f0d18..5030d93 100644 --- a/mDNSPosix/ProxyResponder.c +++ b/mDNSPosix/ProxyResponder.c @@ -3,6 +3,8 @@ * * @APPLE_LICENSE_HEADER_START@ * + * Copyright (c) 1999-2003 Apple Computer, Inc. All Rights Reserved. + * * This file contains Original Code and/or Modifications of Original Code * as defined in and that are subject to the Apple Public Source License * Version 2.0 (the 'License'). You may not use this file except in @@ -23,6 +25,15 @@ Change History (most recent first): $Log: ProxyResponder.c,v $ +Revision 1.27 2004/03/12 08:03:14 cheshire +Update comments + +Revision 1.26 2004/01/25 00:00:39 cheshire +Change to use mDNSOpaque16fromIntVal() instead of shifting and masking + +Revision 1.25 2003/12/08 20:47:02 rpantos +Add support for mDNSResponder on Linux. + Revision 1.24 2003/11/14 21:27:09 cheshire : Security: Crashing bug in mDNSResponder Fix code that should use buffer size MAX_ESCAPED_DOMAIN_NAME (1005) instead of 256-byte buffers. @@ -64,7 +75,7 @@ Revision 1.13 2003/04/18 22:46:12 cheshire Fix mistake in 1.8 -- INADDR_NONE is 0xFFFFFFFF, not 0 Revision 1.12 2003/04/16 02:11:07 cheshire -Fixed mDNS_RegisterNoSuchService non-existence function so that it works again +Fixed mDNS_RegisterNoSuchService non-existance function so that it works again Revision 1.11 2003/03/31 22:49:35 cheshire Add "$Log" header @@ -75,6 +86,7 @@ Add "$Log" header #include // For exit() etc. #include // For strlen() etc. #include // For select() +#include // For SIGINT, SIGTERM #include // For errno, EINTR #include // For inet_addr() #include // For INADDR_NONE @@ -181,15 +193,12 @@ mDNSlocal void RegisterService(mDNS *m, ServiceRecordSet *recordset, { domainlabel n; domainname t, d; - mDNSIPPort port; unsigned char txtbuffer[1024], *bptr = txtbuffer; char buffer[MAX_ESCAPED_DOMAIN_NAME]; MakeDomainLabelFromLiteralString(&n, name); MakeDomainNameFromDNSNameString(&t, type); MakeDomainNameFromDNSNameString(&d, domain); - port.b[0] = (mDNSu8)(PortAsNumber >> 8); - port.b[1] = (mDNSu8)(PortAsNumber ); while (argc) { int len = strlen(argv[0]); @@ -203,10 +212,10 @@ mDNSlocal void RegisterService(mDNS *m, ServiceRecordSet *recordset, mDNS_RegisterService(m, recordset, &n, &t, &d, // Name, type, domain - host, port, // Host and port + host, mDNSOpaque16fromIntVal(PortAsNumber), txtbuffer, bptr-txtbuffer, // TXT data, length mDNSNULL, 0, // Subtypes - mDNSInterface_Any, // Interace ID + mDNSInterface_Any, // Interface ID ServiceCallback, mDNSNULL); // Callback and context ConvertDomainNameToCString(&recordset->RR_SRV.resrec.name, buffer); @@ -272,7 +281,8 @@ mDNSlocal void RegisterNoSuchService(mDNS *m, AuthRecord *const rr, domainname * mDNSexport int main(int argc, char **argv) { - mStatus status; + mStatus status; + sigset_t signals; if (argc < 3) goto usage; @@ -282,6 +292,9 @@ mDNSexport int main(int argc, char **argv) mDNS_Init_NoInitCallback, mDNS_Init_NoInitCallbackContext); if (status) { fprintf(stderr, "Daemon start: mDNS_Init failed %ld\n", status); return(status); } + mDNSPosixListenForSignalInEventLoop(SIGINT); + mDNSPosixListenForSignalInEventLoop(SIGTERM); + if (!strcmp(argv[1], "-")) { domainname proxyhostname; @@ -291,8 +304,6 @@ mDNSexport int main(int argc, char **argv) AppendLiteralLabelString(&proxyhostname, argv[2]); AppendLiteralLabelString(&proxyhostname, "local"); RegisterNoSuchService(&mDNSStorage, &proxyrecord, &proxyhostname, argv[3], argv[4], "local."); - ExampleClientEventLoop(&mDNSStorage); - mDNS_Close(&mDNSStorage); } else { @@ -318,10 +329,17 @@ mDNSexport int main(int argc, char **argv) if (argc >=6) RegisterService(&mDNSStorage, &proxyservice, argv[3], argv[4], "local.", &proxyhost.RR_A.resrec.name, atoi(argv[5]), argc-6, &argv[6]); + } - ExampleClientEventLoop(&mDNSStorage); - mDNS_Close(&mDNSStorage); + do + { + struct timeval timeout = { 0x3FFFFFFF, 0 }; // wait until SIGINT or SIGTERM + mDNSBool gotSomething; + mDNSPosixRunEventLoopOnce(&mDNSStorage, &timeout, &signals, &gotSomething); } + while ( !( sigismember( &signals, SIGINT) || sigismember( &signals, SIGTERM))); + + mDNS_Close(&mDNSStorage); return(0);