summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJon Bergli Heier <snakebite@jvnv.net>2010-08-20 16:27:17 +0200
committerJon Bergli Heier <snakebite@jvnv.net>2010-08-20 16:27:17 +0200
commite223ce08864953b9ff59aa2196010d8928a4c3f5 (patch)
treefda8ebbc5dce60d4e27f330d11d31e4d08dd9c9a
parentc08386db6b190f32a138c667a4bbc637e8ffa620 (diff)
Renamed command files.
-rw-r--r--commands.c170
-rw-r--r--commands.h7
-rw-r--r--httpd_commands.c183
-rw-r--r--httpd_commands.h8
-rw-r--r--server_commands.c73
-rw-r--r--server_commands.h9
6 files changed, 225 insertions, 225 deletions
diff --git a/commands.c b/commands.c
index c77d7c8..4442a1b 100644
--- a/commands.c
+++ b/commands.c
@@ -1,12 +1,5 @@
-#include "commands.h"
+#include "server_commands.h"
#include "music.h"
-#include "transcode.h"
-#include "decoder.h"
-#include "encoder.h"
-
-#include <glib.h>
-#include <string.h>
-#include <gio/gio.h>
static void send_404(GSocketConnection *connection) {
GError *error = NULL;
@@ -22,162 +15,59 @@ static void send_404(GSocketConnection *connection) {
}
}
-static void commands_get_raw(GSocketConnection *connection, const gchar *cmd) {
+static void commands_list(GSocketConnection *connection, const gchar *cmd) {
GError *error = NULL;
gchar **data = g_strsplit(cmd, " ", 2);
- g_assert(data[0] != NULL && data[1] != NULL);
-
- gchar *path = g_strdup(data[1]);
- g_strfreev(data);
-
- struct file *f = music_find_file(path);
-
- if(f == NULL) {
- g_warning("couldn't find %s", path);
- send_404(connection);
- goto commands_get_raw_free_path;
- }
-
- GOutputStream *os = g_io_stream_get_output_stream((GIOStream*)connection);
-
- gchar *full_path = music_get_full_path(path);
- GFile *file = g_file_new_for_path(full_path);
- g_free(full_path);
-
- GFileInputStream *is = g_file_read(file, NULL, &error);
-
- if(is == NULL) {
- g_warning(error->message);
- g_error_free(error);
- goto commands_get_raw_file_unref;
+ for(gint i = 0; data[i]; i++) {
+ g_debug("\tdata[%d] = %s", i, data[i]);
}
+ g_assert(data[0] != NULL);
- GFileInfo *fi = g_file_query_info(file, G_FILE_ATTRIBUTE_STANDARD_SIZE,
- G_FILE_QUERY_INFO_NONE, NULL, &error);
-
- if(fi == NULL) {
- g_warning(error->message);
- g_error_free(error);
- goto commands_get_raw_file_unref;
- }
-
- goffset filesize = g_file_info_get_size(fi);
- g_object_unref(fi);
-
- GString *string = g_string_new(NULL);
- g_string_append(string, "HTTP/1.1 200 OK\r\n");
- g_string_append(string, "content-type: application/octet-stream\r\n");
- g_string_append_printf(string, "content-length: %lu\r\n", filesize);
- g_string_append(string, "\r\n");
-
- if(g_output_stream_write_all(os, string->str, string->len, NULL, NULL,
- &error) == FALSE) {
- g_warning(error->message);
- g_error_free(error);
- g_string_free(string, TRUE);
- goto commands_get_raw_file_unref;
- }
-
- g_string_free(string, TRUE);
-
- gssize size = g_output_stream_splice(os, (GInputStream*)is,
- G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE ||
- G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET,
- NULL, &error);
- if(size == -1) {
- g_warning(error->message);
+ gchar *dirname;
+ if(data[1] != NULL) {
+ dirname = g_strdup(data[1]);
} else {
- g_debug("wrote %lu bytes of file data", size);
+ dirname = "/";
}
-commands_get_raw_file_unref:
-
- g_object_unref(is);
- g_object_unref(file);
-
-commands_get_raw_free_path:
-
- g_free(path);
-}
-
-static void commands_get_mp3(GSocketConnection *connection, const gchar *cmd) {
- GError *error = NULL;
- gchar **data = g_strsplit(cmd, " ", 2);
- g_assert(data[0] != NULL && data[1] != NULL);
-
- gchar *path = g_strdup(data[1]);
g_strfreev(data);
- struct file *f = music_find_file(path);
-
- if(f == NULL) {
- g_warning("couldn't find %s", path);
+ struct directory *directory = music_find_dir(dirname);
+ if(directory == NULL) {
+ g_warning("couldn't find directory %s", dirname);
send_404(connection);
- goto commands_get_mp3_free_path;
+ return;
}
- GOutputStream *os = g_io_stream_get_output_stream((GIOStream*)connection);
-
- gchar *full_path = music_get_full_path(path);
- GFile *file = g_file_new_for_path(full_path);
- g_free(full_path);
-
- GFileInputStream *is = g_file_read(file, NULL, &error);
+ GString *string = g_string_new(NULL);
- if(is == NULL) {
- g_warning(error->message);
- g_error_free(error);
- goto commands_get_mp3_file_unref;
+ for(GSList *node = directory->sub; node; node = g_slist_next(node)) {
+ struct directory *d = node->data;
+ gchar *name = g_path_get_basename(d->path);
+ g_string_append_printf(string, "%s\n", name);
+ g_free(name);
}
- GString *string = g_string_new(NULL);
- g_string_append(string, "HTTP/1.1 200 OK\r\n");
- g_string_append(string, "content-type: application/octet-stream\r\n");
- g_string_append(string, "\r\n");
+ for(GSList *node = directory->files; node; node = g_slist_next(node)) {
+ struct file *f = node->data;
+ g_string_append_printf(string, "%s\n", f->name);
+ }
+ GOutputStream *os = g_io_stream_get_output_stream((GIOStream*)connection);
if(g_output_stream_write_all(os, string->str, string->len, NULL, NULL,
- &error) == FALSE) {
+ &error) == FALSE) {
g_warning(error->message);
g_error_free(error);
- g_string_free(string, TRUE);
- goto commands_get_mp3_file_unref;
}
g_string_free(string, TRUE);
-
- const struct decoder_plugin *decoder = decoder_find(path);
- const struct encoder_plugin *encoder = encoder_get("lame");
-
- if(decoder == NULL) {
- g_warning("no suitable decoder found");
- goto commands_get_mp3_file_unref;
- } else {
- g_debug("using decoder %s", decoder->name);
- }
-
- if(encoder == NULL) {
- g_warning("no encoder found");
- goto commands_get_mp3_file_unref;
- }
-
- transcode((GInputStream*)is, decoder, os, encoder);
-
-commands_get_mp3_file_unref:
-
- g_object_unref(is);
- g_object_unref(file);
-
-commands_get_mp3_free_path:
- g_free(path);
}
-void commands_handle(GSocketConnection *connection, const gchar *cmd) {
- g_debug("handling command string %s", cmd);
- if(g_ascii_strncasecmp(cmd, "/get_raw", 8) == 0) {
- commands_get_raw(connection, cmd);
- } else if(g_ascii_strncasecmp(cmd, "/get_mp3", 8) == 0) {
- commands_get_mp3(connection, cmd);
+void server_commands_handle(GSocketConnection *connection, const gchar *cmd) {
+ g_debug(cmd);
+ if(g_strncasecmp(cmd, "list", 4) == 0) {
+ commands_list(connection, cmd);
} else {
- g_warning("no command handlers found");
+ g_debug("unknown command");
}
}
diff --git a/commands.h b/commands.h
index 7b90f95..3a073b3 100644
--- a/commands.h
+++ b/commands.h
@@ -1,8 +1,9 @@
-#ifndef _COMMANDS_H_
-#define _COMMANDS_H_
+#ifndef _SERVER_COMMANDS_H_
+#define _SERVER_COMMANDS_H_
+#include <glib.h>
#include <gio/gio.h>
-void commands_handle(GSocketConnection *connection, const gchar *cmd);
+void server_commands_handle(GSocketConnection *connection, const gchar *cmd);
#endif
diff --git a/httpd_commands.c b/httpd_commands.c
new file mode 100644
index 0000000..c77d7c8
--- /dev/null
+++ b/httpd_commands.c
@@ -0,0 +1,183 @@
+#include "commands.h"
+#include "music.h"
+#include "transcode.h"
+#include "decoder.h"
+#include "encoder.h"
+
+#include <glib.h>
+#include <string.h>
+#include <gio/gio.h>
+
+static void send_404(GSocketConnection *connection) {
+ GError *error = NULL;
+ GString *string = g_string_new(NULL);
+ g_string_append(string, "HTTP/1.1 404 Not Found\r\n");
+ g_string_append(string, "\r\n");
+
+ GOutputStream *os = g_io_stream_get_output_stream((GIOStream*)connection);
+ if(g_output_stream_write_all(os, string->str, string->len, NULL, NULL,
+ &error) == FALSE) {
+ g_warning(error->message);
+ g_error_free(error);
+ }
+}
+
+static void commands_get_raw(GSocketConnection *connection, const gchar *cmd) {
+ GError *error = NULL;
+ gchar **data = g_strsplit(cmd, " ", 2);
+ g_assert(data[0] != NULL && data[1] != NULL);
+
+ gchar *path = g_strdup(data[1]);
+ g_strfreev(data);
+
+ struct file *f = music_find_file(path);
+
+ if(f == NULL) {
+ g_warning("couldn't find %s", path);
+ send_404(connection);
+ goto commands_get_raw_free_path;
+ }
+
+ GOutputStream *os = g_io_stream_get_output_stream((GIOStream*)connection);
+
+ gchar *full_path = music_get_full_path(path);
+ GFile *file = g_file_new_for_path(full_path);
+ g_free(full_path);
+
+ GFileInputStream *is = g_file_read(file, NULL, &error);
+
+ if(is == NULL) {
+ g_warning(error->message);
+ g_error_free(error);
+ goto commands_get_raw_file_unref;
+ }
+
+ GFileInfo *fi = g_file_query_info(file, G_FILE_ATTRIBUTE_STANDARD_SIZE,
+ G_FILE_QUERY_INFO_NONE, NULL, &error);
+
+ if(fi == NULL) {
+ g_warning(error->message);
+ g_error_free(error);
+ goto commands_get_raw_file_unref;
+ }
+
+ goffset filesize = g_file_info_get_size(fi);
+ g_object_unref(fi);
+
+ GString *string = g_string_new(NULL);
+ g_string_append(string, "HTTP/1.1 200 OK\r\n");
+ g_string_append(string, "content-type: application/octet-stream\r\n");
+ g_string_append_printf(string, "content-length: %lu\r\n", filesize);
+ g_string_append(string, "\r\n");
+
+ if(g_output_stream_write_all(os, string->str, string->len, NULL, NULL,
+ &error) == FALSE) {
+ g_warning(error->message);
+ g_error_free(error);
+ g_string_free(string, TRUE);
+ goto commands_get_raw_file_unref;
+ }
+
+ g_string_free(string, TRUE);
+
+ gssize size = g_output_stream_splice(os, (GInputStream*)is,
+ G_OUTPUT_STREAM_SPLICE_CLOSE_SOURCE ||
+ G_OUTPUT_STREAM_SPLICE_CLOSE_TARGET,
+ NULL, &error);
+ if(size == -1) {
+ g_warning(error->message);
+ } else {
+ g_debug("wrote %lu bytes of file data", size);
+ }
+
+commands_get_raw_file_unref:
+
+ g_object_unref(is);
+ g_object_unref(file);
+
+commands_get_raw_free_path:
+
+ g_free(path);
+}
+
+static void commands_get_mp3(GSocketConnection *connection, const gchar *cmd) {
+ GError *error = NULL;
+ gchar **data = g_strsplit(cmd, " ", 2);
+ g_assert(data[0] != NULL && data[1] != NULL);
+
+ gchar *path = g_strdup(data[1]);
+ g_strfreev(data);
+
+ struct file *f = music_find_file(path);
+
+ if(f == NULL) {
+ g_warning("couldn't find %s", path);
+ send_404(connection);
+ goto commands_get_mp3_free_path;
+ }
+
+ GOutputStream *os = g_io_stream_get_output_stream((GIOStream*)connection);
+
+ gchar *full_path = music_get_full_path(path);
+ GFile *file = g_file_new_for_path(full_path);
+ g_free(full_path);
+
+ GFileInputStream *is = g_file_read(file, NULL, &error);
+
+ if(is == NULL) {
+ g_warning(error->message);
+ g_error_free(error);
+ goto commands_get_mp3_file_unref;
+ }
+
+ GString *string = g_string_new(NULL);
+ g_string_append(string, "HTTP/1.1 200 OK\r\n");
+ g_string_append(string, "content-type: application/octet-stream\r\n");
+ g_string_append(string, "\r\n");
+
+ if(g_output_stream_write_all(os, string->str, string->len, NULL, NULL,
+ &error) == FALSE) {
+ g_warning(error->message);
+ g_error_free(error);
+ g_string_free(string, TRUE);
+ goto commands_get_mp3_file_unref;
+ }
+
+ g_string_free(string, TRUE);
+
+ const struct decoder_plugin *decoder = decoder_find(path);
+ const struct encoder_plugin *encoder = encoder_get("lame");
+
+ if(decoder == NULL) {
+ g_warning("no suitable decoder found");
+ goto commands_get_mp3_file_unref;
+ } else {
+ g_debug("using decoder %s", decoder->name);
+ }
+
+ if(encoder == NULL) {
+ g_warning("no encoder found");
+ goto commands_get_mp3_file_unref;
+ }
+
+ transcode((GInputStream*)is, decoder, os, encoder);
+
+commands_get_mp3_file_unref:
+
+ g_object_unref(is);
+ g_object_unref(file);
+
+commands_get_mp3_free_path:
+ g_free(path);
+}
+
+void commands_handle(GSocketConnection *connection, const gchar *cmd) {
+ g_debug("handling command string %s", cmd);
+ if(g_ascii_strncasecmp(cmd, "/get_raw", 8) == 0) {
+ commands_get_raw(connection, cmd);
+ } else if(g_ascii_strncasecmp(cmd, "/get_mp3", 8) == 0) {
+ commands_get_mp3(connection, cmd);
+ } else {
+ g_warning("no command handlers found");
+ }
+}
diff --git a/httpd_commands.h b/httpd_commands.h
new file mode 100644
index 0000000..7b90f95
--- /dev/null
+++ b/httpd_commands.h
@@ -0,0 +1,8 @@
+#ifndef _COMMANDS_H_
+#define _COMMANDS_H_
+
+#include <gio/gio.h>
+
+void commands_handle(GSocketConnection *connection, const gchar *cmd);
+
+#endif
diff --git a/server_commands.c b/server_commands.c
deleted file mode 100644
index 4442a1b..0000000
--- a/server_commands.c
+++ /dev/null
@@ -1,73 +0,0 @@
-#include "server_commands.h"
-#include "music.h"
-
-static void send_404(GSocketConnection *connection) {
- GError *error = NULL;
- GString *string = g_string_new(NULL);
- g_string_append(string, "HTTP/1.1 404 Not Found\r\n");
- g_string_append(string, "\r\n");
-
- GOutputStream *os = g_io_stream_get_output_stream((GIOStream*)connection);
- if(g_output_stream_write_all(os, string->str, string->len, NULL, NULL,
- &error) == FALSE) {
- g_warning(error->message);
- g_error_free(error);
- }
-}
-
-static void commands_list(GSocketConnection *connection, const gchar *cmd) {
- GError *error = NULL;
- gchar **data = g_strsplit(cmd, " ", 2);
- for(gint i = 0; data[i]; i++) {
- g_debug("\tdata[%d] = %s", i, data[i]);
- }
- g_assert(data[0] != NULL);
-
- gchar *dirname;
- if(data[1] != NULL) {
- dirname = g_strdup(data[1]);
- } else {
- dirname = "/";
- }
-
- g_strfreev(data);
-
- struct directory *directory = music_find_dir(dirname);
- if(directory == NULL) {
- g_warning("couldn't find directory %s", dirname);
- send_404(connection);
- return;
- }
-
- GString *string = g_string_new(NULL);
-
- for(GSList *node = directory->sub; node; node = g_slist_next(node)) {
- struct directory *d = node->data;
- gchar *name = g_path_get_basename(d->path);
- g_string_append_printf(string, "%s\n", name);
- g_free(name);
- }
-
- for(GSList *node = directory->files; node; node = g_slist_next(node)) {
- struct file *f = node->data;
- g_string_append_printf(string, "%s\n", f->name);
- }
-
- GOutputStream *os = g_io_stream_get_output_stream((GIOStream*)connection);
- if(g_output_stream_write_all(os, string->str, string->len, NULL, NULL,
- &error) == FALSE) {
- g_warning(error->message);
- g_error_free(error);
- }
-
- g_string_free(string, TRUE);
-}
-
-void server_commands_handle(GSocketConnection *connection, const gchar *cmd) {
- g_debug(cmd);
- if(g_strncasecmp(cmd, "list", 4) == 0) {
- commands_list(connection, cmd);
- } else {
- g_debug("unknown command");
- }
-}
diff --git a/server_commands.h b/server_commands.h
deleted file mode 100644
index 3a073b3..0000000
--- a/server_commands.h
+++ /dev/null
@@ -1,9 +0,0 @@
-#ifndef _SERVER_COMMANDS_H_
-#define _SERVER_COMMANDS_H_
-
-#include <glib.h>
-#include <gio/gio.h>
-
-void server_commands_handle(GSocketConnection *connection, const gchar *cmd);
-
-#endif