from_message (OpenID::Server::AssociateRequest)

    # File lib/openid/server.rb, line 312
          def self.from_message(message, op_endpoint=UNUSED)
            if message.is_openid1()
              session_type = message.get_arg(OPENID_NS, 'session_type')
              if session_type == 'no-encryption'
                Util.log('Received OpenID 1 request with a no-encryption ' +
                         'association session type. Continuing anyway.')
              elsif !session_type
                session_type = 'no-encryption'
              end
            else
              session_type = message.get_arg(OPENID2_NS, 'session_type')
              if !session_type
                raise ProtocolError.new(message,
                                        text="session_type missing from request")
              end
            end

            session_class = @@session_classes[session_type]

            if !session_class
              raise ProtocolError.new(message,
                      sprintf("Unknown session type %s", session_type))
            end

            begin
              session = session_class.from_message(message)
            rescue ArgumentError => why
              # XXX
              raise ProtocolError.new(message,
                                      sprintf('Error parsing %s session: %s',
                                              session_type, why))
            end

            assoc_type = message.get_arg(OPENID_NS, 'assoc_type', 'HMAC-SHA1')
            if !session.allowed_assoc_type?(assoc_type)
              msg = sprintf('Session type %s does not support association type %s',
                            session_type, assoc_type)
              raise ProtocolError.new(message, msg)
            end

            obj = self.new(session, assoc_type)
            obj.message = message
            return obj
          end