| ︙ | | |
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
|
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
|
-
+
-
+
|
_underlyingStream.delegate = self;
/*
* Buffer writes so that nothing gets lost if we write more
* than the underlying stream can write.
*/
_underlyingStream.buffersWrites = true;
} @catch (id e) {
[self release];
objc_release(self);
@throw e;
}
return self;
}
- (void)dealloc
{
if (_SSL != NULL)
[self close];
[_host release];
objc_release(_host);
[super dealloc];
}
- (void)close
{
if (_SSL == NULL)
|
| ︙ | | |
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
|
-
+
|
}
SSL_free(_SSL);
_SSL = NULL;
_handshakeDone = false;
[_host release];
objc_release(_host);
_host = nil;
[super close];
}
- (size_t)lowlevelReadIntoBuffer: (void *)buffer length: (size_t)length
{
|
| ︙ | | |
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
|
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
|
-
+
-
+
|
switch (SSL_get_error(_SSL, status)) {
case SSL_ERROR_WANT_READ:
if (!_underlyingStream.atEndOfStream) {
[_underlyingStream
asyncReadIntoBuffer: _buffer
length: bufferSize
runLoopMode: runLoopMode];
[_delegate retain];
objc_retain(_delegate);
objc_autoreleasePoolPop(pool);
return;
}
exception = [OFTLSHandshakeFailedException
exceptionWithStream: self
host: host
errorCode: OFTLSStreamErrorCodeUnknown];
break;
case SSL_ERROR_WANT_WRITE:
[_underlyingStream asyncWriteData: [OFData data]
runLoopMode: runLoopMode];
[_delegate retain];
objc_retain(_delegate);
objc_autoreleasePoolPop(pool);
return;
case SSL_ERROR_SSL:
exception = [OFTLSHandshakeFailedException
exceptionWithStream: self
host: host
errorCode: errToErrorCode(_SSL)];
|
| ︙ | | |
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
|
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
|
-
+
|
if ([_delegate respondsToSelector: @selector(
stream:didPerformClientHandshakeWithHost:exception:)])
[_delegate stream: self
didPerformClientHandshakeWithHost: _host
exception: exception];
}
[_delegate release];
objc_release(_delegate);
return false;
}
- (OFData *)stream: (OFStream *)stream
didWriteData: (OFData *)data
bytesWritten: (size_t)bytesWritten
|
| ︙ | | |
601
602
603
604
605
606
607
608
609
610
611
612
|
601
602
603
604
605
606
607
608
609
610
611
612
|
-
+
|
if ([_delegate respondsToSelector: @selector(
stream:didPerformClientHandshakeWithHost:exception:)])
[_delegate stream: self
didPerformClientHandshakeWithHost: _host
exception: exception];
}
[_delegate release];
objc_release(_delegate);
return nil;
}
@end
|