示例#1
0
文件: zhttpd.c 项目: 734839030/zimg
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;
}
示例#2
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;
}
示例#4
0
文件: zhttpd.c 项目: 734839030/zimg
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;
}
示例#5
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;
}
示例#6
0
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;
}
示例#7
0
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;
}
示例#8
0
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;
}