• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1  /* -*- Mode: C; tab-width: 4 -*-
2   *
3   * Copyright (c) 2002-2004 Apple Computer, Inc. All rights reserved.
4   *
5   * Licensed under the Apache License, Version 2.0 (the "License");
6   * you may not use this file except in compliance with the License.
7   * You may obtain a copy of the License at
8   *
9   *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  
18  #ifndef __mDNSPlatformPosix_h
19  #define __mDNSPlatformPosix_h
20  
21  #include <signal.h>
22  #include <sys/time.h>
23  #ifdef __ANDROID__
24  #include <sys/select.h>
25  #endif
26  
27  #ifdef  __cplusplus
28      extern "C" {
29  #endif
30  
31  // PosixNetworkInterface is a record extension of the core NetworkInterfaceInfo
32  // type that supports extra fields needed by the Posix platform.
33  //
34  // IMPORTANT: coreIntf must be the first field in the structure because
35  // we cast between pointers to the two different types regularly.
36  
37  typedef struct PosixNetworkInterface PosixNetworkInterface;
38  
39  struct PosixNetworkInterface
40  	{
41  	NetworkInterfaceInfo    coreIntf;
42  	const char *            intfName;
43  	PosixNetworkInterface * aliasIntf;
44  	int                     index;
45  	int                     multicastSocket4;
46  #if HAVE_IPV6
47  	int                     multicastSocket6;
48  #endif
49  	};
50  
51  // This is a global because debugf_() needs to be able to check its value
52  extern int gMDNSPlatformPosixVerboseLevel;
53  
54  struct mDNS_PlatformSupport_struct
55  	{
56  	int unicastSocket4;
57  #if HAVE_IPV6
58  	int unicastSocket6;
59  #endif
60  	};
61  
62  #define uDNS_SERVERS_FILE "/etc/resolv.conf"
63  extern int ParseDNSServers(mDNS *m, const char *filePath);
64  extern mStatus mDNSPlatformPosixRefreshInterfaceList(mDNS *const m);
65      // See comment in implementation.
66  
67  // Call mDNSPosixGetFDSet before calling select(), to update the parameters
68  // as may be necessary to meet the needs of the mDNSCore code.
69  // The timeout pointer MUST NOT be NULL.
70  // Set timeout->tv_sec to 0x3FFFFFFF if you want to have effectively no timeout
71  // After calling mDNSPosixGetFDSet(), call select(nfds, &readfds, NULL, NULL, &timeout); as usual
72  // After select() returns, call mDNSPosixProcessFDSet() to let mDNSCore do its work
73  extern void mDNSPosixGetFDSet(mDNS *m, int *nfds, fd_set *readfds, struct timeval *timeout);
74  extern void mDNSPosixProcessFDSet(mDNS *const m, fd_set *readfds);
75  
76  typedef	void (*mDNSPosixEventCallback)(int fd, short filter, void *context);
77  
78  extern mStatus mDNSPosixAddFDToEventLoop( int fd, mDNSPosixEventCallback callback, void *context);
79  extern mStatus mDNSPosixRemoveFDFromEventLoop( int fd);
80  extern mStatus mDNSPosixListenForSignalInEventLoop( int signum);
81  extern mStatus mDNSPosixIgnoreSignalInEventLoop( int signum);
82  extern mStatus mDNSPosixRunEventLoopOnce( mDNS *m, const struct timeval *pTimeout, sigset_t *pSignalsReceived, mDNSBool *pDataDispatched);
83  
84  #ifdef  __cplusplus
85      }
86  #endif
87  
88  #endif
89