/** * response 404 error * @param connection [http connect handle] */ inline void return_404 (struct MHD_Connection * connection) { struct MHD_Response *response = MHD_create_response_from_buffer (strlen (_404_page), (void *) _404_page, MHD_RESPMEM_PERSISTENT); set_mime(response, HTM_FILE); MHD_queue_response (connection, MHD_HTTP_NOT_FOUND, response); MHD_destroy_response (response); }
/** * response custom 200 ok * @param connection [http connect handle] * @param response_data [custom response data] * @param response_data [custom response data] */ inline void return_custom_200 (struct MHD_Connection * connection, char * response_data, int mime_type) { struct MHD_Response *response = MHD_create_response_from_buffer (strlen (response_data), (void *) response_data, MHD_RESPMEM_MUST_FREE); set_mime(response, mime_type); MHD_queue_response (connection, MHD_HTTP_OK, response); MHD_destroy_response (response); }
/** * response 500 error * @param connection [http connect handle] */ inline void return_500 (struct MHD_Connection * connection, int err) { char *string_of_error = malloc(1024); if (string_of_error) sprintf(string_of_error, _500_page, err); struct MHD_Response *response = MHD_create_response_from_buffer (strlen (string_of_error), (void *) string_of_error, MHD_RESPMEM_MUST_FREE); set_mime(response, HTM_FILE); MHD_queue_response (connection, MHD_HTTP_INTERNAL_SERVER_ERROR, response); MHD_destroy_response (response); }
/** * process http get request * @param url [request url string] * @param connection [http connect handle] */ inline void process_get_url_requert(const char *url, struct MHD_Connection * connection) { struct MHD_Response *response; int fd, size, type; if (url_to_file(url, &fd, &size, &type)) { response = MHD_create_response_from_fd(size, fd); set_mime(response, type); MHD_queue_response(connection, MHD_HTTP_OK, response); MHD_destroy_response(response); return; } else if (url_to_api(url, connection, false, NULL, 0, NULL)) return; else return_404(connection); }
status_t set_mime_type(vnode *node, const char *filename) { return set_mime(&node->mime, filename); }
status_t fs_read_vnode(fs_volume *_vol, ino_t vnid, fs_vnode *_node, int *_type, uint32 *_flags, bool reenter) { nspace *ns = (nspace*)_vol->private_volume; vnode *newNode = NULL; ntfs_inode *ni = NULL; status_t result = B_NO_ERROR; if (!reenter) LOCK_VOL(ns); ERRPRINT("fs_read_vnode - ENTER\n"); _node->private_node = NULL; _node->ops = &gNTFSVnodeOps; _flags = 0; newNode = (vnode*)ntfs_calloc(sizeof(vnode)); if (newNode != NULL) { char *name = NULL; ni = ntfs_inode_open(ns->ntvol, vnid); if (ni == NULL) { result = ENOENT; goto exit; } // get the node type result = get_node_type(ni, _type); if (result != B_OK) goto exit; newNode->vnid = vnid; newNode->parent_vnid = ntfs_get_parent_ref(ni); if (ni->mrec->flags & MFT_RECORD_IS_DIRECTORY) set_mime(newNode, ".***"); else { name = (char*)malloc(MAX_PATH); if (name != NULL) { if (utils_inode_get_name(ni, name,MAX_PATH) == 1) set_mime(newNode, name); free(name); } } _node->private_node = newNode; } else result = ENOMEM; exit: if (ni != NULL) ntfs_inode_close(ni); if (result != B_OK && newNode != NULL) free(newNode); ERRPRINT("fs_read_vnode - EXIT, result is %s\n", strerror(result)); if (!reenter) UNLOCK_VOL(ns); return result; }