#ifndef __FATALERRORMESSAGE_H
#define __FATALERRORMESSAGE_H
/*
 * Copyright 2009 Google Inc.
 *
 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
 * use this file except in compliance with the License. You may obtain a copy of
 * the License at
 *
 * http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
 * License for the specific language governing permissions and limitations under
 * the License.
 */

#include <string>
#include "Message.h"
#include "BrowserChannel.h"
#include "Value.h"

class HostChannel;

/**
 * Class representing an FatalError message received from the server.
 *
 * This message indicates that a fatal error occurred during the processing
 * of the previous message from the client and the connection should be
 * aborted.
 */
class FatalErrorMessage : public Message {
public:
  static const char TYPE = MESSAGE_TYPE_FATAL_ERROR;
private:
  std::string error;

protected:
  /**
   * @param error error message
   */
  FatalErrorMessage(const std::string& error) : error(error) {}

public:
  ~FatalErrorMessage();
  virtual char getType() const;

  const std::string& getError() const { return error; }

  static FatalErrorMessage* receive(HostChannel& channel);
  static bool send(HostChannel& channel, const std::string& error);
};
#endif
