int on_chunk_data(multipart_parser* p, const char *at, size_t length) { mp_arg_t *mp_arg = (mp_arg_t *)multipart_parser_get_data(p); mp_arg->partno++; if(mp_arg->check_name == -1) { mp_arg->check_name = 0; return 0; } if(length < 1) return 0; //multipart_parser_set_data(p, mp_arg); char md5sum[33]; if(save_img(mp_arg->thr_arg, at, length, md5sum) == -1) { LOG_PRINT(LOG_DEBUG, "Image Save Failed!"); LOG_PRINT(LOG_ERROR, "%s fail post save", mp_arg->address); evbuffer_add_printf(mp_arg->req->buffer_out, "<h1>Failed!</h1>\n" "<p>File save failed!</p>\n" ); } else { mp_arg->succno++; LOG_PRINT(LOG_INFO, "%s succ post pic:%s size:%d", mp_arg->address, md5sum, length); evbuffer_add_printf(mp_arg->req->buffer_out, "<h1>MD5: %s</h1>\n" "Image upload successfully! You can get this image via this address:<br/><br/>\n" "<a href=\"/%s\">http://yourhostname:%d/%s</a>?w=width&h=height&g=isgray&x=position_x&y=position_y&r=rotate&q=quality&f=format\n", md5sum, md5sum, settings.port, md5sum ); } return 0; }
static int on_part_data(multipart_parser *const parser, char const *const at, size_t const len) { if(!len) return 0; MultipartFormRef const form = multipart_parser_get_data(parser); form->type = MultipartPartData; *form->out = uv_buf_init((char *)at, len); return -1; }
static int multipart_on_part_data(multipart_parser* p, const char *at, size_t length) { extractMultipartParamTest* ctx = (extractMultipartParamTest*)multipart_parser_get_data(p); ctx->cksum = crc32_mem(ctx->cksum, at, length); return 0; }
int on_header_value(multipart_parser* p, const char *at, size_t length) { mp_arg_t *mp_arg = (mp_arg_t *)multipart_parser_get_data(p); char *filename = strnstr(at, "filename=", length); char *nameend = NULL; if(filename) { filename += 9; if(filename[0] == '\"') { filename++; nameend = strnchr(filename, '\"', length-(filename-at)); if(!nameend) mp_arg->check_name = -1; else { nameend[0] = '\0'; char fileType[32]; LOG_PRINT(LOG_DEBUG, "File[%s]", filename); if(get_type(filename, fileType) == -1) { LOG_PRINT(LOG_DEBUG, "Get Type of File[%s] Failed!", filename); mp_arg->check_name = -1; } else { LOG_PRINT(LOG_DEBUG, "fileType[%s]", fileType); if(is_img(fileType) != 1) { LOG_PRINT(LOG_DEBUG, "fileType[%s] is Not Supported!", fileType); mp_arg->check_name = -1; } } } } if(filename[0] != '\0' && mp_arg->check_name == -1) { LOG_PRINT(LOG_ERROR, "%s fail post type", mp_arg->address); evbuffer_add_printf(mp_arg->req->buffer_out, "<h1>File: %s</h1>\n" "<p>File type is not supported!</p>\n", filename ); } } //multipart_parser_set_data(p, mp_arg); char *header_value = (char *)malloc(length+1); snprintf(header_value, length+1, "%s", at); LOG_PRINT(LOG_DEBUG, "header_value %d %s", length, header_value); free(header_value); return 0; }
static int on_form_end(multipart_parser *const parser) { MultipartFormRef const form = multipart_parser_get_data(parser); form->type = MultipartFormEnd; *form->out = uv_buf_init(NULL, 0); return -1; }
static int on_headers_complete(multipart_parser *const parser) { MultipartFormRef const form = multipart_parser_get_data(parser); form->type = MultipartHeadersComplete; *form->out = uv_buf_init(NULL, 0); return -1; }
static int on_header_value(multipart_parser *const parser, strarg_t const at, size_t const len) { MultipartFormRef const form = multipart_parser_get_data(parser); form->type = MultipartHeaderValue; *form->out = uv_buf_init((char *)at, len); return -1; }
static int on_part_begin(multipart_parser *const parser) { MultipartFormRef const form = multipart_parser_get_data(parser); form->type = MultipartPartBegin; *form->out = uv_buf_init(NULL, 0); return -1; }