Modified src/OFDDPSocket.m
from [ff6c9b4b71]
to [d78813a978].
︙ | | | ︙ | |
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
|
#endif
#import "OFDDPSocket.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindFailedException.h"
@implementation OFDDPSocket
@dynamic delegate;
- (OFSocketAddress)bindToPort: (uint8_t)port
{
OFSocketAddress address;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeAppleTalk(0, 0, port);
if ((_socket = socket(address.sockaddr.at.sat_family,
SOCK_DGRAM | SOCK_CLOEXEC, 0)) == OFInvalidSocketHandle)
@throw [OFBindFailedException
exceptionWithPort: port
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPort: port
socket: self
errNo: errNo];
}
memset(&address, 0, sizeof(address));
address.family = OFSocketAddressFamilyAppleTalk;
address.length = (socklen_t)sizeof(address.sockaddr);
if (OFGetSockName(_socket, (struct sockaddr *)&address.sockaddr,
&address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPort: port
socket: self
errNo: errNo];
}
if (address.sockaddr.at.sat_family != AF_APPLETALK) {
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPort: port
socket: self
errNo: EAFNOSUPPORT];
}
return address;
}
@end
|
|
|
>
|
|
|
>
|
|
|
>
|
|
|
|
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
|
#endif
#import "OFDDPSocket.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindDDPSocketFailedException.h"
@implementation OFDDPSocket
@dynamic delegate;
- (OFSocketAddress)bindToPort: (uint8_t)port
{
OFSocketAddress address;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeAppleTalk(0, 0, port);
if ((_socket = socket(address.sockaddr.at.sat_family,
SOCK_DGRAM | SOCK_CLOEXEC, 0)) == OFInvalidSocketHandle)
@throw [OFBindDDPSocketFailedException
exceptionWithPort: port
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindDDPSocketFailedException
exceptionWithPort: port
socket: self
errNo: errNo];
}
memset(&address, 0, sizeof(address));
address.family = OFSocketAddressFamilyAppleTalk;
address.length = (socklen_t)sizeof(address.sockaddr);
if (OFGetSockName(_socket, (struct sockaddr *)&address.sockaddr,
&address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindDDPSocketFailedException
exceptionWithPort: port
socket: self
errNo: errNo];
}
if (address.sockaddr.at.sat_family != AF_APPLETALK) {
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindDDPSocketFailedException
exceptionWithPort: port
socket: self
errNo: EAFNOSUPPORT];
}
return address;
}
@end
|
Modified src/OFIPSocketAsyncConnector.m
from [e235fd33e4]
to [11edaa9dd3].
︙ | | | ︙ | |
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#import "OFIPSocketAsyncConnector.h"
#import "OFData.h"
#import "OFTCPSocket.h"
#import "OFThread.h"
#import "OFTimer.h"
#import "OFConnectionFailedException.h"
#import "OFInvalidFormatException.h"
@implementation OFIPSocketAsyncConnector
- (instancetype)initWithSocket: (id)sock
host: (OFString *)host
port: (uint16_t)port
delegate: (id)delegate
|
|
|
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#import "OFIPSocketAsyncConnector.h"
#import "OFData.h"
#import "OFTCPSocket.h"
#import "OFThread.h"
#import "OFTimer.h"
#import "OFConnectIPSocketFailedException.h"
#import "OFInvalidFormatException.h"
@implementation OFIPSocketAsyncConnector
- (instancetype)initWithSocket: (id)sock
host: (OFString *)host
port: (uint16_t)port
delegate: (id)delegate
|
︙ | | | ︙ | |
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
|
}
[self didConnect];
}
- (id)of_connectionFailedExceptionForErrNo: (int)errNo
{
return [OFConnectionFailedException exceptionWithHost: _host
port: _port
socket: _socket
errNo: errNo];
}
- (void)tryNextAddressWithRunLoopMode: (OFRunLoopMode)runLoopMode
{
OFSocketAddress address = *(const OFSocketAddress *)
[_socketAddresses itemAtIndex: _socketAddressesIndex++];
int errNo;
OFSocketAddressSetPort(&address, _port);
if (![_socket of_createSocketForAddress: &address errNo: &errNo]) {
if (_socketAddressesIndex >= _socketAddresses.count) {
_exception = [[OFConnectionFailedException alloc]
initWithHost: _host
port: _port
socket: _socket
errNo: errNo];
[self didConnect];
return;
}
|
|
|
|
|
|
|
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
|
}
[self didConnect];
}
- (id)of_connectionFailedExceptionForErrNo: (int)errNo
{
return [OFConnectIPSocketFailedException exceptionWithHost: _host
port: _port
socket: _socket
errNo: errNo];
}
- (void)tryNextAddressWithRunLoopMode: (OFRunLoopMode)runLoopMode
{
OFSocketAddress address = *(const OFSocketAddress *)
[_socketAddresses itemAtIndex: _socketAddressesIndex++];
int errNo;
OFSocketAddressSetPort(&address, _port);
if (![_socket of_createSocketForAddress: &address errNo: &errNo]) {
if (_socketAddressesIndex >= _socketAddresses.count) {
_exception = [[OFConnectIPSocketFailedException alloc]
initWithHost: _host
port: _port
socket: _socket
errNo: errNo];
[self didConnect];
return;
}
|
︙ | | | ︙ | |
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
delegate: self];
return;
} else {
#endif
[_socket of_closeSocket];
if (_socketAddressesIndex >= _socketAddresses.count) {
_exception = [[OFConnectionFailedException
alloc] initWithHost: _host
port: _port
socket: _socket
errNo: errNo];
[self didConnect];
return;
}
|
|
|
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
|
delegate: self];
return;
} else {
#endif
[_socket of_closeSocket];
if (_socketAddressesIndex >= _socketAddresses.count) {
_exception = [[OFConnectIPSocketFailedException
alloc] initWithHost: _host
port: _port
socket: _socket
errNo: errNo];
[self didConnect];
return;
}
|
︙ | | | ︙ | |
Modified src/OFIPXSocket.h
from [270a469bc4]
to [9798b4504d].
︙ | | | ︙ | |
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
|
@property OF_NULLABLE_PROPERTY (assign, nonatomic)
id <OFIPXSocketDelegate> delegate;
/**
* @brief Bind the socket to the specified network, node and port with the
* specified packet type.
*
* @param port The port (sometimes called socket number) to bind to. 0 means to
* pick one and return via the returned socket address.
* @param packetType The packet type to use on the socket
* @return The address on which this socket can be reached
* @throw OFBindFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already bound
*/
- (OFSocketAddress)bindToPort: (uint16_t)port packetType: (uint8_t)packetType;
@end
OF_ASSUME_NONNULL_END
|
>
>
>
|
|
>
>
>
>
|
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
|
@property OF_NULLABLE_PROPERTY (assign, nonatomic)
id <OFIPXSocketDelegate> delegate;
/**
* @brief Bind the socket to the specified network, node and port with the
* specified packet type.
*
* @param network The IPX network to bind to. 0 means the current network.
* @param node The IPX network to bind to. An all zero node means the
* computer's node.
* @param port The port (sometimes called socket number) to bind to. 0 means to
* pick one and return via the returned socket address.
* @param packetType The packet type to use on the socket
* @return The address on which this socket can be reached
* @throw OFBindIPXSocketFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already bound
*/
- (OFSocketAddress)
bindToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
packetType: (uint8_t)packetType;
@end
OF_ASSUME_NONNULL_END
|
Modified src/OFIPXSocket.m
from [f0059481b5]
to [1dc137a6b3].
︙ | | | ︙ | |
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
|
#endif
#import "OFIPXSocket.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindFailedException.h"
@implementation OFIPXSocket
@dynamic delegate;
- (OFSocketAddress)bindToPort: (uint16_t)port packetType: (uint8_t)packetType
{
const unsigned char zeroNode[IPX_NODE_LEN] = { 0 };
OFSocketAddress address;
int protocol = 0;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeIPX(0, zeroNode, port);
#ifdef OF_WINDOWS
protocol = NSPROTO_IPX + packetType;
#else
_packetType = address.sockaddr.ipx.sipx_type = packetType;
#endif
if ((_socket = socket(address.sockaddr.ipx.sipx_family,
SOCK_DGRAM | SOCK_CLOEXEC, protocol)) == OFInvalidSocketHandle)
@throw [OFBindFailedException
exceptionWithPort: port
packetType: packetType
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPort: port
packetType: packetType
socket: self
errNo: errNo];
}
memset(&address, 0, sizeof(address));
address.family = OFSocketAddressFamilyIPX;
address.length = (socklen_t)sizeof(address.sockaddr);
if (OFGetSockName(_socket, (struct sockaddr *)&address.sockaddr,
&address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPort: port
packetType: packetType
socket: self
errNo: errNo];
}
if (address.sockaddr.ipx.sipx_family != AF_IPX) {
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPort: port
packetType: packetType
socket: self
errNo: EAFNOSUPPORT];
}
return address;
}
#ifndef OF_WINDOWS
- (void)sendBuffer: (const void *)buffer
|
|
>
>
>
|
<
|
|
|
>
>
|
|
|
>
|
>
>
|
|
|
>
|
>
>
|
|
|
>
|
>
>
|
|
|
|
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
|
#endif
#import "OFIPXSocket.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindIPXSocketFailedException.h"
@implementation OFIPXSocket
@dynamic delegate;
- (OFSocketAddress)bindToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
packetType: (uint8_t)packetType
{
OFSocketAddress address;
int protocol = 0;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeIPX(network, node, port);
#ifdef OF_WINDOWS
protocol = NSPROTO_IPX + packetType;
#else
_packetType = address.sockaddr.ipx.sipx_type = packetType;
#endif
if ((_socket = socket(address.sockaddr.ipx.sipx_family,
SOCK_DGRAM | SOCK_CLOEXEC, protocol)) == OFInvalidSocketHandle)
@throw [OFBindIPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
packetType: packetType
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
packetType: packetType
socket: self
errNo: errNo];
}
memset(&address, 0, sizeof(address));
address.family = OFSocketAddressFamilyIPX;
address.length = (socklen_t)sizeof(address.sockaddr);
if (OFGetSockName(_socket, (struct sockaddr *)&address.sockaddr,
&address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
packetType: packetType
socket: self
errNo: errNo];
}
if (address.sockaddr.ipx.sipx_family != AF_IPX) {
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
packetType: packetType
socket: self
errNo: EAFNOSUPPORT];
}
return address;
}
#ifndef OF_WINDOWS
- (void)sendBuffer: (const void *)buffer
|
︙ | | | ︙ | |
Modified src/OFSPXSocket.h
from [40e34f28e7]
to [62171025db].
︙ | | | ︙ | |
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
* @param node The node the socket connected to
* @param port The port of the node to which the socket connected
* @param exception An exception that occurred while connecting, or nil on
* success
*/
- (void)socket: (OFSPXSocket *)socket
didConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
exception: (nullable id)exception;
@end
/**
* @class OFSPXSocket OFSPXSocket.h ObjFW/OFSPXSocket.h
*
|
|
|
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
|
* @param node The node the socket connected to
* @param port The port of the node to which the socket connected
* @param exception An exception that occurred while connecting, or nil on
* success
*/
- (void)socket: (OFSPXSocket *)socket
didConnectToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
exception: (nullable id)exception;
@end
/**
* @class OFSPXSocket OFSPXSocket.h ObjFW/OFSPXSocket.h
*
|
︙ | | | ︙ | |
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
|
/**
* @brief Connect the OFSPXSocket to the specified destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @throw OFConnectionFailedException Connecting failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (void)connectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port;
/**
* @brief Asynchronously connect the OFSPXSocket to the specified destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port;
/**
* @brief Asynchronously connect the OFSPXSocket to the specified destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @param runLoopMode The run loop mode in which to perform the async connect
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode;
#ifdef OF_HAVE_BLOCKS
/**
* @brief Asynchronously connect the OFSPXSocket to the specified destination.
*
* @param node The node to connect to
* @param network The network on which the node to connect to is
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @param block The block to execute once the connection has been established
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
block: (OFSPXSocketAsyncConnectBlock)block;
/**
* @brief Asynchronously connect the OFSPXSocket to the specified destination.
*
* @param node The node to connect to
* @param network The network on which the node to connect to is
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @param runLoopMode The run loop mode in which to perform the async connect
* @param block The block to execute once the connection has been established
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode
block: (OFSPXSocketAsyncConnectBlock)block;
#endif
/**
* @brief Bind the socket to the specified network, node and port.
*
* @param port The port (sometimes called socket number) to bind to. 0 means to
* pick one and return via the returned socket address.
* @return The address on which this socket can be reached
* @throw OFBindFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (OFSocketAddress)bindToPort: (uint16_t)port;
@end
OF_ASSUME_NONNULL_END
|
|
|
|
|
|
|
>
>
>
|
|
>
>
>
|
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
|
/**
* @brief Connect the OFSPXSocket to the specified destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @throw OFConnectSPXSocketFailedException Connecting failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (void)connectToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port;
/**
* @brief Asynchronously connect the OFSPXSocket to the specified destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port;
/**
* @brief Asynchronously connect the OFSPXSocket to the specified destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @param runLoopMode The run loop mode in which to perform the async connect
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode;
#ifdef OF_HAVE_BLOCKS
/**
* @brief Asynchronously connect the OFSPXSocket to the specified destination.
*
* @param node The node to connect to
* @param network The network on which the node to connect to is
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @param block The block to execute once the connection has been established
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
block: (OFSPXSocketAsyncConnectBlock)block;
/**
* @brief Asynchronously connect the OFSPXSocket to the specified destination.
*
* @param node The node to connect to
* @param network The network on which the node to connect to is
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @param runLoopMode The run loop mode in which to perform the async connect
* @param block The block to execute once the connection has been established
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode
block: (OFSPXSocketAsyncConnectBlock)block;
#endif
/**
* @brief Bind the socket to the specified network, node and port.
*
* @param network The IPX network to bind to. 0 means the current network.
* @param node The IPX network to bind to. An all zero node means the
* computer's node.
* @param port The port (sometimes called socket number) to bind to. 0 means to
* pick one and return via the returned socket address.
* @return The address on which this socket can be reached
* @throw OFBindIPXSocketFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (OFSocketAddress)
bindToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port;
@end
OF_ASSUME_NONNULL_END
|
Modified src/OFSPXSocket.m
from [63c27817f9]
to [4bb1b2f501].
︙ | | | ︙ | |
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#import "OFSPXSocket.h"
#import "OFRunLoop.h"
#import "OFRunLoop+Private.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindFailedException.h"
#import "OFConnectionFailedException.h"
#import "OFNotOpenException.h"
#ifndef NSPROTO_SPX
# define NSPROTO_SPX 0
#endif
static const uint8_t SPXPacketType = 5;
|
|
|
|
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#import "OFSPXSocket.h"
#import "OFRunLoop.h"
#import "OFRunLoop+Private.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindIPXSocketFailedException.h"
#import "OFConnectSPXSocketFailedException.h"
#import "OFNotOpenException.h"
#ifndef NSPROTO_SPX
# define NSPROTO_SPX 0
#endif
static const uint8_t SPXPacketType = 5;
|
︙ | | | ︙ | |
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
|
#ifdef OF_HAVE_BLOCKS
OFSPXSocketAsyncConnectBlock _block;
#endif
}
- (instancetype)initWithSocket: (OFSPXSocket *)socket
network: (uint32_t)network
node: (unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
#ifdef OF_HAVE_BLOCKS
block: (OFSPXSocketAsyncConnectBlock)block
#endif
;
- (void)startWithRunLoopMode: (OFRunLoopMode)runLoopMode;
@end
@implementation OFSPXSocketAsyncConnectDelegate
- (instancetype)initWithSocket: (OFSPXSocket *)sock
network: (uint32_t)network
node: (unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
#ifdef OF_HAVE_BLOCKS
block: (OFSPXSocketAsyncConnectBlock)block
#endif
{
self = [super init];
|
|
|
|
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
|
#ifdef OF_HAVE_BLOCKS
OFSPXSocketAsyncConnectBlock _block;
#endif
}
- (instancetype)initWithSocket: (OFSPXSocket *)socket
network: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
#ifdef OF_HAVE_BLOCKS
block: (OFSPXSocketAsyncConnectBlock)block
#endif
;
- (void)startWithRunLoopMode: (OFRunLoopMode)runLoopMode;
@end
@implementation OFSPXSocketAsyncConnectDelegate
- (instancetype)initWithSocket: (OFSPXSocket *)sock
network: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
#ifdef OF_HAVE_BLOCKS
block: (OFSPXSocketAsyncConnectBlock)block
#endif
{
self = [super init];
|
︙ | | | ︙ | |
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
#ifdef OF_HAVE_BLOCKS
}
#endif
}
- (id)of_connectionFailedExceptionForErrNo: (int)errNo
{
return [OFConnectionFailedException exceptionWithNetwork: _network
node: _node
port: _port
socket: _socket
errNo: errNo];
}
@end
@implementation OFSPXSocket
@dynamic delegate;
- (int)of_createSocketForAddress: (const OFSocketAddress *)address
|
|
|
|
|
|
|
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
|
#ifdef OF_HAVE_BLOCKS
}
#endif
}
- (id)of_connectionFailedExceptionForErrNo: (int)errNo
{
return [OFConnectSPXSocketFailedException exceptionWithNetwork: _network
node: _node
port: _port
socket: _socket
errNo: errNo];
}
@end
@implementation OFSPXSocket
@dynamic delegate;
- (int)of_createSocketForAddress: (const OFSocketAddress *)address
|
︙ | | | ︙ | |
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
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
|
- (void)of_closeSocket
{
closesocket(_socket);
_socket = OFInvalidSocketHandle;
}
- (void)connectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
{
OFSocketAddress address = OFSocketAddressMakeIPX(network, node, port);
int errNo;
if (![self of_createSocketForAddress: &address errNo: &errNo])
@throw [OFConnectionFailedException
exceptionWithNetwork: network
node: node
port: port
socket: self
errNo: errNo];
if (![self of_connectSocketToAddress: &address errNo: &errNo]) {
[self of_closeSocket];
@throw [OFConnectionFailedException
exceptionWithNetwork: network
node: node
port: port
socket: self
errNo: errNo];
}
}
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
{
[self asyncConnectToNetwork: network
node: node
port: port
runLoopMode: OFDefaultRunLoopMode];
}
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode
{
void *pool = objc_autoreleasePoolPush();
[[[[OFSPXSocketAsyncConnectDelegate alloc]
initWithSocket: self
network: network
node: node
port: port
#ifdef OF_HAVE_BLOCKS
block: NULL
#endif
] autorelease] startWithRunLoopMode: runLoopMode];
objc_autoreleasePoolPop(pool);
}
#ifdef OF_HAVE_BLOCKS
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
block: (OFSPXSocketAsyncConnectBlock)block
{
[self asyncConnectToNetwork: network
node: node
port: port
runLoopMode: OFDefaultRunLoopMode
block: block];
}
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode
block: (OFSPXSocketAsyncConnectBlock)block
{
void *pool = objc_autoreleasePoolPush();
[[[[OFSPXSocketAsyncConnectDelegate alloc]
initWithSocket: self
network: network
node: node
port: port
block: block
] autorelease] startWithRunLoopMode: runLoopMode];
objc_autoreleasePoolPop(pool);
}
#endif
- (OFSocketAddress)bindToPort: (uint16_t)port
{
const unsigned char zeroNode[IPX_NODE_LEN] = { 0 };
OFSocketAddress address;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeIPX(0, zeroNode, port);
if ((_socket = socket(address.sockaddr.ipx.sipx_family,
SOCK_SEQPACKET | SOCK_CLOEXEC, NSPROTO_SPX)) ==
OFInvalidSocketHandle)
@throw [OFBindFailedException
exceptionWithPort: port
packetType: SPXPacketType
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPort: port
packetType: SPXPacketType
socket: self
errNo: errNo];
}
memset(&address, 0, sizeof(address));
address.family = OFSocketAddressFamilyIPX;
address.length = (socklen_t)sizeof(address.sockaddr);
if (OFGetSockName(_socket, (struct sockaddr *)&address.sockaddr,
&address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPort: port
packetType: SPXPacketType
socket: self
errNo: errNo];
}
if (address.sockaddr.ipx.sipx_family != AF_IPX) {
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPort: port
packetType: SPXPacketType
socket: self
errNo: EAFNOSUPPORT];
}
return address;
}
@end
|
|
|
|
|
|
|
|
|
>
>
<
|
|
|
>
>
|
|
|
>
|
>
>
|
|
|
>
|
>
>
|
|
|
>
|
>
>
|
|
|
|
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
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
|
- (void)of_closeSocket
{
closesocket(_socket);
_socket = OFInvalidSocketHandle;
}
- (void)connectToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
{
OFSocketAddress address = OFSocketAddressMakeIPX(network, node, port);
int errNo;
if (![self of_createSocketForAddress: &address errNo: &errNo])
@throw [OFConnectSPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
socket: self
errNo: errNo];
if (![self of_connectSocketToAddress: &address errNo: &errNo]) {
[self of_closeSocket];
@throw [OFConnectSPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
socket: self
errNo: errNo];
}
}
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
{
[self asyncConnectToNetwork: network
node: node
port: port
runLoopMode: OFDefaultRunLoopMode];
}
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode
{
void *pool = objc_autoreleasePoolPush();
[[[[OFSPXSocketAsyncConnectDelegate alloc]
initWithSocket: self
network: network
node: node
port: port
#ifdef OF_HAVE_BLOCKS
block: NULL
#endif
] autorelease] startWithRunLoopMode: runLoopMode];
objc_autoreleasePoolPop(pool);
}
#ifdef OF_HAVE_BLOCKS
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
block: (OFSPXSocketAsyncConnectBlock)block
{
[self asyncConnectToNetwork: network
node: node
port: port
runLoopMode: OFDefaultRunLoopMode
block: block];
}
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode
block: (OFSPXSocketAsyncConnectBlock)block
{
void *pool = objc_autoreleasePoolPush();
[[[[OFSPXSocketAsyncConnectDelegate alloc]
initWithSocket: self
network: network
node: node
port: port
block: block
] autorelease] startWithRunLoopMode: runLoopMode];
objc_autoreleasePoolPop(pool);
}
#endif
- (OFSocketAddress)bindToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
{
OFSocketAddress address;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeIPX(network, node, port);
if ((_socket = socket(address.sockaddr.ipx.sipx_family,
SOCK_SEQPACKET | SOCK_CLOEXEC, NSPROTO_SPX)) ==
OFInvalidSocketHandle)
@throw [OFBindIPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
packetType: SPXPacketType
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
packetType: SPXPacketType
socket: self
errNo: errNo];
}
memset(&address, 0, sizeof(address));
address.family = OFSocketAddressFamilyIPX;
address.length = (socklen_t)sizeof(address.sockaddr);
if (OFGetSockName(_socket, (struct sockaddr *)&address.sockaddr,
&address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
packetType: SPXPacketType
socket: self
errNo: errNo];
}
if (address.sockaddr.ipx.sipx_family != AF_IPX) {
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
packetType: SPXPacketType
socket: self
errNo: EAFNOSUPPORT];
}
return address;
}
@end
|
Modified src/OFSPXStreamSocket.h
from [d15837842c]
to [454aa9fc7f].
︙ | | | ︙ | |
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
* @param node The node the socket connected to
* @param port The port of the node to which the socket connected
* @param exception An exception that occurred while connecting, or nil on
* success
*/
- (void)socket: (OFSPXStreamSocket *)socket
didConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
exception: (nullable id)exception;
@end
/**
* @class OFSPXStreamSocket OFSPXStreamSocket.h ObjFW/OFSPXStreamSocket.h
*
|
|
|
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
* @param node The node the socket connected to
* @param port The port of the node to which the socket connected
* @param exception An exception that occurred while connecting, or nil on
* success
*/
- (void)socket: (OFSPXStreamSocket *)socket
didConnectToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
exception: (nullable id)exception;
@end
/**
* @class OFSPXStreamSocket OFSPXStreamSocket.h ObjFW/OFSPXStreamSocket.h
*
|
︙ | | | ︙ | |
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
|
/**
* @brief Connect the OFSPXStreamSocket to the specified destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @throw OFConnectionFailedException Connecting failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (void)connectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port;
/**
* @brief Asynchronously connect the OFSPXStreamSocket to the specified
* destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port;
/**
* @brief Asynchronously connect the OFSPXStreamSocket to the specified
* destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @param runLoopMode The run loop mode in which to perform the async connect
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode;
#ifdef OF_HAVE_BLOCKS
/**
* @brief Asynchronously connect the OFSPXStreamSocket to the specified
* destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @param block The block to execute once the connection has been established
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
block: (OFSPXStreamSocketAsyncConnectBlock)block;
/**
* @brief Asynchronously connect the OFSPXStreamSocket to the specified
* destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @param runLoopMode The run loop mode in which to perform the async connect
* @param block The block to execute once the connection has been established
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode
block: (OFSPXStreamSocketAsyncConnectBlock)block;
#endif
/**
* @brief Bind the socket to the specified network, node and port.
*
* @param port The port (sometimes called socket number) to bind to. 0 means to
* pick one and return via the returned socket address.
* @return The address on which this socket can be reached
* @throw OFConnectionFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (OFSocketAddress)bindToPort: (uint16_t)port;
@end
OF_ASSUME_NONNULL_END
|
|
|
|
|
|
|
>
>
>
|
|
>
>
>
|
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
|
/**
* @brief Connect the OFSPXStreamSocket to the specified destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @throw OFConnectSPXSocketFailedException Connecting failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (void)connectToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port;
/**
* @brief Asynchronously connect the OFSPXStreamSocket to the specified
* destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port;
/**
* @brief Asynchronously connect the OFSPXStreamSocket to the specified
* destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @param runLoopMode The run loop mode in which to perform the async connect
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode;
#ifdef OF_HAVE_BLOCKS
/**
* @brief Asynchronously connect the OFSPXStreamSocket to the specified
* destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @param block The block to execute once the connection has been established
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
block: (OFSPXStreamSocketAsyncConnectBlock)block;
/**
* @brief Asynchronously connect the OFSPXStreamSocket to the specified
* destination.
*
* @param network The network on which the node to connect to is
* @param node The node to connect to
* @param port The port (sometimes also called socket number) on the node to
* connect to
* @param runLoopMode The run loop mode in which to perform the async connect
* @param block The block to execute once the connection has been established
*/
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode
block: (OFSPXStreamSocketAsyncConnectBlock)block;
#endif
/**
* @brief Bind the socket to the specified network, node and port.
*
* @param network The IPX network to bind to. 0 means the current network.
* @param node The IPX network to bind to. An all zero node means the
* computer's node.
* @param port The port (sometimes called socket number) to bind to. 0 means to
* pick one and return via the returned socket address.
* @return The address on which this socket can be reached
* @throw OFBindIPXSocketFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (OFSocketAddress)
bindToNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port;
@end
OF_ASSUME_NONNULL_END
|
Modified src/OFSPXStreamSocket.m
from [a588145b61]
to [3d76de2dbb].
︙ | | | ︙ | |
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#import "OFSPXStreamSocket.h"
#import "OFRunLoop.h"
#import "OFRunLoop+Private.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindFailedException.h"
#import "OFConnectionFailedException.h"
#import "OFNotOpenException.h"
#ifndef NSPROTO_SPX
# define NSPROTO_SPX 0
#endif
static const uint8_t SPXPacketType = 5;
|
|
|
|
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
|
#import "OFSPXStreamSocket.h"
#import "OFRunLoop.h"
#import "OFRunLoop+Private.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindIPXSocketFailedException.h"
#import "OFConnectSPXSocketFailedException.h"
#import "OFNotOpenException.h"
#ifndef NSPROTO_SPX
# define NSPROTO_SPX 0
#endif
static const uint8_t SPXPacketType = 5;
|
︙ | | | ︙ | |
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
|
#ifdef OF_HAVE_BLOCKS
OFSPXStreamSocketAsyncConnectBlock _block;
#endif
}
- (instancetype)initWithSocket: (OFSPXStreamSocket *)socket
network: (uint32_t)network
node: (unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
#ifdef OF_HAVE_BLOCKS
block: (OFSPXStreamSocketAsyncConnectBlock)block
#endif
;
- (void)startWithRunLoopMode: (OFRunLoopMode)runLoopMode;
@end
@implementation OFSPXStreamSocketAsyncConnectDelegate
- (instancetype)initWithSocket: (OFSPXStreamSocket *)sock
network: (uint32_t)network
node: (unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
#ifdef OF_HAVE_BLOCKS
block: (OFSPXStreamSocketAsyncConnectBlock)block
#endif
{
self = [super init];
|
|
|
|
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
|
#ifdef OF_HAVE_BLOCKS
OFSPXStreamSocketAsyncConnectBlock _block;
#endif
}
- (instancetype)initWithSocket: (OFSPXStreamSocket *)socket
network: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
#ifdef OF_HAVE_BLOCKS
block: (OFSPXStreamSocketAsyncConnectBlock)block
#endif
;
- (void)startWithRunLoopMode: (OFRunLoopMode)runLoopMode;
@end
@implementation OFSPXStreamSocketAsyncConnectDelegate
- (instancetype)initWithSocket: (OFSPXStreamSocket *)sock
network: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
#ifdef OF_HAVE_BLOCKS
block: (OFSPXStreamSocketAsyncConnectBlock)block
#endif
{
self = [super init];
|
︙ | | | ︙ | |
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
#ifdef OF_HAVE_BLOCKS
}
#endif
}
- (id)of_connectionFailedExceptionForErrNo: (int)errNo
{
return [OFConnectionFailedException exceptionWithNetwork: _network
node: _node
port: _port
socket: _socket
errNo: errNo];
}
@end
@implementation OFSPXStreamSocket
@dynamic delegate;
- (int)of_createSocketForAddress: (const OFSocketAddress *)address
|
|
|
|
|
|
|
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
|
#ifdef OF_HAVE_BLOCKS
}
#endif
}
- (id)of_connectionFailedExceptionForErrNo: (int)errNo
{
return [OFConnectSPXSocketFailedException exceptionWithNetwork: _network
node: _node
port: _port
socket: _socket
errNo: errNo];
}
@end
@implementation OFSPXStreamSocket
@dynamic delegate;
- (int)of_createSocketForAddress: (const OFSocketAddress *)address
|
︙ | | | ︙ | |
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
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
|
- (void)of_closeSocket
{
closesocket(_socket);
_socket = OFInvalidSocketHandle;
}
- (void)connectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
{
OFSocketAddress address = OFSocketAddressMakeIPX(network, node, port);
int errNo;
if (![self of_createSocketForAddress: &address errNo: &errNo])
@throw [OFConnectionFailedException
exceptionWithNetwork: network
node: node
port: port
socket: self
errNo: errNo];
if (![self of_connectSocketToAddress: &address errNo: &errNo]) {
[self of_closeSocket];
@throw [OFConnectionFailedException
exceptionWithNetwork: network
node: node
port: port
socket: self
errNo: errNo];
}
}
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
{
[self asyncConnectToNetwork: network
node: node
port: port
runLoopMode: OFDefaultRunLoopMode];
}
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode
{
void *pool = objc_autoreleasePoolPush();
[[[[OFSPXStreamSocketAsyncConnectDelegate alloc]
initWithSocket: self
network: network
node: node
port: port
#ifdef OF_HAVE_BLOCKS
block: NULL
#endif
] autorelease] startWithRunLoopMode: runLoopMode];
objc_autoreleasePoolPop(pool);
}
#ifdef OF_HAVE_BLOCKS
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
block: (OFSPXStreamSocketAsyncConnectBlock)block
{
[self asyncConnectToNetwork: network
node: node
port: port
runLoopMode: OFDefaultRunLoopMode
block: block];
}
- (void)asyncConnectToNetwork: (uint32_t)network
node: (unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode
block: (OFSPXStreamSocketAsyncConnectBlock)block
{
void *pool = objc_autoreleasePoolPush();
[[[[OFSPXStreamSocketAsyncConnectDelegate alloc]
initWithSocket: self
network: network
node: node
port: port
block: block
] autorelease] startWithRunLoopMode: runLoopMode];
objc_autoreleasePoolPop(pool);
}
#endif
- (OFSocketAddress)bindToPort: (uint16_t)port
{
const unsigned char zeroNode[IPX_NODE_LEN] = { 0 };
OFSocketAddress address;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeIPX(0, zeroNode, port);
if ((_socket = socket(address.sockaddr.ipx.sipx_family,
SOCK_STREAM | SOCK_CLOEXEC, NSPROTO_SPX)) == OFInvalidSocketHandle)
@throw [OFBindFailedException
exceptionWithPort: port
packetType: SPXPacketType
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPort: port
packetType: SPXPacketType
socket: self
errNo: errNo];
}
memset(&address, 0, sizeof(address));
address.family = OFSocketAddressFamilyIPX;
address.length = (socklen_t)sizeof(address.sockaddr);
if (OFGetSockName(_socket, (struct sockaddr *)&address.sockaddr,
&address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPort: port
packetType: SPXPacketType
socket: self
errNo: errNo];
}
if (address.sockaddr.ipx.sipx_family != AF_IPX) {
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPort: port
packetType: SPXPacketType
socket: self
errNo: EAFNOSUPPORT];
}
return address;
}
@end
|
|
|
|
|
|
|
|
|
>
>
<
|
|
|
>
>
|
|
|
>
|
>
>
|
|
|
>
|
>
>
|
|
|
>
|
>
>
|
|
|
|
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
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
|
- (void)of_closeSocket
{
closesocket(_socket);
_socket = OFInvalidSocketHandle;
}
- (void)connectToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
{
OFSocketAddress address = OFSocketAddressMakeIPX(network, node, port);
int errNo;
if (![self of_createSocketForAddress: &address errNo: &errNo])
@throw [OFConnectSPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
socket: self
errNo: errNo];
if (![self of_connectSocketToAddress: &address errNo: &errNo]) {
[self of_closeSocket];
@throw [OFConnectSPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
socket: self
errNo: errNo];
}
}
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
{
[self asyncConnectToNetwork: network
node: node
port: port
runLoopMode: OFDefaultRunLoopMode];
}
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode
{
void *pool = objc_autoreleasePoolPush();
[[[[OFSPXStreamSocketAsyncConnectDelegate alloc]
initWithSocket: self
network: network
node: node
port: port
#ifdef OF_HAVE_BLOCKS
block: NULL
#endif
] autorelease] startWithRunLoopMode: runLoopMode];
objc_autoreleasePoolPop(pool);
}
#ifdef OF_HAVE_BLOCKS
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
block: (OFSPXStreamSocketAsyncConnectBlock)block
{
[self asyncConnectToNetwork: network
node: node
port: port
runLoopMode: OFDefaultRunLoopMode
block: block];
}
- (void)asyncConnectToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
runLoopMode: (OFRunLoopMode)runLoopMode
block: (OFSPXStreamSocketAsyncConnectBlock)block
{
void *pool = objc_autoreleasePoolPush();
[[[[OFSPXStreamSocketAsyncConnectDelegate alloc]
initWithSocket: self
network: network
node: node
port: port
block: block
] autorelease] startWithRunLoopMode: runLoopMode];
objc_autoreleasePoolPop(pool);
}
#endif
- (OFSocketAddress)bindToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
{
OFSocketAddress address;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeIPX(network, node, port);
if ((_socket = socket(address.sockaddr.ipx.sipx_family,
SOCK_STREAM | SOCK_CLOEXEC, NSPROTO_SPX)) == OFInvalidSocketHandle)
@throw [OFBindIPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
packetType: SPXPacketType
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
packetType: SPXPacketType
socket: self
errNo: errNo];
}
memset(&address, 0, sizeof(address));
address.family = OFSocketAddressFamilyIPX;
address.length = (socklen_t)sizeof(address.sockaddr);
if (OFGetSockName(_socket, (struct sockaddr *)&address.sockaddr,
&address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
packetType: SPXPacketType
socket: self
errNo: errNo];
}
if (address.sockaddr.ipx.sipx_family != AF_IPX) {
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPXSocketFailedException
exceptionWithNetwork: network
node: node
port: port
packetType: SPXPacketType
socket: self
errNo: EAFNOSUPPORT];
}
return address;
}
@end
|
Modified src/OFSequencedPacketSocket.h
from [b8e6a1fd31]
to [0f03522481].
︙ | | | ︙ | |
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
|
block: (OFSequencedPacketSocketAsyncSendDataBlock)block;
#endif
/**
* @brief Listen on the socket.
*
* @param backlog Maximum length for the queue of pending connections.
* @throw OFListenFailedException Listening failed
* @throw OFNotOpenException The socket is not open
*/
- (void)listenWithBacklog: (int)backlog;
/**
* @brief Listen on the socket.
*
* @throw OFListenFailedException Listening failed
* @throw OFNotOpenException The socket is not open
*/
- (void)listen;
/**
* @brief Accept an incoming connection.
*
* @return An autoreleased sequenced packet socket for the accepted connection.
* @throw OFAcceptFailedException Accepting failed
* @throw OFNotOpenException The socket is not open
*/
- (instancetype)accept;
/**
* @brief Asynchronously accept an incoming connection.
*/
|
|
|
|
|
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
|
block: (OFSequencedPacketSocketAsyncSendDataBlock)block;
#endif
/**
* @brief Listen on the socket.
*
* @param backlog Maximum length for the queue of pending connections.
* @throw OFListenOnSocketFailedException Listening failed
* @throw OFNotOpenException The socket is not open
*/
- (void)listenWithBacklog: (int)backlog;
/**
* @brief Listen on the socket.
*
* @throw OFListenOnSocketFailedException Listening failed
* @throw OFNotOpenException The socket is not open
*/
- (void)listen;
/**
* @brief Accept an incoming connection.
*
* @return An autoreleased sequenced packet socket for the accepted connection.
* @throw OFAcceptSocketFailedException Accepting failed
* @throw OFNotOpenException The socket is not open
*/
- (instancetype)accept;
/**
* @brief Asynchronously accept an incoming connection.
*/
|
︙ | | | ︙ | |
Modified src/OFSequencedPacketSocket.m
from [a8c0e899a1]
to [0b38781929].
︙ | | | ︙ | |
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#import "OFSequencedPacketSocket+Private.h"
#import "OFData.h"
#import "OFRunLoop+Private.h"
#import "OFRunLoop.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFAcceptFailedException.h"
#import "OFInitializationFailedException.h"
#import "OFInvalidArgumentException.h"
#import "OFListenFailedException.h"
#import "OFNotOpenException.h"
#import "OFOutOfRangeException.h"
#import "OFReadFailedException.h"
#import "OFSetOptionFailedException.h"
#import "OFWriteFailedException.h"
@implementation OFSequencedPacketSocket
|
|
|
|
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
|
#import "OFSequencedPacketSocket+Private.h"
#import "OFData.h"
#import "OFRunLoop+Private.h"
#import "OFRunLoop.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFAcceptSocketFailedException.h"
#import "OFInitializationFailedException.h"
#import "OFInvalidArgumentException.h"
#import "OFListenOnSocketFailedException.h"
#import "OFNotOpenException.h"
#import "OFOutOfRangeException.h"
#import "OFReadFailedException.h"
#import "OFSetOptionFailedException.h"
#import "OFWriteFailedException.h"
@implementation OFSequencedPacketSocket
|
︙ | | | ︙ | |
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
|
- (void)listenWithBacklog: (int)backlog
{
if (_socket == OFInvalidSocketHandle)
@throw [OFNotOpenException exceptionWithObject: self];
if (listen(_socket, backlog) == -1)
@throw [OFListenFailedException
exceptionWithSocket: self
backlog: backlog
errNo: OFSocketErrNo()];
_listening = true;
}
|
|
|
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
|
- (void)listenWithBacklog: (int)backlog
{
if (_socket == OFInvalidSocketHandle)
@throw [OFNotOpenException exceptionWithObject: self];
if (listen(_socket, backlog) == -1)
@throw [OFListenOnSocketFailedException
exceptionWithSocket: self
backlog: backlog
errNo: OFSocketErrNo()];
_listening = true;
}
|
︙ | | | ︙ | |
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
|
(socklen_t)sizeof(client->_remoteAddress.sockaddr);
#if defined(HAVE_PACCEPT) && defined(SOCK_CLOEXEC)
if ((client->_socket = paccept(_socket,
(struct sockaddr *)&client->_remoteAddress.sockaddr,
&client->_remoteAddress.length, NULL, SOCK_CLOEXEC)) ==
OFInvalidSocketHandle)
@throw [OFAcceptFailedException
exceptionWithSocket: self
errNo: OFSocketErrNo()];
#elif defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC)
if ((client->_socket = accept4(_socket,
(struct sockaddr *)&client->_remoteAddress.sockaddr,
&client->_remoteAddress.length, SOCK_CLOEXEC)) ==
OFInvalidSocketHandle)
@throw [OFAcceptFailedException
exceptionWithSocket: self
errNo: OFSocketErrNo()];
#else
if ((client->_socket = accept(_socket,
(struct sockaddr *)&client->_remoteAddress.sockaddr,
&client->_remoteAddress.length)) == OFInvalidSocketHandle)
@throw [OFAcceptFailedException
exceptionWithSocket: self
errNo: OFSocketErrNo()];
# if defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
if ((flags = fcntl(client->_socket, F_GETFD, 0)) != -1)
fcntl(client->_socket, F_SETFD, flags | FD_CLOEXEC);
# endif
|
|
|
|
|
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
|
(socklen_t)sizeof(client->_remoteAddress.sockaddr);
#if defined(HAVE_PACCEPT) && defined(SOCK_CLOEXEC)
if ((client->_socket = paccept(_socket,
(struct sockaddr *)&client->_remoteAddress.sockaddr,
&client->_remoteAddress.length, NULL, SOCK_CLOEXEC)) ==
OFInvalidSocketHandle)
@throw [OFAcceptSocketFailedException
exceptionWithSocket: self
errNo: OFSocketErrNo()];
#elif defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC)
if ((client->_socket = accept4(_socket,
(struct sockaddr *)&client->_remoteAddress.sockaddr,
&client->_remoteAddress.length, SOCK_CLOEXEC)) ==
OFInvalidSocketHandle)
@throw [OFAcceptSocketFailedException
exceptionWithSocket: self
errNo: OFSocketErrNo()];
#else
if ((client->_socket = accept(_socket,
(struct sockaddr *)&client->_remoteAddress.sockaddr,
&client->_remoteAddress.length)) == OFInvalidSocketHandle)
@throw [OFAcceptSocketFailedException
exceptionWithSocket: self
errNo: OFSocketErrNo()];
# if defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
if ((flags = fcntl(client->_socket, F_GETFD, 0)) != -1)
fcntl(client->_socket, F_SETFD, flags | FD_CLOEXEC);
# endif
|
︙ | | | ︙ | |
Modified src/OFSocket.h
from [9f4f0632e4]
to [24521aefe5].
︙ | | | ︙ | |
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
|
/**
* @brief Gets the IPX node of the specified @ref OFSocketAddress.
*
* @param address The address on which to get the IPX node
* @param node A byte array to store the IPX node of the address
*/
extern void OFSocketAddressIPXNode(const OFSocketAddress *_Nonnull address,
unsigned char node[_Nonnull IPX_NODE_LEN]);
/**
* @brief Sets the AppleTalk network of the specified @ref OFSocketAddress.
*
* @param address The address on which to set the AppleTalk network
* @param network The AppleTalk network to set on the address
|
|
|
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
|
/**
* @brief Gets the IPX node of the specified @ref OFSocketAddress.
*
* @param address The address on which to get the IPX node
* @param node A byte array to store the IPX node of the address
*/
extern void OFSocketAddressGetIPXNode(const OFSocketAddress *_Nonnull address,
unsigned char node[_Nonnull IPX_NODE_LEN]);
/**
* @brief Sets the AppleTalk network of the specified @ref OFSocketAddress.
*
* @param address The address on which to set the AppleTalk network
* @param network The AppleTalk network to set on the address
|
︙ | | | ︙ | |
Modified src/OFSocket.m
from [713c3da7b8]
to [60f126f761].
︙ | | | ︙ | |
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
|
if (address->family != OFSocketAddressFamilyIPX)
@throw [OFInvalidArgumentException exception];
memcpy(address->sockaddr.ipx.sipx_node, node, IPX_NODE_LEN);
}
void
OFSocketAddressIPXNode(const OFSocketAddress *address,
unsigned char node[IPX_NODE_LEN])
{
if (address->family != OFSocketAddressFamilyIPX)
@throw [OFInvalidArgumentException exception];
memcpy(node, address->sockaddr.ipx.sipx_node, IPX_NODE_LEN);
}
|
|
|
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
|
if (address->family != OFSocketAddressFamilyIPX)
@throw [OFInvalidArgumentException exception];
memcpy(address->sockaddr.ipx.sipx_node, node, IPX_NODE_LEN);
}
void
OFSocketAddressGetIPXNode(const OFSocketAddress *address,
unsigned char node[IPX_NODE_LEN])
{
if (address->family != OFSocketAddressFamilyIPX)
@throw [OFInvalidArgumentException exception];
memcpy(node, address->sockaddr.ipx.sipx_node, IPX_NODE_LEN);
}
|
︙ | | | ︙ | |
Modified src/OFStreamSocket.h
from [310cc8cd98]
to [700ee89673].
︙ | | | ︙ | |
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
|
*/
+ (instancetype)socket;
/**
* @brief Listen on the socket.
*
* @param backlog Maximum length for the queue of pending connections.
* @throw OFListenFailedException Listening failed
* @throw OFNotOpenException The socket is not open
*/
- (void)listenWithBacklog: (int)backlog;
/**
* @brief Listen on the socket.
*
* @throw OFListenFailedException Listening failed
* @throw OFNotOpenException The socket is not open
*/
- (void)listen;
/**
* @brief Accept an incoming connection.
*
* @return An autoreleased OFStreamSocket for the accepted connection.
* @throw OFAcceptFailedException Accepting failed
* @throw OFNotOpenException The socket is not open
*/
- (instancetype)accept;
/**
* @brief Asynchronously accept an incoming connection.
*/
|
|
|
|
|
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
|
*/
+ (instancetype)socket;
/**
* @brief Listen on the socket.
*
* @param backlog Maximum length for the queue of pending connections.
* @throw OFListenOnSocketFailedException Listening failed
* @throw OFNotOpenException The socket is not open
*/
- (void)listenWithBacklog: (int)backlog;
/**
* @brief Listen on the socket.
*
* @throw OFListenOnSocketFailedException Listening failed
* @throw OFNotOpenException The socket is not open
*/
- (void)listen;
/**
* @brief Accept an incoming connection.
*
* @return An autoreleased OFStreamSocket for the accepted connection.
* @throw OFAcceptSocketFailedException Accepting failed
* @throw OFNotOpenException The socket is not open
*/
- (instancetype)accept;
/**
* @brief Asynchronously accept an incoming connection.
*/
|
︙ | | | ︙ | |
Modified src/OFStreamSocket.m
from [6c817945cd]
to [efe4f02a49].
︙ | | | ︙ | |
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#import "OFStreamSocket.h"
#import "OFStreamSocket+Private.h"
#import "OFRunLoop.h"
#import "OFRunLoop+Private.h"
#import "OFSocket+Private.h"
#import "OFAcceptFailedException.h"
#import "OFInitializationFailedException.h"
#import "OFInvalidArgumentException.h"
#import "OFListenFailedException.h"
#import "OFNotImplementedException.h"
#import "OFNotOpenException.h"
#import "OFOutOfRangeException.h"
#import "OFReadFailedException.h"
#import "OFSetOptionFailedException.h"
#import "OFWriteFailedException.h"
|
|
|
|
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
|
#import "OFStreamSocket.h"
#import "OFStreamSocket+Private.h"
#import "OFRunLoop.h"
#import "OFRunLoop+Private.h"
#import "OFSocket+Private.h"
#import "OFAcceptSocketFailedException.h"
#import "OFInitializationFailedException.h"
#import "OFInvalidArgumentException.h"
#import "OFListenOnSocketFailedException.h"
#import "OFNotImplementedException.h"
#import "OFNotOpenException.h"
#import "OFOutOfRangeException.h"
#import "OFReadFailedException.h"
#import "OFSetOptionFailedException.h"
#import "OFWriteFailedException.h"
|
︙ | | | ︙ | |
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
|
- (void)listenWithBacklog: (int)backlog
{
if (_socket == OFInvalidSocketHandle)
@throw [OFNotOpenException exceptionWithObject: self];
if (listen(_socket, backlog) == -1)
@throw [OFListenFailedException
exceptionWithSocket: self
backlog: backlog
errNo: OFSocketErrNo()];
_listening = true;
}
|
|
|
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
|
- (void)listenWithBacklog: (int)backlog
{
if (_socket == OFInvalidSocketHandle)
@throw [OFNotOpenException exceptionWithObject: self];
if (listen(_socket, backlog) == -1)
@throw [OFListenOnSocketFailedException
exceptionWithSocket: self
backlog: backlog
errNo: OFSocketErrNo()];
_listening = true;
}
|
︙ | | | ︙ | |
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
|
(socklen_t)sizeof(client->_remoteAddress.sockaddr);
#if defined(HAVE_PACCEPT) && defined(SOCK_CLOEXEC)
if ((client->_socket = paccept(_socket,
(struct sockaddr *)&client->_remoteAddress.sockaddr,
&client->_remoteAddress.length, NULL, SOCK_CLOEXEC)) ==
OFInvalidSocketHandle)
@throw [OFAcceptFailedException
exceptionWithSocket: self
errNo: OFSocketErrNo()];
#elif defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC)
if ((client->_socket = accept4(_socket,
(struct sockaddr * )&client->_remoteAddress.sockaddr,
&client->_remoteAddress.length, SOCK_CLOEXEC)) ==
OFInvalidSocketHandle)
@throw [OFAcceptFailedException
exceptionWithSocket: self
errNo: OFSocketErrNo()];
#else
if ((client->_socket = accept(_socket,
(struct sockaddr *)&client->_remoteAddress.sockaddr,
&client->_remoteAddress.length)) == OFInvalidSocketHandle)
@throw [OFAcceptFailedException
exceptionWithSocket: self
errNo: OFSocketErrNo()];
# if defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
if ((flags = fcntl(client->_socket, F_GETFD, 0)) != -1)
fcntl(client->_socket, F_SETFD, flags | FD_CLOEXEC);
# endif
|
|
|
|
|
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
|
(socklen_t)sizeof(client->_remoteAddress.sockaddr);
#if defined(HAVE_PACCEPT) && defined(SOCK_CLOEXEC)
if ((client->_socket = paccept(_socket,
(struct sockaddr *)&client->_remoteAddress.sockaddr,
&client->_remoteAddress.length, NULL, SOCK_CLOEXEC)) ==
OFInvalidSocketHandle)
@throw [OFAcceptSocketFailedException
exceptionWithSocket: self
errNo: OFSocketErrNo()];
#elif defined(HAVE_ACCEPT4) && defined(SOCK_CLOEXEC)
if ((client->_socket = accept4(_socket,
(struct sockaddr * )&client->_remoteAddress.sockaddr,
&client->_remoteAddress.length, SOCK_CLOEXEC)) ==
OFInvalidSocketHandle)
@throw [OFAcceptSocketFailedException
exceptionWithSocket: self
errNo: OFSocketErrNo()];
#else
if ((client->_socket = accept(_socket,
(struct sockaddr *)&client->_remoteAddress.sockaddr,
&client->_remoteAddress.length)) == OFInvalidSocketHandle)
@throw [OFAcceptSocketFailedException
exceptionWithSocket: self
errNo: OFSocketErrNo()];
# if defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
if ((flags = fcntl(client->_socket, F_GETFD, 0)) != -1)
fcntl(client->_socket, F_SETFD, flags | FD_CLOEXEC);
# endif
|
︙ | | | ︙ | |
Modified src/OFTCPSocket.h
from [13742bc171]
to [522e53453c].
︙ | | | ︙ | |
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
+ (uint16_t)SOCKS5Port;
/**
* @brief Connects the OFTCPSocket to the specified destination.
*
* @param host The host to connect to
* @param port The port on the host to connect to
* @throw OFConnectionFailedException Connecting failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (void)connectToHost: (OFString *)host port: (uint16_t)port;
/**
* @brief Asynchronously connects the OFTCPSocket to the specified destination.
*
|
|
|
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
+ (uint16_t)SOCKS5Port;
/**
* @brief Connects the OFTCPSocket to the specified destination.
*
* @param host The host to connect to
* @param port The port on the host to connect to
* @throw OFConnectIPSocketFailedException Connecting failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (void)connectToHost: (OFString *)host port: (uint16_t)port;
/**
* @brief Asynchronously connects the OFTCPSocket to the specified destination.
*
|
︙ | | | ︙ | |
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
* @brief Binds the socket to the specified host and port.
*
* @param host The host to bind to. Use `@"0.0.0.0"` for IPv4 or `@"::"` for
* IPv6 to bind to all.
* @param port The port to bind to. If the port is 0, an unused port will be
* chosen, which can be obtained using the return value.
* @return The port the socket was bound to
* @throw OFBindFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (uint16_t)bindToHost: (OFString *)host port: (uint16_t)port;
@end
OF_ASSUME_NONNULL_END
|
|
|
210
211
212
213
214
215
216
217
218
219
220
221
222
223
|
* @brief Binds the socket to the specified host and port.
*
* @param host The host to bind to. Use `@"0.0.0.0"` for IPv4 or `@"::"` for
* IPv6 to bind to all.
* @param port The port to bind to. If the port is 0, an unused port will be
* chosen, which can be obtained using the return value.
* @return The port the socket was bound to
* @throw OFBindIPSocketFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (uint16_t)bindToHost: (OFString *)host port: (uint16_t)port;
@end
OF_ASSUME_NONNULL_END
|
Modified src/OFTCPSocket.m
from [3962a70e27]
to [e6378dfef4].
︙ | | | ︙ | |
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFString.h"
#import "OFTCPSocketSOCKS5Connector.h"
#import "OFThread.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindFailedException.h"
#import "OFGetOptionFailedException.h"
#import "OFNotImplementedException.h"
#import "OFNotOpenException.h"
#import "OFSetOptionFailedException.h"
static const OFRunLoopMode connectRunLoopMode =
@"OFTCPSocketConnectRunLoopMode";
|
|
|
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFString.h"
#import "OFTCPSocketSOCKS5Connector.h"
#import "OFThread.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindIPSocketFailedException.h"
#import "OFGetOptionFailedException.h"
#import "OFNotImplementedException.h"
#import "OFNotOpenException.h"
#import "OFSetOptionFailedException.h"
static const OFRunLoopMode connectRunLoopMode =
@"OFTCPSocketConnectRunLoopMode";
|
︙ | | | ︙ | |
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
|
address = *(OFSocketAddress *)[socketAddresses itemAtIndex: 0];
OFSocketAddressSetPort(&address, port);
if ((_socket = socket(
((struct sockaddr *)&address.sockaddr)->sa_family,
SOCK_STREAM | SOCK_CLOEXEC, 0)) == OFInvalidSocketHandle)
@throw [OFBindFailedException
exceptionWithHost: host
port: port
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
|
|
|
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
|
address = *(OFSocketAddress *)[socketAddresses itemAtIndex: 0];
OFSocketAddressSetPort(&address, port);
if ((_socket = socket(
((struct sockaddr *)&address.sockaddr)->sa_family,
SOCK_STREAM | SOCK_CLOEXEC, 0)) == OFInvalidSocketHandle)
@throw [OFBindIPSocketFailedException
exceptionWithHost: host
port: port
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
|
︙ | | | ︙ | |
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
|
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithHost: host
port: port
socket: self
errNo: errNo];
}
#if defined(OF_HPUX) || defined(OF_WII) || defined(OF_NINTENDO_3DS)
} else {
for (;;) {
uint16_t rnd = 0;
int ret;
|
>
|
|
|
|
|
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
|
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPSocketFailedException
exceptionWithHost: host
port: port
socket: self
errNo: errNo];
}
#if defined(OF_HPUX) || defined(OF_WII) || defined(OF_NINTENDO_3DS)
} else {
for (;;) {
uint16_t rnd = 0;
int ret;
|
︙ | | | ︙ | |
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
|
if (OFSocketErrNo() != EADDRINUSE) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException
exceptionWithHost: host
port: port
socket: self
errNo: errNo];
}
}
}
|
|
|
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
|
if (OFSocketErrNo() != EADDRINUSE) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPSocketFailedException
exceptionWithHost: host
port: port
socket: self
errNo: errNo];
}
}
}
|
︙ | | | ︙ | |
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
|
if (OFGetSockName(_socket, (struct sockaddr *)&address.sockaddr,
&address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithHost: host
port: port
socket: self
errNo: errNo];
}
switch (((struct sockaddr *)&address.sockaddr)->sa_family) {
case AF_INET:
return OFFromBigEndian16(address.sockaddr.in.sin_port);
# ifdef OF_HAVE_IPV6
case AF_INET6:
return OFFromBigEndian16(address.sockaddr.in6.sin6_port);
# endif
default:
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithHost: host
port: port
socket: self
errNo: EAFNOSUPPORT];
}
#else
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithHost: host
port: port
socket: self
errNo: EADDRNOTAVAIL];
#endif
}
#if !defined(OF_WII) && !defined(OF_NINTENDO_3DS)
- (void)setSendsKeepAlives: (bool)sendsKeepAlives
{
int v = sendsKeepAlives;
|
|
|
|
|
>
|
|
|
|
|
|
|
|
|
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
|
if (OFGetSockName(_socket, (struct sockaddr *)&address.sockaddr,
&address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPSocketFailedException exceptionWithHost: host
port: port
socket: self
errNo: errNo];
}
switch (((struct sockaddr *)&address.sockaddr)->sa_family) {
case AF_INET:
return OFFromBigEndian16(address.sockaddr.in.sin_port);
# ifdef OF_HAVE_IPV6
case AF_INET6:
return OFFromBigEndian16(address.sockaddr.in6.sin6_port);
# endif
default:
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPSocketFailedException
exceptionWithHost: host
port: port
socket: self
errNo: EAFNOSUPPORT];
}
#else
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPSocketFailedException exceptionWithHost: host
port: port
socket: self
errNo: EADDRNOTAVAIL];
#endif
}
#if !defined(OF_WII) && !defined(OF_NINTENDO_3DS)
- (void)setSendsKeepAlives: (bool)sendsKeepAlives
{
int v = sendsKeepAlives;
|
︙ | | | ︙ | |
Modified src/OFTCPSocketSOCKS5Connector.m
from [5abece8458]
to [f6cfb53e62].
︙ | | | ︙ | |
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <errno.h>
#import "OFTCPSocketSOCKS5Connector.h"
#import "OFData.h"
#import "OFRunLoop.h"
#import "OFString.h"
#import "OFConnectionFailedException.h"
enum {
stateSendAuthentication = 1,
stateReadVersion,
stateSendRequest,
stateReadResponse,
stateReadAddress,
|
|
|
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
|
#include <errno.h>
#import "OFTCPSocketSOCKS5Connector.h"
#import "OFData.h"
#import "OFRunLoop.h"
#import "OFString.h"
#import "OFConnectIPSocketFailedException.h"
enum {
stateSendAuthentication = 1,
stateReadVersion,
stateSendRequest,
stateReadResponse,
stateReadAddress,
|
︙ | | | ︙ | |
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
runLoopMode = [OFRunLoop currentRunLoop].currentMode;
switch (_SOCKS5State) {
case stateReadVersion:
SOCKSVersion = buffer;
if (SOCKSVersion[0] != 5 || SOCKSVersion[1] != 0) {
_exception = [[OFConnectionFailedException alloc]
initWithHost: _host
port: _port
socket: self
errNo: EPROTONOSUPPORT];
[self didConnect];
return false;
}
|
|
|
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
|
runLoopMode = [OFRunLoop currentRunLoop].currentMode;
switch (_SOCKS5State) {
case stateReadVersion:
SOCKSVersion = buffer;
if (SOCKSVersion[0] != 5 || SOCKSVersion[1] != 0) {
_exception = [[OFConnectIPSocketFailedException alloc]
initWithHost: _host
port: _port
socket: self
errNo: EPROTONOSUPPORT];
[self didConnect];
return false;
}
|
︙ | | | ︙ | |
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
_SOCKS5State = stateSendRequest;
[_socket asyncWriteData: _request runLoopMode: runLoopMode];
return false;
case stateReadResponse:
response = buffer;
if (response[0] != 5 || response[2] != 0) {
_exception = [[OFConnectionFailedException alloc]
initWithHost: _host
port: _port
socket: self
errNo: EPROTONOSUPPORT];
[self didConnect];
return false;
}
|
|
|
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
|
_SOCKS5State = stateSendRequest;
[_socket asyncWriteData: _request runLoopMode: runLoopMode];
return false;
case stateReadResponse:
response = buffer;
if (response[0] != 5 || response[2] != 0) {
_exception = [[OFConnectIPSocketFailedException alloc]
initWithHost: _host
port: _port
socket: self
errNo: EPROTONOSUPPORT];
[self didConnect];
return false;
}
|
︙ | | | ︙ | |
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
|
errNo = EPROTO;
#else
errNo = 0;
#endif
break;
}
_exception = [[OFConnectionFailedException alloc]
initWithHost: _host
port: _port
socket: _socket
errNo: errNo];
[self didConnect];
return false;
}
|
|
|
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
|
errNo = EPROTO;
#else
errNo = 0;
#endif
break;
}
_exception = [[OFConnectIPSocketFailedException alloc]
initWithHost: _host
port: _port
socket: _socket
errNo: errNo];
[self didConnect];
return false;
}
|
︙ | | | ︙ | |
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
|
case 4: /* IPv6 */
_SOCKS5State = stateReadAddress;
[_socket asyncReadIntoBuffer: _buffer
exactLength: 16 + 2
runLoopMode: runLoopMode];
return false;
default:
_exception = [[OFConnectionFailedException alloc]
initWithHost: _host
port: _port
socket: self
errNo: EPROTONOSUPPORT];
[self didConnect];
return false;
}
|
|
|
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
|
case 4: /* IPv6 */
_SOCKS5State = stateReadAddress;
[_socket asyncReadIntoBuffer: _buffer
exactLength: 16 + 2
runLoopMode: runLoopMode];
return false;
default:
_exception = [[OFConnectIPSocketFailedException alloc]
initWithHost: _host
port: _port
socket: self
errNo: EPROTONOSUPPORT];
[self didConnect];
return false;
}
|
︙ | | | ︙ | |
Modified src/OFUDPSocket.h
from [e94e3865e1]
to [c4641067b3].
︙ | | | ︙ | |
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
* @brief Binds the socket to the specified host and port.
*
* @param host The host to bind to. Use `@"0.0.0.0"` for IPv4 or `@"::"` for
* IPv6 to bind to all.
* @param port The port to bind to. If the port is 0, an unused port will be
* chosen, which can be obtained using the return value.
* @return The port the socket was bound to
* @throw OFBindFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already bound
*/
- (uint16_t)bindToHost: (OFString *)host port: (uint16_t)port;
@end
OF_ASSUME_NONNULL_END
|
|
|
68
69
70
71
72
73
74
75
76
77
78
79
80
81
|
* @brief Binds the socket to the specified host and port.
*
* @param host The host to bind to. Use `@"0.0.0.0"` for IPv4 or `@"::"` for
* IPv6 to bind to all.
* @param port The port to bind to. If the port is 0, an unused port will be
* chosen, which can be obtained using the return value.
* @return The port the socket was bound to
* @throw OFBindIPSocketFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already bound
*/
- (uint16_t)bindToHost: (OFString *)host port: (uint16_t)port;
@end
OF_ASSUME_NONNULL_END
|
Modified src/OFUDPSocket.m
from [61fa5cfa02]
to [fd8f9dff29].
︙ | | | ︙ | |
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
|
#import "OFDNSResolver.h"
#import "OFData.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFThread.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindFailedException.h"
@implementation OFUDPSocket
@dynamic delegate;
- (uint16_t)of_bindToAddress: (OFSocketAddress *)address
extraType: (int)extraType OF_DIRECT
{
void *pool = objc_autoreleasePoolPush();
uint16_t port;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
int flags;
#endif
if ((_socket = socket(
((struct sockaddr *)&address->sockaddr)->sa_family,
SOCK_DGRAM | SOCK_CLOEXEC | extraType, 0)) == OFInvalidSocketHandle)
@throw [OFBindFailedException
exceptionWithHost: OFSocketAddressString(address)
port: OFSocketAddressPort(address)
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
|
|
|
|
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
|
#import "OFDNSResolver.h"
#import "OFData.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFThread.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindIPSocketFailedException.h"
@implementation OFUDPSocket
@dynamic delegate;
- (uint16_t)of_bindToAddress: (OFSocketAddress *)address
extraType: (int)extraType OF_DIRECT
{
void *pool = objc_autoreleasePoolPush();
uint16_t port;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
int flags;
#endif
if ((_socket = socket(
((struct sockaddr *)&address->sockaddr)->sa_family,
SOCK_DGRAM | SOCK_CLOEXEC | extraType, 0)) == OFInvalidSocketHandle)
@throw [OFBindIPSocketFailedException
exceptionWithHost: OFSocketAddressString(address)
port: OFSocketAddressPort(address)
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
|
︙ | | | ︙ | |
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
if (bind(_socket, (struct sockaddr *)&address->sockaddr,
address->length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException
exceptionWithHost: OFSocketAddressString(address)
port: OFSocketAddressPort(address)
socket: self
errNo: errNo];
}
#if defined(OF_HPUX) || defined(OF_WII) || defined(OF_NINTENDO_3DS)
} else {
|
|
|
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
|
if (bind(_socket, (struct sockaddr *)&address->sockaddr,
address->length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPSocketFailedException
exceptionWithHost: OFSocketAddressString(address)
port: OFSocketAddressPort(address)
socket: self
errNo: errNo];
}
#if defined(OF_HPUX) || defined(OF_WII) || defined(OF_NINTENDO_3DS)
} else {
|
︙ | | | ︙ | |
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
int errNo = OFSocketErrNo();
OFString *host = OFSocketAddressString(address);
port = OFSocketAddressPort(address);
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException
exceptionWithHost: host
port: port
socket: self
errNo: errNo];
}
}
}
|
|
|
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
|
int errNo = OFSocketErrNo();
OFString *host = OFSocketAddressString(address);
port = OFSocketAddressPort(address);
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPSocketFailedException
exceptionWithHost: host
port: port
socket: self
errNo: errNo];
}
}
}
|
︙ | | | ︙ | |
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
|
if (OFGetSockName(_socket, (struct sockaddr *)&address->sockaddr,
&address->length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException
exceptionWithHost: OFSocketAddressString(address)
port: OFSocketAddressPort(address)
socket: self
errNo: errNo];
}
switch (((struct sockaddr *)&address->sockaddr)->sa_family) {
case AF_INET:
return OFFromBigEndian16(address->sockaddr.in.sin_port);
# ifdef OF_HAVE_IPV6
case AF_INET6:
return OFFromBigEndian16(address->sockaddr.in6.sin6_port);
# endif
default:
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException
exceptionWithHost: OFSocketAddressString(address)
port: OFSocketAddressPort(address)
socket: self
errNo: EAFNOSUPPORT];
}
#else
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException
exceptionWithHost: OFSocketAddressString(address)
port: OFSocketAddressPort(address)
socket: self
errNo: EADDRNOTAVAIL];
#endif
}
|
|
|
|
|
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
|
if (OFGetSockName(_socket, (struct sockaddr *)&address->sockaddr,
&address->length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPSocketFailedException
exceptionWithHost: OFSocketAddressString(address)
port: OFSocketAddressPort(address)
socket: self
errNo: errNo];
}
switch (((struct sockaddr *)&address->sockaddr)->sa_family) {
case AF_INET:
return OFFromBigEndian16(address->sockaddr.in.sin_port);
# ifdef OF_HAVE_IPV6
case AF_INET6:
return OFFromBigEndian16(address->sockaddr.in6.sin6_port);
# endif
default:
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPSocketFailedException
exceptionWithHost: OFSocketAddressString(address)
port: OFSocketAddressPort(address)
socket: self
errNo: EAFNOSUPPORT];
}
#else
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindIPSocketFailedException
exceptionWithHost: OFSocketAddressString(address)
port: OFSocketAddressPort(address)
socket: self
errNo: EADDRNOTAVAIL];
#endif
}
|
︙ | | | ︙ | |
Modified src/OFUNIXDatagramSocket.h
from [342ce1dbb2]
to [0a3ec7f2ad].
︙ | | | ︙ | |
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
id <OFUNIXDatagramSocketDelegate> delegate;
/**
* @brief Bind the socket to the specified path.
*
* @param path The path to bind to
* @return The address on which this socket can be reached
* @throw OFBindFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already bound
*/
- (OFSocketAddress)bindToPath: (OFString *)path;
@end
OF_ASSUME_NONNULL_END
|
|
|
61
62
63
64
65
66
67
68
69
70
71
72
73
74
|
id <OFUNIXDatagramSocketDelegate> delegate;
/**
* @brief Bind the socket to the specified path.
*
* @param path The path to bind to
* @return The address on which this socket can be reached
* @throw OFBindUNIXSocketFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already bound
*/
- (OFSocketAddress)bindToPath: (OFString *)path;
@end
OF_ASSUME_NONNULL_END
|
Modified src/OFUNIXDatagramSocket.m
from [2b20715dbe]
to [7203060d9a].
︙ | | | ︙ | |
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
|
#import "OFUNIXDatagramSocket.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFString.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindFailedException.h"
@implementation OFUNIXDatagramSocket
@dynamic delegate;
- (OFSocketAddress)bindToPath: (OFString *)path
{
OFSocketAddress address;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeUNIX(path);
if ((_socket = socket(address.sockaddr.un.sun_family,
SOCK_DGRAM | SOCK_CLOEXEC, 0)) == OFInvalidSocketHandle)
@throw [OFBindFailedException
exceptionWithPath: path
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPath: path
socket: self
errNo: errNo];
}
return address;
}
@end
|
|
|
>
|
|
|
|
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
|
#import "OFUNIXDatagramSocket.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFString.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindUNIXSocketFailedException.h"
@implementation OFUNIXDatagramSocket
@dynamic delegate;
- (OFSocketAddress)bindToPath: (OFString *)path
{
OFSocketAddress address;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeUNIX(path);
if ((_socket = socket(address.sockaddr.un.sun_family,
SOCK_DGRAM | SOCK_CLOEXEC, 0)) == OFInvalidSocketHandle)
@throw [OFBindUNIXSocketFailedException
exceptionWithPath: path
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL_H) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindUNIXSocketFailedException
exceptionWithPath: path
socket: self
errNo: errNo];
}
return address;
}
@end
|
Modified src/OFUNIXStreamSocket.h
from [8a5717e58d]
to [3d105f3c9b].
︙ | | | ︙ | |
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
@property OF_NULLABLE_PROPERTY (assign, nonatomic)
id <OFUNIXStreamSocketDelegate> delegate;
/**
* @brief Connects the OFUNIXStreamSocket to the specified destination.
*
* @param path The path to connect to
* @throw OFConnectionFailedException Connecting failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (void)connectToPath: (OFString *)path;
/**
* @brief Binds the socket to the specified host and port.
*
* @param path The path to bind to
* @throw OFBindFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (void)bindToPath: (OFString *)path;
@end
OF_ASSUME_NONNULL_END
|
|
|
|
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
@property OF_NULLABLE_PROPERTY (assign, nonatomic)
id <OFUNIXStreamSocketDelegate> delegate;
/**
* @brief Connects the OFUNIXStreamSocket to the specified destination.
*
* @param path The path to connect to
* @throw OFConnectUNIXSocketFailedException Connecting failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (void)connectToPath: (OFString *)path;
/**
* @brief Binds the socket to the specified host and port.
*
* @param path The path to bind to
* @throw OFBindUNIXSocketFailedException Binding failed
* @throw OFAlreadyConnectedException The socket is already connected or bound
*/
- (void)bindToPath: (OFString *)path;
@end
OF_ASSUME_NONNULL_END
|
Modified src/OFUNIXStreamSocket.m
from [70b73d6c70]
to [ff26304fa1].
︙ | | | ︙ | |
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
|
#import "OFUNIXStreamSocket.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFString.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindFailedException.h"
#import "OFConnectionFailedException.h"
@implementation OFUNIXStreamSocket
@dynamic delegate;
- (void)connectToPath: (OFString *)path
{
OFSocketAddress address;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeUNIX(path);
if ((_socket = socket(address.sockaddr.un.sun_family,
SOCK_STREAM | SOCK_CLOEXEC, 0)) == OFInvalidSocketHandle)
@throw [OFConnectionFailedException
exceptionWithPath: path
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (connect(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFConnectionFailedException exceptionWithPath: path
socket: self
errNo: errNo];
}
}
- (void)bindToPath: (OFString *)path
{
OFSocketAddress address;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeUNIX(path);
if ((_socket = socket(address.sockaddr.un.sun_family,
SOCK_STREAM | SOCK_CLOEXEC, 0)) == OFInvalidSocketHandle)
@throw [OFBindFailedException
exceptionWithPath: path
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindFailedException exceptionWithPath: path
socket: self
errNo: errNo];
}
}
@end
|
|
|
|
>
|
|
|
|
>
|
|
|
|
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
|
#import "OFUNIXStreamSocket.h"
#import "OFSocket.h"
#import "OFSocket+Private.h"
#import "OFString.h"
#import "OFAlreadyConnectedException.h"
#import "OFBindUNIXSocketFailedException.h"
#import "OFConnectUNIXSocketFailedException.h"
@implementation OFUNIXStreamSocket
@dynamic delegate;
- (void)connectToPath: (OFString *)path
{
OFSocketAddress address;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeUNIX(path);
if ((_socket = socket(address.sockaddr.un.sun_family,
SOCK_STREAM | SOCK_CLOEXEC, 0)) == OFInvalidSocketHandle)
@throw [OFConnectUNIXSocketFailedException
exceptionWithPath: path
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (connect(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFConnectUNIXSocketFailedException
exceptionWithPath: path
socket: self
errNo: errNo];
}
}
- (void)bindToPath: (OFString *)path
{
OFSocketAddress address;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
int flags;
#endif
if (_socket != OFInvalidSocketHandle)
@throw [OFAlreadyConnectedException exceptionWithSocket: self];
address = OFSocketAddressMakeUNIX(path);
if ((_socket = socket(address.sockaddr.un.sun_family,
SOCK_STREAM | SOCK_CLOEXEC, 0)) == OFInvalidSocketHandle)
@throw [OFBindUNIXSocketFailedException
exceptionWithPath: path
socket: self
errNo: OFSocketErrNo()];
_canBlock = true;
#if SOCK_CLOEXEC == 0 && defined(HAVE_FCNTL) && defined(FD_CLOEXEC)
if ((flags = fcntl(_socket, F_GETFD, 0)) != -1)
fcntl(_socket, F_SETFD, flags | FD_CLOEXEC);
#endif
if (bind(_socket, (struct sockaddr *)&address.sockaddr,
address.length) != 0) {
int errNo = OFSocketErrNo();
closesocket(_socket);
_socket = OFInvalidSocketHandle;
@throw [OFBindUNIXSocketFailedException
exceptionWithPath: path
socket: self
errNo: errNo];
}
}
@end
|
Modified src/ObjFW.h
from [870006c5ed]
to [7f42df2531].
︙ | | | ︙ | |
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
|
#ifdef OF_WINDOWS
# import "OFWindowsRegistryKey.h"
#endif
#import "OFAllocFailedException.h"
#import "OFException.h"
#ifdef OF_HAVE_SOCKETS
# import "OFAcceptFailedException.h"
# import "OFAlreadyConnectedException.h"
# import "OFBindFailedException.h"
#endif
#import "OFChangeCurrentDirectoryFailedException.h"
#import "OFChecksumMismatchException.h"
#ifdef OF_HAVE_THREADS
# import "OFConditionBroadcastFailedException.h"
# import "OFConditionSignalFailedException.h"
# import "OFConditionStillWaitingException.h"
# import "OFConditionWaitFailedException.h"
#endif
#ifdef OF_HAVE_SOCKETS
# import "OFConnectionFailedException.h"
#endif
#import "OFCopyItemFailedException.h"
#import "OFCreateDirectoryFailedException.h"
#import "OFCreateSymbolicLinkFailedException.h"
#ifdef OF_WINDOWS
# import "OFCreateWindowsRegistryKeyFailedException.h"
#endif
|
|
|
>
>
>
>
>
>
>
>
>
>
|
>
>
>
>
>
>
>
|
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
|
#ifdef OF_WINDOWS
# import "OFWindowsRegistryKey.h"
#endif
#import "OFAllocFailedException.h"
#import "OFException.h"
#ifdef OF_HAVE_SOCKETS
# import "OFAcceptSocketFailedException.h"
# import "OFAlreadyConnectedException.h"
# import "OFBindSocketFailedException.h"
# import "OFBindIPSocketFailedException.h"
# ifdef OF_HAVE_UNIX_SOCKETS
# import "OFBindUNIXSocketFailedException.h"
# endif
# ifdef OF_HAVE_IPX
# import "OFBindIPXSocketFailedException.h"
# endif
# ifdef OF_HAVE_APPLETALK
# import "OFBindDDPSocketFailedException.h"
# endif
#endif
#import "OFChangeCurrentDirectoryFailedException.h"
#import "OFChecksumMismatchException.h"
#ifdef OF_HAVE_THREADS
# import "OFConditionBroadcastFailedException.h"
# import "OFConditionSignalFailedException.h"
# import "OFConditionStillWaitingException.h"
# import "OFConditionWaitFailedException.h"
#endif
#ifdef OF_HAVE_SOCKETS
# import "OFConnectSocketFailedException.h"
# import "OFConnectIPSocketFailedException.h"
# ifdef OF_HAVE_UNIX_SOCKETS
# import "OFConnectUNIXSocketFailedException.h"
# endif
# ifdef OF_HAVE_IPX
# import "OFConnectSPXSocketFailedException.h"
# endif
#endif
#import "OFCopyItemFailedException.h"
#import "OFCreateDirectoryFailedException.h"
#import "OFCreateSymbolicLinkFailedException.h"
#ifdef OF_WINDOWS
# import "OFCreateWindowsRegistryKeyFailedException.h"
#endif
|
︙ | | | ︙ | |
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
|
#import "OFInvalidArgumentException.h"
#import "OFInvalidEncodingException.h"
#import "OFInvalidFormatException.h"
#import "OFInvalidJSONException.h"
#import "OFInvalidServerResponseException.h"
#import "OFLinkItemFailedException.h"
#ifdef OF_HAVE_SOCKETS
# import "OFListenFailedException.h"
#endif
#ifdef OF_HAVE_PLUGINS
# import "OFLoadPluginFailedException.h"
#endif
#import "OFLockFailedException.h"
#import "OFMalformedXMLException.h"
#import "OFMoveItemFailedException.h"
|
|
|
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
|
#import "OFInvalidArgumentException.h"
#import "OFInvalidEncodingException.h"
#import "OFInvalidFormatException.h"
#import "OFInvalidJSONException.h"
#import "OFInvalidServerResponseException.h"
#import "OFLinkItemFailedException.h"
#ifdef OF_HAVE_SOCKETS
# import "OFListenOnSocketFailedException.h"
#endif
#ifdef OF_HAVE_PLUGINS
# import "OFLoadPluginFailedException.h"
#endif
#import "OFLockFailedException.h"
#import "OFMalformedXMLException.h"
#import "OFMoveItemFailedException.h"
|
︙ | | | ︙ | |
Modified src/exceptions/Makefile
from [a8a6570db6]
to [63402987f2].
︙ | | | ︙ | |
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
|
${USE_SRCS_PLUGINS} \
${USE_SRCS_SOCKETS} \
${USE_SRCS_THREADS} \
${USE_SRCS_WINDOWS}
SRCS_FILES = OFChangeCurrentDirectoryFailedException.m \
OFGetCurrentDirectoryFailedException.m
SRCS_PLUGINS = OFLoadPluginFailedException.m
SRCS_SOCKETS = OFAcceptFailedException.m \
OFAlreadyConnectedException.m \
OFBindFailedException.m \
OFConnectionFailedException.m \
OFDNSQueryFailedException.m \
OFHTTPRequestFailedException.m \
OFListenFailedException.m \
OFObserveKernelEventsFailedException.m \
OFResolveHostFailedException.m \
OFTLSHandshakeFailedException.m
SRCS_THREADS = OFConditionBroadcastFailedException.m \
OFConditionSignalFailedException.m \
OFConditionStillWaitingException.m \
OFConditionWaitFailedException.m \
OFThreadJoinFailedException.m \
OFThreadStartFailedException.m \
OFThreadStillRunningException.m
|
|
|
|
>
>
|
|
>
>
>
>
>
>
>
>
|
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
|
${USE_SRCS_PLUGINS} \
${USE_SRCS_SOCKETS} \
${USE_SRCS_THREADS} \
${USE_SRCS_WINDOWS}
SRCS_FILES = OFChangeCurrentDirectoryFailedException.m \
OFGetCurrentDirectoryFailedException.m
SRCS_PLUGINS = OFLoadPluginFailedException.m
SRCS_SOCKETS = OFAcceptSocketFailedException.m \
OFAlreadyConnectedException.m \
OFBindIPSocketFailedException.m \
OFBindSocketFailedException.m \
OFConnectIPSocketFailedException.m \
OFConnectSocketFailedException.m \
OFDNSQueryFailedException.m \
OFHTTPRequestFailedException.m \
OFListenOnSocketFailedException.m \
OFObserveKernelEventsFailedException.m \
OFResolveHostFailedException.m \
OFTLSHandshakeFailedException.m \
${USE_SRCS_APPLETALK} \
${USE_SRCS_IPX} \
${USE_SRCS_UNIX_SOCKETS}
SRCS_APPLETALK = OFBindDDPSocketFailedException.m
SRCS_IPX = OFBindIPXSocketFailedException.m \
OFConnectSPXSocketFailedException.m
SRCS_UNIX_SOCKETS = OFBindUNIXSocketFailedException.m \
OFConnectUNIXSocketFailedException.m
SRCS_THREADS = OFConditionBroadcastFailedException.m \
OFConditionSignalFailedException.m \
OFConditionStillWaitingException.m \
OFConditionWaitFailedException.m \
OFThreadJoinFailedException.m \
OFThreadStartFailedException.m \
OFThreadStillRunningException.m
|
︙ | | | ︙ | |
Renamed and modified
src/exceptions/OFAcceptFailedException.h
[af9482eaa0]
to src/exceptions/OFAcceptSocketFailedException.h
[e062558833].
︙ | | | ︙ | |
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#ifndef OF_HAVE_SOCKETS
# error No sockets available!
#endif
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFAcceptFailedException \
* OFAcceptFailedException.h ObjFW/OFAcceptFailedException.h
*
* @brief An exception indicating that accepting a connection failed.
*/
@interface OFAcceptFailedException: OFException
{
id _socket;
int _errNo;
OF_RESERVE_IVARS(OFAcceptFailedException, 4)
}
/**
* @brief The socket which could not accept a connection.
*/
@property (readonly, nonatomic) id socket;
|
|
|
|
|
|
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#ifndef OF_HAVE_SOCKETS
# error No sockets available!
#endif
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFAcceptSocketFailedException \
* OFAcceptSocketFailedException.h ObjFW/OFAcceptSocketFailedException.h
*
* @brief An exception indicating that accepting a connection failed.
*/
@interface OFAcceptSocketFailedException: OFException
{
id _socket;
int _errNo;
OF_RESERVE_IVARS(OFAcceptSocketFailedException, 4)
}
/**
* @brief The socket which could not accept a connection.
*/
@property (readonly, nonatomic) id socket;
|
︙ | | | ︙ | |
Renamed and modified
src/exceptions/OFAcceptFailedException.m
[8a127340d9]
to src/exceptions/OFAcceptSocketFailedException.m
[701680e6d7].
︙ | | | ︙ | |
11
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
47
48
49
50
|
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFAcceptFailedException.h"
#import "OFString.h"
@implementation OFAcceptFailedException
@synthesize socket = _socket, errNo = _errNo;
+ (instancetype)exception
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithSocket: (id)socket errNo: (int)errNo
{
return [[[self alloc] initWithSocket: socket errNo: errNo] autorelease];
}
- (instancetype)init
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithSocket: (id)socket errNo: (int)errNo
{
self = [super init];
_socket = [socket retain];
_errNo = errNo;
return self;
}
- (void)dealloc
{
|
|
|
|
|
|
|
|
11
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
47
48
49
50
|
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFAcceptSocketFailedException.h"
#import "OFString.h"
@implementation OFAcceptSocketFailedException
@synthesize socket = _socket, errNo = _errNo;
+ (instancetype)exception
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithSocket: (id)sock errNo: (int)errNo
{
return [[[self alloc] initWithSocket: sock errNo: errNo] autorelease];
}
- (instancetype)init
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithSocket: (id)sock errNo: (int)errNo
{
self = [super init];
_socket = [sock retain];
_errNo = errNo;
return self;
}
- (void)dealloc
{
|
︙ | | | ︙ | |
Modified src/exceptions/OFAlreadyConnectedException.m
from [055eee0622]
to [9abd285501].
︙ | | | ︙ | |
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
|
#import "OFAlreadyConnectedException.h"
#import "OFString.h"
@implementation OFAlreadyConnectedException
@synthesize socket = _socket;
+ (instancetype)exceptionWithSocket: (id)socket
{
return [[[self alloc] initWithSocket: socket] autorelease];
}
- (instancetype)init
{
return [self initWithSocket: nil];
}
- (instancetype)initWithSocket: (id)socket
{
self = [super init];
_socket = [socket retain];
return self;
}
- (void)dealloc
{
[_socket release];
|
|
|
|
|
|
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
|
#import "OFAlreadyConnectedException.h"
#import "OFString.h"
@implementation OFAlreadyConnectedException
@synthesize socket = _socket;
+ (instancetype)exceptionWithSocket: (id)sock
{
return [[[self alloc] initWithSocket: sock] autorelease];
}
- (instancetype)init
{
return [self initWithSocket: nil];
}
- (instancetype)initWithSocket: (id)sock
{
self = [super init];
_socket = [sock retain];
return self;
}
- (void)dealloc
{
[_socket release];
|
︙ | | | ︙ | |
Added src/exceptions/OFBindDDPSocketFailedException.h version [7d1260c80c].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#import "OFBindSocketFailedException.h"
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFBindDDPSocketFailedException \
* OFBindDDPSocketFailedException.h \
* ObjFW/OFBindDDPSocketFailedException.h
*
* @brief An exception indicating that binding a DDP socket failed.
*/
OF_SUBCLASSING_RESTRICTED
@interface OFBindDDPSocketFailedException: OFBindSocketFailedException
{
uint8_t _port;
}
/**
* @brief The DDP port on which binding failed.
*/
@property (readonly, nonatomic) uint8_t port;
/**
* @brief Creates a new, autoreleased bind DDP socket failed exception.
*
* @param port The DDP port to which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return A new, autoreleased bind DDP socket failed exception
*/
+ (instancetype)exceptionWithPort: (uint8_t)port
socket: (id)socket
errNo: (int)errNo;
+ (instancetype)exceptionWithSocket: (id)socket
errNo: (int)errNo OF_UNAVAILABLE;
/**
* @brief Initializes an already allocated bind DDP socket failed exception.
*
* @param port The DDP port to which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return An initialized bind DDP socket failed exception
*/
- (instancetype)initWithPort: (uint8_t)port
socket: (id)socket
errNo: (int)errNo OF_DESIGNATED_INITIALIZER;
- (instancetype)initWithSocket: (id)socket errNo: (int)errNo OF_UNAVAILABLE;
@end
OF_ASSUME_NONNULL_END
|
Added src/exceptions/OFBindDDPSocketFailedException.m version [cebffb005f].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFBindDDPSocketFailedException.h"
#import "OFData.h"
#import "OFString.h"
@implementation OFBindDDPSocketFailedException
@synthesize port = _port;
+ (instancetype)exceptionWithSocket: (id)sock errNo: (int)errNo
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithPort: (uint8_t)port
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithPort: port
socket: sock
errNo: errNo] autorelease];
}
- (instancetype)initWithSocket: (id)sock errNo: (int)errNo
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithPort: (uint8_t)port
socket: (id)sock
errNo: (int)errNo
{
self = [super initWithSocket: sock errNo: errNo];
@try {
_port = port;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (OFString *)description
{
return [OFString stringWithFormat:
@"Binding to port %" @PRIx8 @" failed in socket of type %@: %@",
_port, [_socket class], OFStrError(_errNo)];
}
@end
|
Added src/exceptions/OFBindIPSocketFailedException.h version [5e1e83771b].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
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
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#import "OFBindSocketFailedException.h"
#ifndef OF_HAVE_SOCKETS
# error No sockets available!
#endif
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFBindIPSocketFailedException \
* OFBindIPSocketFailedException.h ObjFW/OFBindIPSocketFailedException.h
*
* @brief An exception indicating that binding an IP socket failed.
*/
OF_SUBCLASSING_RESTRICTED
@interface OFBindIPSocketFailedException: OFBindSocketFailedException
{
OFString *_Nullable _host;
uint16_t _port;
}
/**
* @brief The host on which binding failed.
*/
@property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFString *host;
/**
* @brief The port on which binding failed.
*/
@property (readonly, nonatomic) uint16_t port;
/**
* @brief Creates a new, autoreleased bind IP socket failed exception.
*
* @param host The host on which binding failed
* @param port The port on which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return A new, autoreleased bind IP socket failed exception
*/
+ (instancetype)exceptionWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)socket
errNo: (int)errNo;
+ (instancetype)exceptionWithSocket: (id)socket
errNo: (int)errNo OF_UNAVAILABLE;
/**
* @brief Initializes an already allocated bind IP socket failed exception.
*
* @param host The host on which binding failed
* @param port The port on which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return An initialized bind IP socket failed exception
*/
- (instancetype)initWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)socket
errNo: (int)errNo OF_DESIGNATED_INITIALIZER;
- (instancetype)initWithSocket: (id)socket errNo: (int)errNo OF_UNAVAILABLE;
@end
OF_ASSUME_NONNULL_END
|
Added src/exceptions/OFBindIPSocketFailedException.m version [f9eddfdc09].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
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
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFBindIPSocketFailedException.h"
#import "OFString.h"
@implementation OFBindIPSocketFailedException
@synthesize host = _host, port = _port;
+ (instancetype)exceptionWithSocket: (id)sock errNo: (int)errNo
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithHost: host
port: port
socket: sock
errNo: errNo] autorelease];
}
- (instancetype)initWithSocket: (id)sock errNo: (int)errNo
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
self = [super initWithSocket: sock errNo: errNo];
@try {
_host = [host copy];
_port = port;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)dealloc
{
[_host release];
[super dealloc];
}
- (OFString *)description
{
return [OFString stringWithFormat:
@"Binding to port %" @PRIu16 @" on host %@ failed in socket of "
@"type %@: %@",
_port, _host, [_socket class], OFStrError(_errNo)];
}
@end
|
Added src/exceptions/OFBindIPXSocketFailedException.h version [348112e28c].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
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
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#import "OFBindSocketFailedException.h"
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFBindIPXSocketFailedException \
* OFBindIPXSocketFailedException.h \
* ObjFW/OFBindIPXSocketFailedException.h
*
* @brief An exception indicating that binding an IPX socket failed.
*/
OF_SUBCLASSING_RESTRICTED
@interface OFBindIPXSocketFailedException: OFBindSocketFailedException
{
uint32_t _network;
unsigned char _node[IPX_NODE_LEN];
uint16_t _port;
uint8_t _packetType;
}
/**
* @brief The IPX network on which binding failed.
*/
@property (readonly, nonatomic) uint32_t network;
/**
* @brief The IPX port on which binding failed.
*/
@property (readonly, nonatomic) uint16_t port;
/**
* @brief The IPX packet type for which binding failed.
*/
@property (readonly, nonatomic) uint8_t packetType;
/**
* @brief Creates a new, autoreleased bind IPX socket failed exception.
*
* @param network The IPX network to which binding failed
* @param node The IPX node to which binding failed
* @param port The IPX port to which binding failed
* @param packetType The IPX packet type for which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return A new, autoreleased bind IPX socket failed exception
*/
+ (instancetype)
exceptionWithNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
packetType: (uint8_t)packetType
socket: (id)socket
errNo: (int)errNo;
+ (instancetype)exceptionWithSocket: (id)socket
errNo: (int)errNo OF_UNAVAILABLE;
/**
* @brief Initializes an already allocated bind IPX socket failed exception.
*
* @param network The IPX network to which binding failed
* @param node The IPX node to which binding failed
* @param port The IPX port to which binding failed
* @param packetType The IPX packet type for which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return An initialized bind IPX socket failed exception
*/
- (instancetype)
initWithNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
packetType: (uint8_t)packetType
socket: (id)socket
errNo: (int)errNo OF_DESIGNATED_INITIALIZER;
- (instancetype)initWithSocket: (id)socket errNo: (int)errNo OF_UNAVAILABLE;
/**
* @brief Get the IPX node for which binding failed.
*
* @param node A pointer to where to write the node to
*/
- (void)getNode: (unsigned char [_Nonnull IPX_NODE_LEN])node;
@end
OF_ASSUME_NONNULL_END
|
Added src/exceptions/OFBindIPXSocketFailedException.m version [ae7cdae06b].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
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
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#include <string.h>
#import "OFBindIPXSocketFailedException.h"
#import "OFData.h"
#import "OFString.h"
@implementation OFBindIPXSocketFailedException
@synthesize network = _network, port = _port, packetType = _packetType;
+ (instancetype)exceptionWithSocket: (id)sock errNo: (int)errNo
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)
exceptionWithNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
packetType: (uint8_t)packetType
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithNetwork: network
node: node
port: port
packetType: packetType
socket: sock
errNo: errNo] autorelease];
}
- (instancetype)initWithSocket: (id)sock errNo: (int)errNo
{
OF_INVALID_INIT_METHOD
}
- (instancetype)
initWithNetwork: (uint32_t)network
node: (const unsigned char [_Nonnull IPX_NODE_LEN])node
port: (uint16_t)port
packetType: (uint8_t)packetType
socket: (id)sock
errNo: (int)errNo
{
self = [super initWithSocket: sock errNo: errNo];
@try {
_network = network;
memcpy(_node, node, sizeof(_node));
_port = port;
_packetType = packetType;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)getNode: (unsigned char [IPX_NODE_LEN])node
{
memcpy(node, _node, sizeof(_node));
}
- (OFString *)description
{
OFData *node = [OFData dataWithItems: _node count: sizeof(_node)];
return [OFString stringWithFormat:
@"Binding to network %" @PRIx16 " on node %@ with port %" @PRIx16
@" failed for packet type %" @PRIx8 " in socket of type %@: %@",
_network, node, _port, _packetType, [_socket class],
OFStrError(_errNo)];
}
@end
|
Renamed and modified
src/exceptions/OFBindFailedException.h
[4dd56000d9]
to src/exceptions/OFBindSocketFailedException.h
[36c8977d2e].
︙ | | | ︙ | |
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
|
#endif
#import "OFSocket.h"
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFBindFailedException \
* OFBindFailedException.h ObjFW/OFBindFailedException.h
*
* @brief An exception indicating that binding a socket failed.
*/
@interface OFBindFailedException: OFException
{
/* IP */
OFString *_Nullable _host;
uint16_t _port;
/* IPX */
uint8_t _packetType;
/* UNIX socket */
OFString *_Nullable _path;
id _socket;
int _errNo;
OF_RESERVE_IVARS(OFBindFailedException, 4)
}
/**
* @brief The host on which binding failed.
*/
@property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFString *host;
/**
* @brief The port on which binding failed.
*/
@property (readonly, nonatomic) uint16_t port;
/**
* @brief The IPX packet type for which binding failed.
*/
@property (readonly, nonatomic) uint8_t packetType;
/**
* @brief The path on which binding failed.
*/
@property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFString *path;
/**
* @brief The socket which could not be bound.
*/
@property (readonly, nonatomic) id socket;
/**
* @brief The errno of the error that occurred.
*/
@property (readonly, nonatomic) int errNo;
/**
* @brief Creates a new, autoreleased bind failed exception.
*
* @param host The host on which binding failed
* @param port The port on which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return A new, autoreleased bind failed exception
*/
+ (instancetype)exceptionWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)socket
errNo: (int)errNo;
/**
* @brief Creates a new, autoreleased bind failed exception.
*
* @param path The path on which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return A new, autoreleased bind failed exception
*/
+ (instancetype)exceptionWithPath: (OFString *)path
socket: (id)socket
errNo: (int)errNo;
/**
* @brief Creates a new, autoreleased bind failed exception.
*
* @param port The port to which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return A new, autoreleased bind failed exception
*/
+ (instancetype)exceptionWithPort: (uint16_t)port
socket: (id)socket
errNo: (int)errNo;
/**
* @brief Creates a new, autoreleased bind failed exception.
*
* @param port The port to which binding failed
* @param packetType The IPX packet type for which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return A new, autoreleased bind failed exception
*/
+ (instancetype)exceptionWithPort: (uint16_t)port
packetType: (uint8_t)packetType
socket: (id)socket
errNo: (int)errNo;
+ (instancetype)exception OF_UNAVAILABLE;
/**
* @brief Initializes an already allocated bind failed exception.
*
* @param host The host on which binding failed
* @param port The port on which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return An initialized bind failed exception
*/
- (instancetype)initWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)socket
errNo: (int)errNo;
/**
* @brief Initializes an already allocated bind failed exception.
*
* @param path The path on which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return An initialized bind failed exception
*/
- (instancetype)initWithPath: (OFString *)path
socket: (id)socket
errNo: (int)errNo;
/**
* @brief Initializes an already allocated bind failed exception.
*
* @param port The port to which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return An initialized bind failed exception
*/
- (instancetype)initWithPort: (uint16_t)port
socket: (id)socket
errNo: (int)errNo;
/**
* @brief Initializes an already allocated bind failed exception.
*
* @param port The port to which binding failed
* @param packetType The IPX packet type for which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return An initialized bind failed exception
*/
- (instancetype)initWithPort: (uint16_t)port
packetType: (uint8_t)packetType
socket: (id)socket
errNo: (int)errNo;
- (instancetype)init OF_UNAVAILABLE;
@end
OF_ASSUME_NONNULL_END
|
|
|
|
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
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
|
#endif
#import "OFSocket.h"
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFBindSocketFailedException \
* OFBindSocketFailedException.h ObjFW/OFBindSocketFailedException.h
*
* @brief An exception indicating that binding a socket failed.
*/
@interface OFBindSocketFailedException: OFException
{
id _socket;
int _errNo;
OF_RESERVE_IVARS(OFBindSocketFailedException, 4)
}
/**
* @brief The socket which could not be bound.
*/
@property (readonly, nonatomic) id socket;
/**
* @brief The errno of the error that occurred.
*/
@property (readonly, nonatomic) int errNo;
/**
* @brief Creates a new, autoreleased bind socket failed exception.
*
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return A new, autoreleased bind socket failed exception
*/
+ (instancetype)exceptionWithSocket: (id)socket errNo: (int)errNo;
+ (instancetype)exception OF_UNAVAILABLE;
/**
* @brief Initializes an already allocated bind socket failed exception.
*
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return An initialized bind socket failed exception
*/
- (instancetype)initWithSocket: (id)socket
errNo: (int)errNo OF_DESIGNATED_INITIALIZER;
- (instancetype)init OF_UNAVAILABLE;
@end
OF_ASSUME_NONNULL_END
|
Renamed and modified
src/exceptions/OFBindFailedException.m
[6913dc3c89]
to src/exceptions/OFBindSocketFailedException.m
[6491b695d4].
︙ | | | ︙ | |
11
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
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
|
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFBindFailedException.h"
#import "OFString.h"
@implementation OFBindFailedException
@synthesize host = _host, port = _port, packetType = _packetType, path = _path;
@synthesize socket = _socket, errNo = _errNo;
+ (instancetype)exception
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithHost: host
port: port
socket: sock
errNo: errNo] autorelease];
}
+ (instancetype)exceptionWithPath: (OFString *)path
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithPath: path
socket: sock
errNo: errNo] autorelease];
}
+ (instancetype)exceptionWithPort: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithPort: port
socket: sock
errNo: errNo] autorelease];
}
+ (instancetype)exceptionWithPort: (uint16_t)port
packetType: (uint8_t)packetType
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithPort: port
packetType: packetType
socket: sock
errNo: errNo] autorelease];
}
- (instancetype)init
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
self = [super init];
@try {
_host = [host copy];
_port = port;
_socket = [sock retain];
_errNo = errNo;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (instancetype)initWithPath: (OFString *)path
socket: (id)sock
errNo: (int)errNo
{
self = [super init];
@try {
_path = [path copy];
_socket = [sock retain];
_errNo = errNo;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (instancetype)initWithPort: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
return [self initWithPort: port
packetType: 0
socket: sock
errNo: errNo];
}
- (instancetype)initWithPort: (uint16_t)port
packetType: (uint8_t)packetType
socket: (id)sock
errNo: (int)errNo
{
self = [super init];
@try {
_port = port;
_packetType = packetType;
_socket = [sock retain];
_errNo = errNo;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)dealloc
{
[_host release];
[_path release];
[_socket release];
[super dealloc];
}
- (OFString *)description
{
if (_path != nil)
return [OFString stringWithFormat:
@"Binding to path %@ failed in socket of type %@: %@",
_path, [_socket class], OFStrError(_errNo)];
else if (_host != nil)
return [OFString stringWithFormat:
@"Binding to port %" @PRIu16 @" on host %@ failed in "
@"socket of type %@: %@",
_port, _host, [_socket class], OFStrError(_errNo)];
else if (_port != 0)
return [OFString stringWithFormat:
@"Binding to port %" @PRIx16 @" for packet type %" @PRIx8
@" failed in socket of type %@: %@",
_port, _packetType, [_socket class], OFStrError(_errNo)];
else
return [OFString stringWithFormat:
@"Binding to port %" @PRIx16 @" failed in socket of type "
@"%@: %@",
_port, [_socket class], OFStrError(_errNo)];
}
@end
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
|
|
11
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
|
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFBindSocketFailedException.h"
#import "OFString.h"
@implementation OFBindSocketFailedException
@synthesize socket = _socket, errNo = _errNo;
+ (instancetype)exception
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithSocket: (id)sock errNo: (int)errNo
{
return [[[self alloc] initWithSocket: sock errNo: errNo] autorelease];
}
- (instancetype)init
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithSocket: (id)sock errNo: (int)errNo
{
self = [super init];
@try {
_socket = [sock retain];
_errNo = errNo;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)dealloc
{
[_socket release];
[super dealloc];
}
- (OFString *)description
{
return [OFString stringWithFormat:
@"Binding a socket of type %@ failed: %@",
[_socket class], OFStrError(_errNo)];
}
@end
|
Added src/exceptions/OFBindUNIXSocketFailedException.h version [8dc7fd786c].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#import "OFBindSocketFailedException.h"
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFBindUNIXSocketFailedException \
* OFBindUNIXSocketFailedException.h \
* ObjFW/OFBindUNIXSocketFailedException.h
*
* @brief An exception indicating that binding a UNIX socket failed.
*/
OF_SUBCLASSING_RESTRICTED
@interface OFBindUNIXSocketFailedException: OFBindSocketFailedException
{
OFString *_Nullable _path;
}
/**
* @brief The path on which binding failed.
*/
@property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFString *path;
/**
* @brief Creates a new, autoreleased bind UNIX socket failed exception.
*
* @param path The path on which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return A new, autoreleased bind UNIX socket failed exception
*/
+ (instancetype)exceptionWithPath: (OFString *)path
socket: (id)socket
errNo: (int)errNo;
+ (instancetype)exceptionWithSocket: (id)socket
errNo: (int)errNo OF_UNAVAILABLE;
/**
* @brief Initializes an already allocated bind UNIX socket failed exception.
*
* @param path The path on which binding failed
* @param socket The socket which could not be bound
* @param errNo The errno of the error that occurred
* @return An initialized bind UNIX socket failed exception
*/
- (instancetype)initWithPath: (OFString *)path
socket: (id)socket
errNo: (int)errNo OF_DESIGNATED_INITIALIZER;
- (instancetype)initWithSocket: (id)socket errNo: (int)errNo OF_UNAVAILABLE;
@end
OF_ASSUME_NONNULL_END
|
Added src/exceptions/OFBindUNIXSocketFailedException.m version [e85a3193a3].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
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
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFBindUNIXSocketFailedException.h"
#import "OFString.h"
@implementation OFBindUNIXSocketFailedException
@synthesize path = _path;
+ (instancetype)exceptionWithSocket: (id)sock errNo: (int)errNo
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithPath: (OFString *)path
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithPath: path
socket: sock
errNo: errNo] autorelease];
}
- (instancetype)initWithSocket: (id)sock errNo: (int)errNo
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithPath: (OFString *)path
socket: (id)sock
errNo: (int)errNo
{
self = [super initWithSocket: sock errNo: errNo];
@try {
_path = [path copy];
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)dealloc
{
[_path release];
[super dealloc];
}
- (OFString *)description
{
return [OFString stringWithFormat:
@"Binding to path %@ failed in socket of type %@: %@",
_path, [_socket class], OFStrError(_errNo)];
}
@end
|
Added src/exceptions/OFConnectIPSocketFailedException.h version [f85ab38f4c].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
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
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#import "OFConnectSocketFailedException.h"
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFConnectIPSocketFailedException \
* OFConnectIPSocketFailedException.h \
* ObjFW/OFConnectIPSocketFailedException.h
*
* @brief An exception indicating that an IP connection could not be
* established.
*/
OF_SUBCLASSING_RESTRICTED
@interface OFConnectIPSocketFailedException: OFConnectSocketFailedException
{
OFString *_Nullable _host;
uint16_t _port;
}
/**
* @brief The host to which the connection failed.
*/
@property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFString *host;
/**
* @brief The port on the host to which the connection failed.
*/
@property (readonly, nonatomic) uint16_t port;
/**
* @brief Creates a new, autoreleased connect IP socket failed exception.
*
* @param host The host to which the connection failed
* @param port The port on the host to which the connection failed
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return A new, autoreleased connect IP socket failed exception
*/
+ (instancetype)exceptionWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)socket
errNo: (int)errNo;
+ (instancetype)exceptionWithSocket: (id)socket
errNo: (int)errNo OF_UNAVAILABLE;
/**
* @brief Initializes an already allocated connect IP socket failed exception.
*
* @param host The host to which the connection failed
* @param port The port on the host to which the connection failed
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return An initialized connect IP socket failed exception
*/
- (instancetype)initWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)socket
errNo: (int)errNo OF_DESIGNATED_INITIALIZER;
- (instancetype)initWithSocket: (id)socket errNo: (int)errNo OF_UNAVAILABLE;
@end
OF_ASSUME_NONNULL_END
|
Added src/exceptions/OFConnectIPSocketFailedException.m version [b9f4e412ce].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
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
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFConnectIPSocketFailedException.h"
#import "OFString.h"
@implementation OFConnectIPSocketFailedException
@synthesize host = _host, port = _port;
+ (instancetype)exceptionWithSocket: (id)sock errNo: (int)errNo
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithHost: host
port: port
socket: sock
errNo: errNo] autorelease];
}
- (instancetype)initWithSocket: (id)sock errNo: (int)errNo
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
self = [super initWithSocket: sock errNo: errNo];
@try {
_host = [host copy];
_port = port;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)dealloc
{
[_host release];
[super dealloc];
}
- (OFString *)description
{
return [OFString stringWithFormat:
@"A connection to %@ on port %" @PRIu16 @" could not be "
@"established in socket of type %@: %@",
_host, _port, [_socket class], OFStrError(_errNo)];
}
@end
|
Added src/exceptions/OFConnectSPXSocketFailedException.h version [acdfa9213b].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
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
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#import "OFConnectSocketFailedException.h"
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFConnectSPXSocketFailedException \
* OFConnectSPXSocketFailedException.h \
* ObjFW/OFConnectSocketFailedException.h
*
* @brief An exception indicating that an SPX connection could not be
* established.
*/
OF_SUBCLASSING_RESTRICTED
@interface OFConnectSPXSocketFailedException: OFConnectSocketFailedException
{
uint32_t _network;
unsigned char _node[IPX_NODE_LEN];
uint16_t _port;
}
/**
* @brief The IPX network of the node to which the connection failed.
*/
@property (readonly, nonatomic) uint32_t network;
/**
* @brief The IPX port on the host to which the connection failed.
*/
@property (readonly, nonatomic) uint16_t port;
/**
* @brief Creates a new, autoreleased connect SPX socket failed exception.
*
* @param network The IPX network of the node to which the connection failed
* @param node The node to which the connection failed
* @param port The port on the node to which the connection failed
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return A new, autoreleased connect SPX socket failed exception
*/
+ (instancetype)
exceptionWithNetwork: (uint32_t)network
node: (const unsigned char [_Nullable IPX_NODE_LEN])node
port: (uint16_t)port
socket: (id)socket
errNo: (int)errNo;
+ (instancetype)exceptionWithSocket: (id)socket
errNo: (int)errNo OF_UNAVAILABLE;
/**
* @brief Initializes an already allocated connect SPX socket failed exception.
*
* @param network The IPX network of the node to which the connection failed
* @param node The node to which the connection failed
* @param port The port on the node to which the connection failed
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return An initialized connect SPX socket failed exception
*/
- (instancetype)
initWithNetwork: (uint32_t)network
node: (const unsigned char [_Nullable IPX_NODE_LEN])node
port: (uint16_t)port
socket: (id)socket
errNo: (int)errNo OF_DESIGNATED_INITIALIZER;
- (instancetype)initWithSocket: (id)socket errNo: (int)errNo OF_UNAVAILABLE;
/**
* @brief Get the IPX node to which the connection failed.
*
* @param node A pointer to where to write the node to
*/
- (void)getNode: (unsigned char [_Nonnull IPX_NODE_LEN])node;
@end
OF_ASSUME_NONNULL_END
|
Added src/exceptions/OFConnectSPXSocketFailedException.m version [35220eec8e].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
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
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#include <string.h>
#import "OFConnectSPXSocketFailedException.h"
#import "OFData.h"
#import "OFString.h"
@implementation OFConnectSPXSocketFailedException
@synthesize network = _network, port = _port;
+ (instancetype)exceptionWithSocket: (id)sock errNo: (int)errNo
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithNetwork: network
node: node
port: port
socket: sock
errNo: errNo] autorelease];
}
- (instancetype)initWithSocket: (id)sock errNo: (int)errNo
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
self = [super initWithSocket: sock errNo: errNo];
@try {
_network = network;
memcpy(_node, node, IPX_NODE_LEN);
_port = port;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)getNode: (unsigned char [IPX_NODE_LEN])node
{
memcpy(node, _node, sizeof(_node));
}
- (OFString *)description
{
OFData *node = [OFData dataWithItems: _node count: sizeof(_node)];
return [OFString stringWithFormat:
@"A connection to %@ port %" @PRIu16 @" on network %" @PRIX32
" could not be established in socket of type %@: %@",
node, _port, _network, [_socket class], OFStrError(_errNo)];
}
@end
|
Renamed and modified
src/exceptions/OFConnectionFailedException.h
[3f23880b21]
to src/exceptions/OFConnectSocketFailedException.h
[8f2d911f53].
︙ | | | ︙ | |
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
|
#endif
#import "OFSocket.h"
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFConnectionFailedException \
* OFConnectionFailedException.h ObjFW/OFConnectionFailedException.h
*
* @brief An exception indicating that a connection could not be established.
*/
@interface OFConnectionFailedException: OFException
{
OFString *_Nullable _host;
uint16_t _port;
OFString *_Nullable _path;
uint32_t _network;
unsigned char _node[IPX_NODE_LEN];
id _socket;
int _errNo;
OF_RESERVE_IVARS(OFConnectionFailedException, 4)
}
/**
* @brief The host to which the connection failed.
*/
@property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFString *host;
/**
* @brief The port on the host to which the connection failed.
*/
@property (readonly, nonatomic) uint16_t port;
/**
* @brief The path to which the connection failed.
*/
@property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFString *path;
/**
* @brief The IPX network of the node to which the connection failed.
*/
@property (readonly, nonatomic) uint32_t network;
/**
* @brief The IPX node to which the connection failed.
*/
@property (readonly, nonatomic) unsigned char *node;
/**
* @brief The socket which could not connect.
*/
@property (readonly, nonatomic) id socket;
/**
* @brief The errno of the error that occurred.
*/
@property (readonly, nonatomic) int errNo;
/**
* @brief Creates a new, autoreleased connection failed exception.
*
* @param host The host to which the connection failed
* @param port The port on the host to which the connection failed
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return A new, autoreleased connection failed exception
*/
+ (instancetype)exceptionWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)socket
errNo: (int)errNo;
/**
* @brief Creates a new, autoreleased connection failed exception.
*
* @param path The path to which the connection failed
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return A new, autoreleased connection failed exception
*/
+ (instancetype)exceptionWithPath: (OFString *)path
socket: (id)socket
errNo: (int)errNo;
/**
* @brief Creates a new, autoreleased connection failed exception.
*
* @param network The IPX network of the node to which the connection failed
* @param node The node to which the connection failed
* @param port The port on the node to which the connection failed
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return A new, autoreleased connection failed exception
*/
+ (instancetype)
exceptionWithNetwork: (uint32_t)network
node: (unsigned char [_Nullable IPX_NODE_LEN])node
port: (uint16_t)port
socket: (id)socket
errNo: (int)errNo;
+ (instancetype)exception OF_UNAVAILABLE;
/**
* @brief Initializes an already allocated connection failed exception.
*
* @param host The host to which the connection failed
* @param port The port on the host to which the connection failed
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return An initialized connection failed exception
*/
- (instancetype)initWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)socket
errNo: (int)errNo;
/**
* @brief Initializes an already allocated connection failed exception.
*
* @param path The path to which the connection failed
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return An initialized connection failed exception
*/
- (instancetype)initWithPath: (OFString *)path
socket: (id)socket
errNo: (int)errNo;
/**
* @brief Initializes an already allocated connection failed exception.
*
* @param network The IPX network of the node to which the connection failed
* @param node The node to which the connection failed
* @param port The port on the node to which the connection failed
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return An initialized connection failed exception
*/
- (instancetype)initWithNetwork: (uint32_t)network
node: (unsigned char [_Nullable IPX_NODE_LEN])node
port: (uint16_t)port
socket: (id)socket
errNo: (int)errNo;
- (instancetype)init OF_UNAVAILABLE;
@end
OF_ASSUME_NONNULL_END
|
|
|
>
|
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
|
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
|
|
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
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
|
#endif
#import "OFSocket.h"
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFConnectSocketFailedException \
* OFConnectSocketFailedException.h \
* ObjFW/OFConnectSocketFailedException.h
*
* @brief An exception indicating that a connection could not be established.
*/
@interface OFConnectSocketFailedException: OFException
{
id _socket;
int _errNo;
OF_RESERVE_IVARS(OFConnectSocketFailedException, 4)
}
/**
* @brief The socket which could not connect.
*/
@property (readonly, nonatomic) id socket;
/**
* @brief The errno of the error that occurred.
*/
@property (readonly, nonatomic) int errNo;
/**
* @brief Creates a new, autoreleased connect socket failed exception.
*
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return A new, autoreleased connect socket failed exception
*/
+ (instancetype)exceptionWithSocket: (id)socket errNo: (int)errNo;
+ (instancetype)exception OF_UNAVAILABLE;
/**
* @brief Initializes an already allocated connect socket failed exception.
*
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return An initialized connect socket failed exception
*/
- (instancetype)initWithSocket: (id)socket
errNo: (int)errNo OF_DESIGNATED_INITIALIZER;
- (instancetype)init OF_UNAVAILABLE;
@end
OF_ASSUME_NONNULL_END
|
Renamed and modified
src/exceptions/OFConnectionFailedException.m
[2c0b32486f]
to src/exceptions/OFConnectSocketFailedException.m
[cadbcb9d65].
︙ | | | ︙ | |
11
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
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
|
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFConnectionFailedException.h"
#import "OFString.h"
@implementation OFConnectionFailedException
@synthesize host = _host, port = _port, path = _path, network = _network;
@synthesize socket = _socket, errNo = _errNo;
+ (instancetype)exceptionWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithHost: host
port: port
socket: sock
errNo: errNo] autorelease];
}
+ (instancetype)exception
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithPath: (OFString *)path
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithPath: path
socket: sock
errNo: errNo] autorelease];
}
+ (instancetype)exceptionWithNetwork: (uint32_t)network
node: (unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithNetwork: network
node: node
port: port
socket: sock
errNo: errNo] autorelease];
}
- (instancetype)initWithHost: (OFString *)host
port: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
self = [super init];
@try {
_host = [host copy];
_port = port;
_socket = [sock retain];
_errNo = errNo;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (instancetype)initWithPath: (OFString *)path
socket: (id)sock
errNo: (int)errNo
{
self = [super init];
@try {
_path = [path copy];
_socket = [sock retain];
_errNo = errNo;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (instancetype)initWithNetwork: (uint32_t)network
node: (unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
socket: (id)sock
errNo: (int)errNo
{
self = [super init];
@try {
_network = network;
memcpy(_node, node, IPX_NODE_LEN);
_port = port;
_socket = [sock retain];
_errNo = errNo;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (instancetype)init
{
OF_INVALID_INIT_METHOD
}
- (void)dealloc
{
[_host release];
[_path release];
[_socket release];
[super dealloc];
}
- (unsigned char *)node
{
return _node;
}
- (OFString *)description
{
if (_path != nil)
return [OFString stringWithFormat:
@"A connection to %@ could not be established in socket of "
@"type %@: %@",
_path, [_socket class], OFStrError(_errNo)];
else if (_host != nil)
return [OFString stringWithFormat:
@"A connection to %@ on port %" @PRIu16 @" could not be "
@"established in socket of type %@: %@",
_host, _port, [_socket class], OFStrError(_errNo)];
else if (memcmp(_node, "\0\0\0\0\0", IPX_NODE_LEN) == 0)
return [OFString stringWithFormat:
@"A connection to %02X%02X%02X%02X%02X%02X port %" @PRIu16
@" on network %" @PRIX32 " could not be established in "
@"socket of type %@: %@",
_node[0], _node[1], _node[2], _node[3], _node[4], _node[5],
_port, _network, [_socket class], OFStrError(_errNo)];
else
return [OFString stringWithFormat:
@"A connection could not be established in socket of "
@"type %@: %@",
[_socket class], OFStrError(_errNo)];
}
@end
|
|
|
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
|
<
<
|
<
<
<
<
<
<
<
<
<
>
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
<
|
|
|
|
11
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
|
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFConnectSocketFailedException.h"
#import "OFString.h"
@implementation OFConnectSocketFailedException
@synthesize socket = _socket, errNo = _errNo;
+ (instancetype)exception
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithSocket: (id)sock errNo: (int)errNo
{
return [[[self alloc] initWithSocket: sock errNo: errNo] autorelease];
}
- (instancetype)init
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithSocket: (id)sock errNo: (int)errNo
{
self = [super init];
@try {
_socket = [sock retain];
_errNo = errNo;
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)dealloc
{
[_socket release];
[super dealloc];
}
- (OFString *)description
{
return [OFString stringWithFormat:
@"A connection to could not be established in socket of type "
@"%@: %@",
[_socket class], OFStrError(_errNo)];
}
@end
|
Added src/exceptions/OFConnectUNIXSocketFailedException.h version [9ffd06e788].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#import "OFConnectSocketFailedException.h"
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFConnectUNIXSocketFailedException \
* OFConnectUNIXSocketFailedException.h \
* ObjFW/OFConnectUNIXSocketFailedException.h
*
* @brief An exception indicating that a UNIX socket connection could not be
* established.
*/
OF_SUBCLASSING_RESTRICTED
@interface OFConnectUNIXSocketFailedException: OFConnectSocketFailedException
{
OFString *_Nullable _path;
}
/**
* @brief The path to which the connection failed.
*/
@property OF_NULLABLE_PROPERTY (readonly, nonatomic) OFString *path;
/**
* @brief Creates a new, autoreleased connect UNIX socket failed exception.
*
* @param path The path to which the connection failed
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return A new, autoreleased connect UNIX socket failed exception
*/
+ (instancetype)exceptionWithPath: (OFString *)path
socket: (id)socket
errNo: (int)errNo;
+ (instancetype)exceptionWithSocket: (id)socket
errNo: (int)errNo OF_UNAVAILABLE;
/**
* @brief Initializes an already allocated connect UNIX socket failed exception.
*
* @param path The path to which the connection failed
* @param socket The socket which could not connect
* @param errNo The errno of the error that occurred
* @return An initialized connect UNIX socket failed exception
*/
- (instancetype)initWithPath: (OFString *)path
socket: (id)socket
errNo: (int)errNo OF_DESIGNATED_INITIALIZER;
- (instancetype)initWithSocket: (id)socket errNo: (int)errNo OF_UNAVAILABLE;
@end
OF_ASSUME_NONNULL_END
|
Added src/exceptions/OFConnectUNIXSocketFailedException.m version [f1376977d4].
|
|
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
>
|
1
2
3
4
5
6
7
8
9
10
11
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
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
|
/*
* Copyright (c) 2008-2022 Jonathan Schleifer <js@nil.im>
*
* All rights reserved.
*
* This file is part of ObjFW. It may be distributed under the terms of the
* Q Public License 1.0, which can be found in the file LICENSE.QPL included in
* the packaging of this file.
*
* Alternatively, it may be distributed under the terms of the GNU General
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFConnectUNIXSocketFailedException.h"
#import "OFString.h"
@implementation OFConnectUNIXSocketFailedException
@synthesize path = _path;
+ (instancetype)exceptionWithSocket: (id)sock errNo: (int)errNo
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithPath: (OFString *)path
socket: (id)sock
errNo: (int)errNo
{
return [[[self alloc] initWithPath: path
socket: sock
errNo: errNo] autorelease];
}
- (instancetype)initWithSocket: (id)sock errNo: (int)errNo
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithPath: (OFString *)path
socket: (id)sock
errNo: (int)errNo
{
self = [super initWithSocket: sock errNo: errNo];
@try {
_path = [path copy];
} @catch (id e) {
[self release];
@throw e;
}
return self;
}
- (void)dealloc
{
[_path release];
[super dealloc];
}
- (OFString *)description
{
return [OFString stringWithFormat:
@"A connection to %@ could not be established in socket of type "
@"%@: %@",
_path, [_socket class], OFStrError(_errNo)];
}
@end
|
Renamed and modified
src/exceptions/OFListenFailedException.h
[a41aaff3ca]
to src/exceptions/OFListenOnSocketFailedException.h
[98d11c8685].
︙ | | | ︙ | |
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
|
#ifndef OF_HAVE_SOCKETS
# error No sockets available!
#endif
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFListenFailedException \
* OFListenFailedException.h ObjFW/OFListenFailedException.h
*
* @brief An exception indicating that listening on the socket failed.
*/
@interface OFListenFailedException: OFException
{
id _socket;
int _backlog, _errNo;
OF_RESERVE_IVARS(OFListenFailedException, 4)
}
/**
* @brief The socket which failed to listen.
*/
@property (readonly, nonatomic) id socket;
|
|
|
>
|
|
|
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
|
#ifndef OF_HAVE_SOCKETS
# error No sockets available!
#endif
OF_ASSUME_NONNULL_BEGIN
/**
* @class OFListenOnSocketFailedException \
* OFListenOnSocketFailedException.h \
* ObjFW/OFListenOnSocketFailedException.h
*
* @brief An exception indicating that listening on the socket failed.
*/
@interface OFListenOnSocketFailedException: OFException
{
id _socket;
int _backlog, _errNo;
OF_RESERVE_IVARS(OFListenOnSocketFailedException, 4)
}
/**
* @brief The socket which failed to listen.
*/
@property (readonly, nonatomic) id socket;
|
︙ | | | ︙ | |
Renamed and modified
src/exceptions/OFListenFailedException.m
[45e185da77]
to src/exceptions/OFListenOnSocketFailedException.m
[5b45bde80b].
︙ | | | ︙ | |
11
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
47
48
49
50
51
52
53
54
55
56
|
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFListenFailedException.h"
#import "OFString.h"
@implementation OFListenFailedException
@synthesize socket = _socket, backlog = _backlog, errNo = _errNo;
+ (instancetype)exception
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithSocket: (id)socket
backlog: (int)backlog
errNo: (int)errNo
{
return [[[self alloc] initWithSocket: socket
backlog: backlog
errNo: errNo] autorelease];
}
- (instancetype)init
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithSocket: (id)socket
backlog: (int)backlog
errNo: (int)errNo
{
self = [super init];
_socket = [socket retain];
_backlog = backlog;
_errNo = errNo;
return self;
}
- (void)dealloc
|
|
|
|
|
|
<
<
|
|
11
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
47
48
49
50
51
52
53
54
|
* Public License, either version 2 or 3, which can be found in the file
* LICENSE.GPLv2 or LICENSE.GPLv3 respectively included in the packaging of this
* file.
*/
#include "config.h"
#import "OFListenOnSocketFailedException.h"
#import "OFString.h"
@implementation OFListenOnSocketFailedException
@synthesize socket = _socket, backlog = _backlog, errNo = _errNo;
+ (instancetype)exception
{
OF_UNRECOGNIZED_SELECTOR
}
+ (instancetype)exceptionWithSocket: (id)sock
backlog: (int)backlog
errNo: (int)errNo
{
return [[[self alloc] initWithSocket: sock
backlog: backlog
errNo: errNo] autorelease];
}
- (instancetype)init
{
OF_INVALID_INIT_METHOD
}
- (instancetype)initWithSocket: (id)sock backlog: (int)backlog errNo: (int)errNo
{
self = [super init];
_socket = [sock retain];
_backlog = backlog;
_errNo = errNo;
return self;
}
- (void)dealloc
|
︙ | | | ︙ | |
Modified tests/OFDDPSocketTests.m
from [4a463bd557]
to [e1d2cac77d].
︙ | | | ︙ | |
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
OFSocketAddress address1, address2;
char buffer[5];
TEST(@"+[socket]", (sock = [OFDDPSocket socket]))
@try {
TEST(@"-[bindToPort:]", R(address1 = [sock bindToPort: 0]))
} @catch (OFBindFailedException *e) {
switch (e.errNo) {
case EAFNOSUPPORT:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFDDPSocket] -[bindToPort:] "
@"AppleTalk unsupported, skipping tests"];
break;
|
|
|
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
OFSocketAddress address1, address2;
char buffer[5];
TEST(@"+[socket]", (sock = [OFDDPSocket socket]))
@try {
TEST(@"-[bindToPort:]", R(address1 = [sock bindToPort: 0]))
} @catch (OFBindSocketFailedException *e) {
switch (e.errNo) {
case EAFNOSUPPORT:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFDDPSocket] -[bindToPort:] "
@"AppleTalk unsupported, skipping tests"];
break;
|
︙ | | | ︙ | |
Modified tests/OFIPXSocketTests.m
from [4dd5afc6b6]
to [59b38899e7].
︙ | | | ︙ | |
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
|
#import "TestsAppDelegate.h"
static OFString *const module = @"OFIPXSocket";
@implementation TestsAppDelegate (OFIPXSocketTests)
- (void)IPXSocketTests
{
void *pool = objc_autoreleasePoolPush();
OFIPXSocket *sock;
OFSocketAddress address1, address2;
char buffer[5];
TEST(@"+[socket]", (sock = [OFIPXSocket socket]))
@try {
TEST(@"-[bindToPort:packetType:]",
R(address1 = [sock bindToPort: 0 packetType: 0]))
} @catch (OFBindFailedException *e) {
switch (e.errNo) {
case EAFNOSUPPORT:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFIPXSocket] -[bindToPort:packetType:]: "
@"IPX unsupported, skipping tests"];
break;
case EADDRNOTAVAIL:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFIPXSocket] -[bindToPort:packetType:]: "
@"IPX not configured, skipping tests"];
break;
default:
@throw e;
}
objc_autoreleasePoolPop(pool);
return;
|
>
|
|
>
>
>
|
|
|
|
|
>
|
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
|
#import "TestsAppDelegate.h"
static OFString *const module = @"OFIPXSocket";
@implementation TestsAppDelegate (OFIPXSocketTests)
- (void)IPXSocketTests
{
const unsigned char zeroNode[IPX_NODE_LEN] = { 0 };
void *pool = objc_autoreleasePoolPush();
OFIPXSocket *sock;
OFSocketAddress address1, address2;
char buffer[5];
TEST(@"+[socket]", (sock = [OFIPXSocket socket]))
@try {
TEST(@"-[bindToNetwork:node:port:packetType:]",
R(address1 = [sock bindToNetwork: 0
node: zeroNode
port: 0
packetType: 0]))
} @catch (OFBindSocketFailedException *e) {
switch (e.errNo) {
case EAFNOSUPPORT:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFIPXSocket] -[bindToNetwork:node:port:"
@"packetType:]: IPX unsupported, skipping tests"];
break;
case EADDRNOTAVAIL:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFIPXSocket] -[bindToNetwork:node:port:"
@"packetType:]: IPX not configured, skipping "
@"tests"];
break;
default:
@throw e;
}
objc_autoreleasePoolPop(pool);
return;
|
︙ | | | ︙ | |
Modified tests/OFSPXSocketTests.m
from [c95d72f728]
to [2398c8daff].
︙ | | | ︙ | |
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
|
[[OFRunLoop mainRunLoop] stop];
return false;
}
- (void)socket: (OFSPXSocket *)sock
didConnectToNetwork: (uint32_t)network
node: (unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
exception: (id)exception
{
OFEnsure(!_connected);
_connected = (sock == _expectedClientSocket &&
network == _expectedNetwork &&
memcmp(node, _expectedNode, IPX_NODE_LEN) == 0 &&
port == _expectedPort && exception == nil);
if (_accepted && _connected)
[[OFRunLoop mainRunLoop] stop];
}
@end
@implementation TestsAppDelegate (OFSPXSocketTests)
- (void)SPXSocketTests
{
void *pool = objc_autoreleasePoolPush();
OFSPXSocket *sockClient, *sockServer = nil, *sockAccepted;
OFSocketAddress address1;
const OFSocketAddress *address2;
uint32_t network;
unsigned char node[IPX_NODE_LEN], node2[IPX_NODE_LEN];
uint16_t port;
char buffer[5];
SPXSocketDelegate *delegate;
TEST(@"+[socket]", (sockClient = [OFSPXSocket socket]) &&
(sockServer = [OFSPXSocket socket]))
@try {
TEST(@"-[bindToPort:]",
R(address1 = [sockServer bindToPort: 0]))
} @catch (OFBindFailedException *e) {
switch (e.errNo) {
case EAFNOSUPPORT:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFSPXSocket] -[bindToPort:]: "
@"IPX unsupported, skipping tests"];
break;
case ESOCKTNOSUPPORT:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFSPXSocket] -[bindToPort:]: "
@"SPX unsupported, skipping tests"];
break;
case EADDRNOTAVAIL:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFSPXSocket] -[bindToPort:]: "
@"IPX not configured, skipping tests"];
break;
default:
@throw e;
}
objc_autoreleasePoolPop(pool);
return;
}
network = OFSocketAddressIPXNetwork(&address1);
OFSocketAddressIPXNode(&address1, node);
port = OFSocketAddressPort(&address1);
TEST(@"-[listen]", R([sockServer listen]))
TEST(@"-[connectToNetwork:node:port:]",
R([sockClient connectToNetwork: network node: node port: port]))
TEST(@"-[accept]", (sockAccepted = [sockServer accept]))
TEST(@"-[sendBuffer:length:]",
R([sockAccepted sendBuffer: "Hello" length: 5]))
TEST(@"-[receiveIntoBuffer:length:]",
[sockClient receiveIntoBuffer: buffer length: 5] == 5 &&
memcmp(buffer, "Hello", 5) == 0)
TEST(@"-[remoteAddress]",
(address2 = sockAccepted.remoteAddress) &&
OFSocketAddressIPXNetwork(address2) == network &&
R(OFSocketAddressIPXNode(address2, node2)) &&
memcmp(node, node2, IPX_NODE_LEN) == 0)
delegate = [[[SPXSocketDelegate alloc] init] autorelease];
sockServer = [OFSPXSocket socket];
delegate->_expectedServerSocket = sockServer;
sockServer.delegate = delegate;
sockClient = [OFSPXSocket socket];
delegate->_expectedClientSocket = sockClient;
sockClient.delegate = delegate;
address1 = [sockServer bindToPort: 0];
[sockServer listen];
[sockServer asyncAccept];
delegate->_expectedNetwork = network =
OFSocketAddressIPXNetwork(&address1);
OFSocketAddressIPXNode(&address1, node);
memcpy(delegate->_expectedNode, node, IPX_NODE_LEN);
delegate->_expectedPort = port = OFSocketAddressPort(&address1);
@try {
[sockClient asyncConnectToNetwork: network
node: node
port: port];
|
|
>
|
|
>
>
|
|
|
|
|
|
|
|
|
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
|
[[OFRunLoop mainRunLoop] stop];
return false;
}
- (void)socket: (OFSPXSocket *)sock
didConnectToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
exception: (id)exception
{
OFEnsure(!_connected);
_connected = (sock == _expectedClientSocket &&
network == _expectedNetwork &&
memcmp(node, _expectedNode, IPX_NODE_LEN) == 0 &&
port == _expectedPort && exception == nil);
if (_accepted && _connected)
[[OFRunLoop mainRunLoop] stop];
}
@end
@implementation TestsAppDelegate (OFSPXSocketTests)
- (void)SPXSocketTests
{
const unsigned char zeroNode[IPX_NODE_LEN] = { 0 };
void *pool = objc_autoreleasePoolPush();
OFSPXSocket *sockClient, *sockServer = nil, *sockAccepted;
OFSocketAddress address1;
const OFSocketAddress *address2;
uint32_t network;
unsigned char node[IPX_NODE_LEN], node2[IPX_NODE_LEN];
uint16_t port;
char buffer[5];
SPXSocketDelegate *delegate;
TEST(@"+[socket]", (sockClient = [OFSPXSocket socket]) &&
(sockServer = [OFSPXSocket socket]))
@try {
TEST(@"-[bindToNetwork:node:port:]",
R(address1 = [sockServer bindToNetwork: 0
node: zeroNode
port: 0]))
} @catch (OFBindSocketFailedException *e) {
switch (e.errNo) {
case EAFNOSUPPORT:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFSPXSocket] -[bindToNetwork:node:port:]: "
@"IPX unsupported, skipping tests"];
break;
case ESOCKTNOSUPPORT:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFSPXSocket] -[bindToNetwork:node:port:]: "
@"SPX unsupported, skipping tests"];
break;
case EADDRNOTAVAIL:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFSPXSocket] -[bindToNetwork:node:port:]: "
@"IPX not configured, skipping tests"];
break;
default:
@throw e;
}
objc_autoreleasePoolPop(pool);
return;
}
network = OFSocketAddressIPXNetwork(&address1);
OFSocketAddressGetIPXNode(&address1, node);
port = OFSocketAddressPort(&address1);
TEST(@"-[listen]", R([sockServer listen]))
TEST(@"-[connectToNetwork:node:port:]",
R([sockClient connectToNetwork: network node: node port: port]))
TEST(@"-[accept]", (sockAccepted = [sockServer accept]))
TEST(@"-[sendBuffer:length:]",
R([sockAccepted sendBuffer: "Hello" length: 5]))
TEST(@"-[receiveIntoBuffer:length:]",
[sockClient receiveIntoBuffer: buffer length: 5] == 5 &&
memcmp(buffer, "Hello", 5) == 0)
TEST(@"-[remoteAddress]",
(address2 = sockAccepted.remoteAddress) &&
OFSocketAddressIPXNetwork(address2) == network &&
R(OFSocketAddressGetIPXNode(address2, node2)) &&
memcmp(node, node2, IPX_NODE_LEN) == 0)
delegate = [[[SPXSocketDelegate alloc] init] autorelease];
sockServer = [OFSPXSocket socket];
delegate->_expectedServerSocket = sockServer;
sockServer.delegate = delegate;
sockClient = [OFSPXSocket socket];
delegate->_expectedClientSocket = sockClient;
sockClient.delegate = delegate;
address1 = [sockServer bindToNetwork: 0 node: zeroNode port: 0];
[sockServer listen];
[sockServer asyncAccept];
delegate->_expectedNetwork = network =
OFSocketAddressIPXNetwork(&address1);
OFSocketAddressGetIPXNode(&address1, node);
memcpy(delegate->_expectedNode, node, IPX_NODE_LEN);
delegate->_expectedPort = port = OFSocketAddressPort(&address1);
@try {
[sockClient asyncConnectToNetwork: network
node: node
port: port];
|
︙ | | | ︙ | |
Modified tests/OFSPXStreamSocketTests.m
from [af4ba0ff2c]
to [5afcf8a434].
︙ | | | ︙ | |
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
|
[[OFRunLoop mainRunLoop] stop];
return false;
}
- (void)socket: (OFSPXStreamSocket *)sock
didConnectToNetwork: (uint32_t)network
node: (unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
exception: (id)exception
{
OFEnsure(!_connected);
_connected = (sock == _expectedClientSocket &&
network == _expectedNetwork &&
memcmp(node, _expectedNode, IPX_NODE_LEN) == 0 &&
port == _expectedPort && exception == nil);
if (_accepted && _connected)
[[OFRunLoop mainRunLoop] stop];
}
@end
@implementation TestsAppDelegate (OFSPXStreamSocketTests)
- (void)SPXStreamSocketTests
{
void *pool = objc_autoreleasePoolPush();
OFSPXStreamSocket *sockClient, *sockServer = nil, *sockAccepted;
OFSocketAddress address1;
const OFSocketAddress *address2;
uint32_t network;
unsigned char node[IPX_NODE_LEN], node2[IPX_NODE_LEN];
uint16_t port;
char buffer[5];
SPXStreamSocketDelegate *delegate;
TEST(@"+[socket]", (sockClient = [OFSPXStreamSocket socket]) &&
(sockServer = [OFSPXStreamSocket socket]))
@try {
TEST(@"-[bindToPort:]",
R(address1 = [sockServer bindToPort: 0]))
} @catch (OFBindFailedException *e) {
switch (e.errNo) {
case EAFNOSUPPORT:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFSPXStreamSocket] -[bindToPort:]: "
@"IPX unsupported, skipping tests"];
break;
case ESOCKTNOSUPPORT:
case EPROTONOSUPPORT:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFSPXStreamSocket] -[bindToPort:]: "
@"SPX unsupported, skipping tests"];
break;
case EADDRNOTAVAIL:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFSPXStreamSocket] -[bindToPort:]: "
@"IPX not configured, skipping tests"];
break;
default:
@throw e;
}
objc_autoreleasePoolPop(pool);
return;
}
network = OFSocketAddressIPXNetwork(&address1);
OFSocketAddressIPXNode(&address1, node);
port = OFSocketAddressPort(&address1);
TEST(@"-[listen]", R([sockServer listen]))
TEST(@"-[connectToNetwork:node:port:]",
R([sockClient connectToNetwork: network node: node port: port]))
|
|
>
|
|
>
>
|
|
|
|
|
|
|
|
|
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
|
[[OFRunLoop mainRunLoop] stop];
return false;
}
- (void)socket: (OFSPXStreamSocket *)sock
didConnectToNetwork: (uint32_t)network
node: (const unsigned char [IPX_NODE_LEN])node
port: (uint16_t)port
exception: (id)exception
{
OFEnsure(!_connected);
_connected = (sock == _expectedClientSocket &&
network == _expectedNetwork &&
memcmp(node, _expectedNode, IPX_NODE_LEN) == 0 &&
port == _expectedPort && exception == nil);
if (_accepted && _connected)
[[OFRunLoop mainRunLoop] stop];
}
@end
@implementation TestsAppDelegate (OFSPXStreamSocketTests)
- (void)SPXStreamSocketTests
{
const unsigned char zeroNode[IPX_NODE_LEN] = { 0 };
void *pool = objc_autoreleasePoolPush();
OFSPXStreamSocket *sockClient, *sockServer = nil, *sockAccepted;
OFSocketAddress address1;
const OFSocketAddress *address2;
uint32_t network;
unsigned char node[IPX_NODE_LEN], node2[IPX_NODE_LEN];
uint16_t port;
char buffer[5];
SPXStreamSocketDelegate *delegate;
TEST(@"+[socket]", (sockClient = [OFSPXStreamSocket socket]) &&
(sockServer = [OFSPXStreamSocket socket]))
@try {
TEST(@"-[bindToNetwork:node:port:]",
R(address1 = [sockServer bindToNetwork: 0
node: zeroNode
port: 0]))
} @catch (OFBindSocketFailedException *e) {
switch (e.errNo) {
case EAFNOSUPPORT:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFSPXStreamSocket] -[bindToNetwork:node:"
@"port:]: IPX unsupported, skipping tests"];
break;
case ESOCKTNOSUPPORT:
case EPROTONOSUPPORT:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFSPXStreamSocket] -[bindToNetwork:node:"
@"port:]: SPX unsupported, skipping tests"];
break;
case EADDRNOTAVAIL:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFSPXStreamSocket] -[bindToNetwork:node:"
@"port:]: IPX not configured, skipping tests"];
break;
default:
@throw e;
}
objc_autoreleasePoolPop(pool);
return;
}
network = OFSocketAddressIPXNetwork(&address1);
OFSocketAddressGetIPXNode(&address1, node);
port = OFSocketAddressPort(&address1);
TEST(@"-[listen]", R([sockServer listen]))
TEST(@"-[connectToNetwork:node:port:]",
R([sockClient connectToNetwork: network node: node port: port]))
|
︙ | | | ︙ | |
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
|
memcmp(buffer, "He", 2) == 0 &&
[sockClient readIntoBuffer: buffer length: 3] == 3 &&
memcmp(buffer, "llo", 3) == 0)
TEST(@"-[remoteAddress]",
(address2 = sockAccepted.remoteAddress) &&
OFSocketAddressIPXNetwork(address2) == network &&
R(OFSocketAddressIPXNode(address2, node2)) &&
memcmp(node, node2, IPX_NODE_LEN) == 0)
delegate = [[[SPXStreamSocketDelegate alloc] init] autorelease];
sockServer = [OFSPXStreamSocket socket];
delegate->_expectedServerSocket = sockServer;
sockServer.delegate = delegate;
sockClient = [OFSPXStreamSocket socket];
delegate->_expectedClientSocket = sockClient;
sockClient.delegate = delegate;
address1 = [sockServer bindToPort: 0];
[sockServer listen];
[sockServer asyncAccept];
delegate->_expectedNetwork = network =
OFSocketAddressIPXNetwork(&address1);
OFSocketAddressIPXNode(&address1, node);
memcpy(delegate->_expectedNode, node, IPX_NODE_LEN);
delegate->_expectedPort = port = OFSocketAddressPort(&address1);
@try {
[sockClient asyncConnectToNetwork: network
node: node
port: port];
|
|
|
|
|
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
|
memcmp(buffer, "He", 2) == 0 &&
[sockClient readIntoBuffer: buffer length: 3] == 3 &&
memcmp(buffer, "llo", 3) == 0)
TEST(@"-[remoteAddress]",
(address2 = sockAccepted.remoteAddress) &&
OFSocketAddressIPXNetwork(address2) == network &&
R(OFSocketAddressGetIPXNode(address2, node2)) &&
memcmp(node, node2, IPX_NODE_LEN) == 0)
delegate = [[[SPXStreamSocketDelegate alloc] init] autorelease];
sockServer = [OFSPXStreamSocket socket];
delegate->_expectedServerSocket = sockServer;
sockServer.delegate = delegate;
sockClient = [OFSPXStreamSocket socket];
delegate->_expectedClientSocket = sockClient;
sockClient.delegate = delegate;
address1 = [sockServer bindToNetwork: 0 node: zeroNode port: 0];
[sockServer listen];
[sockServer asyncAccept];
delegate->_expectedNetwork = network =
OFSocketAddressIPXNetwork(&address1);
OFSocketAddressGetIPXNode(&address1, node);
memcpy(delegate->_expectedNode, node, IPX_NODE_LEN);
delegate->_expectedPort = port = OFSocketAddressPort(&address1);
@try {
[sockClient asyncConnectToNetwork: network
node: node
port: port];
|
︙ | | | ︙ | |
Modified tests/OFUNIXDatagramSocketTests.m
from [54df3210f6]
to [61f9f2c60c].
︙ | | | ︙ | |
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
[[OFUUID UUID] UUIDString]];
#endif
TEST(@"+[socket]", (sock = [OFUNIXDatagramSocket socket]))
@try {
TEST(@"-[bindToPath:]", R(address1 = [sock bindToPath: path]))
} @catch (OFBindFailedException *e) {
switch (e.errNo) {
case EAFNOSUPPORT:
case EPERM:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFUNIXDatagramSocket] -[bindToPath:]: "
@"UNIX datagram sockets unsupported, skipping "
|
|
|
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
[[OFUUID UUID] UUIDString]];
#endif
TEST(@"+[socket]", (sock = [OFUNIXDatagramSocket socket]))
@try {
TEST(@"-[bindToPath:]", R(address1 = [sock bindToPath: path]))
} @catch (OFBindSocketFailedException *e) {
switch (e.errNo) {
case EAFNOSUPPORT:
case EPERM:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFUNIXDatagramSocket] -[bindToPath:]: "
@"UNIX datagram sockets unsupported, skipping "
|
︙ | | | ︙ | |
Modified tests/OFUNIXStreamSocketTests.m
from [72ce4faa3f]
to [cebf3c029f].
︙ | | | ︙ | |
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#endif
TEST(@"+[socket]", (sockClient = [OFUNIXStreamSocket socket]) &&
(sockServer = [OFUNIXStreamSocket socket]))
@try {
TEST(@"-[bindToPath:]", R([sockServer bindToPath: path]))
} @catch (OFBindFailedException *e) {
switch (e.errNo) {
case EAFNOSUPPORT:
case EPERM:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFUNIXStreamSocket] -[bindToPath:]: "
@"UNIX stream sockets unsupported, skipping tests"];
|
|
|
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
|
#endif
TEST(@"+[socket]", (sockClient = [OFUNIXStreamSocket socket]) &&
(sockServer = [OFUNIXStreamSocket socket]))
@try {
TEST(@"-[bindToPath:]", R([sockServer bindToPath: path]))
} @catch (OFBindSocketFailedException *e) {
switch (e.errNo) {
case EAFNOSUPPORT:
case EPERM:
[OFStdOut setForegroundColor: [OFColor lime]];
[OFStdOut writeLine:
@"\r[OFUNIXStreamSocket] -[bindToPath:]: "
@"UNIX stream sockets unsupported, skipping tests"];
|
︙ | | | ︙ | |
Modified utils/ofhttp/OFHTTP.m
from [2267fb0c48]
to [36f1e9db6a].
︙ | | | ︙ | |
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#import "OFTLSStream.h"
#import "OFURI.h"
#ifdef HAVE_TLS_SUPPORT
# import "ObjFWTLS.h"
#endif
#import "OFConnectionFailedException.h"
#import "OFGetItemAttributesFailedException.h"
#import "OFHTTPRequestFailedException.h"
#import "OFInvalidArgumentException.h"
#import "OFInvalidFormatException.h"
#import "OFInvalidServerResponseException.h"
#import "OFOpenItemFailedException.h"
#import "OFOutOfRangeException.h"
|
|
|
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
|
#import "OFTLSStream.h"
#import "OFURI.h"
#ifdef HAVE_TLS_SUPPORT
# import "ObjFWTLS.h"
#endif
#import "OFConnectSocketFailedException.h"
#import "OFGetItemAttributesFailedException.h"
#import "OFHTTPRequestFailedException.h"
#import "OFInvalidArgumentException.h"
#import "OFInvalidFormatException.h"
#import "OFInvalidServerResponseException.h"
#import "OFOpenItemFailedException.h"
#import "OFOutOfRangeException.h"
|
︙ | | | ︙ | |
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
|
OF_LOCALIZED(@"download_resolve_host_failed",
@"%[prog]: Failed to download <%[uri]>!\n"
@" Failed to resolve host: %[exception]",
@"prog", [OFApplication programName],
@"uri", request.URI.string,
@"exception", exception)];
} else if ([exception isKindOfClass:
[OFConnectionFailedException class]]) {
if (!_quiet)
[OFStdOut writeString: @"\n"];
[OFStdErr writeLine:
OF_LOCALIZED(@"download_failed_connection_failed",
@"%[prog]: Failed to download <%[uri]>!\n"
@" Connection failed: %[exception]",
|
|
|
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
|
OF_LOCALIZED(@"download_resolve_host_failed",
@"%[prog]: Failed to download <%[uri]>!\n"
@" Failed to resolve host: %[exception]",
@"prog", [OFApplication programName],
@"uri", request.URI.string,
@"exception", exception)];
} else if ([exception isKindOfClass:
[OFConnectSocketFailedException class]]) {
if (!_quiet)
[OFStdOut writeString: @"\n"];
[OFStdErr writeLine:
OF_LOCALIZED(@"download_failed_connection_failed",
@"%[prog]: Failed to download <%[uri]>!\n"
@" Connection failed: %[exception]",
|
︙ | | | ︙ | |