
// DO NOT EDIT THIS FILE - it is machine generated -*- c++ -*-

#ifndef __gnu_java_net_protocol_http_Cookie__
#define __gnu_java_net_protocol_http_Cookie__

#pragma interface

#include <java/lang/Object.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace net
      {
        namespace protocol
        {
          namespace http
          {
              class Cookie;
          }
        }
      }
    }
  }
}

class gnu::java::net::protocol::http::Cookie : public ::java::lang::Object
{

public:
  Cookie(::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, ::java::lang::String *, jboolean, ::java::util::Date *);
  virtual ::java::lang::String * getName();
  virtual ::java::lang::String * getValue();
  virtual ::java::lang::String * getComment();
  virtual ::java::lang::String * getDomain();
  virtual ::java::lang::String * getPath();
  virtual jboolean isSecure();
  virtual ::java::util::Date * getExpiryDate();
  virtual ::java::lang::String * toString();
  virtual ::java::lang::String * toString(jboolean, jboolean);
public: // actually protected
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::lang::Object)))) name;
  ::java::lang::String * value;
  ::java::lang::String * comment;
  ::java::lang::String * domain;
  ::java::lang::String * path;
  jboolean secure;
  ::java::util::Date * expires;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_net_protocol_http_Cookie__
