[asterisk-commits] russell: branch 1.4 r61220 - in /branches/1.4/main: Makefile http.c minimime/

asterisk-commits at lists.digium.com asterisk-commits at lists.digium.com
Tue Apr 10 09:05:56 MST 2007


Author: russell
Date: Tue Apr 10 11:05:55 2007
New Revision: 61220

URL: http://svn.digium.com/view/asterisk?view=rev&rev=61220
Log:
File upload support was added to solve some needs for the Asterisk GUI.
However, after much discussion, it has been decided that adding this to 1.4 is
not in the best interests of the project.  It has been removed here, but will
remain in trunk.

Removed:
    branches/1.4/main/minimime/
Modified:
    branches/1.4/main/Makefile
    branches/1.4/main/http.c

Modified: branches/1.4/main/Makefile
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/Makefile?view=diff&rev=61220&r1=61219&r2=61220
==============================================================================
--- branches/1.4/main/Makefile (original)
+++ branches/1.4/main/Makefile Tue Apr 10 11:05:55 2007
@@ -127,10 +127,7 @@
   H323LDLIBS=
 endif
 
-minimime/libmmime.a:
-	@cd minimime && $(MAKE) libmmime.a
-
-asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a minimime/libmmime.a $(AST_EMBED_LDSCRIPTS)
+asterisk: $(OBJS) editline/libedit.a db1-ast/libdb1.a $(AST_EMBED_LDSCRIPTS)
 	@$(ASTTOPDIR)/build_tools/make_build_h > $(ASTTOPDIR)/include/asterisk/build.h.tmp
 	@if cmp -s $(ASTTOPDIR)/include/asterisk/build.h.tmp $(ASTTOPDIR)/include/asterisk/build.h ; then echo ; else \
 		mv $(ASTTOPDIR)/include/asterisk/build.h.tmp $(ASTTOPDIR)/include/asterisk/build.h ; \
@@ -147,6 +144,3 @@
 	@if [ -f editline/Makefile ]; then $(MAKE) -C editline distclean ; fi
 	@$(MAKE) -C db1-ast clean
 	@$(MAKE) -C stdtime clean
-	@$(MAKE) -C minimime clean
-
-.PHONY: minimime/libmmime.a

Modified: branches/1.4/main/http.c
URL: http://svn.digium.com/view/asterisk/branches/1.4/main/http.c?view=diff&rev=61220&r1=61219&r2=61220
==============================================================================
--- branches/1.4/main/http.c (original)
+++ branches/1.4/main/http.c Tue Apr 10 11:05:55 2007
@@ -48,8 +48,6 @@
 #include <fcntl.h>
 #include <pthread.h>
 
-#include "minimime/mm.h"
-
 #include "asterisk/cli.h"
 #include "asterisk/http.h"
 #include "asterisk/utils.h"
@@ -71,14 +69,6 @@
 
 AST_RWLOCK_DEFINE_STATIC(uris_lock);
 static struct ast_http_uri *uris;
-
-struct ast_http_post_mapping {
-	AST_RWLIST_ENTRY(ast_http_post_mapping) entry;
-	char *from;
-	char *to;
-};
-
-static AST_RWLIST_HEAD_STATIC(post_mappings, ast_http_post_mapping);
 
 static int httpfd = -1;
 static pthread_t master = AST_PTHREADT_NULL;
@@ -297,225 +287,6 @@
 		prev = prev->next;
 	}
 	ast_rwlock_unlock(&uris_lock);
-}
-
-/*! \note This assumes that the post_mappings list is locked */
-static struct ast_http_post_mapping *find_post_mapping(const char *uri)
-{
-	struct ast_http_post_mapping *post_map;
-
-	if (!ast_strlen_zero(prefix) && strncmp(prefix, uri, strlen(prefix))) {
-		ast_log(LOG_DEBUG, "URI %s does not have prefix %s\n", uri, prefix);
-		return NULL;
-	}
-
-	uri += strlen(prefix);
-	if (*uri == '/')
-		uri++;
-	
-	AST_RWLIST_TRAVERSE(&post_mappings, post_map, entry) {
-		if (!strcmp(uri, post_map->from))
-			return post_map;
-	}
-
-	return NULL;
-}
-
-static int get_filename(struct mm_mimepart *part, char *fn, size_t fn_len)
-{
-	const char *filename;
-
-	filename = mm_content_getdispositionparambyname(part->type, "filename");
-
-	if (ast_strlen_zero(filename))
-		return -1;
-
-	ast_copy_string(fn, filename, fn_len);
-
-	return 0;
-}
-
-static void post_raw(struct mm_mimepart *part, const char *post_dir, const char *fn)
-{
-	char filename[PATH_MAX];
-	FILE *f;
-	const char *body;
-	size_t body_len;
-
-	snprintf(filename, sizeof(filename), "%s/%s", post_dir, fn);
-
-	if (option_debug)
-		ast_log(LOG_DEBUG, "Posting raw data to %s\n", filename);
-
-	if (!(f = fopen(filename, "w"))) {
-		ast_log(LOG_WARNING, "Unable to open %s for writing file from a POST!\n", filename);
-		return;
-	}
-
-	if (!(body = mm_mimepart_getbody(part, 0))) {
-		if (option_debug)
-			ast_log(LOG_DEBUG, "Couldn't get the mimepart body\n");
-		fclose(f);
-		return;
-	}
-	body_len = mm_mimepart_getlength(part);
-
-	if (option_debug)
-		ast_log(LOG_DEBUG, "Body length is %ld\n", (long int)body_len);
-
-	fwrite(body, 1, body_len, f);
-
-	fclose(f);
-}
-
-static char *handle_post(struct ast_http_server_instance *ser, char *uri, 
-	int *status, char **title, int *contentlength, struct ast_variable *headers,
-	struct ast_variable *cookies)
-{
-	char buf;
-	FILE *f;
-	size_t res;
-	struct ast_variable *var;
-	int content_len = 0;
-	MM_CTX *ctx;
-	int mm_res, i;
-	struct ast_http_post_mapping *post_map;
-	const char *post_dir;
-	unsigned long ident = 0;
-
-	for (var = cookies; var; var = var->next) {
-		if (strcasecmp(var->name, "mansession_id"))
-			continue;
-
-		if (sscanf(var->value, "%lx", &ident) != 1) {
-			*status = 400;
-			*title = ast_strdup("Bad Request");
-			return ast_http_error(400, "Bad Request", NULL, "The was an error parsing the request.");
-		}
-
-		if (!astman_verify_session_writepermissions(ident, EVENT_FLAG_CONFIG)) {
-			*status = 401;
-			*title = ast_strdup("Unauthorized");
-			return ast_http_error(401, "Unauthorized", NULL, "You are not authorized to make this request.");
-		}
-
-		break;
-	}
-	if (!var) {
-		*status = 401;
-		*title = ast_strdup("Unauthorized");
-		return ast_http_error(401, "Unauthorized", NULL, "You are not authorized to make this request.");
-	}
-
-	if (!(f = tmpfile()))
-		return NULL;
-
-	for (var = headers; var; var = var->next) {
-		if (!strcasecmp(var->name, "Content-Length")) {
-			if ((sscanf(var->value, "%u", &content_len)) != 1) {
-				ast_log(LOG_ERROR, "Invalid Content-Length in POST request!\n");
-				fclose(f);
-				return NULL;
-			}
-			if (option_debug)
-				ast_log(LOG_DEBUG, "Got a Content-Length of %d\n", content_len);
-		} else if (!strcasecmp(var->name, "Content-Type"))
-			fprintf(f, "Content-Type: %s\r\n\r\n", var->value);
-	}
-
-	while ((res = fread(&buf, 1, 1, ser->f))) {
-		fwrite(&buf, 1, 1, f);
-		content_len--;
-		if (!content_len)
-			break;
-	}
-
-	if (fseek(f, SEEK_SET, 0)) {
-		if (option_debug)
-			ast_log(LOG_DEBUG, "Failed to seek temp file back to beginning.\n");
-		fclose(f);
-		return NULL;
-	}
-
-	AST_RWLIST_RDLOCK(&post_mappings);
-	if (!(post_map = find_post_mapping(uri))) {
-		if (option_debug)
-			ast_log(LOG_DEBUG, "%s is not a valid URI for POST\n", uri);
-		AST_RWLIST_UNLOCK(&post_mappings);
-		fclose(f);
-		*status = 404;
-		*title = ast_strdup("Not Found");
-		return ast_http_error(404, "Not Found", NULL, "The requested URL was not found on this server.");
-	}
-	post_dir = ast_strdupa(post_map->to);
-	post_map = NULL;
-	AST_RWLIST_UNLOCK(&post_mappings);
-
-	if (option_debug)
-		ast_log(LOG_DEBUG, "Going to post files to dir %s\n", post_dir);
-
-	if (!(ctx = mm_context_new())) {
-		fclose(f);
-		return NULL;
-	}
-
-	mm_res = mm_parse_fileptr(ctx, f, MM_PARSE_LOOSE, 0);
-	fclose(f);
-	if (mm_res == -1) {
-		ast_log(LOG_ERROR, "Error parsing MIME data\n");
-		mm_context_free(ctx);
-		*status = 400;
-		*title = ast_strdup("Bad Request");
-		return ast_http_error(400, "Bad Request", NULL, "The was an error parsing the request.");
-	}
-
-	mm_res = mm_context_countparts(ctx);
-	if (!mm_res) {
-		ast_log(LOG_ERROR, "Invalid MIME data, found no parts!\n");
-		mm_context_free(ctx);
-		*status = 400;
-		*title = ast_strdup("Bad Request");
-		return ast_http_error(400, "Bad Request", NULL, "The was an error parsing the request.");
-	}
-
-	if (option_debug) {
-		if (mm_context_iscomposite(ctx))
-			ast_log(LOG_DEBUG, "Found %d MIME parts\n", mm_res - 1);
-		else
-			ast_log(LOG_DEBUG, "We have a flat (not multi-part) message\n");
-	}
-
-	for (i = 1; i < mm_res; i++) {
-		struct mm_mimepart *part;
-		char fn[PATH_MAX];
-
-		if (!(part = mm_context_getpart(ctx, i))) {
-			if (option_debug)
-				ast_log(LOG_DEBUG, "Failed to get mime part num %d\n", i);
-			continue;
-		}
-
-		if (get_filename(part, fn, sizeof(fn))) {
-			if (option_debug)
-				ast_log(LOG_DEBUG, "Failed to retrieve a filename for part num %d\n", i);
-			continue;
-		}
-	
-		if (!part->type) {
-			if (option_debug)
-				ast_log(LOG_DEBUG, "This part has no content struct?\n");
-			continue;
-		}
-
-		/* XXX This assumes the MIME part body is not encoded! */
-		post_raw(part, post_dir, fn);
-	}
-
-	mm_context_free(ctx);
-
-	*status = 200;
-	*title = ast_strdup("OK");
-	return ast_strdup("");
 }
 
 static char *handle_uri(struct sockaddr_in *sin, char *uri, int *status, char **title, int *contentlength, struct ast_variable **cookies)
@@ -607,7 +378,7 @@
 	char cookie[4096];
 	char timebuf[256];
 	struct ast_http_server_instance *ser = data;
-	struct ast_variable *var, *prev=NULL, *vars=NULL, *headers = NULL;
+	struct ast_variable *var, *prev=NULL, *vars=NULL;
 	char *uri, *c, *title=NULL;
 	char *vname, *vval;
 	int status = 200, contentlength = 0;
@@ -690,29 +461,12 @@
 						}
 					}
 				}
-			} else {
-				char *name, *value;
-
-				value = ast_strdupa(cookie);
-				name = strsep(&value, ":");
-				if (!value)
-					continue;
-				value = ast_skip_blanks(value);
-				if (ast_strlen_zero(value))
-					continue;
-				var = ast_variable_new(name, value);
-				if (!var)
-					continue;
-				var->next = headers;
-				headers = var;
 			}
 		}
 
 		if (*uri) {
 			if (!strcasecmp(buf, "get")) 
 				c = handle_uri(&ser->requestor, uri, &status, &title, &contentlength, &vars);
-			else if (!strcasecmp(buf, "post")) 
-				c = handle_post(ser, uri, &status, &title, &contentlength, headers, vars);
 			else 
 				c = ast_http_error(501, "Not Implemented", NULL, "Attempt to use unimplemented / unsupported method");\
 		} else 
@@ -872,47 +626,6 @@
 	}
 }
 
-static void destroy_post_mapping(struct ast_http_post_mapping *post_map)
-{
-	if (post_map->from)
-		free(post_map->from);
-	if (post_map->to)
-		free(post_map->to);
-	free(post_map);
-}
-
-static void destroy_post_mappings(void)
-{
-	struct ast_http_post_mapping *post_map;
-
-	AST_RWLIST_WRLOCK(&post_mappings);
-	while ((post_map = AST_RWLIST_REMOVE_HEAD(&post_mappings, entry)))
-		destroy_post_mapping(post_map);
-	AST_RWLIST_UNLOCK(&post_mappings);
-}
-
-static void add_post_mapping(const char *from, const char *to)
-{
-	struct ast_http_post_mapping *post_map;
-
-	if (!(post_map = ast_calloc(1, sizeof(*post_map))))
-		return;
-
-	if (!(post_map->from = ast_strdup(from))) {
-		destroy_post_mapping(post_map);
-		return;
-	}
-
-	if (!(post_map->to = ast_strdup(to))) {
-		destroy_post_mapping(post_map);
-		return;
-	}
-
-	AST_RWLIST_WRLOCK(&post_mappings);
-	AST_RWLIST_INSERT_TAIL(&post_mappings, post_map, entry);
-	AST_RWLIST_UNLOCK(&post_mappings);
-}
-
 static int __ast_http_load(int reload)
 {
 	struct ast_config *cfg;
@@ -928,8 +641,6 @@
 	sin.sin_port = htons(8088);
 
 	strcpy(newprefix, DEFAULT_PREFIX);
-
-	destroy_post_mappings();
 
 	cfg = ast_config_load("http.conf");
 	if (cfg) {
@@ -958,10 +669,6 @@
 			}
 			v = v->next;
 		}
-
-		for (v = ast_variable_browse(cfg, "post_mappings"); v; v = v->next)
-			add_post_mapping(v->name, v->value);
-
 		ast_config_destroy(cfg);
 	}
 	if (enabled)
@@ -981,7 +688,6 @@
 static int handle_show_http(int fd, int argc, char *argv[])
 {
 	struct ast_http_uri *urih;
-	struct ast_http_post_mapping *post_map;
 
 	if (argc != 3)
 		return RESULT_SHOWUSAGE;
@@ -1005,13 +711,6 @@
 		ast_cli(fd, "None.\n");
 	ast_rwlock_unlock(&uris_lock);
 
-	ast_cli(fd, "\nPOST mappings:\n");
-	AST_RWLIST_RDLOCK(&post_mappings);
-	AST_LIST_TRAVERSE(&post_mappings, post_map, entry)
-		ast_cli(fd, "%s/%s => %s\n", prefix, post_map->from, post_map->to);
-	ast_cli(fd, "%s\n", AST_LIST_EMPTY(&post_mappings) ? "None.\n" : "");
-	AST_RWLIST_UNLOCK(&post_mappings);
-
 	return RESULT_SUCCESS;
 }
 
@@ -1032,9 +731,6 @@
 
 int ast_http_init(void)
 {
-	mm_library_init();
-	mm_codec_registerdefaultcodecs();
-
 	ast_http_uri_link(&statusuri);
 	ast_http_uri_link(&staticuri);
 	ast_cli_register_multiple(cli_http, sizeof(cli_http) / sizeof(struct ast_cli_entry));



More information about the asterisk-commits mailing list