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

#ifndef __java_net_DatagramPacket__
#define __java_net_DatagramPacket__

#pragma interface

#include <java/lang/Object.h>
#include <gcj/array.h>

extern "Java"
{
  namespace java
  {
    namespace net
    {
        class DatagramPacket;
        class InetAddress;
        class SocketAddress;
    }
  }
}

class java::net::DatagramPacket : public ::java::lang::Object
{

public:
  DatagramPacket(JArray< jbyte > *, jint, jint);
  DatagramPacket(JArray< jbyte > *, jint);
  DatagramPacket(JArray< jbyte > *, jint, jint, ::java::net::InetAddress *, jint);
  DatagramPacket(JArray< jbyte > *, jint, ::java::net::InetAddress *, jint);
  DatagramPacket(JArray< jbyte > *, jint, jint, ::java::net::SocketAddress *);
  DatagramPacket(JArray< jbyte > *, jint, ::java::net::SocketAddress *);
  ::java::net::InetAddress * getAddress();
  jint getPort();
  JArray< jbyte > * getData();
  jint getOffset();
  jint getLength();
  void setAddress(::java::net::InetAddress *);
  void setPort(jint);
  void setSocketAddress(::java::net::SocketAddress *);
  ::java::net::SocketAddress * getSocketAddress();
  void setData(JArray< jbyte > *);
  void setData(JArray< jbyte > *, jint, jint);
  void setLength(jint);
private:
  JArray< jbyte > * __attribute__((aligned(__alignof__( ::java::lang::Object)))) buffer;
  jint offset;
public: // actually package-private
  jint length;
  jint maxlen;
private:
  ::java::net::InetAddress * address;
  jint port;
public:
  static ::java::lang::Class class$;
};

#endif // __java_net_DatagramPacket__
