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

#ifndef __gnu_java_net_protocol_jar_Connection__
#define __gnu_java_net_protocol_jar_Connection__

#pragma interface

#include <java/net/JarURLConnection.h>
extern "Java"
{
  namespace gnu
  {
    namespace java
    {
      namespace net
      {
        namespace protocol
        {
          namespace jar
          {
              class Connection;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace net
    {
        class URL;
    }
    namespace text
    {
        class SimpleDateFormat;
    }
  }
}

class gnu::java::net::protocol::jar::Connection : public ::java::net::JarURLConnection
{

public: // actually protected
  Connection(::java::net::URL *);
public:
  void connect();
  ::java::io::InputStream * getInputStream();
  ::java::util::jar::JarFile * getJarFile();
  ::java::lang::String * getHeaderField(::java::lang::String *);
  jint getContentLength();
  jlong getLastModified();
private:
  static ::java::text::SimpleDateFormat * dateFormat;
  ::java::util::jar::JarFile * __attribute__((aligned(__alignof__( ::java::net::JarURLConnection)))) jar_file;
  ::java::util::jar::JarEntry * jar_entry;
  ::java::net::URL * jar_url;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_net_protocol_jar_Connection__
