libidav/session.h

Fri, 15 Nov 2019 18:07:11 +0100

author
Olaf Wintermann <olaf.wintermann@gmail.com>
date
Fri, 15 Nov 2019 18:07:11 +0100
changeset 679
0d352b79363a
parent 609
dc3d70848c7c
child 747
efbd59642577
permissions
-rw-r--r--

fix some versioning related bugs and add tests

/*
 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
 *
 * Copyright 2018 Olaf Wintermann. All rights reserved.
 *
 * Redistribution and use in source and binary forms, with or without
 * modification, are permitted provided that the following conditions are met:
 *
 *   1. Redistributions of source code must retain the above copyright
 *      notice, this list of conditions and the following disclaimer.
 *
 *   2. Redistributions in binary form must reproduce the above copyright
 *      notice, this list of conditions and the following disclaimer in the
 *      documentation and/or other materials provided with the distribution.
 *
 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
 * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
 * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE
 * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
 * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
 * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
 * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
 * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
 * POSSIBILITY OF SUCH DAMAGE.
 */

#ifndef DAV_SESSION_H
#define	DAV_SESSION_H

#include <ucx/buffer.h>
#include "webdav.h"

#ifdef	__cplusplus
extern "C" {
#endif

// initial size of the session mempool
#define DAV_SESSION_MEMPOOL_SIZE 1024
// initial size of the path cache map
#define DAV_PATH_CACHE_SIZE 32
    
#define DAV_ENCRYPT_NAME(sn) \
    (((sn)->flags & DAV_SESSION_ENCRYPT_NAME) == DAV_SESSION_ENCRYPT_NAME)
    
#define DAV_DECRYPT_NAME(sn) \
    (((sn)->flags & DAV_SESSION_DECRYPT_NAME) == DAV_SESSION_DECRYPT_NAME)
    
#define DAV_ENCRYPT_CONTENT(sn) \
    (((sn)->flags & DAV_SESSION_ENCRYPT_CONTENT) == DAV_SESSION_ENCRYPT_CONTENT)
    
#define DAV_DECRYPT_CONTENT(sn) \
    (((sn)->flags & DAV_SESSION_DECRYPT_CONTENT) == DAV_SESSION_DECRYPT_CONTENT)

#define DAV_IS_ENCRYPTED(sn) \
    (DAV_ENCRYPT_NAME(sn) || DAV_ENCRYPT_CONTENT(sn))
    
#define DAV_CRYPTO(sn) \
    (DAV_ENCRYPT_NAME(sn) || DAV_DECRYPT_NAME(sn) || \
     DAV_ENCRYPT_CONTENT(sn) || DAV_DECRYPT_CONTENT(sn))

#define DAV_ENCRYPT_PROPERTIES(sn) \
    (((sn)->flags & DAV_SESSION_ENCRYPT_PROPERTIES) == DAV_SESSION_ENCRYPT_PROPERTIES)

#define DAV_DECRYPT_PROPERTIES(sn) \
    (((sn)->flags & DAV_SESSION_DECRYPT_PROPERTIES) == DAV_SESSION_DECRYPT_PROPERTIES)
    
/*
typedef struct DavPathCacheElement {
    char *name;
    char *encrypted_name;
    int  exists;
} DavPathCacheElement;
*/
    
typedef struct DavLock {
    char *path;
    char *token;
    
} DavLock;

typedef struct DavLockManager {
    UcxMap  *resource_locks;
    UcxList *collection_locks;
} DavLockManager;

CURLcode dav_session_curl_perform(DavSession *sn, long *status);
CURLcode dav_session_curl_perform_buf(DavSession *sn, UcxBuffer *request, UcxBuffer *response, long *status);

int dav_session_get_progress(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow);
int dav_session_put_progress(void *clientp, curl_off_t dltotal, curl_off_t dlnow, curl_off_t ultotal, curl_off_t ulnow);

void dav_session_set_error(DavSession *sn, CURLcode c, int status);
void dav_session_set_errstr(DavSession *sn, const char *str);

char* dav_session_create_plain_href(DavSession *sn, char *path);

char* dav_session_get_href(DavSession *sn, char *path);

DavResource* dav_find_child(DavSession *sn, DavResource *res, UcxBuffer *rqbuf, char *name);

void dav_session_cache_path(DavSession *sn, sstr_t path, sstr_t href);


DavLock* dav_create_lock(DavSession *sn, char *token, char *timeout);
void dav_destroy_lock(DavSession *sn, DavLock *lock);

int dav_add_resource_lock(DavSession *sn, char *path, DavLock *lock);
int dav_add_collection_lock(DavSession *sn, char *path, DavLock *lock);

DavLock* dav_get_lock(DavSession *sn, char *path);
void dav_remove_lock(DavSession *sn, char *path, DavLock *lock);

#ifdef	__cplusplus
}
#endif

#endif	/* DAV_SESSION_H */

mercurial