summaryrefslogtreecommitdiffstats
path: root/mDNSResponder/mDNSShared/dnsextd.h
diff options
context:
space:
mode:
Diffstat (limited to 'mDNSResponder/mDNSShared/dnsextd.h')
-rw-r--r--mDNSResponder/mDNSShared/dnsextd.h163
1 files changed, 163 insertions, 0 deletions
diff --git a/mDNSResponder/mDNSShared/dnsextd.h b/mDNSResponder/mDNSShared/dnsextd.h
new file mode 100644
index 00000000..67927c9b
--- /dev/null
+++ b/mDNSResponder/mDNSShared/dnsextd.h
@@ -0,0 +1,163 @@
+/* -*- Mode: C; tab-width: 4 -*-
+ *
+ * Copyright (c) 2006 Apple Computer, Inc. All rights reserved.
+ *
+ * Licensed 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.
+ */
+
+
+#ifndef _dnsextd_h
+#define _dnsextd_h
+
+
+#include <mDNSEmbeddedAPI.h>
+#include <DNSCommon.h>
+#include <GenLinkedList.h>
+#include <sys/types.h>
+#include <sys/socket.h>
+#include <netinet/in.h>
+
+
+#define LLQ_TABLESIZE 1024 // !!!KRS make this dynamically growable
+
+
+typedef enum DNSZoneSpecType
+{
+ kDNSZonePublic,
+ kDNSZonePrivate
+} DNSZoneSpecType;
+
+
+typedef struct DNSZone
+{
+ domainname name;
+ DNSZoneSpecType type;
+ DomainAuthInfo * updateKeys; // linked list of keys for signing deletion updates
+ DomainAuthInfo * queryKeys; // linked list of keys for queries
+ struct DNSZone * next;
+} DNSZone;
+
+
+typedef struct
+{
+ struct sockaddr_in src;
+ size_t len;
+ DNSZone * zone;
+ mDNSBool isZonePublic;
+ DNSMessage msg;
+ // Note: extra storage for oversized (TCP) messages goes here
+} PktMsg;
+
+// lease table entry
+typedef struct RRTableElem
+{
+ struct RRTableElem *next;
+ struct sockaddr_in cli; // client's source address
+ long expire; // expiration time, in seconds since epoch
+ domainname zone; // from zone field of update message
+ domainname name; // name of the record
+ CacheRecord rr; // last field in struct allows for allocation of oversized RRs
+} RRTableElem;
+
+typedef enum
+{
+ RequestReceived = 0,
+ ChallengeSent = 1,
+ Established = 2
+} LLQState;
+
+typedef struct AnswerListElem
+{
+ struct AnswerListElem *next;
+ domainname name;
+ mDNSu16 type;
+ CacheRecord *KnownAnswers; // All valid answers delivered to client
+ CacheRecord *EventList; // New answers (adds/removes) to be sent to client
+ int refcount;
+ mDNSBool UseTCP; // Use TCP if UDP would cause truncation
+ pthread_t tid; // Allow parallel list updates
+} AnswerListElem;
+
+// llq table entry
+typedef struct LLQEntry
+{
+ struct LLQEntry *next;
+ struct sockaddr_in cli; // clien'ts source address
+ domainname qname;
+ mDNSu16 qtype;
+ mDNSOpaque64 id;
+ LLQState state;
+ mDNSu32 lease; // original lease, in seconds
+ mDNSs32 expire; // expiration, absolute, in seconds since epoch
+ AnswerListElem *AnswerList;
+} LLQEntry;
+
+
+typedef void (*EventCallback)( void * context );
+
+typedef struct EventSource
+{
+ EventCallback callback;
+ void * context;
+ TCPSocket * sock;
+ int fd;
+ mDNSBool markedForDeletion;
+ struct EventSource * next;
+} EventSource;
+
+
+// daemon-wide information
+typedef struct
+{
+ // server variables - read only after initialization (no locking)
+ struct sockaddr_in addr; // the address we will bind to
+ struct sockaddr_in llq_addr; // the address we will receive llq requests on.
+ struct sockaddr_in ns_addr; // the real ns server address
+ int tcpsd; // listening TCP socket for dns requests
+ int udpsd; // listening UDP socket for dns requests
+ int tlssd; // listening TCP socket for private browsing
+ int llq_tcpsd; // listening TCP socket for llq service
+ int llq_udpsd; // listening UDP socket for llq service
+ DNameListElem * public_names; // list of public SRV names
+ DNSZone * zones;
+
+ // daemon variables - read only after initialization (no locking)
+ mDNSIPPort private_port; // listening port for private messages
+ mDNSIPPort llq_port; // listening port for llq
+
+ // lease table variables (locked via mutex after initialization)
+ RRTableElem **table; // hashtable for records with leases
+ pthread_mutex_t tablelock; // mutex for lease table
+ mDNSs32 nbuckets; // buckets allocated
+ mDNSs32 nelems; // elements in table
+
+ // LLQ table variables
+ LLQEntry *LLQTable[LLQ_TABLESIZE]; // !!!KRS change this and RRTable to use a common data structure
+ AnswerListElem *AnswerTable[LLQ_TABLESIZE];
+ int AnswerTableCount;
+ int LLQEventNotifySock; // Unix domain socket pair - update handling thread writes to EventNotifySock, which wakes
+ int LLQEventListenSock; // the main thread listening on EventListenSock, indicating that the zone has changed
+
+ GenLinkedList eventSources; // linked list of EventSource's
+} DaemonInfo;
+
+
+int
+ParseConfig
+(
+ DaemonInfo * d,
+ const char * file
+);
+
+
+#endif