Skip to content

Instantly share code, notes, and snippets.

@joseph-montanez
Created April 13, 2011 15:54
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save joseph-montanez/917810 to your computer and use it in GitHub Desktop.
Save joseph-montanez/917810 to your computer and use it in GitHub Desktop.
Server Static Files
void static_handler (Soup.Server server, Soup.Message msg, string path,
GLib.HashTable? query, Soup.ClientContext client)
{
var response_text = "";
unowned uint8[] data;
var file = File.new_for_path ("." + path);
var mimetype = "text/html";
if (!file.query_exists ()) {
response_text += "File does not exist " + path + "<br>";
data = response_text.data;
}
try {
int64 length;
var basename = file.get_basename ();
var parts = basename.split (".");
var ext = parts[parts.length - 1];
if (ext == "png") {
mimetype = "image/png";
}
var filestream = file.read ();
var datastream = new DataInputStream (filestream);
var info = filestream.query_info ("*", null);
if(mimetype == "text/html") {
string line;
while ((line = datastream.read_line (null)) != null) {
response_text += line;
}
data = response_text.data;
} else {
length = info.get_size ();
uchar[] list = new uchar[length];
for (var i = 0; i < length; i++) {
uchar byte = datastream.read_byte ();
list[i] = byte;
}
data = list;
}
} catch (Error e) {
response_text += e.message + "<br>";
data = response_text.data;
}
msg.set_response (mimetype, Soup.MemoryUse.COPY, data);
}
void static_handler (Soup.Server server, Soup.Message msg, string path,
GLib.HashTable? query, Soup.ClientContext client)
{
var response_text = "";
uint8[] data;
var file = File.new_for_path ("." + path);
var mimetype = "text/html";
bool sent = false;
if (!file.query_exists ()) {
response_text += "File does not exist " + path + "<br>";
data = response_text.data;
}
try {
var basename = file.get_basename ();
var parts = basename.split (".");
var ext = parts[parts.length - 1];
if (ext == "png") {
mimetype = "image/png";
}
var dis = new DataInputStream (file.read (null));
if(mimetype == "text/html") {
string line;
while ((line = dis.read_line (null)) != null) {
response_text += line;
}
data = response_text.data;
} else {
//dis.set_byte_order (DataStreamByteOrder.LITTLE_ENDIAN);
size_t length;
string etag;
var loaded = file.load_contents (null, out response_text, out length, out etag);
if (loaded) {
var msgbody = new Soup.MessageBody ();
msgbody.append(Soup.MemoryUse.TEMPORARY, response_text.data);
//data = msgbody.flatten ().data;
msg.response_body = msgbody;
unowned Soup.MessageHeaders headers = msg.response_headers;
//headers.set_content_type (mimetype);
headers.set_content_length (length);
//msg.set_
sent = true;
} else {
data = "Unable load file".data;
}
//response_text = "Loaded: %s bytes ETAG: %s Data: %s".printf (length.to_string (), response_text, etag);
//data = "%s".printf(response_text).data; //.escape ("").data;
mimetype = "text/html";
//unowned Soup.MessageHeaders headers = msg.response_headers;
//headers.set_content_length (length);
}
} catch (Error e) {
response_text += e.message + "<br>";
data = response_text.data;
}
if (!sent) {
msg.set_response (mimetype, Soup.MemoryUse.COPY, data);
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment