예제 #1
0
파일: libs3.c 프로젝트: soundsrc/s3nbd
int s3_xml_key_info_startelm(void *userdata, int parent,
							const char *nspace, const char *name,
							const char **atts) {
	if(strcmp(name,"ListBucketResult") == 0) return XML_STATE_LIST_BUCKET_RESULT;
	if(parent == XML_STATE_LIST_BUCKET_RESULT && strcmp(name,"Contents") == 0) {
		S3KeyInfo *ki = userdata;
		ne_buffer_clear(ki->nb_name);
		ne_buffer_clear(ki->nb_etag);
		ne_buffer_clear(ki->nb_storage_class);
		ne_buffer_clear(ki->nb_owner_id);
		ne_buffer_clear(ki->nb_owner_display_name);
		return XML_STATE_CONTENTS;
	}
	if(parent == XML_STATE_CONTENTS) {
		if(strcasecmp(name,"Key") == 0) return XML_STATE_KEY;
		if(strcasecmp(name,"LastModified") == 0) return XML_STATE_LAST_MODIFIED;
		if(strcasecmp(name,"ETag") == 0) return XML_STATE_ETAG;
		if(strcasecmp(name,"Size") == 0) return XML_STATE_SIZE;
		if(strcasecmp(name,"StorageClass") == 0) return XML_STATE_STORAGE_CLASS;
		if(strcasecmp(name,"Owner") == 0) return XML_STATE_OWNER;
	}
	if(parent == XML_STATE_OWNER) {
		if(strcasecmp(name,"ID") == 0) return XML_STATE_ID;
		if(strcasecmp(name,"DisplayName") == 0) return XML_STATE_DISPLAY_NAME;
	}

	return parent;
}
예제 #2
0
파일: ne_locks.c 프로젝트: nevermatch/davix
static int ld_startelm(void *userdata, int parent,
                       const char *nspace, const char *name,
		       const char **atts)
{
    struct discover_ctx *ctx = userdata;
    int id = ne_xml_mapid(element_map, NE_XML_MAPLEN(element_map),
                          nspace, name);
    
    ne_buffer_clear(ctx->cdata);
    
    if (can_accept(parent, id))
        return id;
    else
        return NE_XML_DECLINE;
}    
예제 #3
0
파일: ne_locks.c 프로젝트: elazzi/winscp
static int lk_startelm(void *userdata, int parent,
                       const char *nspace, const char *name,
		       const char **atts)
{
    struct lock_ctx *ctx = userdata;
    int id;
    NE_DEBUG_WINSCP_CONTEXT(ne_get_session(ctx->req));

    id = ne_xml_mapid(element_map, NE_XML_MAPLEN(element_map), nspace, name);

    NE_DEBUG(NE_DBG_LOCKS, "lk_startelm: %s => %d\n", name, id);
    
    if (id == 0)
        return NE_XML_DECLINE;    

    if (parent == 0 && ctx->token == NULL) {
        const char *token = ne_get_response_header(ctx->req, "Lock-Token");
        /* at the root element; retrieve the Lock-Token header,
         * and bail if it wasn't given. */
        if (token == NULL) {
            ne_xml_set_error(ctx->parser, 
                             _("LOCK response missing Lock-Token header"));
            return NE_XML_ABORT;
        }

        if (token[0] == '<') token++;
        ctx->token = ne_strdup(token);
        ne_shave(ctx->token, ">");
        NE_DEBUG(NE_DBG_LOCKS, "lk_startelm: Finding token %s\n",
                 ctx->token);
    }

    /* TODO: only accept 'prop' as root for LOCK response */
    if (!can_accept(parent, id))
        return NE_XML_DECLINE;

    if (id == ELM_activelock && !ctx->found) {
	/* a new activelock */
	ne_lock_free(&ctx->active);
	memset(&ctx->active, 0, sizeof ctx->active);
        ctx->active.timeout = NE_TIMEOUT_INVALID;
    }

    ne_buffer_clear(ctx->cdata);

    return id;
}