source: trunk/libtransmission/bencode.h @ 6612

Last change on this file since 6612 was 6612, checked in by charles, 13 years ago

bencode cleanup: remove unused functions and unnecessary #includes

  • Property svn:keywords set to Date Rev Author Id
File size: 4.6 KB
Line 
1/*
2 * This file Copyright (C) 2008 Charles Kerr <charles@rebelbase.com>
3 *
4 * This file is licensed by the GPL version 2.  Works owned by the
5 * Transmission project are granted a special exemption to clause 2(b)
6 * so that the bulk of its code can remain under the MIT license.
7 * This exemption does not extend to derived works not owned by
8 * the Transmission project.
9 *
10 * $Id: bencode.h 6612 2008-08-21 14:57:59Z charles $
11 */
12
13#ifndef TR_BENCODE_H
14#define TR_BENCODE_H 1
15
16#include <inttypes.h> /* for int64_t */
17
18enum
19{
20    TYPE_INT  = 1,
21    TYPE_STR  = 2,
22    TYPE_LIST = 4,
23    TYPE_DICT = 8
24};
25   
26typedef struct tr_benc
27{
28    char   type;
29    union
30    {
31        int64_t i;
32        struct
33        {
34            int    i;
35            char * s;
36        } s;
37        struct
38        {
39            int alloc;
40            int count;
41            struct tr_benc * vals;
42        } l;
43    } val;
44} tr_benc;
45
46/***
47****
48***/
49
50int tr_bencParse( const void      * buf,
51                  const void      * bufend,
52                  tr_benc         * setme_benc,
53                  const uint8_t  ** setme_end );
54
55int tr_bencLoad( const void  * buf,
56                 int           buflen,
57                 tr_benc     * setme_benc,
58                 char       ** setme_end );
59
60int    tr_bencLoadFile     ( const char * filename, tr_benc * );
61int    tr_bencLoadJSONFile ( const char * filename, tr_benc * );
62
63#if 0
64void  tr_bencPrint( const tr_benc * );
65#endif
66
67void  tr_bencFree( tr_benc * );
68
69char*  tr_bencSave         ( const tr_benc * val, int * len );
70char*  tr_bencSaveAsJSON   ( const tr_benc * top, int * len );
71int    tr_bencSaveFile     ( const char * filename, const tr_benc * );
72int    tr_bencSaveJSONFile ( const char * filename, const tr_benc * );
73
74void  tr_bencInitStr( tr_benc *, const void * str, int str_len );
75void  tr_bencInitRaw( tr_benc *, const void * raw, size_t raw_len );
76void  tr_bencInitInt( tr_benc *, int64_t num );
77int   tr_bencInitDict( tr_benc *, int reserveCount );
78int   tr_bencInitList( tr_benc *, int reserveCount );
79
80/***
81****
82***/
83
84int tr_bencListReserve( tr_benc *, int count );
85tr_benc * tr_bencListAdd( tr_benc * );
86tr_benc * tr_bencListAddInt( tr_benc *, int64_t val );
87tr_benc * tr_bencListAddStr( tr_benc *, const char * val );
88tr_benc * tr_bencListAddList( tr_benc *, int reserveCount );
89tr_benc * tr_bencListAddDict( tr_benc *, int reserveCount );
90
91int tr_bencListSize( const tr_benc * list );
92tr_benc * tr_bencListChild( tr_benc * list, int n );
93
94/***
95****
96***/
97
98int tr_bencDictReserve( tr_benc *, int count );
99int tr_bencDictRemove( tr_benc *, const char * key );
100tr_benc * tr_bencDictAdd( tr_benc *, const char * key );
101tr_benc * tr_bencDictAddDouble( tr_benc *, const char * key, double d );
102tr_benc * tr_bencDictAddInt( tr_benc *, const char * key, int64_t val );
103tr_benc * tr_bencDictAddStr( tr_benc *, const char * key, const char * val );
104tr_benc * tr_bencDictAddList( tr_benc *, const char * key, int reserveCount );
105tr_benc * tr_bencDictAddDict( tr_benc *, const char * key, int reserveCount );
106tr_benc * tr_bencDictAddRaw( tr_benc *, const char * key,
107                             const void *, size_t len );
108
109tr_benc* tr_bencDictFind( tr_benc *, const char * key );
110int tr_bencDictFindList( tr_benc *, const char * key, tr_benc ** setme );
111int tr_bencDictFindDict( tr_benc *, const char * key, tr_benc ** setme );
112int tr_bencDictFindInt( tr_benc *, const char * key, int64_t * setme );
113int tr_bencDictFindDouble( tr_benc *, const char * key, double * setme );
114int tr_bencDictFindStr( tr_benc *, const char * key, const char ** setme );
115int tr_bencDictFindRaw( tr_benc *, const char * key,
116                          const uint8_t ** setme_raw, size_t * setme_len );
117
118/***
119****
120***/
121
122int tr_bencGetInt( const tr_benc * val, int64_t * setme );
123int tr_bencGetStr( const tr_benc * val, const char ** setme );
124int tr_bencIsType( const tr_benc *, int type );
125#define tr_bencIsInt( b )    tr_bencIsType( ( b ), TYPE_INT )
126#define tr_bencIsDict( b )   tr_bencIsType( ( b ), TYPE_DICT )
127#define tr_bencIsList( b )   tr_bencIsType( ( b ), TYPE_LIST )
128#define tr_bencIsString( b ) tr_bencIsType( ( b ), TYPE_STR )
129
130/**
131***  Treat these as private -- they're only made public here
132***  so that the unit tests can find them
133**/
134
135int  tr_bencParseInt( const uint8_t  * buf,
136                      const uint8_t  * bufend,
137                      const uint8_t ** setme_end, 
138                      int64_t        * setme_val );
139
140int  tr_bencParseStr( const uint8_t  * buf,
141                      const uint8_t  * bufend,
142                      const uint8_t ** setme_end, 
143                      uint8_t       ** setme_str,
144                      size_t         * setme_strlen );
145
146#endif
Note: See TracBrowser for help on using the repository browser.