#ifndef _NGXE_XS_H_INCLUDED_
#define _NGXE_XS_H_INCLUDED_

#include "EXTERN.h"
#include "perl.h"
#include "XSUB.h"

#include "ppport.h"

#include <ngxe_ngx.h>

typedef struct {
/* perl callback */
    SV    *handler;
    SV   **args;
    int    args_n;
    int    decremented;

/* native callback */
    ngx_connection_handler_pt connection_handler;
} ngxe_callback_t;

void ngxe_callback_dec(ngxe_callback_t *cb);
void ngxe_connection_callback(ngxe_callback_t *cb, ngx_connection_t *c, 
	char decrefcnts);
void ngxe_connection_buffer_callback(ngxe_callback_t *cb, ngx_connection_t *c, 
	SV *buffer);
void ngxe_callback(ngxe_callback_t *cb, char decrefcnts);

void ngxe_callback_cleanup(void *data);

#endif /* _NGXE_XS_H_INCLUDED_ */