#include #include #include "nsd.h" void Ns_ConnSetRequiredHeaders (Ns_Conn *conn, char *content_type, int len) { if (len > 0) ap_set_content_length (conn, len); if (content_type != NULL) conn->content_type = content_type; } void Ns_ConnFlushHeaders (Ns_Conn *conn, int status) { if (!conn->sent_bodyct) ap_send_http_header (conn); } int Ns_WriteConn (Ns_Conn *conn, char *data, int len) { int nwr = 0; do { nwr = ap_rwrite (data, len, conn); data += nwr; len -= nwr; } while (nwr >= 0 && len > 0); return (len == 0) ? NS_OK : NS_ERROR; } int Ns_ConnSendFd (request_rec *r, int fd, int nbytes) { BUFF *b = ap_bcreate (r->pool, 0); ap_bpushfd (b, fd, fd); ap_send_fb_length (b, r, nbytes); if (r->connection->aborted) return NS_ERROR; return NS_OK; } int Ns_ConnReturnData (Ns_Conn *conn, int status, char *stuff, int len, char *content_type) { /* XXX: Should check for HEAD here */ Ns_ConnSetRequiredHeaders (conn, content_type, len); Ns_ConnFlushHeaders (conn, status); Ns_WriteConn (conn, stuff, len); return NS_OK; /* Should do something else... */ } #define MSG500 "Internal server error" int Ns_ConnReturnInternalError (Ns_Conn *conn) { Ns_ConnReturnData (conn, 500, MSG500, strlen (MSG500), "text/html"); return NS_OK; }