Changeset fb5f8f9daa6e4df8e9acc3c11501205c21866b72
- Timestamp:
- 07/02/08 04:40:56
(5 years ago)
- Author:
- Theo Schlossnagle <jesus@omniti.com>
- git-committer:
- Theo Schlossnagle <jesus@omniti.com> 1214973656 +0000
- git-parent:
[cdd3b47db7b8a6f873d7dcf7bf1b1329513c0cb2]
- git-author:
- Theo Schlossnagle <jesus@omniti.com> 1214973656 +0000
- Message:
fix up SSL layer to handle termination and make the jlog rcpt side completely reset on error, refs #41
-
Files:
-
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
| r2962688 |
rfb5f8f9 |
|
| 319 | 319 | switch(op) { |
|---|
| 320 | 320 | case SSL_OP_READ: |
|---|
| 321 | | if((rv = SSL_read(ctx->ssl, buffer, len)) >= 0) return rv; |
|---|
| | 321 | if((rv = SSL_read(ctx->ssl, buffer, len)) > 0) return rv; |
|---|
| 322 | 322 | break; |
|---|
| 323 | 323 | case SSL_OP_WRITE: |
|---|
| 324 | | if((rv = SSL_write(ctx->ssl, buffer, len)) >= 0) return rv; |
|---|
| | 324 | if((rv = SSL_write(ctx->ssl, buffer, len)) > 0) return rv; |
|---|
| 325 | 325 | break; |
|---|
| 326 | 326 | |
|---|
| … | … | |
| 346 | 346 | |
|---|
| 347 | 347 | switch(sslerror = SSL_get_error(ctx->ssl, rv)) { |
|---|
| | 348 | case SSL_ERROR_NONE: |
|---|
| | 349 | return 0; |
|---|
| 348 | 350 | case SSL_ERROR_WANT_READ: |
|---|
| 349 | 351 | case SSL_ERROR_WANT_WRITE: |
|---|
| … | … | |
| 353 | 355 | break; |
|---|
| 354 | 356 | default: |
|---|
| | 357 | noitL(noit_error, "SSL rw error: %d\n", sslerror); |
|---|
| 355 | 358 | eventer_ssl_error(); |
|---|
| 356 | 359 | errno = EIO; |
|---|
| rc4546c7 |
rfb5f8f9 |
|
| 141 | 141 | return -1; |
|---|
| 142 | 142 | } |
|---|
| 143 | | if(len == 0) return ctx->bytes_read; |
|---|
| | 143 | /* if we get 0 inside SSL, and there was a real error, we |
|---|
| | 144 | * will actually get a -1 here. |
|---|
| | 145 | * if(len == 0) return ctx->bytes_read; |
|---|
| | 146 | */ |
|---|
| 144 | 147 | ctx->bytes_read += len; |
|---|
| 145 | 148 | } |
|---|
| … | … | |
| 162 | 165 | if(len < 0) { \ |
|---|
| 163 | 166 | if(errno == EAGAIN) return mask | EVENTER_EXCEPTION; \ |
|---|
| | 167 | noitL(noit_error, "SSL read error: %s\n", strerror(errno)); \ |
|---|
| 164 | 168 | goto socket_error; \ |
|---|
| 165 | 169 | } \ |
|---|
| … | … | |
| 182 | 186 | if(mask & EVENTER_EXCEPTION || ctx->wants_shutdown) { |
|---|
| 183 | 187 | socket_error: |
|---|
| | 188 | ctx->state = WANT_COUNT; |
|---|
| | 189 | ctx->count = 0; |
|---|
| | 190 | ctx->bytes_read = 0; |
|---|
| | 191 | ctx->bytes_expected = 0; |
|---|
| | 192 | if(ctx->buffer) free(ctx->buffer); |
|---|
| | 193 | ctx->buffer = NULL; |
|---|
| 184 | 194 | jlog_streamer_schedule_reattempt(ctx, now); |
|---|
| 185 | 195 | eventer_remove_fd(e->fd); |
|---|