diff options
author | Paul Querna | 2004-12-02 21:35:29 +0000 |
---|---|---|
committer | Paul Querna | 2004-12-02 21:35:29 +0000 |
commit | 0b3bc057ca6c68214614f257704cb5a332747b75 (patch) | |
tree | 856e31bec8b57da1cfbdbec5fc70e027ed37dfba /src | |
parent | ed47098c757860a9444fd6de621699a951900211 (diff) |
setting proper ignores.
adding an empty cache files
trying to fix >16kb writes.
Diffstat (limited to 'src')
-rw-r--r-- | src/gnutls_cache.c | 25 | ||||
-rw-r--r-- | src/gnutls_io.c | 31 |
2 files changed, 50 insertions, 6 deletions
diff --git a/src/gnutls_cache.c b/src/gnutls_cache.c new file mode 100644 index 0000000..f2fb803 --- /dev/null +++ b/src/gnutls_cache.c | |||
@@ -0,0 +1,25 @@ | |||
1 | /* ==================================================================== | ||
2 | * Copyright 2004 Paul Querna | ||
3 | * | ||
4 | * Licensed under the Apache License, Version 2.0 (the "License"); | ||
5 | * you may not use this file except in compliance with the License. | ||
6 | * You may obtain a copy of the License at | ||
7 | * | ||
8 | * http://www.apache.org/licenses/LICENSE-2.0 | ||
9 | * | ||
10 | * Unless required by applicable law or agreed to in writing, software | ||
11 | * distributed under the License is distributed on an "AS IS" BASIS, | ||
12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | ||
13 | * See the License for the specific language governing permissions and | ||
14 | * limitations under the License. | ||
15 | * | ||
16 | */ | ||
17 | |||
18 | #include "mod_gnutls.h" | ||
19 | |||
20 | /** | ||
21 | * GnuTLS Session Cache using libmemcached | ||
22 | * | ||
23 | */ | ||
24 | |||
25 | #include "libmemcache/memcache.h" | ||
diff --git a/src/gnutls_io.c b/src/gnutls_io.c index ec2d08c..856b6a3 100644 --- a/src/gnutls_io.c +++ b/src/gnutls_io.c | |||
@@ -372,7 +372,7 @@ static void gnutls_do_handshake(mod_gnutls_handle_t * ctxt) | |||
372 | ctxt->status = -1; | 372 | ctxt->status = -1; |
373 | return; | 373 | return; |
374 | #else | 374 | #else |
375 | ret = gnutls_handshake(ctxt->session); | 375 | ret = gnutls_handshake(ctxt->session); |
376 | if (ret < 0) { | 376 | if (ret < 0) { |
377 | if (ret == GNUTLS_E_WARNING_ALERT_RECEIVED | 377 | if (ret == GNUTLS_E_WARNING_ALERT_RECEIVED |
378 | || ret == GNUTLS_E_FATAL_ALERT_RECEIVED) { | 378 | || ret == GNUTLS_E_FATAL_ALERT_RECEIVED) { |
@@ -419,7 +419,7 @@ apr_status_t mod_gnutls_filter_input(ap_filter_t * f, | |||
419 | } | 419 | } |
420 | 420 | ||
421 | if (ctxt->status < 0) { | 421 | if (ctxt->status < 0) { |
422 | // return ap_get_brigade(f->next, bb, mode, block, readbytes); | 422 | return ap_get_brigade(f->next, bb, mode, block, readbytes); |
423 | } | 423 | } |
424 | 424 | ||
425 | /* XXX: we don't currently support anything other than these modes. */ | 425 | /* XXX: we don't currently support anything other than these modes. */ |
@@ -485,22 +485,35 @@ apr_status_t mod_gnutls_filter_output(ap_filter_t * f, | |||
485 | 485 | ||
486 | while (!APR_BRIGADE_EMPTY(bb)) { | 486 | while (!APR_BRIGADE_EMPTY(bb)) { |
487 | apr_bucket *bucket = APR_BRIGADE_FIRST(bb); | 487 | apr_bucket *bucket = APR_BRIGADE_FIRST(bb); |
488 | if (APR_BUCKET_IS_EOS(bucket) || APR_BUCKET_IS_FLUSH(bucket)) { | 488 | if (APR_BUCKET_IS_EOS(bucket)) { |
489 | /** TODO: GnuTLS doesn't have a special flush method? **/ | 489 | |
490 | /* gnutls_bye(ctxt->session, GNUTLS_SHUT_RDWR); */ | ||
491 | |||
492 | if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) { | ||
493 | return status; | ||
494 | } | ||
495 | break; | ||
496 | |||
497 | } else if (APR_BUCKET_IS_FLUSH(bucket)) { | ||
498 | |||
490 | if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) { | 499 | if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) { |
491 | return status; | 500 | return status; |
492 | } | 501 | } |
493 | break; | 502 | break; |
503 | |||
494 | } | 504 | } |
495 | else if (AP_BUCKET_IS_EOC(bucket)) { | 505 | else if (AP_BUCKET_IS_EOC(bucket)) { |
496 | gnutls_bye(ctxt->session, GNUTLS_SHUT_WR); | ||
497 | 506 | ||
507 | gnutls_bye(ctxt->session, GNUTLS_SHUT_WR); | ||
508 | gnutls_deinit(ctxt->session); | ||
498 | if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) { | 509 | if ((status = ap_pass_brigade(f->next, bb)) != APR_SUCCESS) { |
499 | return status; | 510 | return status; |
500 | } | 511 | } |
501 | break; | 512 | break; |
513 | |||
502 | } | 514 | } |
503 | else { | 515 | else { |
516 | |||
504 | /* filter output */ | 517 | /* filter output */ |
505 | const char *data; | 518 | const char *data; |
506 | apr_size_t len; | 519 | apr_size_t len; |
@@ -518,7 +531,10 @@ apr_status_t mod_gnutls_filter_output(ap_filter_t * f, | |||
518 | break; | 531 | break; |
519 | } | 532 | } |
520 | 533 | ||
521 | ret = gnutls_record_send(ctxt->session, data, len); | 534 | do { |
535 | ret = gnutls_record_send(ctxt->session, data, len); | ||
536 | } | ||
537 | while(ret == GNUTLS_E_INTERRUPTED || ret == GNUTLS_E_AGAIN); | ||
522 | 538 | ||
523 | if (ret < 0) { | 539 | if (ret < 0) { |
524 | /* error sending output */ | 540 | /* error sending output */ |
@@ -531,6 +547,8 @@ apr_status_t mod_gnutls_filter_output(ap_filter_t * f, | |||
531 | } | 547 | } |
532 | } | 548 | } |
533 | else if ((apr_size_t) ret != len) { | 549 | else if ((apr_size_t) ret != len) { |
550 | //apr_bucket_split(bucket, ret); | ||
551 | //APR_BUCKET_REMOVE(bucket); | ||
534 | /* not all of the data was sent. */ | 552 | /* not all of the data was sent. */ |
535 | /* mod_ssl basicly errors out here.. this doesn't seem right? */ | 553 | /* mod_ssl basicly errors out here.. this doesn't seem right? */ |
536 | ap_log_error(APLOG_MARK, APLOG_INFO, ctxt->output_rc, | 554 | ap_log_error(APLOG_MARK, APLOG_INFO, ctxt->output_rc, |
@@ -538,6 +556,7 @@ apr_status_t mod_gnutls_filter_output(ap_filter_t * f, | |||
538 | "GnuTLS: failed to write %" APR_SSIZE_T_FMT | 556 | "GnuTLS: failed to write %" APR_SSIZE_T_FMT |
539 | " of %" APR_SIZE_T_FMT " bytes.", | 557 | " of %" APR_SIZE_T_FMT " bytes.", |
540 | len - (apr_size_t) ret, len); | 558 | len - (apr_size_t) ret, len); |
559 | //continue; | ||
541 | if (ctxt->output_rc == APR_SUCCESS) { | 560 | if (ctxt->output_rc == APR_SUCCESS) { |
542 | ctxt->output_rc = APR_EGENERAL; | 561 | ctxt->output_rc = APR_EGENERAL; |
543 | } | 562 | } |