Index: include/asterisk/http.h =================================================================== --- include/asterisk/http.h (revision 129567) +++ include/asterisk/http.h (working copy) @@ -29,6 +29,8 @@ \author Mark Spencer */ +struct ast_http_server_instance; + /*! \brief HTTP Callbacks take the socket, the method and the path as arguments and should return the content, allocated with malloc(). Status should be changed to reflect the status of the request if it isn't 200 and title may be set to a malloc()'d string @@ -36,8 +38,15 @@ The return value may include additional headers at the front and MUST include a blank line with \r\n to provide separation between user headers and content (even if no content is specified) */ -typedef char *(*ast_http_callback)(struct sockaddr_in *requestor, const char *uri, struct ast_variable *params, int *status, char **title, int *contentlength); +typedef char *(*ast_http_callback)(struct ast_http_server_instance *ser, const char *uri, struct ast_variable *params, int *status, char **title, int *contentlength); +struct ast_http_server_instance { + FILE *f; + int fd; + struct sockaddr_in requestor; + ast_http_callback callback; +}; + struct ast_http_uri { struct ast_http_uri *next; const char *description; Index: main/manager.c =================================================================== --- main/manager.c (revision 129567) +++ main/manager.c (working copy) @@ -2682,7 +2682,7 @@ }; static char *contenttype[] = { "plain", "html", "xml" }; -static char *generic_http_callback(int format, struct sockaddr_in *requestor, const char *uri, struct ast_variable *params, int *status, char **title, int *contentlength) +static char *generic_http_callback(int format, struct ast_http_server_instance *ser, const char *uri, struct ast_variable *params, int *status, char **title, int *contentlength) { struct mansession *s = NULL; uint32_t ident = 0; @@ -2707,7 +2707,7 @@ *status = 500; goto generic_callback_out; } - memcpy(&s->sin, requestor, sizeof(s->sin)); + memcpy(&s->sin, &ser->requestor, sizeof(s->sin)); s->fd = -1; s->waiting_thread = AST_PTHREADT_NULL; s->send_events = 0; @@ -2836,19 +2836,19 @@ return retval; } -static char *manager_http_callback(struct sockaddr_in *requestor, const char *uri, struct ast_variable *params, int *status, char **title, int *contentlength) +static char *manager_http_callback(struct ast_http_server_instance *ser, const char *uri, struct ast_variable *params, int *status, char **title, int *contentlength) { - return generic_http_callback(FORMAT_HTML, requestor, uri, params, status, title, contentlength); + return generic_http_callback(FORMAT_HTML, ser, uri, params, status, title, contentlength); } -static char *mxml_http_callback(struct sockaddr_in *requestor, const char *uri, struct ast_variable *params, int *status, char **title, int *contentlength) +static char *mxml_http_callback(struct ast_http_server_instance *ser, const char *uri, struct ast_variable *params, int *status, char **title, int *contentlength) { - return generic_http_callback(FORMAT_XML, requestor, uri, params, status, title, contentlength); + return generic_http_callback(FORMAT_XML, ser, uri, params, status, title, contentlength); } -static char *rawman_http_callback(struct sockaddr_in *requestor, const char *uri, struct ast_variable *params, int *status, char **title, int *contentlength) +static char *rawman_http_callback(struct ast_http_server_instance *ser, const char *uri, struct ast_variable *params, int *status, char **title, int *contentlength) { - return generic_http_callback(FORMAT_RAW, requestor, uri, params, status, title, contentlength); + return generic_http_callback(FORMAT_RAW, ser, uri, params, status, title, contentlength); } struct ast_http_uri rawmanuri = { Index: main/http.c =================================================================== --- main/http.c (revision 129567) +++ main/http.c (working copy) @@ -60,13 +60,6 @@ #define MAX_PREFIX 80 #define DEFAULT_PREFIX "/asterisk" -struct ast_http_server_instance { - FILE *f; - int fd; - struct sockaddr_in requestor; - ast_http_callback callback; -}; - AST_RWLOCK_DEFINE_STATIC(uris_lock); static struct ast_http_uri *uris; @@ -105,7 +98,7 @@ return wkspace; } -static char *static_callback(struct sockaddr_in *req, const char *uri, struct ast_variable *vars, int *status, char **title, int *contentlength) +static char *static_callback(struct ast_http_server_instance *ser, const char *uri, struct ast_variable *vars, int *status, char **title, int *contentlength) { char result[4096]; char *c=result; @@ -176,7 +169,7 @@ } -static char *httpstatus_callback(struct sockaddr_in *req, const char *uri, struct ast_variable *vars, int *status, char **title, int *contentlength) +static char *httpstatus_callback(struct ast_http_server_instance *ser, const char *uri, struct ast_variable *vars, int *status, char **title, int *contentlength) { char result[4096]; size_t reslen = sizeof(result); @@ -292,7 +285,7 @@ ast_rwlock_unlock(&uris_lock); } -static char *handle_uri(struct sockaddr_in *sin, char *uri, int *status, +static char *handle_uri(struct ast_http_server_instance *ser, char *uri, int *status, char **title, int *contentlength, struct ast_variable **cookies, unsigned int *static_content) { @@ -363,7 +356,7 @@ if (urih) { if (urih->static_content) *static_content = 1; - c = urih->callback(sin, uri, vars, status, title, contentlength); + c = urih->callback(ser, uri, vars, status, title, contentlength); ast_rwlock_unlock(&uris_lock); } else if (ast_strlen_zero(uri) && ast_strlen_zero(prefix)) { /* Special case: If no prefix, and no URI, send to /static/index.html */ @@ -465,7 +458,7 @@ if (*uri) { if (!strcasecmp(buf, "get")) - c = handle_uri(&ser->requestor, uri, &status, &title, &contentlength, &vars, &static_content); + c = handle_uri(ser, uri, &status, &title, &contentlength, &vars, &static_content); else c = ast_http_error(501, "Not Implemented", NULL, "Attempt to use unimplemented / unsupported method");\ } else