extract_supported_association_type (OpenID::Consumer::AssociationManager)

    # File lib/openid/consumer/associationmanager.rb, line 150
          def extract_supported_association_type(server_error, assoc_type)
            # Any error message whose code is not 'unsupported-type' should
            # be considered a total failure.
            if (server_error.error_code != 'unsupported-type' or
                server_error.message.is_openid1)
              Util.log("Server error when requesting an association from "\
                       "#{@server_url}: #{server_error.error_text}")
              return nil
            end

            # The server didn't like the association/session type that we
            # sent, and it sent us back a message that might tell us how to
            # handle it.
            Util.log("Unsupported association type #{assoc_type}: "\
                     "#{server_error.error_text}")

            # Extract the session_type and assoc_type from the error message
            assoc_type = server_error.message.get_arg(OPENID_NS, 'assoc_type')
            session_type = server_error.message.get_arg(OPENID_NS, 'session_type')

            if assoc_type.nil? or session_type.nil?
              Util.log("Server #{@server_url} responded with unsupported "\
                       "association session but did not supply a fallback.")
              return nil
            elsif !@negotiator.allowed?(assoc_type, session_type)
              Util.log("Server sent unsupported session/association type: "\
                       "session_type=#{session_type}, assoc_type=#{assoc_type}")
              return nil
            else
              return [assoc_type, session_type]
            end
          end