#line 1 "cgo-builtin-export-prolog"
#include <stddef.h>
#ifndef GO_CGO_EXPORT_PROLOGUE_H
#define GO_CGO_EXPORT_PROLOGUE_H
#ifndef GO_CGO_GOSTRING_TYPEDEF
typedef struct { const char *p; ptrdiff_t n; } _GoString_;
#endif
#endif
#line 17 "pan_wrapper.go"
#ifdef BINDGEN
#include "pan_cdefs.h"
#else
#include "pan/pan_cdefs.h"
#endif
#define PAN_STREAM_HDR_SIZE 4
#define PAN_ADDR_HDR_SIZE 32
#line 1 "cgo-generated-wrapper"
#line 1 "cgo-gcc-export-header-prolog"
#ifndef GO_CGO_PROLOGUE_H
#define GO_CGO_PROLOGUE_H
typedef signed char GoInt8;
typedef unsigned char GoUint8;
typedef short GoInt16;
typedef unsigned short GoUint16;
typedef int GoInt32;
typedef unsigned int GoUint32;
typedef long long GoInt64;
typedef unsigned long long GoUint64;
typedef GoInt64 GoInt;
typedef GoUint64 GoUint;
typedef size_t GoUintptr;
typedef float GoFloat32;
typedef double GoFloat64;
#ifdef _MSC_VER
#include <complex.h>
typedef _Fcomplex GoComplex64;
typedef _Dcomplex GoComplex128;
#else
typedef float _Complex GoComplex64;
typedef double _Complex GoComplex128;
#endif
typedef char _check_for_64_bit_pointer_matching_GoInt[sizeof(void*)==64/8 ? 1:-1];
#ifndef GO_CGO_GOSTRING_TYPEDEF
typedef _GoString_ GoString;
#endif
typedef void *GoMap;
typedef void *GoChan;
typedef struct { void *t; void *v; } GoInterface;
typedef struct { void *data; GoInt len; GoInt cap; } GoSlice;
#endif
#ifdef __cplusplus
extern "C" {
#endif
extern uintptr_t PanDuplicateHandle(uintptr_t handle);
extern void PanDeleteHandle(uintptr_t handle);
extern PanError PanResolveUDPAddr(cchar_t* address, PanUDPAddr* resolved);
extern PanError PanResolveUDPAddrN(cchar_t* address, int len, PanUDPAddr* resolved);
extern PanUDPAddr PanUDPAddrNew(cuint64_t* ia, cuint8_t* ip, int ip_len, uint16_t port);
extern void PanUDPAddrGetIA(PanUDPAddr addr, uint64_t* ia);
extern int PanUDPAddrIsIPv6(PanUDPAddr addr);
extern PanError PanUDPAddrGetIPv4(PanUDPAddr addr, uint8_t* ip4);
extern PanError PanUDPAddrGetIPv6(PanUDPAddr addr, uint8_t* ip6);
extern uint16_t PanUDPAddrGetPort(PanUDPAddr addr);
extern char* PanUDPAddrToString(PanUDPAddr addr);
extern char* PanPathToString(PanPath path);
extern PanPathFingerprint PanPathGetFingerprint(PanPath path);
extern int PanPathContainsInterface(PanPath path, PanPathInterface iface);
extern int PanPathFingerprintAreEqual(PanPathFingerprint fp_a, PanPathFingerprint fp_b);
extern PanPolicy PanNewCPolicy(PanPolicyFilterFn filter, uintptr_t user);
extern void PanCPolicyTest(PanPolicy policy);
extern PanSelector PanNewCSelector(struct PanSelectorCallbacks* callbacks, uintptr_t user);
extern PanReplySelector PanNewCReplySelector(struct PanReplySelCallbacks* callbacks, uintptr_t user);
extern PanScionSocket PanNewScionSocket(cchar_t* listen, int n);
extern PanScionSocket PanNewScionSocket2();
extern PanError PanScionSocketBind(PanScionSocket socket, cchar_t* listen);
extern char* PanScionSocketGetLocalAddr(PanScionSocket socket);
extern PanError PanScionSocketReadFromAsync(PanScionSocket conn, void* buffer, int len, PanUDPAddr* from, int* n, int timeout_duration, OnCompletionWaker waker, void* arc_conn);
extern PanError PanScionSocketWriteToAsync(PanScionSocket conn, cvoid_t* buffer, int len, PanUDPAddr to, int* n, int timeout, OnCompletionWaker waker, void* arc_conn);
extern PanError PanScionSocketWriteToViaAsync(PanScionSocket conn, cvoid_t* buffer, int len, PanUDPAddr to, PanPath path, int* n, int timeout, OnCompletionWaker waker, void* arc_conn);
extern PanError PanScionSocketReadFromAsyncVia(PanScionSocket conn, void* buffer, int len, PanUDPAddr* from, PanPath* path, int* n, int timeout_duration, OnCompletionWaker waker, void* arc_conn);
extern PanError PanScionSocketClose(PanScionSocket conn);
extern PanError PanScionSocketSetDeadline(PanScionSocket conn, uint32_t t);
extern PanError PanScionSocketSetReadDeadline(PanScionSocket conn, uint32_t t);
extern PanError PanScionSocketSetWriteDeadline(PanScionSocket conn, uint32_t t);
extern PanError PanListenUDP(cchar_t* listen, PanReplySelector selector, PanListenConn* conn);
extern PanError PanListenConnReadFrom(PanListenConn conn, void* buffer, int len, PanUDPAddr* from, int* n);
extern PanError PanListenConnReadFromAsync(PanListenConn conn, void* buffer, int len, PanUDPAddr* from, int* n, int timeout_duration, OnCompletionWaker waker, void* arc_conn);
extern PanError PanListenConnReadFromAsyncVia(PanListenConn conn, void* buffer, int len, PanUDPAddr* from, PanPath* path, int* n, int timeout_duration, OnCompletionWaker waker, void* arc_conn);
extern PanError PanListenConnReadFromVia(PanListenConn conn, void* buffer, int len, PanUDPAddr* from, PanPath* path, int* n);
extern PanError PanListenConnWriteTo(PanListenConn conn, cvoid_t* buffer, int len, PanUDPAddr to, int* n);
extern PanError PanListenConnWriteToAsync(PanListenConn conn, cvoid_t* buffer, int len, PanUDPAddr to, int* n, int timeout, OnCompletionWaker waker, void* arc_conn);
extern PanError PanListenConnWriteToViaAsync(PanListenConn conn, cvoid_t* buffer, int len, PanUDPAddr to, PanPath path, int* n, int timeout, OnCompletionWaker waker, void* arc_conn);
extern PanError PanListenConnWriteToVia(PanListenConn conn, cvoid_t* buffer, int len, PanUDPAddr to, PanPath path, int* n);
extern PanUDPAddr PanListenConnLocalAddr(PanListenConn conn);
extern PanError PanListenConnSetDeadline(PanListenConn conn, uint32_t t);
extern PanError PanListenConnSetReadDeadline(PanListenConn conn, uint32_t t);
extern PanError PanListenConnSetWriteDeadline(PanListenConn conn, uint32_t t);
extern PanError PanListenConnClose(PanListenConn conn);
extern PanError PanDialUDP(cchar_t* local, PanUDPAddr remote, PanPolicy policy, PanSelector selector, PanConn* conn);
extern PanError PanConnRead(PanConn conn, void* buffer, int len, int* n);
extern PanError PanConnReadVia(PanConn conn, void* buffer, int len, PanPath* path, int* n);
extern PanError PanConnReadViaAsync(PanConn conn, void* buffer, int len, PanPath* path, int* n, int timeout, OnCompletionWaker waker, void* arc_conn);
extern PanError PanConnWrite(PanListenConn conn, cvoid_t* buffer, int len, int* n);
extern PanError PanConnWriteAsync(PanListenConn conn, cvoid_t* buffer, int len, int* n, int timeout, OnCompletionWaker waker, void* arc_conn);
extern GoUint64 GetLocalIA(GoUint8 do_panic);
extern PanError PanConnWriteVia(PanListenConn conn, cvoid_t* buffer, int len, PanPath path, int* n);
extern PanError PanConnWriteViaAsync(PanListenConn conn, cvoid_t* buffer, int len, PanPath path, int* n, int timeout, OnCompletionWaker waker, void* arc_conn);
extern PanUDPAddr PanConnLocalAddr(PanConn conn);
extern PanUDPAddr PanConnRemoteAddr(PanConn conn);
extern PanError PanConnSetDeadline(PanConn conn, uint32_t t);
extern PanError PanConnSetReadDeadline(PanConn conn, uint32_t t);
extern PanError PanConnSetWriteDeadline(PanConn conn, uint32_t t);
extern PanError PanConnClose(PanConn conn);
extern PanError PanNewListenSockAdapter(PanListenConn pan_conn, cchar_t* listen_addr, cchar_t* client_addr, PanListenSockAdapter* adapter);
extern PanError PanNewListenSockAdapter2(PanListenConn pan_conn, cchar_t* listen_addr, int len1, cchar_t* client_addr, int len2, PanListenSockAdapter* adapter);
extern PanError PanListenSockAdapterClose(PanListenSockAdapter adapter);
extern PanError PanNewConnSockAdapter(PanConn pan_conn, cchar_t* listen_addr, cchar_t* client_addr, PanConnSockAdapter* adapter);
extern PanError PanConnSockAdapterClose(PanConnSockAdapter adapter);
extern PanError PanNewListenSSockAdapter(PanListenConn pan_conn, cchar_t* listen_addr, PanListenSSockAdapter* adapter);
extern PanError PanListenSSockAdapterClose(PanListenSSockAdapter adapter);
extern PanError PanNewConnSSockAdapter(PanConn pan_conn, cchar_t* listen_addr, PanConnSSockAdapter* adapter);
extern PanError PanConnSSockAdapterClose(PanConnSSockAdapter adapter);
#ifdef __cplusplus
}
#endif