private static bool send_file_headers(Websvc w, SimpleStream ss) { w.chan.write(string.Format("Date: {0}\r\n", (object)ss.lastmodified().ToHttpDate())); w.chan.write(string.Format("ETag: {0}\r\n", (object)ss.etag())); w.chan.write(string.Format("Last-Modified: {0}\r\n", (object)ss.lastmodified().ToHttpDate())); return(true); }
public static bool send_file( Websvc w, SimpleStream ss, string fname, bool attached, bool andbody) { if (ss == null || !ss.isopen) { string x = "Send:File not found " + fname; w.chan.write(string.Format("HTTP/1.1 500 FILE NOT FOUND\r\nContent-Length: {0}\r\n\r\n", (object)x.Length)); w.chan.write(x); return(false); } if (!andbody) { Web.any_header(w, clib.content_type(fname), "200 Ok", 0, false); WebFile.send_file_headers(w, ss); w.body_send(); return(true); } if (w.ifmodified == ss.lastmodified().ToHttpDate()) { Web.any_header(w, clib.content_type(fname), "304 Not modified", 0, false); w.body_send(); return(true); } Web.any_header(w, clib.content_type(fname), "200 Ok", -1, true); WebFile.send_file_headers(w, ss); if (attached) { w.chan.write(string.Format("Content-Disposition: attachment; filename=\"{0}\"\r\n", (object)clib.fileonly(fname))); } w.chan.write("\r\n"); while (true) { int sz = 10000; byte[] numArray = new byte[sz]; int count = ss.read(numArray, 0, sz); if (count > 0) { w.chan.write(string.Format("{0:x}\r\n", (object)count)); w.chan.Write(numArray, 0, count); w.chan.write("\r\n"); } else { break; } } w.chan.write("0\r\n\r\n"); return(true); }