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

#ifndef __gnu_java_net_protocol_gcjlib_Connection__
#define __gnu_java_net_protocol_gcjlib_Connection__

#pragma interface

#include <java/net/URLConnection.h>
extern "Java"
{
  namespace gnu
  {
    namespace gcj
    {
        class Core;
    }
    namespace java
    {
      namespace net
      {
        namespace protocol
        {
          namespace gcjlib
          {
              class Connection;
          }
        }
      }
    }
  }
  namespace java
  {
    namespace net
    {
        class URL;
    }
  }
}

class gnu::java::net::protocol::gcjlib::Connection : public ::java::net::URLConnection
{

public:
  Connection(::java::net::URL *);
  virtual void connect();
  virtual ::java::io::InputStream * getInputStream();
  virtual ::java::lang::String * getHeaderField(::java::lang::String *);
public: // actually package-private
  ::java::lang::String * __attribute__((aligned(__alignof__( ::java::net::URLConnection)))) solib;
  ::java::lang::String * name;
  ::gnu::gcj::Core * core;
public:
  static ::java::lang::Class class$;
};

#endif // __gnu_java_net_protocol_gcjlib_Connection__
