Overview
Comment: | OFDDPSocket: Add support for configuring AppleTalk |
---|---|
Downloads: | Tarball | ZIP archive | SQL archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
ccb53db0d88e0010c83c85abd8941d26 |
User & Date: | js on 2023-04-15 17:30:59 |
Other Links: | manifest | tags |
Context
2023-04-16
| ||
06:21 | OFDDPSocket: Fix removing configuration on NetBSD check-in: 22fab9e495 user: js tags: trunk | |
2023-04-15
| ||
17:30 | OFDDPSocket: Add support for configuring AppleTalk check-in: ccb53db0d8 user: js tags: trunk | |
2023-04-13
| ||
18:42 | utils/ofatalkcfg: Ensure ifr_name 0 termination check-in: b20446bb3a user: js tags: trunk | |
Changes
Modified configure.ac from [671a67f9d4] to [f0175abcd7].
︙ | ︙ | |||
1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 | #endif ], [ AC_DEFINE(OF_HAVE_APPLETALK, 1, [Whether we have AppleTalk]) AC_SUBST(USE_SRCS_APPLETALK, '${SRCS_APPLETALK}') AC_CHECK_MEMBERS([struct ifreq.ifr_name], [ AC_SUBST(OFATALKCFG, ofatalkcfg) ], [], [ #ifdef OF_HAVE_SYS_SOCKET_H # include <sys/socket.h> #endif #include <net/if.h> ]) | > > > > > | 1685 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 | #endif ], [ AC_DEFINE(OF_HAVE_APPLETALK, 1, [Whether we have AppleTalk]) AC_SUBST(USE_SRCS_APPLETALK, '${SRCS_APPLETALK}') AC_CHECK_MEMBERS([struct ifreq.ifr_name], [ AC_DEFINE(OF_HAVE_APPLETALK_IFCONFIG, 1, m4_normalize([ Whether AppleTalk interfaces can be configured ])) AC_SUBST(OFATALKCFG, ofatalkcfg) ], [], [ #ifdef OF_HAVE_SYS_SOCKET_H # include <sys/socket.h> #endif #include <net/if.h> ]) |
︙ | ︙ |
Modified src/OFDDPSocket.h from [8b18782fee] to [6a455c4113].
︙ | ︙ | |||
14 15 16 17 18 19 20 21 22 23 24 25 26 27 | */ #import "OFDatagramSocket.h" OF_ASSUME_NONNULL_BEGIN @class OFString; /** * @protocol OFDDPSocketDelegate OFDDPSocket.h ObjFW/OFDDPSocket.h * * @brief A delegate for OFDDPSocket. */ @protocol OFDDPSocketDelegate <OFDatagramSocketDelegate> | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | */ #import "OFDatagramSocket.h" OF_ASSUME_NONNULL_BEGIN @class OFString; @class OFDictionary OF_GENERIC(KeyType, ObjectType); #ifdef OF_HAVE_APPLETALK_IFCONFIG /** * @brief A dictionary mapping keys of type @ref * OFAppleTalkInterfaceConfigurationKey. */ typedef OFConstantString *OFAppleTalkInterfaceConfigurationKey; /** * @brief A key for OFAppleTalkInterfaceConfiguration. * * Possible keys are: * * @ref OFAppleTalkInterfaceConfigurationNetwork * * @ref OFAppleTalkInterfaceConfigurationNode * * @ref OFAppleTalkInterfaceConfigurationPhase * * @ref OFAppleTalkInterfaceConfigurationNetworkRange */ typedef OFDictionary OF_GENERIC(OFAppleTalkInterfaceConfigurationKey, id) *OFAppleTalkInterfaceConfiguration; /** * @brief The AppleTalk network of an interface. * * The corresponding value is of type @ref OFNumber in the range 0 to 65535. */ extern const OFAppleTalkInterfaceConfigurationKey OFAppleTalkInterfaceConfigurationNetwork; /** * @brief The AppleTalk node of an interface. * * The corresponding value is of type @ref OFNumber in the range 0 to 255. */ extern const OFAppleTalkInterfaceConfigurationKey OFAppleTalkInterfaceConfigurationNode; /** * @brief The AppleTalk phase of an interface. * * The corresponding value is of type @ref OFNumber in the range 1 to 2. */ extern const OFAppleTalkInterfaceConfigurationKey OFAppleTalkInterfaceConfigurationPhase; /** * @brief The AppleTalk network range of an interface. * * The corresponding value is of type @ref OFPair with two @ref OFNumber, both * in the range 0 to 65535. */ extern const OFAppleTalkInterfaceConfigurationKey OFAppleTalkInterfaceConfigurationNetworkRange; #endif /** * @protocol OFDDPSocketDelegate OFDDPSocket.h ObjFW/OFDDPSocket.h * * @brief A delegate for OFDDPSocket. */ @protocol OFDDPSocketDelegate <OFDatagramSocketDelegate> |
︙ | ︙ | |||
64 65 66 67 68 69 70 71 72 73 74 75 76 77 | * @brief The delegate for asynchronous operations on the socket. * * @note The delegate is retained for as long as asynchronous operations are * still ongoing. */ @property OF_NULLABLE_PROPERTY (assign, nonatomic) id <OFDDPSocketDelegate> delegate; /** * @brief Bind the socket to the specified network, node and port. * * @param network The network to bind to. 0 means any. * @param node The node to bind to. 0 means "this node". * @param port The port to bind to. 0 means to pick one and return it via the | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 | * @brief The delegate for asynchronous operations on the socket. * * @note The delegate is retained for as long as asynchronous operations are * still ongoing. */ @property OF_NULLABLE_PROPERTY (assign, nonatomic) id <OFDDPSocketDelegate> delegate; #ifdef OF_HAVE_APPLETALK_IFCONFIG /** * @brief Configures the specified interface with the specified AppleTalk * configuration. * * @param configuration The AppleTalk configuration for the interface. See * @ref OFAppleTalkInterfaceConfiguration for more * details. * @param interfaceName The name of the interface to configure for AppleTalk * @throw OFSetOptionFailedException Setting the configuration failed. Consult * errNo for details. */ + (void)setConfiguration: (OFAppleTalkInterfaceConfiguration)configuration forInterface: (OFString *)interfaceName; /** * @brief Returns the AppleTalk configuration for the specified interface. * * @param interfaceName The name of the interface for which to return the * AppleTalk configuration * @return The AppleTalk configuration for the specified interface, or `nil` if * the specified interface is not configured for AppleTalk. See * @ref OFAppleTalkInterfaceConfiguration for more details. * @throw OFGetOptionFailedException Getting the configuration failed. Consult * errNo for details. */ + (nullable OFAppleTalkInterfaceConfiguration) configurationForInterface: (OFString *)interfaceName; /** * @brief Removes the AppleTalk configuration for the specified interface. * * @param interfaceName The name of the interface for which to remove the * AppleTalk configuration * @throw OFSetOptionFailedException Removing the configuration failed. Consult * errNo for details. */ + (void)removeConfigurationForInterface: (OFString *)interfaceName; #endif /** * @brief Bind the socket to the specified network, node and port. * * @param network The network to bind to. 0 means any. * @param node The node to bind to. 0 means "this node". * @param port The port to bind to. 0 means to pick one and return it via the |
︙ | ︙ |
Modified src/OFDDPSocket.m from [00da26e5f2] to [ac9c1835dc].
︙ | ︙ | |||
18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #include <errno.h> #ifdef HAVE_FCNTL_H # include <fcntl.h> #endif #import "OFDDPSocket.h" #import "OFSocket.h" #import "OFSocket+Private.h" #import "OFAlreadyOpenException.h" #import "OFBindDDPSocketFailedException.h" #import "OFInvalidArgumentException.h" #import "OFNotOpenException.h" #import "OFReadFailedException.h" #import "OFWriteFailedException.h" #ifdef OF_HAVE_NETAT_APPLETALK_H # include <netat/ddp.h> # include <sys/ioctl.h> /* Unfortulately, there is no struct for the following in userland headers */ struct ATInterfaceConfig { char interfaceName[16]; unsigned int flags; struct at_addr address, router; unsigned short netStart, netEnd; at_nvestr_t zoneName; }; #endif @implementation OFDDPSocket @dynamic delegate; - (OFSocketAddress)bindToNetwork: (uint16_t)network node: (uint8_t)node port: (uint8_t)port protocolType: (uint8_t)protocolType { #ifdef OF_MACOS | > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > | 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 | #include <errno.h> #ifdef HAVE_FCNTL_H # include <fcntl.h> #endif #import "OFDDPSocket.h" #import "OFDictionary.h" #import "OFNumber.h" #import "OFPair.h" #import "OFSocket.h" #import "OFSocket+Private.h" #import "OFAlreadyOpenException.h" #import "OFBindDDPSocketFailedException.h" #import "OFGetOptionFailedException.h" #import "OFInvalidArgumentException.h" #import "OFNotOpenException.h" #import "OFOutOfRangeException.h" #import "OFReadFailedException.h" #import "OFSetOptionFailedException.h" #import "OFWriteFailedException.h" #ifdef HAVE_NET_IF_H # include <net/if.h> #endif #ifdef HAVE_SYS_IOCTL_H # include <sys/ioctl.h> #endif #ifdef OF_HAVE_NETAT_APPLETALK_H # include <netat/ddp.h> # include <sys/ioctl.h> /* Unfortulately, there is no struct for the following in userland headers */ struct ATInterfaceConfig { char interfaceName[16]; unsigned int flags; struct at_addr address, router; unsigned short netStart, netEnd; at_nvestr_t zoneName; }; #endif #ifdef OF_HAVE_APPLETALK_IFCONFIG const OFAppleTalkInterfaceConfigurationKey OFAppleTalkInterfaceConfigurationNode = @"OFAppleTalkInterfaceConfigurationNode"; const OFAppleTalkInterfaceConfigurationKey OFAppleTalkInterfaceConfigurationNetwork = @"OFAppleTalkInterfaceConfigurationNetwork"; const OFAppleTalkInterfaceConfigurationKey OFAppleTalkInterfaceConfigurationPhase = @"OFAppleTalkInterfaceConfigurationPhase"; const OFAppleTalkInterfaceConfigurationKey OFAppleTalkInterfaceConfigurationNetworkRange = @"OFAppleTalkInterfaceConfigurationNetworkRange"; #endif @implementation OFDDPSocket @dynamic delegate; #ifdef OF_HAVE_APPLETALK_IFCONFIG + (void)setConfiguration: (OFAppleTalkInterfaceConfiguration)config forInterface: (OFString *)interfaceName { OFNumber *network, *node, *phase; OFPair OF_GENERIC(OFNumber *, OFNumber *) *range; int sock; struct ifreq request; struct sockaddr_at *sat; uint16_t rangeStart, rangeEnd; if (interfaceName.UTF8StringLength > IFNAMSIZ - 1) @throw [OFOutOfRangeException exception]; network = [config objectForKey: OFAppleTalkInterfaceConfigurationNetwork]; node = [config objectForKey: OFAppleTalkInterfaceConfigurationNode]; phase = [config objectForKey: OFAppleTalkInterfaceConfigurationPhase]; range = [config objectForKey: OFAppleTalkInterfaceConfigurationNetworkRange]; if (network == nil || node == nil) @throw [OFInvalidArgumentException exception]; if (phase != nil && phase.unsignedCharValue != 1 && phase.unsignedCharValue != 2) @throw [OFInvalidArgumentException exception]; # ifdef OF_MACOS if ((sock = socket(AF_APPLETALK, SOCK_RAW, 0)) < 0) # else if ((sock = socket(AF_APPLETALK, SOCK_DGRAM, 0)) < 0) # endif @throw [OFSetOptionFailedException exceptionWithObject: nil errNo: OFSocketErrNo()]; memset(&request, 0, sizeof(request)); strncpy(request.ifr_name, interfaceName.UTF8String, IFNAMSIZ - 1); sat = (struct sockaddr_at *)&request.ifr_addr; sat->sat_family = AF_APPLETALK; sat->sat_net = OFToBigEndian16(network.unsignedShortValue); sat->sat_node = node.unsignedCharValue; /* * The netrange is hidden in sat_zero and different OSes use different * struct names for it, so the portable way is setting sat_zero * directly. */ sat->sat_zero[0] = (phase != nil ? phase.unsignedCharValue : 2); if (range != nil) { rangeStart = [range.firstObject unsignedShortValue]; rangeEnd = [range.secondObject unsignedShortValue]; } else { rangeStart = rangeEnd = network.unsignedShortValue; } sat->sat_zero[2] = rangeStart >> 8; sat->sat_zero[3] = rangeStart & 0xFF; sat->sat_zero[4] = rangeEnd >> 8; sat->sat_zero[5] = rangeEnd & 0xFF; if (ioctl(sock, SIOCSIFADDR, &request) != 0) @throw [OFSetOptionFailedException exceptionWithObject: nil errNo: OFSocketErrNo()]; close(sock); } + (OFAppleTalkInterfaceConfiguration) configurationForInterface: (OFString *)interfaceName { int sock; struct ifreq request; struct sockaddr_at *sat; # ifndef OF_LINUX uint16_t rangeStart, rangeEnd; OFPair *range; # endif if (interfaceName.UTF8StringLength > IFNAMSIZ - 1) @throw [OFOutOfRangeException exception]; # ifdef OF_MACOS if ((sock = socket(AF_APPLETALK, SOCK_RAW, 0)) < 0) # else if ((sock = socket(AF_APPLETALK, SOCK_DGRAM, 0)) < 0) # endif @throw [OFGetOptionFailedException exceptionWithObject: nil errNo: OFSocketErrNo()]; memset(&request, 0, sizeof(request)); strncpy(request.ifr_name, interfaceName.UTF8String, IFNAMSIZ - 1); if (ioctl(sock, SIOCGIFADDR, &request) < 0) { int errNo = OFSocketErrNo(); /* No AppleTalk configured on this interface. */ if (errNo == EADDRNOTAVAIL) { close(sock); return nil; } @throw [OFGetOptionFailedException exceptionWithObject: nil errNo: errNo]; } sat = (struct sockaddr_at *)&request.ifr_addr; close(sock); # ifndef OF_LINUX /* * Linux currently doesn't fill out the phase or netrange. * * The netrange is hidden in sat_zero and different OSes use different * struct names for it, so the portable way is setting sat_zero * directly. */ rangeStart = sat->sat_zero[2] << 8 | sat->sat_zero[3]; rangeEnd = sat->sat_zero[4] << 8 | sat->sat_zero[5]; range = [OFPair pairWithFirstObject: [OFNumber numberWithUnsignedShort: rangeStart] secondObject: [OFNumber numberWithUnsignedShort: rangeEnd]]; # endif return [OFDictionary dictionaryWithKeysAndObjects: OFAppleTalkInterfaceConfigurationNode, [OFNumber numberWithUnsignedChar: sat->sat_node], OFAppleTalkInterfaceConfigurationNetwork, [OFNumber numberWithUnsignedShort: OFFromBigEndian16(sat->sat_net)], # ifndef OF_LINUX OFAppleTalkInterfaceConfigurationPhase, [OFNumber numberWithUnsignedChar: sat->sat_zero[0]], OFAppleTalkInterfaceConfigurationNetworkRange, range, # endif nil]; } + (void)removeConfigurationForInterface: (OFString *)interfaceName { int sock; struct ifreq request; if (interfaceName.UTF8StringLength > IFNAMSIZ - 1) @throw [OFOutOfRangeException exception]; # ifdef OF_MACOS if ((sock = socket(AF_APPLETALK, SOCK_RAW, 0)) < 0) # else if ((sock = socket(AF_APPLETALK, SOCK_DGRAM, 0)) < 0) # endif @throw [OFSetOptionFailedException exceptionWithObject: nil errNo: OFSocketErrNo()]; memset(&request, 0, sizeof(request)); strncpy(request.ifr_name, interfaceName.UTF8String, IFNAMSIZ - 1); request.ifr_addr.sa_family = AF_APPLETALK; if (ioctl(sock, SIOCDIFADDR, &request) != 0) @throw [OFSetOptionFailedException exceptionWithObject: nil errNo: OFSocketErrNo()]; } #endif - (OFSocketAddress)bindToNetwork: (uint16_t)network node: (uint8_t)node port: (uint8_t)port protocolType: (uint8_t)protocolType { #ifdef OF_MACOS |
︙ | ︙ |
Modified src/OFSocket.h from [5d7e2b8fd9] to [755345bacd].
︙ | ︙ | |||
57 58 59 60 61 62 63 | # include <wsipx.h> # endif # ifdef OF_HAVE_APPLETALK # include <atalkwsh.h> # endif #endif | < < > > | 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | # include <wsipx.h> # endif # ifdef OF_HAVE_APPLETALK # include <atalkwsh.h> # endif #endif #ifdef OF_WII # include <network.h> #endif #ifdef OF_PSP # include <stdint.h> #endif #import "macros.h" OF_ASSUME_NONNULL_BEGIN /** @file */ #ifndef OF_WINDOWS typedef int OFSocketHandle; static const OFSocketHandle OFInvalidSocketHandle = -1; #else typedef SOCKET OFSocketHandle; static const OFSocketHandle OFInvalidSocketHandle = INVALID_SOCKET; |
︙ | ︙ |
Modified src/exceptions/OFGetOptionFailedException.h from [bce179e7f5] to [6b97dd37ec].
︙ | ︙ | |||
21 22 23 24 25 26 27 | * @class OFGetOptionFailedException \ * OFGetOptionFailedException.h ObjFW/OFGetOptionFailedException.h * * @brief An exception indicating that getting an option for an object failed. */ @interface OFGetOptionFailedException: OFException { | | | | | | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | * @class OFGetOptionFailedException \ * OFGetOptionFailedException.h ObjFW/OFGetOptionFailedException.h * * @brief An exception indicating that getting an option for an object failed. */ @interface OFGetOptionFailedException: OFException { id _Nullable _object; int _errNo; OF_RESERVE_IVARS(OFGetOptionFailedException, 4) } /** * @brief The object for which the option could not be retrieved. */ @property OF_NULLABLE_PROPERTY (readonly, nonatomic) id object; /** * @brief The errno of the error that occurred. */ @property (readonly, nonatomic) int errNo; /** * @brief Creates a new, autoreleased get option failed exception. * * @param object The object for which the option could not be retrieved * @param errNo The errno of the error that occurred * @return A new, autoreleased get option failed exception */ + (instancetype)exceptionWithObject: (nullable id)object errNo: (int)errNo; + (instancetype)exception OF_UNAVAILABLE; /** * @brief Initializes an already allocated get option failed exception. * * @param object The object for which the option could not be retrieved * @param errNo The errno of the error that occurred * @return An initialized get option failed exception */ - (instancetype)initWithObject: (nullable id)object errNo: (int)errNo OF_DESIGNATED_INITIALIZER; - (instancetype)init OF_UNAVAILABLE; @end OF_ASSUME_NONNULL_END |
Modified src/exceptions/OFGetOptionFailedException.m from [64945ede99] to [baf044fe92].
︙ | ︙ | |||
51 52 53 54 55 56 57 | [_object release]; [super dealloc]; } - (OFString *)description { | > | | | > > > | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | [_object release]; [super dealloc]; } - (OFString *)description { if (_object != nil) return [OFString stringWithFormat: @"Getting an option in an object of type %@ failed: %@", [_object class], OFStrError(_errNo)]; else return [OFString stringWithFormat: @"Getting an failed: %@", OFStrError(_errNo)]; } @end |
Modified src/exceptions/OFSetOptionFailedException.h from [73cb16f242] to [daab9b6b5c].
︙ | ︙ | |||
21 22 23 24 25 26 27 | * @class OFSetOptionFailedException \ * OFSetOptionFailedException.h ObjFW/OFSetOptionFailedException.h * * @brief An exception indicating that setting an option for an object failed. */ @interface OFSetOptionFailedException: OFException { | | | | | | 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 | * @class OFSetOptionFailedException \ * OFSetOptionFailedException.h ObjFW/OFSetOptionFailedException.h * * @brief An exception indicating that setting an option for an object failed. */ @interface OFSetOptionFailedException: OFException { id _Nullable _object; int _errNo; OF_RESERVE_IVARS(OFSetOptionFailedException, 4) } /** * @brief The object for which the option could not be set. */ @property OF_NULLABLE_PROPERTY (readonly, nonatomic) id object; /** * @brief The errno of the error that occurred. */ @property (readonly, nonatomic) int errNo; /** * @brief Creates a new, autoreleased set option failed exception. * * @param object The object for which the option could not be set * @param errNo The errno of the error that occurred * @return A new, autoreleased set option failed exception */ + (instancetype)exceptionWithObject: (nullable id)object errNo: (int)errNo; + (instancetype)exception OF_UNAVAILABLE; /** * @brief Initializes an already allocated set option failed exception. * * @param object The object for which the option could not be set * @param errNo The errno of the error that occurred * @return An initialized set option failed exception */ - (instancetype)initWithObject: (nullable id)object errNo: (int)errNo OF_DESIGNATED_INITIALIZER; - (instancetype)init OF_UNAVAILABLE; @end OF_ASSUME_NONNULL_END |
Modified src/exceptions/OFSetOptionFailedException.m from [e29393f4c6] to [7495460b21].
︙ | ︙ | |||
51 52 53 54 55 56 57 | [_object release]; [super dealloc]; } - (OFString *)description { | > | | | > > > | 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | [_object release]; [super dealloc]; } - (OFString *)description { if (_object != nil) return [OFString stringWithFormat: @"Setting an option in an object of type %@ failed: %@", [_object class], OFStrError(_errNo)]; else return [OFString stringWithFormat: @"Setting an option failed: %@", OFStrError(_errNo)]; } @end |
Modified src/objfw-defs.h.in from [13ff8f3bcc] to [376d21383b].
1 2 3 4 5 6 7 8 9 10 11 12 13 | #undef OF_APPLE_RUNTIME #undef OF_BIG_ENDIAN #undef OF_CLASSIC_MACOS #undef OF_FLOAT_BIG_ENDIAN #undef OF_HAVE_AFUNIX_H #undef OF_HAVE_APPLETALK #undef OF_HAVE_ATOMIC_BUILTINS #undef OF_HAVE_ATOMIC_OPS #undef OF_HAVE_BUILTIN_BSWAP16 #undef OF_HAVE_BUILTIN_BSWAP32 #undef OF_HAVE_BUILTIN_BSWAP64 #undef OF_HAVE_CHMOD #undef OF_HAVE_CHOWN | > | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 | #undef OF_APPLE_RUNTIME #undef OF_BIG_ENDIAN #undef OF_CLASSIC_MACOS #undef OF_FLOAT_BIG_ENDIAN #undef OF_HAVE_AFUNIX_H #undef OF_HAVE_APPLETALK #undef OF_HAVE_APPLETALK_IFCONFIG #undef OF_HAVE_ATOMIC_BUILTINS #undef OF_HAVE_ATOMIC_OPS #undef OF_HAVE_BUILTIN_BSWAP16 #undef OF_HAVE_BUILTIN_BSWAP32 #undef OF_HAVE_BUILTIN_BSWAP64 #undef OF_HAVE_CHMOD #undef OF_HAVE_CHOWN |
︙ | ︙ |
Modified utils/ofatalkcfg/OFATalkCfg.m from [8054bd9b01] to [c079b4e165].
︙ | ︙ | |||
12 13 14 15 16 17 18 | * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" #include <errno.h> | < > > > | < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < < > | 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 | * LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this * file. */ #include "config.h" #include <errno.h> #import "OFApplication.h" #import "OFArray.h" #import "OFDDPSocket.h" #import "OFDictionary.h" #import "OFNumber.h" #import "OFOptionsParser.h" #import "OFPair.h" #import "OFStdIOStream.h" #import "OFInvalidFormatException.h" @interface OFATalkCfg: OFObject <OFApplicationDelegate> @end OF_APPLICATION_DELEGATE(OFATalkCfg) @implementation OFATalkCfg - (void)applicationDidFinishLaunching: (OFNotification *)notification { OFMutableDictionary *config = [OFMutableDictionary dictionary]; OFString *nodeString = nil, *networkString = nil, *phaseString = nil; OFString *rangeString = nil; const OFOptionsParserOption options[] = { { '\0', @"network", 1, NULL, &networkString }, { '\0', @"node", 1, NULL, &nodeString }, { '\0', @"phase", 1, NULL, &phaseString }, { '\0', @"range", 1, NULL, &rangeString }, |
︙ | ︙ | |||
176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 | return; } if (network > UINT16_MAX) { [OFStdErr writeFormat: @"%@: --network out of range!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; } if (nodeString == nil) { [OFStdErr writeFormat: @"%@: --node not specified!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; } @try { node = [nodeString unsignedLongLongValueWithBase: 0]; } @catch (OFInvalidFormatException *e) { [OFStdErr writeFormat: @"%@: Invalid format for --node!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; return; } if (node > UINT8_MAX) { [OFStdErr writeFormat: @"%@: --node out of range!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; } if (phaseString != nil) { @try { phase = [phaseString unsignedLongLongValueWithBase: 0]; } @catch (OFInvalidFormatException *e) { [OFStdErr writeFormat: @"%@: Invalid format for "@"--phase!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; return; } if (phase > 2) { [OFStdErr writeFormat: @"%@: --phase out of range!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; } | > > > > | > | > | > > > > > | 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 | return; } if (network > UINT16_MAX) { [OFStdErr writeFormat: @"%@: --network out of range!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; } [config setObject: [OFNumber numberWithUnsignedShort: (uint16_t)network] forKey: OFAppleTalkInterfaceConfigurationNetwork]; if (nodeString == nil) { [OFStdErr writeFormat: @"%@: --node not specified!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; } @try { node = [nodeString unsignedLongLongValueWithBase: 0]; } @catch (OFInvalidFormatException *e) { [OFStdErr writeFormat: @"%@: Invalid format for --node!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; return; } if (node > UINT8_MAX) { [OFStdErr writeFormat: @"%@: --node out of range!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; } [config setObject: [OFNumber numberWithUnsignedChar: (uint8_t)node] forKey: OFAppleTalkInterfaceConfigurationNode]; if (phaseString != nil) { @try { phase = [phaseString unsignedLongLongValueWithBase: 0]; } @catch (OFInvalidFormatException *e) { [OFStdErr writeFormat: @"%@: Invalid format for "@"--phase!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; return; } if (phase > 2) { [OFStdErr writeFormat: @"%@: --phase out of range!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; } [config setObject: [OFNumber numberWithUnsignedChar: (uint8_t)phase] forKey: OFAppleTalkInterfaceConfigurationPhase]; } if (rangeString != nil) { const OFAppleTalkInterfaceConfigurationKey key = OFAppleTalkInterfaceConfigurationNetworkRange; OFPair *range; rangeArray = [rangeString componentsSeparatedByString: @"-"]; if (rangeArray.count != 2) { [OFStdErr writeFormat: @"%@: Invalid format for --range!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; } |
︙ | ︙ | |||
242 243 244 245 246 247 248 | } if (rangeStart > UINT16_MAX || rangeEnd > UINT16_MAX) { [OFStdErr writeFormat: @"%@: --range out of range!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; } | | > > | > | > > | < < > | 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 | } if (rangeStart > UINT16_MAX || rangeEnd > UINT16_MAX) { [OFStdErr writeFormat: @"%@: --range out of range!\n", [OFApplication programName]]; [OFApplication terminateWithStatus: 1]; } range = [OFPair pairWithFirstObject: [OFNumber numberWithUnsignedShort: (uint16_t)rangeStart] secondObject: [OFNumber numberWithUnsignedShort: (uint16_t)rangeEnd]]; [config setObject: range forKey: key]; } [OFDDPSocket setConfiguration: config forInterface: optionsParser.remainingArguments .firstObject]; [OFApplication terminate]; } @end |