Uploaded image for project: 'ActiveMQ C++ Client'
  1. ActiveMQ C++ Client
  2. AMQCPP-444

Exception too general

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Closed
    • Minor
    • Resolution: Incomplete
    • 3.4.5
    • None
    • Decaf
    • HPUX 11.31 but all

    • Patch Available

    Description

      In decaf/internal/net/ssl/openssl/OpenSSLSocket.cpp the function OpenSSLSocket::write after the call to SSL_write, the switch statement goes across possible errors and throws exceptions if necessary, but there are many more errors that what is checked for. My program was getting SSL_ERROR_SYSCALL, but was just being thrown as the default.

      I added some code, its not the best messages, but you can change that

      switch( SSL_get_error( this->parameters->getSSL(), written ) ) {
                      case SSL_ERROR_NONE:
                          offset += written;
                          remaining -= written;
                          break;
                      case SSL_ERROR_ZERO_RETURN:
                          throw SocketException(
                              __FILE__, __LINE__,
                              "The connection was broken unexpectedly." );
                      case SSL_ERROR_WANT_WRITE:
                          fprintf(stderr, "Err_get_error()=%d\n", ERR_get_error());
                          throw SocketException(
                              __FILE__, __LINE__,
                              "The exception was WANT_WRITE." );
                          break;
                      case SSL_ERROR_WANT_READ:
                          fprintf(stderr, "Err_get_error()=%d\n", ERR_get_error());
                          throw SocketException(
                              __FILE__, __LINE__,
                              "The exception was WANT_READ." );
                          break;
                      case SSL_ERROR_WANT_X509_LOOKUP:
                          fprintf(stderr, "Err_get_error()=%d\n", ERR_get_error());
                          throw SocketException(
                              __FILE__, __LINE__,
                              "The Exception was WANT_X509_LOOKUP." );
                          break;
                      case SSL_ERROR_SYSCALL:
                          fprintf(stderr, "Err_get_error()=%d\n", ERR_get_error());
                          fprintf(stderr, "errno=%d", errno);
                          throw SocketException(
                              __FILE__, __LINE__,
                              "The Exception was ERROR_SYSCALL. ret=%d", written ); 
                          break;
                      case SSL_ERROR_SSL:
                          fprintf(stderr, "Err_get_error()=%d\n", ERR_get_error());
                          throw SocketException(
                              __FILE__, __LINE__,
                              "The Exception was general ERROR_SSL" );
                          break;
                      default:
                          fprintf(stderr, "Err_get_error()=%d\n", ERR_get_error());
                          throw OpenSSLSocketException( __FILE__, __LINE__, "Default case, I cannot happen now" );
                          break;
                  }
      
      

      You also need to include errno.h and openssl/err.h for some for some of the messages I was printing.
      Thanks and please add something similar to the trunk if no objection.

      Attachments

        Activity

          People

            tabish Timothy A. Bish
            doldrums Jeffrey B
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved:

              Time Tracking

                Estimated:
                Original Estimate - 2h
                2h
                Remaining:
                Remaining Estimate - 2h
                2h
                Logged:
                Time Spent - Not Specified
                Not Specified