debug fastcgi streams while forwarding them
https://redmine.lighttpd.net/projects/fcgi-debug
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
115 lines
2.5 KiB
115 lines
2.5 KiB
#ifndef FCGI_DEBUG_H |
|
#define FCGI_DEBUG_H |
|
|
|
#include <ev.h> |
|
#include <glib.h> |
|
|
|
#include <errno.h> |
|
#include <fcntl.h> |
|
#include <stdlib.h> |
|
#include <string.h> |
|
#include <sys/socket.h> |
|
#include <sys/stat.h> |
|
#include <sys/un.h> |
|
#include <unistd.h> |
|
|
|
#define UNUSED(x) ( (void)(x) ) |
|
|
|
#define MAX_STREAM_BUF_SIZE (128*1024) |
|
|
|
struct addr; |
|
typedef struct addr addr; |
|
|
|
struct server; |
|
typedef struct server server; |
|
|
|
struct stream; |
|
typedef struct stream stream; |
|
|
|
struct connection; |
|
typedef struct connection connection; |
|
|
|
struct addr { |
|
struct sockaddr *saddr; |
|
socklen_t addr_len; |
|
}; |
|
|
|
struct server { |
|
struct ev_loop *loop; |
|
|
|
guint next_con_id; |
|
|
|
ev_signal |
|
sig_w_INT, |
|
sig_w_TERM, |
|
sig_w_PIPE, |
|
sig_w_HUP |
|
; |
|
|
|
ev_child w_child; |
|
ev_io w_accept; |
|
int child; |
|
|
|
gchar *tmpfile_name, *sockfile_name; |
|
addr client; |
|
|
|
gboolean exiting, stopped_signals; |
|
}; |
|
|
|
struct stream { |
|
stream *other; |
|
int fd; |
|
ev_io watcher; |
|
GString *buffer; |
|
}; |
|
|
|
typedef void (*DebugAppend)(gpointer ctx, const gchar *buf, gssize buflen); |
|
typedef void (*DebugFree)(gpointer ctx); |
|
|
|
struct connection { |
|
server *srv; |
|
guint con_id; |
|
stream s_server, s_client; |
|
gpointer ctx_server, ctx_client; |
|
DebugAppend da_server, da_client; |
|
DebugFree df_server, df_client; |
|
|
|
gboolean client_connected; |
|
}; |
|
|
|
|
|
/* tools.c */ |
|
void move2fd(int srcfd, int dstfd); |
|
void move2devnull(int fd); |
|
void fd_init(int fd); |
|
|
|
void ev_io_add_events(struct ev_loop *loop, ev_io *watcher, int events); |
|
void ev_io_rem_events(struct ev_loop *loop, ev_io *watcher, int events); |
|
void ev_io_set_events(struct ev_loop *loop, ev_io *watcher, int events); |
|
|
|
GString* g_string_set_const(GString* s, const gchar *data, gsize len); |
|
GString* g_string_escape(GString *data); |
|
|
|
/* connection.c */ |
|
void connection_new(server *srv, int fd_server); |
|
|
|
/* stream.c */ |
|
typedef void (*ev_io_cb)(struct ev_loop *loop, ev_io *w, int revents); |
|
|
|
void stream_init(server *srv, stream *s1, stream *s2, int fd1, int fd2, ev_io_cb cb1, ev_io_cb cb2, void* data); |
|
void stream_close(server *srv, stream *s1, stream *s2); |
|
void stream_clean(server *srv, stream *s1, stream *s2); |
|
void stream_start(server *srv, stream *s); |
|
|
|
gssize stream_read(server *srv, stream *s, char *buf, gssize bufsize); |
|
void stream_append(server *srv, stream *s, char *buf, gssize bufsize); |
|
gssize stream_write(server *srv, stream *s); |
|
|
|
/* log.c */ |
|
void log_raw(const gchar *head, gboolean from_server, guint con_id, GString *data); |
|
void log_raw_split(const gchar *head, gboolean from_server, guint con_id, GString *data); |
|
|
|
/* debug-fastcgi.c */ |
|
void setup_debug_fastcgi(connection *con); |
|
|
|
#endif |