~ubuntu-branches/ubuntu/jaunty/transmission/jaunty-security

« back to all changes in this revision

Viewing changes to libtransmission/webseed.c

  • Committer: Bazaar Package Importer
  • Author(s): Chris Coulson
  • Date: 2008-12-28 18:50:08 UTC
  • mfrom: (1.1.20 upstream)
  • Revision ID: james.westby@ubuntu.com-20081228185008-2u8ac12dbckrwn7c
Tags: 1.42-0ubuntu1
* New upstream version (LP: #311959):
  - All platforms:
    - Better peer management in large swarms
    - Support BitTorrent Enhancement Proposal (BEP) #21 "Extension for 
      Partial Seeds"
    - Partial support for BEP #6 "Fast Extension" (reject, have all/none)
    - Honor the peer's BEP #10 reqq key, when available
    - Fix 1.40 "Got HTTP Status Code: 0" error message
    - Fix 1.40 "lazy bitfield" error
    - Fix 1.40 "jumpy upload speed" bug
    - Fix handshake peer_id error
    - Corrrectly handle Windows-style newlines in Bluetack blocklists
    - More accurate bandwidth measurement
    - File selection & priority was reset when editing a torrent's 
      tracker list
    - Fix autoconf/automake build warnings
  - GTK+:
    - In the Details dialog's peer tabs, rows were sometimes duplicated
    - Minor bugfixes, usability changes, and locale improvements
    - Three new translations: Afrikaans, Asturian, Bosnian
    - Sixteen updated translations
  - Daemon:
    - Fix 1.40 bug in handling IP whitelist
    - Minor bugfixes and output cleanup
    - Windows portability
  - CLI:
    - Fix minor free-memory-read bug

Show diffs side-by-side

added added

removed removed

Lines of Context:
7
7
 * This exemption does not extend to derived works not owned by
8
8
 * the Transmission project.
9
9
 *
10
 
 * $Id: webseed.c 7078 2008-11-08 22:24:07Z charles $
 
10
 * $Id: webseed.c 7455 2008-12-22 00:51:14Z charles $
11
11
 */
12
12
 
13
13
#include <assert.h>
26
26
 
27
27
struct tr_webseed
28
28
{
29
 
    unsigned int        busy : 1;
30
 
    unsigned int        dead : 1;
 
29
    tr_bool             busy;
 
30
    tr_bool             dead;
31
31
 
32
32
    uint8_t             hash[SHA_DIGEST_LENGTH];
33
33
 
51
51
****
52
52
***/
53
53
 
54
 
static const tr_peer_event blankEvent = { 0, 0, 0, 0, 0.0f, 0 };
 
54
static const tr_peer_event blankEvent = { 0, 0, 0, 0, 0.0f, 0, 0, 0 };
55
55
 
56
56
static void
57
57
publish( tr_webseed *    w,
65
65
fireNeedReq( tr_webseed * w )
66
66
{
67
67
    tr_peer_event e = blankEvent;
68
 
 
69
68
    e.eventType = TR_PEER_NEED_REQ;
70
69
    publish( w, &e );
71
70
}
72
71
 
73
72
static void
74
 
fireClientGotBlock( tr_webseed * w,
75
 
                    uint32_t     pieceIndex,
76
 
                    uint32_t     offset,
77
 
                    uint32_t     length )
 
73
fireClientGotBlock( tr_webseed * w, uint32_t pieceIndex, uint32_t offset, uint32_t length )
78
74
{
79
75
    tr_peer_event e = blankEvent;
80
 
 
81
76
    e.eventType = TR_PEER_CLIENT_GOT_BLOCK;
82
77
    e.pieceIndex = pieceIndex;
83
78
    e.offset = offset;
86
81
}
87
82
 
88
83
static void
89
 
fireClientGotData( tr_webseed * w,
90
 
                   uint32_t     length )
 
84
fireClientGotData( tr_webseed * w, uint32_t length )
91
85
{
92
86
    tr_peer_event e = blankEvent;
93
 
 
94
87
    e.eventType = TR_PEER_CLIENT_GOT_DATA;
95
88
    e.length = length;
 
89
    e.wasPieceData = TRUE;
96
90
    publish( w, &e );
97
91
}
98
92
 
122
116
        {
123
117
            switch( *str )
124
118
            {
125
 
                case ',':
126
 
                case '-':
127
 
                case '.':
128
 
                case '/':
129
 
                case '0':
130
 
                case '1':
131
 
                case '2':
132
 
                case '3':
133
 
                case '4':
134
 
                case '5':
135
 
                case '6':
136
 
                case '7':
137
 
                case '8':
138
 
                case '9':
139
 
                case 'a':
140
 
                case 'b':
141
 
                case 'c':
142
 
                case 'd':
143
 
                case 'e':
144
 
                case 'f':
145
 
                case 'g':
146
 
                case 'h':
147
 
                case 'i':
148
 
                case 'j':
149
 
                case 'k':
150
 
                case 'l':
151
 
                case 'm':
152
 
                case 'n':
153
 
                case 'o':
154
 
                case 'p':
155
 
                case 'q':
156
 
                case 'r':
157
 
                case 's':
158
 
                case 't':
159
 
                case 'u':
160
 
                case 'v':
161
 
                case 'w':
162
 
                case 'x':
163
 
                case 'y':
164
 
                case 'z':
165
 
                case 'A':
166
 
                case 'B':
167
 
                case 'C':
168
 
                case 'D':
169
 
                case 'E':
170
 
                case 'F':
171
 
                case 'G':
172
 
                case 'H':
173
 
                case 'I':
174
 
                case 'J':
175
 
                case 'K':
176
 
                case 'L':
177
 
                case 'M':
178
 
                case 'N':
179
 
                case 'O':
180
 
                case 'P':
181
 
                case 'Q':
182
 
                case 'R':
183
 
                case 'S':
184
 
                case 'T':
185
 
                case 'U':
186
 
                case 'V':
187
 
                case 'W':
188
 
                case 'X':
189
 
                case 'Y':
190
 
                case 'Z':
 
119
                case ',': case '-': case '.': case '/':
 
120
                case '0': case '1': case '2': case '3': case '4':
 
121
                case '5': case '6': case '7': case '8': case '9':
 
122
                case 'a': case 'b': case 'c': case 'd': case 'e':
 
123
                case 'f': case 'g': case 'h': case 'i': case 'j':
 
124
                case 'k': case 'l': case 'm': case 'n': case 'o':
 
125
                case 'p': case 'q': case 'r': case 's': case 't':
 
126
                case 'u': case 'v': case 'w': case 'x': case 'y': case 'z':
 
127
                case 'A': case 'B': case 'C': case 'D': case 'E':
 
128
                case 'F': case 'G': case 'H': case 'I': case 'J':
 
129
                case 'K': case 'L': case 'M': case 'N': case 'O':
 
130
                case 'P': case 'Q': case 'R': case 'S': case 'T':
 
131
                case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z':
191
132
                    evbuffer_add( out, str, 1 );
192
133
                    break;
193
 
 
194
134
                default:
195
135
                    evbuffer_add_printf( out, "%%%02X", *str );
196
136
                    break;
207
147
static void requestNextChunk( tr_webseed * w );
208
148
 
209
149
static void
210
 
webResponseFunc( tr_handle     * session,
 
150
webResponseFunc( tr_session    * session,
211
151
                 long            response_code,
212
152
                 const void    * response,
213
153
                 size_t          response_byte_count,
312
252
}
313
253
 
314
254
int
315
 
tr_webseedGetSpeed( const tr_webseed * w,
316
 
                    float *            setme_KiBs )
 
255
tr_webseedGetSpeed( const tr_webseed * w, float * setme_KiBs )
317
256
{
318
257
    const int isActive = tr_webseedIsActive( w );
319
258