Changeset 6956
- Timestamp:
- Oct 25, 2008, 3:08:29 PM (13 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/clients.c
r6822 r6956 4 4 * This file is licensed by the GPL version 2. Works owned by the 5 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. 6 * so that the bulk of its code can remain under the MIT license. 7 7 * This exemption does not extend to derived works not owned by 8 8 * the Transmission project. … … 27 27 charint( char ch ) 28 28 { 29 if( '0' <= ch && ch <= '9' ) return ch - '0';29 if( '0' <= ch && ch <= '9' ) return ch - '0'; 30 30 if( 'A' <= ch && ch <= 'Z' ) return 10 + ch - 'A'; 31 31 if( 'a' <= ch && ch <= 'z' ) return 36 + ch - 'a'; … … 33 33 } 34 34 35 static int 36 getShadowInt( char ch, int * setme ) 37 { 38 const char * str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-"; 39 const char * pch = strchr( str, ch ); 40 if( !pch ) 41 return 0; 42 *setme = pch - str; 43 return 1; 44 } 45 35 46 static int 36 getShadowInt( char ch, int * setme ) 37 { 38 const char * str = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz.-"; 39 const char * pch = strchr( str, ch ); 40 if( !pch ) 41 return 0; 42 *setme = pch - str; 43 return 1; 44 } 45 46 static int 47 strint( const void * pch, 48 int span ) 47 strint( const void * pch, int span ) 49 48 { 50 49 char tmp[64]; 51 52 50 memcpy( tmp, pch, span ); 53 51 tmp[span] = '\0'; … … 60 58 switch( ch ) 61 59 { 62 case 'b': 63 case 'B': 64 return " (Beta)"; 65 66 case 'd': 67 return " (Debug)"; 68 69 case 'x': 70 case 'X': 71 case 'Z': 72 return " (Dev)"; 73 74 default: 75 return ""; 60 case 'b': case 'B': return " (Beta)"; 61 case 'd': return " (Debug)"; 62 case 'x': case 'X': case 'Z': return " (Dev)"; 63 default: return ""; 76 64 } 77 65 } 78 66 79 67 static void 80 three_digits( char * buf, 81 size_t buflen, 82 const char * name, 83 const uint8_t * digits ) 68 three_digits( char * buf, size_t buflen, const char * name, const uint8_t * digits ) 84 69 { 85 70 tr_snprintf( buf, buflen, "%s %d.%d.%d", name, 86 charint( digits[0] ), 87 charint( digits[1] ), 88 charint( digits[2] ) ); 89 } 90 71 charint( digits[0] ), 72 charint( digits[1] ), 73 charint( digits[2] ) ); 74 } 91 75 static void 92 four_digits( char * buf, 93 size_t buflen, 94 const char * name, 95 const uint8_t * digits ) 76 four_digits( char * buf, size_t buflen, const char * name, const uint8_t * digits ) 96 77 { 97 78 tr_snprintf( buf, buflen, "%s %d.%d.%d.%d", name, 98 charint( digits[0] ), 99 charint( digits[1] ), 100 charint( digits[2] ), 101 charint( digits[3] ) ); 102 } 103 79 charint( digits[0] ), 80 charint( digits[1] ), 81 charint( digits[2] ), 82 charint( digits[3] ) ); 83 } 104 84 static void 105 two_major_two_minor( char * buf, 106 size_t buflen, 107 const char * name, 108 const uint8_t * digits ) 85 two_major_two_minor( char * buf, size_t buflen, const char * name, const uint8_t * digits ) 109 86 { 110 87 tr_snprintf( buf, buflen, "%s %d.%02d", name, 111 strint( digits, 2 ), 112 strint( digits + 2, 2 ) ); 113 } 114 88 strint( digits, 2 ), 89 strint( digits+2, 2 ) ); 90 } 115 91 static void 116 no_version( char * buf, 117 size_t buflen, 118 const char * name ) 92 no_version( char * buf, size_t buflen, const char * name ) 119 93 { 120 94 tr_strlcpy( buf, name, buflen ); … … 122 96 123 97 static void 124 mainline_style( char * buf, 125 size_t buflen, 126 const char * name, 127 const uint8_t * id ) 98 mainline_style( char * buf, size_t buflen, const char * name, const uint8_t * id ) 128 99 { 129 100 if( id[4] == '-' && id[6] == '-' ) 130 101 tr_snprintf( buf, buflen, "%s %c.%c.%c", name, id[1], id[3], id[5] ); 131 102 else if( id[5] == '-' ) 132 tr_snprintf( buf, buflen, "%s %c.%c%c.%c", name, id[1], id[3], 133 id[4], 134 id[6] ); 103 tr_snprintf( buf, buflen, "%s %c.%c%c.%c", name, id[1], id[3], id[4], id[6] ); 135 104 } 136 105 … … 142 111 * Mx-y-z-- 143 112 * Mx-yy-z- 144 */ 145 return peer_id[2] =='-'146 && peer_id[7] =='-'147 && ( peer_id[4] == '-' || peer_id[5] =='-' );113 */ 114 return peer_id[2]=='-' 115 && peer_id[7]=='-' 116 && ( peer_id[4]=='-' || peer_id[5]=='-' ); 148 117 } 149 118 150 119 static int 151 decodeBitCometClient( char * buf, 152 size_t buflen, 153 const uint8_t * id ) 154 { 155 int is_bitlord; 156 int major, minor; 120 decodeBitCometClient( char * buf, size_t buflen, const uint8_t * id ) 121 { 122 int is_bitlord; 123 int major, minor; 157 124 const char * name; 158 125 const char * mod = NULL; 159 126 160 127 if( !memcmp( id, "exbc", 4 ) ) mod = ""; 161 else if( !memcmp( id, "FUTB", 4 ) 162 else if( !memcmp( id, "xUTB", 4 ) 128 else if( !memcmp( id, "FUTB", 4 )) mod = "(Solidox Mod) "; 129 else if( !memcmp( id, "xUTB", 4 )) mod = "(Mod 2) "; 163 130 else return FALSE; 164 131 165 is_bitlord = !memcmp( id +6, "LORD", 4 );166 name = ( is_bitlord) ? "BitLord " : "BitComet ";132 is_bitlord = !memcmp( id+6, "LORD", 4 ); 133 name = (is_bitlord) ? "BitLord " : "BitComet "; 167 134 major = id[4]; 168 135 minor = id[5]; … … 172 139 * Bitcoment 1.0 and onwards are of the form x.y. 173 140 */ 174 if( is_bitlord && major >0 )141 if( is_bitlord && major>0 ) 175 142 tr_snprintf( buf, buflen, "%s%s%d.%d", name, mod, major, minor ); 176 143 else … … 181 148 182 149 static int 183 decodeBitSpiritClient( char * buf, 184 size_t buflen, 185 const uint8_t * id ) 186 { 187 const int isBS = !memcmp( id + 2, "BS", 2 ); 188 150 decodeBitSpiritClient( char * buf, size_t buflen, const uint8_t * id ) 151 { 152 const int isBS = !memcmp( id+2, "BS", 2 ); 189 153 if( isBS ) 190 154 { … … 196 160 197 161 void 198 tr_clientForId( char * buf, 199 size_t buflen, 200 const void * id_in ) 162 tr_clientForId( char * buf, size_t buflen, const void * id_in ) 201 163 { 202 164 const uint8_t * id = id_in; … … 210 172 if( id[0] == '-' && id[7] == '-' ) 211 173 { 212 if( !memcmp( id +1, "UT", 2 ) )174 if( !memcmp( id+1, "UT", 2 ) ) 213 175 { 214 176 tr_snprintf( buf, buflen, "\xc2\xb5Torrent %d.%d.%d%s", 215 strint( id + 3, 216 1 ), 217 strint( id + 4, 1 ), strint( id + 5, 218 1 ), 219 getMnemonicEnd( id[6] ) ); 220 } 221 else if( !memcmp( id + 1, "TR", 2 ) ) 222 { 223 if( !memcmp( id + 3, "000", 3 ) ) /* very old client style: -TR0006- 224 is 0.6 */ 177 strint(id+3,1), strint(id+4,1), strint(id+5,1), getMnemonicEnd(id[6]) ); 178 } 179 180 else if( !memcmp( id+1, "TR", 2 ) ) 181 { 182 if( !memcmp( id+3, "000", 3 ) ) /* very old client style: -TR0006- is 0.6 */ 225 183 tr_snprintf( buf, buflen, "Transmission 0.%c", id[6] ); 226 else if( !memcmp( id + 3, "00", 2 ) ) /* previous client style: 227 -TR0072- is 0.72 */ 228 tr_snprintf( buf, buflen, "Transmission 0.%02d", 229 strint( id + 5, 2 ) ); 184 else if( !memcmp( id+3, "00", 2) ) /* previous client style: -TR0072- is 0.72 */ 185 tr_snprintf( buf, buflen, "Transmission 0.%02d", strint(id+5,2) ); 230 186 else /* current client style: -TR111Z- is 1.11+ */ 231 tr_snprintf( buf, buflen, "Transmission %d.%02d%s", 232 strint( id + 3, 1 ), strint( id + 4, 2 ), 233 id[6] == 'Z' || id[6] == 'X' ? "+" : "" ); 234 } 235 else if( !memcmp( id + 1, "AZ", 2 ) ) 236 { 237 if( id[3] > '3' || ( id[3] == '3' && id[4] >= '1' ) ) /* Vuze starts 238 at version 239 3.1.0.0 */ 240 four_digits( buf, buflen, "Vuze", id + 3 ); 187 tr_snprintf( buf, buflen, "Transmission %d.%02d%s", strint(id+3,1), strint(id+4,2), 188 id[6]=='Z' || id[6]=='X' ? "+" : "" ); 189 } 190 191 else if( !memcmp( id+1, "AZ", 2 ) ) 192 { 193 if( id[3] > '3' || ( id[3] == '3' && id[4] >= '1' ) ) /* Vuze starts at version 3.1.0.0 */ 194 four_digits( buf, buflen, "Vuze", id+3 ); 241 195 else 242 four_digits( buf, buflen, "Azureus", id + 3 ); 243 } 244 else if( !memcmp( id + 1, "KT", 2 ) ) 196 four_digits( buf, buflen, "Azureus", id+3 ); 197 } 198 199 else if( !memcmp( id+1, "KT", 2 ) ) 245 200 { 246 201 if( id[5] == 'D' ) 247 tr_snprintf( buf, buflen, "KTorrent %d.%d Dev %d", 248 charint( id[3] ), charint( id[4] ), 249 charint( id[6] ) ); 202 tr_snprintf( buf, buflen, "KTorrent %d.%d Dev %d", charint(id[3]), charint(id[4]), charint(id[6]) ); 250 203 else if( id[5] == 'R' ) 251 tr_snprintf( buf, buflen, "KTorrent %d.%d RC %d", 252 charint( id[3] ), charint( id[4] ), 253 charint( id[6] ) ); 204 tr_snprintf( buf, buflen, "KTorrent %d.%d RC %d", charint(id[3]), charint(id[4]), charint(id[6]) ); 254 205 else 255 three_digits( buf, buflen, "KTorrent", id + 3 ); 256 } 257 else if( !memcmp( id + 1, "AR", 2 ) ) four_digits( buf, buflen, 258 "Ares", 259 id + 3 ); 260 else if( !memcmp( id + 1, "AT", 2 ) ) four_digits( buf, buflen, 261 "Artemis", 262 id + 3 ); 263 else if( !memcmp( id + 1, "AV", 2 ) ) four_digits( buf, buflen, 264 "Avicora", 265 id + 3 ); 266 else if( !memcmp( id + 1, "BG", 2 ) ) four_digits( buf, buflen, 267 "BTGetit", 268 id + 3 ); 269 else if( !memcmp( id + 1, "BM", 2 ) ) four_digits( buf, buflen, 270 "BitMagnet", 271 id + 3 ); 272 else if( !memcmp( id + 1, "BX", 2 ) ) four_digits( buf, buflen, 273 "BittorrentX", 274 id + 3 ); 275 else if( !memcmp( id + 1, "bk", 2 ) ) four_digits( 276 buf, buflen, "BitKitten (libtorrent)", id + 3 ); 277 else if( !memcmp( id + 1, "BS", 2 ) ) four_digits( buf, buflen, 278 "BTSlave", 279 id + 3 ); 280 else if( !memcmp( id + 1, "BX", 2 ) ) four_digits( buf, buflen, 281 "BittorrentX", 282 id + 3 ); 283 else if( !memcmp( id + 1, "EB", 2 ) ) four_digits( buf, buflen, 284 "EBit", 285 id + 3 ); 286 else if( !memcmp( id + 1, "DE", 2 ) ) four_digits( buf, buflen, 287 "Deluge", 288 id + 3 ); 289 else if( !memcmp( id + 1, "DP", 2 ) ) four_digits( 290 buf, buflen, "Propogate Data Client", id + 3 ); 291 else if( !memcmp( id + 1, "FC", 2 ) ) four_digits( buf, buflen, 292 "FileCroc", 293 id + 3 ); 294 else if( !memcmp( id + 1, "FT", 2 ) ) four_digits( 295 buf, buflen, "FoxTorrent/RedSwoosh", id + 3 ); 296 else if( !memcmp( id + 1, "GR", 2 ) ) four_digits( buf, buflen, 297 "GetRight", 298 id + 3 ); 299 else if( !memcmp( id + 1, "HN", 2 ) ) four_digits( buf, buflen, 300 "Hydranode", 301 id + 3 ); 302 else if( !memcmp( id + 1, "LH", 2 ) ) four_digits( buf, buflen, 303 "LH-ABC", 304 id + 3 ); 305 else if( !memcmp( id + 1, "NX", 2 ) ) four_digits( buf, buflen, 306 "Net Transport", 307 id + 3 ); 308 else if( !memcmp( id + 1, "MO", 2 ) ) four_digits( buf, buflen, 309 "MonoTorrent", 310 id + 3 ); 311 else if( !memcmp( id + 1, "MR", 2 ) ) four_digits( buf, buflen, 312 "Miro", 313 id + 3 ); 314 else if( !memcmp( id + 1, "MT", 2 ) ) four_digits( buf, buflen, 315 "Moonlight", 316 id + 3 ); 317 else if( !memcmp( id + 1, "PD", 2 ) ) four_digits( buf, buflen, 318 "Pando", 319 id + 3 ); 320 else if( !memcmp( id + 1, "RS", 2 ) ) four_digits( buf, buflen, 321 "Rufus", 322 id + 3 ); 323 else if( !memcmp( id + 1, "RT", 2 ) ) four_digits( buf, buflen, 324 "Retriever", 325 id + 3 ); 326 else if( !memcmp( id + 1, "SS", 2 ) ) four_digits( buf, buflen, 327 "SwarmScope", 328 id + 3 ); 329 else if( !memcmp( id + 1, "SZ", 2 ) ) four_digits( buf, buflen, 330 "Shareaza", 331 id + 3 ); 332 else if( !memcmp( id + 1, "S~", 2 ) ) four_digits( buf, buflen, 333 "Shareaza", 334 id + 3 ); 335 else if( !memcmp( id + 1, "st", 2 ) ) four_digits( buf, buflen, 336 "SharkTorrent", 337 id + 3 ); 338 else if( !memcmp( id + 1, "TN", 2 ) ) four_digits( buf, buflen, 339 "Torrent .NET", 340 id + 3 ); 341 else if( !memcmp( id + 1, "TS", 2 ) ) four_digits( buf, buflen, 342 "TorrentStorm", 343 id + 3 ); 344 else if( !memcmp( id + 1, "UL", 2 ) ) four_digits( buf, buflen, 345 "uLeecher!", 346 id + 3 ); 347 else if( !memcmp( id + 1, "VG", 2 ) ) four_digits( buf, buflen, 348 "Vagaa", 349 id + 3 ); 350 else if( !memcmp( id + 1, "WT", 2 ) ) four_digits( buf, buflen, 351 "BitLet", 352 id + 3 ); 353 else if( !memcmp( id + 1, "WY", 2 ) ) four_digits( buf, buflen, 354 "Wyzo", 355 id + 3 ); 356 else if( !memcmp( id + 1, "XL", 2 ) ) four_digits( buf, buflen, 357 "Xunlei", 358 id + 3 ); 359 else if( !memcmp( id + 1, "XT", 2 ) ) four_digits( buf, buflen, 360 "XanTorrent", 361 id + 3 ); 362 else if( !memcmp( id + 1, "ZT", 2 ) ) four_digits( buf, buflen, 363 "Zip Torrent", 364 id + 3 ); 365 366 else if( !memcmp( id + 1, "AG", 2 ) ) three_digits( buf, buflen, 367 "Ares", 368 id + 3 ); 369 else if( !memcmp( id + 1, "A~", 2 ) ) three_digits( buf, buflen, 370 "Ares", 371 id + 3 ); 372 else if( !memcmp( id + 1, "ES", 2 ) ) three_digits( 373 buf, buflen, "Electric Sheep", id + 3 ); 374 else if( !memcmp( id + 1, "HL", 2 ) ) three_digits( buf, buflen, 375 "Halite", 376 id + 3 ); 377 else if( !memcmp( id + 1, "LT", 2 ) ) three_digits( 378 buf, buflen, "libtorrent (Rasterbar)", id + 3 ); 379 else if( !memcmp( id + 1, "lt", 2 ) ) three_digits( 380 buf, buflen, "libTorrent (Rakshasa)", id + 3 ); 381 else if( !memcmp( id + 1, "MP", 2 ) ) three_digits( buf, buflen, 382 "MooPolice", 383 id + 3 ); 384 else if( !memcmp( id + 1, "TT", 2 ) ) three_digits( buf, buflen, 385 "TuoTu", 386 id + 3 ); 387 else if( !memcmp( id + 1, "qB", 2 ) ) three_digits( buf, buflen, 388 "qBittorrent", 389 id + 3 ); 390 391 else if( !memcmp( id + 1, "AX", 2 ) ) two_major_two_minor( 392 buf, buflen, "BitPump", id + 3 ); 393 else if( !memcmp( id + 1, "BC", 2 ) ) two_major_two_minor( 394 buf, buflen, "BitComet", id + 3 ); 395 else if( !memcmp( id + 1, "CD", 2 ) ) two_major_two_minor( 396 buf, buflen, "Enhanced CTorrent", id + 3 ); 397 else if( !memcmp( id + 1, "LP", 2 ) ) two_major_two_minor( buf, 398 buflen, 399 "Lphant", 400 id + 3 ); 401 402 else if( !memcmp( id + 1, "BF", 2 ) ) no_version( buf, buflen, 403 "BitFlu" ); 404 else if( !memcmp( id + 1, "LW", 2 ) ) no_version( buf, buflen, 405 "LimeWire" ); 406 407 else if( !memcmp( id + 1, "BB", 2 ) ) 408 { 409 tr_snprintf( buf, buflen, "BitBuddy %c.%c%c%c", id[3], id[4], 410 id[5], 411 id[6] ); 412 } 413 else if( !memcmp( id + 1, "BR", 2 ) ) 414 { 415 tr_snprintf( buf, buflen, "BitRocket %c.%c (%c%c)", id[3], 416 id[4], id[5], 417 id[6] ); 418 } 419 else if( !memcmp( id + 1, "CT", 2 ) ) 420 { 421 tr_snprintf( buf, buflen, "CTorrent %d.%d.%02d", charint( 422 id[3] ), charint( id[4] ), strint( id + 5, 2 ) ); 423 } 424 else if( !memcmp( id + 1, "XX", 2 ) ) 425 { 426 tr_snprintf( buf, buflen, "Xtorrent %d.%d (%d)", charint( 427 id[3] ), charint( id[4] ), strint( id + 5, 2 ) ); 428 } 429 else if( !memcmp( id + 1, "BOW", 3 ) ) 430 { 431 if( !memcmp( &id[4], "A0B", 3 ) ) tr_snprintf( 432 buf, buflen, "Bits on Wheels 1.0.5" ); 433 else if( !memcmp( &id[4], "A0C", 3 ) ) tr_snprintf( 434 buf, buflen, "Bits on Wheels 1.0.6" ); 435 else tr_snprintf( buf, buflen, "Bits on Wheels %c.%c.%c", id[4], 436 id[5], 437 id[5] ); 206 three_digits( buf, buflen, "KTorrent", id+3 ); 207 } 208 209 else if( !memcmp( id+1, "AR", 2 ) ) four_digits( buf, buflen, "Ares", id+3 ); 210 else if( !memcmp( id+1, "AT", 2 ) ) four_digits( buf, buflen, "Artemis", id+3 ); 211 else if( !memcmp( id+1, "AV", 2 ) ) four_digits( buf, buflen, "Avicora", id+3 ); 212 else if( !memcmp( id+1, "BG", 2 ) ) four_digits( buf, buflen, "BTGetit", id+3 ); 213 else if( !memcmp( id+1, "BM", 2 ) ) four_digits( buf, buflen, "BitMagnet", id+3 ); 214 else if( !memcmp( id+1, "BP", 2 ) ) four_digits( buf, buflen, "BitTorrent Pro (Azureus + Spyware)", id+3 ); 215 else if( !memcmp( id+1, "BX", 2 ) ) four_digits( buf, buflen, "BittorrentX", id+3 ); 216 else if( !memcmp( id+1, "bk", 2 ) ) four_digits( buf, buflen, "BitKitten (libtorrent)", id+3 ); 217 else if( !memcmp( id+1, "BS", 2 ) ) four_digits( buf, buflen, "BTSlave", id+3 ); 218 else if( !memcmp( id+1, "BW", 2 ) ) four_digits( buf, buflen, "BitWombat", id+3 ); 219 else if( !memcmp( id+1, "BX", 2 ) ) four_digits( buf, buflen, "BittorrentX", id+3 ); 220 else if( !memcmp( id+1, "EB", 2 ) ) four_digits( buf, buflen, "EBit", id+3 ); 221 else if( !memcmp( id+1, "DE", 2 ) ) four_digits( buf, buflen, "Deluge", id+3 ); 222 else if( !memcmp( id+1, "DP", 2 ) ) four_digits( buf, buflen, "Propogate Data Client", id+3 ); 223 else if( !memcmp( id+1, "FC", 2 ) ) four_digits( buf, buflen, "FileCroc", id+3 ); 224 else if( !memcmp( id+1, "FT", 2 ) ) four_digits( buf, buflen, "FoxTorrent/RedSwoosh", id+3 ); 225 else if( !memcmp( id+1, "GR", 2 ) ) four_digits( buf, buflen, "GetRight", id+3 ); 226 else if( !memcmp( id+1, "HN", 2 ) ) four_digits( buf, buflen, "Hydranode", id+3 ); 227 else if( !memcmp( id+1, "LC", 2 ) ) four_digits( buf, buflen, "LeechCraft", id+3 ); 228 else if( !memcmp( id+1, "LH", 2 ) ) four_digits( buf, buflen, "LH-ABC", id+3 ); 229 else if( !memcmp( id+1, "NX", 2 ) ) four_digits( buf, buflen, "Net Transport", id+3 ); 230 else if( !memcmp( id+1, "MO", 2 ) ) four_digits( buf, buflen, "MonoTorrent", id+3 ); 231 else if( !memcmp( id+1, "MR", 2 ) ) four_digits( buf, buflen, "Miro", id+3 ); 232 else if( !memcmp( id+1, "MT", 2 ) ) four_digits( buf, buflen, "Moonlight", id+3 ); 233 else if( !memcmp( id+1, "OT", 2 ) ) four_digits( buf, buflen, "OmegaTorrent", id+3 ); 234 else if( !memcmp( id+1, "PD", 2 ) ) four_digits( buf, buflen, "Pando", id+3 ); 235 else if( !memcmp( id+1, "QD", 2 ) ) four_digits( buf, buflen, "QQDownload", id+3 ); 236 else if( !memcmp( id+1, "RS", 2 ) ) four_digits( buf, buflen, "Rufus", id+3 ); 237 else if( !memcmp( id+1, "RT", 2 ) ) four_digits( buf, buflen, "Retriever", id+3 ); 238 else if( !memcmp( id+1, "SS", 2 ) ) four_digits( buf, buflen, "SwarmScope", id+3 ); 239 else if( !memcmp( id+1, "SZ", 2 ) ) four_digits( buf, buflen, "Shareaza", id+3 ); 240 else if( !memcmp( id+1, "S~", 2 ) ) four_digits( buf, buflen, "Shareaza", id+3 ); 241 else if( !memcmp( id+1, "st", 2 ) ) four_digits( buf, buflen, "SharkTorrent", id+3 ); 242 else if( !memcmp( id+1, "TN", 2 ) ) four_digits( buf, buflen, "Torrent .NET", id+3 ); 243 else if( !memcmp( id+1, "TS", 2 ) ) four_digits( buf, buflen, "TorrentStorm", id+3 ); 244 else if( !memcmp( id+1, "UL", 2 ) ) four_digits( buf, buflen, "uLeecher!", id+3 ); 245 else if( !memcmp( id+1, "VG", 2 ) ) four_digits( buf, buflen, "Vagaa", id+3 ); 246 else if( !memcmp( id+1, "WT", 2 ) ) four_digits( buf, buflen, "BitLet", id+3 ); 247 else if( !memcmp( id+1, "WY", 2 ) ) four_digits( buf, buflen, "Wyzo", id+3 ); 248 else if( !memcmp( id+1, "XL", 2 ) ) four_digits( buf, buflen, "Xunlei", id+3 ); 249 else if( !memcmp( id+1, "XT", 2 ) ) four_digits( buf, buflen, "XanTorrent", id+3 ); 250 else if( !memcmp( id+1, "ZT", 2 ) ) four_digits( buf, buflen, "Zip Torrent", id+3 ); 251 252 else if( !memcmp( id+1, "AG", 2 ) ) three_digits( buf, buflen, "Ares", id+3 ); 253 else if( !memcmp( id+1, "A~", 2 ) ) three_digits( buf, buflen, "Ares", id+3 ); 254 else if( !memcmp( id+1, "ES", 2 ) ) three_digits( buf, buflen, "Electric Sheep", id+3 ); 255 else if( !memcmp( id+1, "HL", 2 ) ) three_digits( buf, buflen, "Halite", id+3 ); 256 else if( !memcmp( id+1, "LT", 2 ) ) three_digits( buf, buflen, "libtorrent (Rasterbar)", id+3 ); 257 else if( !memcmp( id+1, "lt", 2 ) ) three_digits( buf, buflen, "libTorrent (Rakshasa)", id+3 ); 258 else if( !memcmp( id+1, "MP", 2 ) ) three_digits( buf, buflen, "MooPolice", id+3 ); 259 else if( !memcmp( id+1, "TT", 2 ) ) three_digits( buf, buflen, "TuoTu", id+3 ); 260 else if( !memcmp( id+1, "qB", 2 ) ) three_digits( buf, buflen, "qBittorrent", id+3 ); 261 262 else if( !memcmp( id+1, "AX", 2 ) ) two_major_two_minor( buf, buflen, "BitPump", id+3 ); 263 else if( !memcmp( id+1, "BC", 2 ) ) two_major_two_minor( buf, buflen, "BitComet", id+3 ); 264 else if( !memcmp( id+1, "CD", 2 ) ) two_major_two_minor( buf, buflen, "Enhanced CTorrent", id+3 ); 265 else if( !memcmp( id+1, "LP", 2 ) ) two_major_two_minor( buf, buflen, "Lphant", id+3 ); 266 267 else if( !memcmp( id+1, "BF", 2 ) ) no_version( buf, buflen, "BitFlu" ); 268 else if( !memcmp( id+1, "LW", 2 ) ) no_version( buf, buflen, "LimeWire" ); 269 270 else if( !memcmp( id+1, "BB", 2 ) ) 271 { 272 tr_snprintf( buf, buflen, "BitBuddy %c.%c%c%c", id[3], id[4], id[5], id[6] ); 273 } 274 else if( !memcmp( id+1, "BR", 2 ) ) 275 { 276 tr_snprintf( buf, buflen, "BitRocket %c.%c (%c%c)", id[3], id[4], id[5], id[6] ); 277 } 278 else if( !memcmp( id+1, "CT", 2 ) ) 279 { 280 tr_snprintf( buf, buflen, "CTorrent %d.%d.%02d", charint(id[3]), charint(id[4]), strint(id+5,2) ); 281 } 282 else if( !memcmp( id+1, "XX", 2 ) ) 283 { 284 tr_snprintf( buf, buflen, "Xtorrent %d.%d (%d)", charint(id[3]), charint(id[4]), strint(id+5,2) ); 285 } 286 else if( !memcmp( id+1, "BOW", 3 ) ) 287 { 288 if( !memcmp( &id[4], "A0B", 3 ) ) tr_snprintf( buf, buflen, "Bits on Wheels 1.0.5" ); 289 else if( !memcmp( &id[4], "A0C", 3 ) ) tr_snprintf( buf, buflen, "Bits on Wheels 1.0.6" ); 290 else tr_snprintf( buf, buflen, "Bits on Wheels %c.%c.%c", id[4], id[5], id[5] ); 438 291 } 439 292 … … 445 298 if( isMainlineStyle( id ) ) 446 299 { 447 if( *id =='M' ) mainline_style( buf, buflen, "BitTorrent", id );448 if( *id =='Q' ) mainline_style( buf, buflen, "Queen Bee", id );300 if( *id=='M' ) mainline_style( buf, buflen, "BitTorrent", id ); 301 if( *id=='Q' ) mainline_style( buf, buflen, "Queen Bee", id ); 449 302 if( *buf ) return; 450 303 } … … 456 309 457 310 /* Clients with no version */ 458 if( !memcmp( id, "AZ2500BT", 8 ) ) no_version( 459 buf, buflen, "BitTyrant (Azureus Mod)" ); 460 else if( !memcmp( id, "LIME", 4 ) ) no_version( buf, buflen, "Limewire" ); 461 else if( !memcmp( id, "martini", 7 ) ) no_version( buf, buflen, 462 "Martini Man" ); 463 else if( !memcmp( id, "Pando", 5 ) ) no_version( buf, buflen, "Pando" ); 464 else if( !memcmp( id, "a00---0", 7 ) ) no_version( buf, buflen, 465 "Swarmy" ); 466 else if( !memcmp( id, "a02---0", 7 ) ) no_version( buf, buflen, 467 "Swarmy" ); 468 else if( !memcmp( id, "-G3", 3 ) ) no_version( buf, buflen, 469 "G3 Torrent" ); 470 else if( !memcmp( id, "10-------", 9 ) ) no_version( buf, buflen, 471 "JVtorrent" ); 472 else if( !memcmp( id, "346-", 4 ) ) no_version( buf, buflen, 473 "TorrentTopia" ); 474 else if( !memcmp( id, "eX", 2 ) ) no_version( buf, buflen, "eXeem" ); 475 else if( !memcmp( id, "-FG", 3 ) ) two_major_two_minor( buf, buflen, 476 "FlashGet", 477 id + 3 ); 478 479 /* Everything else */ 480 else if( !memcmp( id, "S3", 481 2 ) && id[2] == '-' && id[4] == '-' && id[6] == '-' ) 311 if( !memcmp( id, "AZ2500BT", 8 ) ) no_version( buf, buflen, "BitTyrant (Azureus Mod)" ); 312 else if( !memcmp( id, "LIME", 4 ) ) no_version( buf, buflen, "Limewire" ); 313 else if( !memcmp( id, "martini", 7 ) ) no_version( buf, buflen, "Martini Man" ); 314 else if( !memcmp( id, "Pando", 5 ) ) no_version( buf, buflen, "Pando" ); 315 else if( !memcmp( id, "a00---0", 7 ) ) no_version( buf, buflen, "Swarmy" ); 316 else if( !memcmp( id, "a02---0", 7 ) ) no_version( buf, buflen, "Swarmy" ); 317 else if( !memcmp( id, "-G3", 3 ) ) no_version( buf, buflen, "G3 Torrent" ); 318 else if( !memcmp( id, "10-------", 9 ) ) no_version( buf, buflen, "JVtorrent" ); 319 else if( !memcmp( id, "346-", 4 ) ) no_version( buf, buflen, "TorrentTopia" ); 320 else if( !memcmp( id, "eX", 2 ) ) no_version( buf, buflen, "eXeem" ); 321 else if( !memcmp( id, "-FG", 3 ) ) two_major_two_minor( buf, buflen, "FlashGet", id+3 ); 322 323 /* Everything else */ 324 else if( !memcmp( id, "S3", 2 ) && id[2] == '-' && id[4] == '-' && id[6] == '-' ) 482 325 { 483 326 tr_snprintf( buf, buflen, "Amazon S3 %c.%c.%c", id[3], id[5], id[7] ); … … 485 328 else if( !memcmp( id, "OP", 2 ) ) 486 329 { 487 tr_snprintf( buf, buflen, "Opera (Build %c%c%c%c)", id[2], id[3], 488 id[4], 489 id[5] ); 330 tr_snprintf( buf, buflen, "Opera (Build %c%c%c%c)", id[2], id[3], id[4], id[5] ); 490 331 } 491 332 else if( !memcmp( id, "-ML", 3 ) ) 492 333 { 493 tr_snprintf( buf, buflen, "MLDonkey %c%c%c%c%c", id[3], id[4], 494 id[5], id[6], 495 id[7] ); 334 tr_snprintf( buf, buflen, "MLDonkey %c%c%c%c%c", id[3], id[4], id[5], id[6], id[7] ); 496 335 } 497 336 else if( !memcmp( id, "DNA", 3 ) ) 498 337 { 499 tr_snprintf( buf, buflen, "BitTorrent DNA %d.%d.%d", 500 strint( id + 3, 2 ), 501 strint( id + 5, 2 ), 502 strint( id + 7, 2 ) ); 338 tr_snprintf( buf, buflen, "BitTorrent DNA %d.%d.%d", strint(id+3,2), 339 strint(id+5,2), 340 strint(id+7,2) ); 503 341 } 504 342 else if( !memcmp( id, "Plus", 4 ) ) … … 508 346 else if( !memcmp( id, "XBT", 3 ) ) 509 347 { 510 tr_snprintf( buf, buflen, "XBT Client %c.%c.%c%s", id[3], id[4], 511 id[5], getMnemonicEnd( 512 id[6] ) ); 348 tr_snprintf( buf, buflen, "XBT Client %c.%c.%c%s", id[3], id[4], id[5], getMnemonicEnd(id[6]) ); 513 349 } 514 350 else if( !memcmp( id, "Mbrst", 5 ) ) … … 518 354 else if( !memcmp( id, "btpd", 4 ) ) 519 355 { 520 tr_snprintf( buf, buflen, "BT Protocol Daemon %c%c%c", id[5], id[6], 521 id[7] ); 356 tr_snprintf( buf, buflen, "BT Protocol Daemon %c%c%c", id[5], id[6], id[7] ); 522 357 } 523 358 else if( !memcmp( id, "BLZ", 3 ) ) 524 359 { 525 tr_snprintf( buf, buflen, "Blizzard Downloader %d.%d", id[3] + 1, 526 id[4] ); 360 tr_snprintf( buf, buflen, "Blizzard Downloader %d.%d", id[3]+1, id[4] ); 527 361 } 528 362 else if( '\0' == id[0] && !memcmp( &id[1], "BS", 2 ) ) 529 363 { 530 364 tr_snprintf( buf, buflen, "BitSpirit %u", ( id[1] == 0 ? 1 : id[1] ) ); 365 } 366 else if( !memcmp( id, "QVOD", 4 ) ) 367 { 368 four_digits( buf, buflen, "QVOD", id+4 ); 369 } 370 else if( !memcmp( id, "-NE", 3 ) ) 371 { 372 four_digits( buf, buflen, "BT Next Evolution", id+3 ); 531 373 } 532 374 … … 564 406 { 565 407 struct evbuffer * out = evbuffer_new( ); 566 const char * in, *in_end; 567 for( in = (const char*)id, in_end = in + 8; in != in_end; ++in ) 568 { 408 const char *in, *in_end; 409 for( in=(const char*)id, in_end=in+8; in!=in_end; ++in ) { 569 410 if( isprint( *in ) ) 570 411 evbuffer_add_printf( out, "%c", *in );
Note: See TracChangeset
for help on using the changeset viewer.