mcabber/libjabber/libxode.h
author mikael
Wed, 06 Apr 2005 12:35:34 +0000
changeset 57 f381236239a4
parent 25 bf3d6e241714
child 417 c3ae9251c197
permissions -rw-r--r--
[/trunk] Changeset 72 by mikael * Switch to autoconf and automake.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
25
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
     1
#include <string.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
     2
#include <stdlib.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
     3
#include <sys/types.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
     4
#include <stdio.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
     5
#include <setjmp.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
     6
#include <sys/stat.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
     7
#include <fcntl.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
     8
#include <errno.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
     9
#include <signal.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    10
#include <syslog.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    11
#include <strings.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    12
#include <unistd.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    13
#include <sys/socket.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    14
#include <netinet/in.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    15
#include <netdb.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    16
#include <arpa/inet.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    17
#include <sys/time.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    18
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    19
#include "xmlparse.h"
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    20
#ifdef HAVE_CONFIG_H
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    21
#include <config.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    22
#endif /* HAVE_CONFIG_H */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    23
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    24
/*
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    25
**  Arrange to use either varargs or stdargs
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    26
*/
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    27
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    28
#define MAXSHORTSTR     203             /* max short string length */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    29
#define QUAD_T  unsigned long long
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    30
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    31
#ifdef __STDC__
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    32
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    33
#include <stdarg.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    34
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    35
# define VA_LOCAL_DECL  va_list ap;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    36
# define VA_START(f)    va_start(ap, f)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    37
# define VA_END         va_end(ap)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    38
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    39
#else /* __STDC__ */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    40
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    41
# include <varargs.h>
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    42
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    43
# define VA_LOCAL_DECL  va_list ap;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    44
# define VA_START(f)    va_start(ap)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    45
# define VA_END         va_end(ap)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    46
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    47
#endif /* __STDC__ */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    48
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    49
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    50
#ifndef INCL_LIBXODE_H
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    51
#define INCL_LIBXODE_H
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    52
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    53
#ifdef __cplusplus
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    54
extern "C" {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    55
#endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    56
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    57
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    58
#ifndef HAVE_SNPRINTF
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    59
extern int ap_snprintf(char *, size_t, const char *, ...);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    60
#define snprintf ap_snprintf
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    61
#endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    62
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    63
#ifndef HAVE_VSNPRINTF
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    64
extern int ap_vsnprintf(char *, size_t, const char *, va_list ap);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    65
#define vsnprintf ap_vsnprintf
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    66
#endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    67
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    68
#define ZONE zonestr(__FILE__,__LINE__)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    69
char *zonestr(char *file, int line);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    70
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    71
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    72
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    73
/* Pool-based memory management routines                     */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    74
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    75
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    76
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    77
#undef POOL_DEBUG
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    78
/*
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    79
 flip these, this should be a prime number for top # of pools debugging
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    80
#define POOL_DEBUG 40009 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    81
*/
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    82
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    83
/* pheap - singular allocation of memory */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    84
struct pheap
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    85
{
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    86
    void *block;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    87
    int size, used;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    88
};
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    89
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    90
/* pool_cleaner - callback type which is associated
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    91
   with a pool entry; invoked when the pool entry is 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    92
   free'd */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    93
typedef void (*pool_cleaner)(void *arg);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    94
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    95
/* pfree - a linked list node which stores an
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    96
   allocation chunk, plus a callback */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    97
struct pfree
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    98
{
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
    99
    pool_cleaner f;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   100
    void *arg;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   101
    struct pheap *heap;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   102
    struct pfree *next;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   103
};
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   104
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   105
/* pool - base node for a pool. Maintains a linked list
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   106
   of pool entries (pfree) */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   107
typedef struct pool_struct
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   108
{
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   109
    int size;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   110
    struct pfree *cleanup;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   111
    struct pheap *heap;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   112
#ifdef POOL_DEBUG
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   113
    char name[8], zone[32];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   114
    int lsize;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   115
} _pool, *pool;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   116
#define pool_new() _pool_new(ZONE) 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   117
#define pool_heap(i) _pool_new_heap(i,ZONE) 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   118
#else
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   119
} _pool, *pool;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   120
#define pool_heap(i) _pool_new_heap(i,NULL) 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   121
#define pool_new() _pool_new(NULL)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   122
#endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   123
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   124
pool _pool_new(char *zone); /* new pool :) */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   125
pool _pool_new_heap(int size, char *zone); /* creates a new memory pool with an initial heap size */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   126
void *pmalloc(pool p, int size); /* wrapper around malloc, takes from the pool, cleaned up automatically */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   127
void *pmalloc_x(pool p, int size, char c); /* Wrapper around pmalloc which prefils buffer with c */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   128
void *pmalloco(pool p, int size); /* YAPW for zeroing the block */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   129
char *pstrdup(pool p, const char *src); /* wrapper around strdup, gains mem from pool */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   130
void pool_stat(int full); /* print to stderr the changed pools and reset */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   131
char *pstrdupx(pool p, const char *src); /* temp stub */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   132
void pool_cleanup(pool p, pool_cleaner f, void *arg); /* calls f(arg) before the pool is freed during cleanup */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   133
void pool_free(pool p); /* calls the cleanup functions, frees all the data on the pool, and deletes the pool itself */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   134
int pool_size(pool p); /* returns total bytes allocated in this pool */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   135
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   136
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   137
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   138
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   139
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   140
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   141
/* Socket helper stuff                                       */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   142
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   143
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   144
#ifndef MAXHOSTNAMELEN
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   145
#define MAXHOSTNAMELEN 64
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   146
#endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   147
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   148
#define NETSOCKET_SERVER 0
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   149
#define NETSOCKET_CLIENT 1
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   150
#define NETSOCKET_UDP 2
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   151
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   152
#ifndef WIN32
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   153
int make_netsocket(u_short port, char *host, int type, int ssl);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   154
int make_nb_netsocket(u_short port, char *host, int type, int ssl, int * state);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   155
void change_socket_to_blocking(int socket);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   156
struct in_addr *make_addr(char *host);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   157
int set_fd_close_on_exec(int fd, int flag);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   158
#endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   159
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   160
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   161
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   162
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   163
/* String management routines                                */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   164
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   165
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   166
char *j_strdup(const char *str); /* provides NULL safe strdup wrapper */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   167
char *j_strcat(char *dest, char *txt); /* strcpy() clone */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   168
int j_strcmp(const char *a, const char *b); /* provides NULL safe strcmp wrapper */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   169
int j_strcasecmp(const char *a, const char *b); /* provides NULL safe strcasecmp wrapper */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   170
int j_strncmp(const char *a, const char *b, int i); /* provides NULL safe strncmp wrapper */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   171
int j_strncasecmp(const char *a, const char *b, int i); /* provides NULL safe strncasecmp wrapper */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   172
int j_strlen(const char *a); /* provides NULL safe strlen wrapper */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   173
int j_atoi(const char *a, int def); /* checks for NULL and uses default instead, convienence */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   174
void str_b64decode(char *str); /* what it says */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   175
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   176
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   177
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   178
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   179
/* SHA calculations                                          */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   180
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   181
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   182
#if (SIZEOF_INT == 4)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   183
typedef unsigned int uint32;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   184
#elif (SIZEOF_SHORT == 4)
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   185
typedef unsigned short uint32;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   186
#else
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   187
typedef unsigned int uint32;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   188
#endif /* HAVEUINT32 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   189
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   190
int sha_hash(int *data, int *hash);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   191
int sha_init(int *hash);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   192
char *shahash(char *str);       /* NOT THREAD SAFE */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   193
void shahash_r(const char* str, char hashbuf[40]); /* USE ME */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   194
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   195
int strprintsha(char *dest, int *hashval);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   196
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   197
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   198
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   199
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   200
/* Hashtable functions                                       */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   201
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   202
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   203
typedef int (*KEYHASHFUNC)(const void *key);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   204
typedef int (*KEYCOMPAREFUNC)(const void *key1, const void *key2);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   205
typedef int (*TABLEWALKFUNC)(void *user_data, const void *key, void *data);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   206
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   207
typedef void *HASHTABLE;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   208
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   209
HASHTABLE ghash_create(int buckets, KEYHASHFUNC hash, KEYCOMPAREFUNC cmp);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   210
void ghash_destroy(HASHTABLE tbl);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   211
void *ghash_get(HASHTABLE tbl, const void *key);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   212
int ghash_put(HASHTABLE tbl, const void *key, void *value);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   213
int ghash_remove(HASHTABLE tbl, const void *key);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   214
int ghash_walk(HASHTABLE tbl, TABLEWALKFUNC func, void *user_data);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   215
int str_hash_code(const char *s);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   216
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   217
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   218
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   219
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   220
/* XML escaping utils                                        */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   221
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   222
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   223
char *strescape(pool p, char *buf); /* Escape <>&'" chars */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   224
char *strunescape(pool p, char *buf);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   225
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   226
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   227
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   228
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   229
/* String pools (spool) functions                            */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   230
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   231
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   232
struct spool_node
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   233
{
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   234
    char *c;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   235
    struct spool_node *next;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   236
};
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   237
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   238
typedef struct spool_struct
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   239
{
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   240
    pool p;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   241
    int len;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   242
    struct spool_node *last;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   243
    struct spool_node *first;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   244
} *spool;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   245
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   246
spool spool_new(pool p); /* create a string pool */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   247
void spooler(spool s, ...); /* append all the char * args to the pool, terminate args with s again */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   248
char *spool_print(spool s); /* return a big string */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   249
void spool_add(spool s, char *str); /* add a single char to the pool */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   250
char *spools(pool p, ...); /* wrap all the spooler stuff in one function, the happy fun ball! */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   251
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   252
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   253
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   254
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   255
/* xmlnodes - Document Object Model                          */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   256
/*                                                           */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   257
/* --------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   258
#define NTYPE_TAG    0
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   259
#define NTYPE_ATTRIB 1
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   260
#define NTYPE_CDATA  2
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   261
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   262
#define NTYPE_LAST   2
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   263
#define NTYPE_UNDEF  -1
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   264
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   265
/* -------------------------------------------------------------------------- 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   266
   Node structure. Do not use directly! Always use accessor macros 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   267
   and methods!
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   268
   -------------------------------------------------------------------------- */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   269
typedef struct xmlnode_t
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   270
{
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   271
     char*               name;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   272
     unsigned short      type;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   273
     char*               data;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   274
     int                 data_sz;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   275
     int                 complete;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   276
     pool               p;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   277
     struct xmlnode_t*  parent;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   278
     struct xmlnode_t*  firstchild; 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   279
     struct xmlnode_t*  lastchild;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   280
     struct xmlnode_t*  prev; 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   281
     struct xmlnode_t*  next;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   282
     struct xmlnode_t*  firstattrib;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   283
     struct xmlnode_t*  lastattrib;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   284
} _xmlnode, *xmlnode;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   285
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   286
/* Node creation routines */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   287
xmlnode  xmlnode_wrap(xmlnode x,const char* wrapper);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   288
xmlnode  xmlnode_new_tag(const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   289
xmlnode  xmlnode_new_tag_pool(pool p, const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   290
xmlnode  xmlnode_insert_tag(xmlnode parent, const char* name); 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   291
xmlnode  xmlnode_insert_cdata(xmlnode parent, const char* CDATA, unsigned int size);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   292
xmlnode  xmlnode_insert_tag_node(xmlnode parent, xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   293
void     xmlnode_insert_node(xmlnode parent, xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   294
xmlnode  xmlnode_str(char *str, int len);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   295
xmlnode  xmlnode_file(char *file);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   296
xmlnode  xmlnode_dup(xmlnode x); /* duplicate x */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   297
xmlnode  xmlnode_dup_pool(pool p, xmlnode x);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   298
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   299
/* Node Memory Pool */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   300
pool xmlnode_pool(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   301
xmlnode _xmlnode_new(pool p, const char *name, unsigned int type);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   302
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   303
/* Node editing */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   304
void xmlnode_hide(xmlnode child);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   305
void xmlnode_hide_attrib(xmlnode parent, const char *name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   306
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   307
/* Node deletion routine, also frees the node pool! */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   308
void xmlnode_free(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   309
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   310
/* Locates a child tag by name and returns it */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   311
xmlnode  xmlnode_get_tag(xmlnode parent, const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   312
char* xmlnode_get_tag_data(xmlnode parent, const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   313
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   314
/* Attribute accessors */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   315
void     xmlnode_put_attrib(xmlnode owner, const char* name, const char* value);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   316
char*    xmlnode_get_attrib(xmlnode owner, const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   317
void     xmlnode_put_expat_attribs(xmlnode owner, const char** atts);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   318
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   319
/* Bastard am I, but these are fun for internal use ;-) */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   320
void     xmlnode_put_vattrib(xmlnode owner, const char* name, void *value);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   321
void*    xmlnode_get_vattrib(xmlnode owner, const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   322
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   323
/* Node traversal routines */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   324
xmlnode  xmlnode_get_firstattrib(xmlnode parent);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   325
xmlnode  xmlnode_get_firstchild(xmlnode parent);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   326
xmlnode  xmlnode_get_lastchild(xmlnode parent);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   327
xmlnode  xmlnode_get_nextsibling(xmlnode sibling);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   328
xmlnode  xmlnode_get_prevsibling(xmlnode sibling);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   329
xmlnode  xmlnode_get_parent(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   330
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   331
/* Node information routines */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   332
char*    xmlnode_get_name(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   333
char*    xmlnode_get_data(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   334
int      xmlnode_get_datasz(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   335
int      xmlnode_get_type(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   336
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   337
int      xmlnode_has_children(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   338
int      xmlnode_has_attribs(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   339
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   340
/* Node-to-string translation */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   341
char*    xmlnode2str(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   342
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   343
/* Node-to-terminated-string translation 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   344
   -- useful for interfacing w/ scripting langs */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   345
char*    xmlnode2tstr(xmlnode node);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   346
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   347
int      xmlnode_cmp(xmlnode a, xmlnode b); /* compares a and b for equality */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   348
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   349
int      xmlnode2file(char *file, xmlnode node); /* writes node to file */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   350
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   351
/* Expat callbacks */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   352
void expat_startElement(void* userdata, const char* name, const char** atts);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   353
void expat_endElement(void* userdata, const char* name);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   354
void expat_charData(void* userdata, const char* s, int len);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   355
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   356
/***********************
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   357
 * XSTREAM Section
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   358
 ***********************/
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   359
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   360
#define XSTREAM_MAXNODE 1000000
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   361
#define XSTREAM_MAXDEPTH 100
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   362
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   363
#define XSTREAM_ROOT        0 /* root element */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   364
#define XSTREAM_NODE        1 /* normal node */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   365
#define XSTREAM_CLOSE       2 /* closed </stream:stream> */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   366
#define XSTREAM_ERR         4 /* parser error */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   367
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   368
typedef void (*xstream_onNode)(int type, xmlnode x, void *arg); /* xstream event handler */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   369
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   370
typedef struct xstream_struct
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   371
{
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   372
    XML_Parser parser;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   373
    xmlnode node;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   374
    char *cdata;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   375
    int cdata_len;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   376
    pool p;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   377
    xstream_onNode f;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   378
    void *arg;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   379
    int status;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   380
    int depth;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   381
} *xstream, _xstream;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   382
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   383
xstream xstream_new(pool p, xstream_onNode f, void *arg); /* create a new xstream */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   384
int xstream_eat(xstream xs, char *buff, int len); /* parse new data for this xstream, returns last XSTREAM_* status */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   385
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   386
/* convience functions */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   387
xmlnode xstream_header(char *nspace, char *to, char *from);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   388
char *xstream_header_char(xmlnode x);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   389
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   390
/* SHA.H */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   391
/* 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   392
 * The contents of this file are subject to the Mozilla Public
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   393
 * License Version 1.1 (the "License"); you may not use this file
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   394
 * except in compliance with the License. You may obtain a copy of
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   395
 * the License at http://www.mozilla.org/MPL/
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   396
 * 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   397
 * Software distributed under the License is distributed on an "AS
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   398
 * IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   399
 * implied. See the License for the specific language governing
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   400
 * rights and limitations under the License.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   401
 * 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   402
 * The Original Code is SHA 180-1 Header File
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   403
 * 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   404
 * The Initial Developer of the Original Code is Paul Kocher of
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   405
 * Cryptography Research.  Portions created by Paul Kocher are 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   406
 * Copyright (C) 1995-9 by Cryptography Research, Inc.  All
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   407
 * Rights Reserved.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   408
 * 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   409
 * Contributor(s):
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   410
 *
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   411
 *     Paul Kocher
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   412
 * 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   413
 * Alternatively, the contents of this file may be used under the
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   414
 * terms of the GNU General Public License Version 2 or later (the
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   415
 * "GPL"), in which case the provisions of the GPL are applicable 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   416
 * instead of those above.  If you wish to allow use of your 
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   417
 * version of this file only under the terms of the GPL and not to
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   418
 * allow others to use your version of this file under the MPL,
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   419
 * indicate your decision by deleting the provisions above and
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   420
 * replace them with the notice and other provisions required by
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   421
 * the GPL.  If you do not delete the provisions above, a recipient
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   422
 * may use your version of this file under either the MPL or the
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   423
 * GPL.
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   424
 */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   425
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   426
typedef struct {
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   427
  unsigned long H[5];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   428
  unsigned long W[80];
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   429
  int lenW;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   430
  unsigned long sizeHi,sizeLo;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   431
} SHA_CTX;
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   432
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   433
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   434
void shaInit(SHA_CTX *ctx);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   435
void shaUpdate(SHA_CTX *ctx, unsigned char *dataIn, int len);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   436
void shaFinal(SHA_CTX *ctx, unsigned char hashout[20]);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   437
void shaBlock(unsigned char *dataIn, int len, unsigned char hashout[20]);
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   438
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   439
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   440
/* END SHA.H */
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   441
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   442
#ifdef __cplusplus
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   443
}
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   444
#endif
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   445
bf3d6e241714 [/trunk] Changeset 41 by mikael
mikael
parents:
diff changeset
   446
#endif /* INCL_LIBXODE_H */