]> git.saurik.com Git - apple/mdnsresponder.git/blobdiff - mDNSMacOSX/helper.h
mDNSResponder-878.270.2.tar.gz
[apple/mdnsresponder.git] / mDNSMacOSX / helper.h
index 00d5289786436e2482647df1da81e64bc0b3a956..eedf7380e27f2ae6559856c5bdf1fc35b415641f 100644 (file)
@@ -1,6 +1,6 @@
 /* -*- Mode: C; tab-width: 4 -*-
  *
- * Copyright (c) 2007 Apple Inc. All rights reserved.
+ * Copyright (c) 2007-2013 Apple 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.
  * 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.
-
-    Change History (most recent first):
-
-$Log: helper.h,v $
-Revision 1.6  2007/09/20 22:33:17  cheshire
-Tidied up inconsistent and error-prone naming -- used to be mDNSResponderHelper in
-some places and mDNSResponder.helper in others; now mDNSResponderHelper everywhere
-
-Revision 1.5  2007/09/07 22:44:03  mcguire
-<rdar://problem/5448420> Move CFUserNotification code to mDNSResponderHelper
-
-Revision 1.4  2007/09/04 22:32:58  mcguire
-<rdar://problem/5453633> BTMM: BTMM overwrites /etc/racoon/remote/anonymous.conf
-
-Revision 1.3  2007/08/23 21:51:44  cheshire
-Made code layout style consistent with existing project style; added $Log header
-
-Revision 1.1  2007/08/08 22:34:58  mcguire
-<rdar://problem/5197869> Security: Run mDNSResponder as user id mdnsresponder instead of root
  */
 
 #ifndef H_HELPER_H
 #define H_HELPER_H
 
-#define kmDNSHelperServiceName "com.apple.mDNSResponderHelper"
+#include <os/log.h>
+
+#define kHelperService "com.apple.mDNSResponder_Helper"
+
+#define kmDNSHelperProgramArgs CFSTR("com.apple.mDNSResponderHelper")
+#define kPreferencesKey_mDNSHelperLog  CFSTR("mDNSHelperDebugLogging")
+
+#define kHelperMode             "HelperMode"
+#define kHelperReplyStatus      "HelperReplyStatusToClient"
+#define kHelperErrCode          "HelperErrorCodefromCall"
+
+#define kPrefsNameKey  "PreferencesNameKey"
+#define kPrefsOldName  "PreferencesOldName"
+#define kPrefsNewName  "PreferencesNewName"
+
+extern int mDNSHelperLogEnabled;
+
+extern os_log_t  log_handle;
+
+typedef enum
+{
+    bpf_request = 1,
+    set_name = 2,
+    p2p_packetfilter = 3,
+    user_notify = 4,
+    power_req = 5,
+    send_wakepkt = 6,
+    set_localaddr_cacheentry = 7,
+    send_keepalive = 8,
+    retreive_tcpinfo = 9,
+    keychain_getsecrets = 10,
+    autotunnel_setkeys = 11,
+    request_other,
+} HelperModes;
+
+typedef enum
+{
+    kHelperReply_ACK = 0,
+} HelperReplyStatusCodes;
+
+
+typedef enum
+{
+    kHelperErr_NoErr = 0,
+    kHelperErr_DefaultErr = -1,
+    kHelperErr_NotConnected = -2,
+    kHelperErr_NoResponse = -3,
+    kHelperErr_UndefinedMode = -4,
+    kHelperErr_ApiErr = -5,
+    kHelperErr_InvalidTunnelSetKeysOperation = -6,
+    kHelperErr_InvalidNetworkAddress = -7,
+    kHelperErr_ResultTooLarge = -8,
+    kHelperErr_RacoonConfigCreationFailed = -9,
+    kHelperErr_IPsecPolicySocketCreationFailed = -10,
+    kHelperErr_IPsecPolicyCreationFailed = -11,
+    kHelperErr_IPsecPolicySetFailed = -12,
+    kHelperErr_IPsecRemoveSAFailed = -13,
+    kHelperErr_IPsecDisabled = -14,
+    kHelperErr_RoutingSocketCreationFailed = -15,
+    kHelperErr_RouteDeletionFailed = -16,
+    kHelperErr_RouteAdditionFailed = -17,
+    kHelperErr_RacoonStartFailed = -18,
+    kHelperErr_RacoonNotificationFailed = -19,
+} HelperErrorCodes;
 
-enum mDNSDynamicStoreSetConfigKey
-       {
-       kmDNSMulticastConfig = 1,
-       kmDNSDynamicConfig,
-       kmDNSPrivateConfig,
-       kmDNSBackToMyMacConfig
-       };
 
 enum mDNSPreferencesSetNameKey
-       {
-       kmDNSComputerName = 1,
-       kmDNSLocalHostName
-       };
+{
+    kmDNSComputerName = 1,
+    kmDNSLocalHostName
+};
 
 enum mDNSUpDown
-       {
-       kmDNSUp = 1,
-       kmDNSDown
-       };
+{
+    kmDNSUp = 1,
+    kmDNSDown
+};
 
 enum mDNSAutoTunnelSetKeysReplaceDelete
-       {
-       kmDNSAutoTunnelSetKeysReplace = 1,
-       kmDNSAutoTunnelSetKeysDelete
-       };
-
-#define ERROR(x, y) x,
-enum mDNSHelperErrors
-       {
-       mDNSHelperErrorBase = 2300,
-       #include "helper-error.h"
-       mDNSHelperErrorEnd
-       };
-#undef ERROR
+{
+    kmDNSAutoTunnelSetKeysReplace = 1,
+    kmDNSAutoTunnelSetKeysDelete
+};
+
+
+// helper parses the system keychain and returns the information to mDNSResponder.
+// It returns four attributes. Attributes are defined after how they show up in
+// keychain access utility (the actual attribute name to retrieve these are different).
+enum mDNSKeyChainAttributes
+{
+    kmDNSKcWhere,   // Where
+    kmDNSKcAccount, // Account
+    kmDNSKcKey,     // Key
+    kmDNSKcName     // Name
+};
 
 #include "mDNSEmbeddedAPI.h"
 #include "helpermsg-types.h"
 
 extern const char *mDNSHelperError(int errornum);
-extern int mDNSPreferencesSetName(int key, domainlabel* old, domainlabel* new);
-extern int mDNSDynamicStoreSetConfig(int key, CFPropertyListRef value);
-extern int mDNSKeychainGetSecrets(CFArrayRef *secrets);
-extern int mDNSAutoTunnelInterfaceUpDown(int updown, v6addr_t addr);
-extern int mDNSConfigureServer(int updown, const char *keydata);
-extern int mDNSAutoTunnelSetKeys(int replacedelete, v6addr_t local_inner,
-    v4addr_t local_outer, short local_port, v6addr_t remote_inner,
-    v4addr_t remote_outer, short remote_port, const char *keydata);
+
+extern mStatus mDNSHelperInit(void);
+
+
+extern void mDNSRequestBPF(void);
+extern int  mDNSPowerRequest(int key, int interval);
+extern int  mDNSSetLocalAddressCacheEntry(int ifindex, int family, const v6addr_t ip, const ethaddr_t eth);
+extern void mDNSNotify(const char *title, const char *msg);     // Both strings are UTF-8 text
+extern void mDNSPreferencesSetName(int key, domainlabel *old, domainlabel *new);
+extern int  mDNSKeychainGetSecrets(CFArrayRef *secrets);
+extern int  mDNSAutoTunnelSetKeys(int replacedelete, v6addr_t local_inner,
+                                  v6addr_t local_outer, short local_port, v6addr_t remote_inner,
+                                  v6addr_t remote_outer, short remote_port, const char *const prefix, const domainname *const fqdn);
+extern void mDNSSendWakeupPacket(unsigned ifid, char *eth_addr, char *ip_addr, int iteration);
+extern void mDNSPacketFilterControl(uint32_t command, char * ifname, uint32_t count, pfArray_t portArray, pfArray_t protocolArray);
+extern void mDNSSendKeepalive(const v6addr_t sadd, const v6addr_t dadd, uint16_t lport, uint16_t rport, unsigned seq, unsigned ack, uint16_t win);
+extern int  mDNSRetrieveTCPInfo(int family, v6addr_t laddr, uint16_t lport, v6addr_t raddr, uint16_t rport, uint32_t *seq, uint32_t *ack, uint16_t *win, int32_t *intfid);
+
+extern void RequestBPF(void);
+extern void PreferencesSetName(int key, const char* old, const char* new);
+extern void PacketFilterControl(uint32_t command, const char * ifname, uint32_t count, pfArray_t portArray, pfArray_t protocolArray);
+extern void UserNotify(const char *title, const char *msg);     // Both strings are UTF-8 text
+extern void PowerRequest(int key, int interval, int *error);
+extern void SendWakeupPacket(unsigned int ifid, const char *eth_addr, const char *ip_addr, int iteration);
+extern void SetLocalAddressCacheEntry(int ifindex, int family, const v6addr_t ip, const ethaddr_t eth, int *err);
+extern void SendKeepalive(const v6addr_t sadd6, const v6addr_t dadd6, uint16_t lport, uint16_t rport, uint32_t seq, uint32_t ack, uint16_t win);
+extern void RetrieveTCPInfo(int family, const v6addr_t laddr, uint16_t lport, const v6addr_t raddr, uint16_t  rport, uint32_t *seq, uint32_t *ack, uint16_t *win, int32_t *intfid, int *err);
+extern void KeychainGetSecrets(__unused unsigned int *numsecrets,__unused unsigned long *secrets, __unused unsigned int *secretsCnt, __unused int *err);
+extern int  HelperAutoTunnelSetKeys(int replacedelete, const v6addr_t loc_inner, const v6addr_t loc_outer6, uint16_t loc_port, const v6addr_t rmt_inner,
+                            const v6addr_t rmt_outer6, uint16_t rmt_port, const char *id, int *err);
+extern void helper_exit(void);
 
 #endif /* H_HELPER_H */