Changeset 4739
- Timestamp:
- 05/10/07 18:17:13 (2 years ago)
- Files:
-
- wired/trunk/wired/accounts.c (modified) (6 diffs)
- wired/trunk/wired/chats.c (modified) (4 diffs)
- wired/trunk/wired/clients.c (modified) (10 diffs)
- wired/trunk/wired/clients.h (modified) (2 diffs)
- wired/trunk/wired/commands.c (modified) (81 diffs)
- wired/trunk/wired/files.c (modified) (12 diffs)
- wired/trunk/wired/news.c (modified) (1 diff)
- wired/trunk/wired/server.c (modified) (3 diffs)
- wired/trunk/wired/transfers.c (modified) (24 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
wired/trunk/wired/accounts.c
r4738 r4739 438 438 wi_boolean_t wd_accounts_check_privileges(wd_account_t *account) { 439 439 wd_client_t *client = wd_client(); 440 441 if(!client->account->elevate_privileges) { 442 if(account->get_user_info && !client->account->get_user_info) 443 return false; 444 445 if(account->broadcast && !client->account->broadcast) 446 return false; 447 448 if(account->post_news && !client->account->post_news) 449 return false; 450 451 if(account->clear_news && !client->account->clear_news) 452 return false; 453 454 if(account->download && !client->account->download) 455 return false; 456 457 if(account->upload && !client->account->upload) 458 return false; 459 460 if(account->upload_anywhere && !client->account->upload_anywhere) 461 return false; 462 463 if(account->create_folders && !client->account->create_folders) 464 return false; 465 466 if(account->alter_files && !client->account->alter_files) 467 return false; 468 469 if(account->delete_files && !client->account->delete_files) 470 return false; 471 472 if(account->view_dropboxes && !client->account->view_dropboxes) 473 return false; 474 475 if(account->create_accounts && !client->account->create_accounts) 476 return false; 477 478 if(account->edit_accounts && !client->account->edit_accounts) 479 return false; 480 481 if(account->delete_accounts && !client->account->delete_accounts) 482 return false; 483 484 if(account->elevate_privileges && !client->account->elevate_privileges) 485 return false; 486 487 if(account->kick_users && !client->account->kick_users) 488 return false; 489 490 if(account->ban_users && !client->account->ban_users) 491 return false; 492 493 if(account->cannot_be_kicked && !client->account->cannot_be_kicked) 494 return false; 495 496 if(account->set_topic && !client->account->set_topic) 440 wd_account_t *client_account; 441 442 client_account = wd_client_account(client); 443 444 if(!client_account->elevate_privileges) { 445 if(account->get_user_info && !client_account->get_user_info) 446 return false; 447 448 if(account->broadcast && !client_account->broadcast) 449 return false; 450 451 if(account->post_news && !client_account->post_news) 452 return false; 453 454 if(account->clear_news && !client_account->clear_news) 455 return false; 456 457 if(account->download && !client_account->download) 458 return false; 459 460 if(account->upload && !client_account->upload) 461 return false; 462 463 if(account->upload_anywhere && !client_account->upload_anywhere) 464 return false; 465 466 if(account->create_folders && !client_account->create_folders) 467 return false; 468 469 if(account->alter_files && !client_account->alter_files) 470 return false; 471 472 if(account->delete_files && !client_account->delete_files) 473 return false; 474 475 if(account->view_dropboxes && !client_account->view_dropboxes) 476 return false; 477 478 if(account->create_accounts && !client_account->create_accounts) 479 return false; 480 481 if(account->edit_accounts && !client_account->edit_accounts) 482 return false; 483 484 if(account->delete_accounts && !client_account->delete_accounts) 485 return false; 486 487 if(account->elevate_privileges && !client_account->elevate_privileges) 488 return false; 489 490 if(account->kick_users && !client_account->kick_users) 491 return false; 492 493 if(account->ban_users && !client_account->ban_users) 494 return false; 495 496 if(account->cannot_be_kicked && !client_account->cannot_be_kicked) 497 return false; 498 499 if(account->set_topic && !client_account->set_topic) 497 500 return false; 498 501 } … … 562 565 wi_enumerator_t *enumerator; 563 566 wd_client_t *client; 567 wd_account_t *account; 564 568 565 569 wi_hash_rdlock(wd_clients); … … 568 572 569 573 while((client = wi_enumerator_next_data(enumerator))) { 570 if(wi_is_equal(client->account->name, name)) 574 account = wd_client_account(client); 575 576 if(wi_is_equal(account->name, name)) 571 577 _wd_accounts_reload_client(client); 572 578 } … … 580 586 wi_enumerator_t *enumerator; 581 587 wd_client_t *client; 588 wd_account_t *account; 582 589 583 590 wi_hash_rdlock(wd_clients); … … 586 593 587 594 while((client = wi_enumerator_next_data(enumerator))) { 588 if(wi_is_equal(client->account->group, name)) 595 account = wd_client_account(client); 596 597 if(wi_is_equal(account->group, name)) 589 598 _wd_accounts_reload_client(client); 590 599 } … … 596 605 597 606 static void _wd_accounts_reload_client(wd_client_t *client) { 598 wd_account_t *account; 599 wi_boolean_t admin; 600 601 account = wd_accounts_read_user_and_group(client->account->name); 607 wd_account_t *account, *new_account; 608 wi_boolean_t admin, new_admin; 609 610 account = wd_client_account(client); 611 new_account = wd_accounts_read_user_and_group(account->name); 602 612 603 613 if(!account) 604 614 return; 605 615 606 wd_client_wrlock_client(client); 607 608 wi_retain(account); 609 wi_release(client->account); 610 611 client->account = account; 612 613 admin = client->admin; 614 client->admin = (client->account->kick_users || client->account->ban_users); 615 616 wd_client_unlock_client(client); 617 618 if(client->admin != admin) 616 wd_client_set_account(client, new_account); 617 618 admin = wd_client_is_admin(client); 619 new_admin = (new_account->kick_users || new_account->ban_users); 620 wd_client_set_admin(client, new_admin); 621 622 if(admin != new_admin) 619 623 wd_client_broadcast_status(client); 620 624 625 _wd_accounts_sreply_privileges(client); 626 } 627 628 629 630 static void _wd_accounts_sreply_privileges(wd_client_t *client) { 631 wd_account_t *account; 632 633 account = wd_client_account(client); 634 621 635 wd_client_lock_socket(client); 622 _wd_accounts_sreply_privileges(client); 636 wd_sreply(wd_client_socket(client), 602, WI_STR("%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%u%c%u%c%u%c%u%c%d"), 637 account->get_user_info, WD_FIELD_SEPARATOR, 638 account->broadcast, WD_FIELD_SEPARATOR, 639 account->post_news, WD_FIELD_SEPARATOR, 640 account->clear_news, WD_FIELD_SEPARATOR, 641 account->download, WD_FIELD_SEPARATOR, 642 account->upload, WD_FIELD_SEPARATOR, 643 account->upload_anywhere, WD_FIELD_SEPARATOR, 644 account->create_folders, WD_FIELD_SEPARATOR, 645 account->alter_files, WD_FIELD_SEPARATOR, 646 account->delete_files, WD_FIELD_SEPARATOR, 647 account->view_dropboxes, WD_FIELD_SEPARATOR, 648 account->create_accounts, WD_FIELD_SEPARATOR, 649 account->edit_accounts, WD_FIELD_SEPARATOR, 650 account->delete_accounts, WD_FIELD_SEPARATOR, 651 account->elevate_privileges, WD_FIELD_SEPARATOR, 652 account->kick_users, WD_FIELD_SEPARATOR, 653 account->ban_users, WD_FIELD_SEPARATOR, 654 account->cannot_be_kicked, WD_FIELD_SEPARATOR, 655 account->download_speed, WD_FIELD_SEPARATOR, 656 account->upload_speed, WD_FIELD_SEPARATOR, 657 account->download_limit, WD_FIELD_SEPARATOR, 658 account->upload_limit, WD_FIELD_SEPARATOR, 659 account->set_topic); 623 660 wd_client_unlock_socket(client); 624 }625 626 627 628 static void _wd_accounts_sreply_privileges(wd_client_t *client) {629 wd_sreply(client->socket, 602, WI_STR("%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%d%c%u%c%u%c%u%c%u%c%d"),630 client->account->get_user_info, WD_FIELD_SEPARATOR,631 client->account->broadcast, WD_FIELD_SEPARATOR,632 client->account->post_news, WD_FIELD_SEPARATOR,633 client->account->clear_news, WD_FIELD_SEPARATOR,634 client->account->download, WD_FIELD_SEPARATOR,635 client->account->upload, WD_FIELD_SEPARATOR,636 client->account->upload_anywhere, WD_FIELD_SEPARATOR,637 client->account->create_folders, WD_FIELD_SEPARATOR,638 client->account->alter_files, WD_FIELD_SEPARATOR,639 client->account->delete_files, WD_FIELD_SEPARATOR,640 client->account->view_dropboxes, WD_FIELD_SEPARATOR,641 client->account->create_accounts, WD_FIELD_SEPARATOR,642 client->account->edit_accounts, WD_FIELD_SEPARATOR,643 client->account->delete_accounts, WD_FIELD_SEPARATOR,644 client->account->elevate_privileges, WD_FIELD_SEPARATOR,645 client->account->kick_users, WD_FIELD_SEPARATOR,646 client->account->ban_users, WD_FIELD_SEPARATOR,647 client->account->cannot_be_kicked, WD_FIELD_SEPARATOR,648 client->account->download_speed, WD_FIELD_SEPARATOR,649 client->account->upload_speed, WD_FIELD_SEPARATOR,650 client->account->download_limit, WD_FIELD_SEPARATOR,651 client->account->upload_limit, WD_FIELD_SEPARATOR,652 client->account->set_topic);653 661 } 654 662 wired/trunk/wired/chats.c
r4738 r4739 236 236 237 237 void wd_chat_add_client(wd_chat_t *chat, wd_client_t *client) { 238 wd_client_rdlock_client(client);239 238 wd_broadcast(chat, 302, WI_STR("%u%c%u%c%u%c%u%c%u%c%#@%c%#@%c%#@%c%#@%c%#@%c%#@"), 240 chat->cid, WD_FIELD_SEPARATOR, 241 client->uid, WD_FIELD_SEPARATOR, 242 client->idle, WD_FIELD_SEPARATOR, 243 client->admin, WD_FIELD_SEPARATOR, 244 client->icon, WD_FIELD_SEPARATOR, 245 client->nick, WD_FIELD_SEPARATOR, 246 client->login, WD_FIELD_SEPARATOR, 247 client->ip, WD_FIELD_SEPARATOR, 248 client->host, WD_FIELD_SEPARATOR, 249 client->status, WD_FIELD_SEPARATOR, 250 client->image); 251 wd_client_unlock_client(client); 239 chat->cid, WD_FIELD_SEPARATOR, 240 wd_client_uid(client), WD_FIELD_SEPARATOR, 241 wd_client_is_idle(client), WD_FIELD_SEPARATOR, 242 wd_client_is_admin(client), WD_FIELD_SEPARATOR, 243 wd_client_icon(client), WD_FIELD_SEPARATOR, 244 wd_client_nick(client), WD_FIELD_SEPARATOR, 245 wd_client_login(client), WD_FIELD_SEPARATOR, 246 wd_client_ip(client), WD_FIELD_SEPARATOR, 247 wd_client_host(client), WD_FIELD_SEPARATOR, 248 wd_client_status(client), WD_FIELD_SEPARATOR, 249 wd_client_image(client)); 252 250 253 251 wd_chat_wrlock(chat); … … 284 282 285 283 while((client = wi_enumerator_next_data(enumerator))) { 286 wd_client_rdlock_client(client); 287 288 if(client->state == WD_CLIENT_STATE_LOGGED_IN) { 284 if(wd_client_state(client) == WD_CLIENT_STATE_LOGGED_IN) { 289 285 wd_reply(310, WI_STR("%u%c%u%c%u%c%u%c%u%c%#@%c%#@%c%#@%c%#@%c%#@%c%#@"), 290 chat->cid, WD_FIELD_SEPARATOR,291 client->uid,WD_FIELD_SEPARATOR,292 client->idle, WD_FIELD_SEPARATOR,293 client->admin,WD_FIELD_SEPARATOR,294 client->icon, WD_FIELD_SEPARATOR,295 client->nick, WD_FIELD_SEPARATOR,296 client->login, WD_FIELD_SEPARATOR,297 client->ip,WD_FIELD_SEPARATOR,298 client->host, WD_FIELD_SEPARATOR,299 client->status,WD_FIELD_SEPARATOR,300 client->image);286 chat->cid, WD_FIELD_SEPARATOR, 287 wd_client_uid(client), WD_FIELD_SEPARATOR, 288 wd_client_is_idle(client), WD_FIELD_SEPARATOR, 289 wd_client_is_admin(client), WD_FIELD_SEPARATOR, 290 wd_client_icon(client), WD_FIELD_SEPARATOR, 291 wd_client_nick(client), WD_FIELD_SEPARATOR, 292 wd_client_login(client), WD_FIELD_SEPARATOR, 293 wd_client_ip(client), WD_FIELD_SEPARATOR, 294 wd_client_host(client), WD_FIELD_SEPARATOR, 295 wd_client_status(client), WD_FIELD_SEPARATOR, 296 wd_client_image(client)); 301 297 } 302 303 wd_client_unlock_client(client);304 298 } 305 299 … … 325 319 326 320 wi_release(chat->topic.nick); 327 chat->topic.nick = wi_copy( client->nick);321 chat->topic.nick = wi_copy(wd_client_nick(client)); 328 322 329 323 wi_release(chat->topic.login); 330 chat->topic.login = wi_copy( client->login);324 chat->topic.login = wi_copy(wd_client_login(client)); 331 325 332 326 wi_release(chat->topic.ip); 333 chat->topic.ip = wi_copy( client->ip);327 chat->topic.ip = wi_copy(wd_client_ip(client)); 334 328 335 329 wd_chat_unlock(chat); … … 381 375 wd_broadcast(chat, 303, WI_STR("%u%c%u"), 382 376 chat->cid, WD_FIELD_SEPARATOR, 383 client->uid);384 } 377 wd_client_uid(client)); 378 } wired/trunk/wired/clients.c
r4738 r4739 45 45 #define WD_CLIENTS_TIMER_INTERVAL 60.0 46 46 47 #define WD_CLIENT_SET_VALUE(dst, src) \ 48 WI_STMT_START \ 49 wi_rwlock_wrlock(client->client_lock); \ 50 (dst) = (src); \ 51 wi_rwlock_unlock(client->client_lock); \ 52 WI_STMT_END 53 54 #define WD_CLIENT_SET_OBJECT(dst, src) \ 55 WI_STMT_START \ 56 wi_rwlock_wrlock(client->client_lock); \ 57 (dst) = wi_retain((src)); \ 58 wi_rwlock_unlock(client->client_lock); \ 59 WI_STMT_END 60 61 #define WD_CLIENT_RETURN_VALUE(src) \ 62 WI_STMT_START \ 63 typeof(src) _value; \ 64 \ 65 wi_rwlock_rdlock(client->client_lock); \ 66 _value = (src); \ 67 wi_rwlock_unlock(client->client_lock); \ 68 \ 69 return _value; \ 70 WI_STMT_END 71 72 #define WD_CLIENT_RETURN_OBJECT(src) \ 73 WI_STMT_START \ 74 typeof(src) _object; \ 75 \ 76 wi_rwlock_rdlock(client->client_lock); \ 77 _object = wi_autorelease(wi_retain((src))); \ 78 wi_rwlock_unlock(client->client_lock); \ 79 \ 80 return _object; \ 81 WI_STMT_END 82 83 84 85 struct _wd_client { 86 wi_runtime_base_t base; 87 88 wi_rwlock_t *client_lock; 89 wi_lock_t *socket_lock; 90 91 wi_socket_t *socket; 92 93 wd_uid_t uid; 94 wd_client_state_t state; 95 wd_icon_t icon; 96 wi_boolean_t idle; 97 wi_boolean_t admin; 98 99 wd_account_t *account; 100 101 wi_string_t *nick; 102 wi_string_t *login; 103 wi_string_t *ip; 104 wi_string_t *host; 105 wi_uinteger_t port; 106 wi_string_t *version; 107 wi_string_t *status; 108 109 wi_string_t *image; 110 111 wi_time_interval_t login_time; 112 wi_time_interval_t idle_time; 113 114 wi_array_t *transfers_queue; 115 wi_uinteger_t downloads; 116 wi_uinteger_t uploads; 117 }; 118 47 119 48 120 static void wd_clients_update_idle(wi_timer_t *); … … 51 123 static wi_string_t * wd_client_description(wi_runtime_instance_t *); 52 124 53 static wd_uid_t wd_client_uid(void);125 static wd_uid_t _wd_client_next_uid(void); 54 126 55 127 … … 106 178 107 179 while((client = wi_enumerator_next_data(enumerator))) { 108 w d_client_wrlock_client(client);180 wi_rwlock_wrlock(client->client_lock); 109 181 110 182 if(client->state == WD_CLIENT_STATE_LOGGED_IN && … … 116 188 } 117 189 118 w d_client_unlock_client(client);190 wi_rwlock_unlock(client->client_lock); 119 191 } 120 192 } … … 166 238 167 239 240 wd_client_t * wd_clients_client_with_uid(wd_uid_t uid) { 241 wd_client_t *client; 242 243 wi_hash_rdlock(wd_clients); 244 client = wi_autorelease(wi_retain(wi_hash_data_for_key(wd_clients, wi_number_with_int32(uid)))); 245 wi_hash_unlock(wd_clients); 246 247 return client; 248 } 249 250 251 252 #pragma mark - 253 254 void wd_client_set(wd_client_t *client) { 255 wi_hash_set_data_for_key(wi_thread_hash(), client, WI_STR(WD_CLIENTS_THREAD_KEY)); 256 } 257 258 259 260 wd_client_t * wd_client(void) { 261 return wi_hash_data_for_key(wi_thread_hash(), WI_STR(WD_CLIENTS_THREAD_KEY)); 262 } 263 264 265 168 266 #pragma mark - 169 267 … … 177 275 wi_address_t *address; 178 276 179 client->uid = wd_client_uid();277 client->uid = _wd_client_next_uid(); 180 278 client->socket = wi_retain(socket); 181 279 client->state = WD_CLIENT_STATE_CONNECTED; … … 187 285 client->host = wi_retain(wi_address_hostname(address)); 188 286 287 client->client_lock = wi_rwlock_init(wi_rwlock_alloc()); 189 288 client->socket_lock = wi_lock_init(wi_lock_alloc()); 190 client->client_lock = wi_rwlock_init(wi_rwlock_alloc());191 289 192 290 client->transfers_queue = wi_array_init(wi_array_alloc()); … … 235 333 #pragma mark - 236 334 237 static wd_uid_t wd_client_uid(void) {335 static wd_uid_t _wd_client_next_uid(void) { 238 336 wd_uid_t uid; 239 337 … … 250 348 251 349 return uid; 252 }253 254 255 256 #pragma mark -257 258 void wd_client_wrlock_client(wd_client_t *client) {259 wi_rwlock_wrlock(client->client_lock);260 }261 262 263 264 void wd_client_rdlock_client(wd_client_t *client) {265 wi_rwlock_rdlock(client->client_lock);266 }267 268 269 270 void wd_client_unlock_client(wd_client_t *client) {271 wi_rwlock_unlock(client->client_lock);272 }273 274 275 276 277 void wd_client_lock_socket(wd_client_t *client) {278 wi_lock_lock(client->socket_lock);279 }280 281 282 283 void wd_client_unlock_socket(wd_client_t *client) {284 wi_lock_unlock(client->socket_lock);285 }286 287 288 289 #pragma mark -290 291 void wd_client_set(wd_client_t *client) {292 wi_hash_set_data_for_key(wi_thread_hash(), client, WI_STR(WD_CLIENTS_THREAD_KEY));293 }294 295 296 297 wd_client_t * wd_client(void) {298 return wi_hash_data_for_key(wi_thread_hash(), WI_STR(WD_CLIENTS_THREAD_KEY));299 }300 301 302 303 #pragma mark -304 305 wd_client_t * wd_client_with_uid(wd_uid_t uid) {306 wd_client_t *client;307 308 wi_hash_rdlock(wd_clients);309 client = wi_autorelease(wi_retain(wi_hash_data_for_key(wd_clients, wi_number_with_int32(uid))));310 wi_hash_unlock(wd_clients);311 312 return client;313 350 } 314 351 … … 326 363 client->status); 327 364 } 365 366 367 368 #pragma mark - 369 370 void wd_client_lock_socket(wd_client_t *client) { 371 wi_lock_lock(client->socket_lock); 372 } 373 374 375 376 void wd_client_unlock_socket(wd_client_t *client) { 377 wi_lock_unlock(client->socket_lock); 378 } 379 380 381 382 #pragma mark - 383 384 void wd_client_set_socket(wd_client_t *client, wi_socket_t *socket) { 385 wi_rwlock_wrlock(client->client_lock); 386 client->socket = wi_retain(socket); 387 wi_rwlock_unlock(client->client_lock); 388 } 389 390 391 392 wi_socket_t * wd_client_socket(wd_client_t *client) { 393 wi_socket_t *socket; 394 395 wi_rwlock_rdlock(client->client_lock); 396 socket = wi_autorelease(wi_retain(client->socket)); 397 wi_rwlock_unlock(client->client_lock); 398 399 return socket; 400 } 401 402 403 404 void wd_client_set_uid(wd_client_t *client, wd_uid_t uid) { 405 WD_CLIENT_SET_VALUE(client->uid, uid); 406 } 407 408 409 410 wd_uid_t wd_client_uid(wd_client_t *client) { 411 WD_CLIENT_RETURN_VALUE(client->uid); 412 } 413 414 415 416 void wd_client_set_state(wd_client_t *client, wd_client_state_t state) { 417 WD_CLIENT_SET_VALUE(client->state, state); 418 } 419 420 421 422 wd_client_state_t wd_client_state(wd_client_t *client) { 423 WD_CLIENT_RETURN_VALUE(client->state); 424 } 425 426 427 428 void wd_client_set_icon(wd_client_t *client, wd_icon_t icon) { 429 WD_CLIENT_SET_VALUE(client->icon, icon); 430 } 431 432 433 434 wd_icon_t wd_client_icon(wd_client_t *client) { 435 WD_CLIENT_RETURN_VALUE(client->icon); 436 } 437 438 439 440 void wd_client_set_idle(wd_client_t *client, wi_boolean_t idle) { 441 WD_CLIENT_SET_VALUE(client->idle, idle); 442 } 443 444 445 446 wi_boolean_t wd_client_is_idle(wd_client_t *client) { 447 WD_CLIENT_RETURN_VALUE(client->idle); 448 } 449 450 451 452 void wd_client_set_admin(wd_client_t *client, wi_boolean_t admin) { 453 WD_CLIENT_SET_VALUE(client->admin, admin); 454 } 455 456 457 458 wi_boolean_t wd_client_is_admin(wd_client_t *client) { 459 WD_CLIENT_RETURN_VALUE(client->admin); 460 } 461 462 463 464 void wd_client_set_account(wd_client_t *client, wd_account_t *account) { 465 WD_CLIENT_SET_OBJECT(client->account, account); 466 } 467 468 469 470 wd_account_t * wd_client_account(wd_client_t *client) { 471 WD_CLIENT_RETURN_OBJECT(client->account); 472 } 473 474 475 476 void wd_client_set_nick(wd_client_t *client, wi_string_t *nick) { 477 WD_CLIENT_SET_OBJECT(client->nick, nick); 478 } 479 480 481 482 wi_string_t * wd_client_nick(wd_client_t *client) { 483 WD_CLIENT_RETURN_OBJECT(client->nick); 484 } 485 486 487 488 void wd_client_set_login(wd_client_t *client, wi_string_t *login) { 489 WD_CLIENT_SET_OBJECT(client->login, login); 490 } 491 492 493 494 wi_string_t * wd_client_login(wd_client_t *client) { 495 WD_CLIENT_RETURN_OBJECT(client->login); 496 } 497 498 499 500 void wd_client_set_ip(wd_client_t *client, wi_string_t *ip) { 501 WD_CLIENT_SET_OBJECT(client->ip, ip); 502 } 503 504 505 506 wi_string_t * wd_client_ip(wd_client_t *client) { 507 WD_CLIENT_RETURN_OBJECT(client->ip); 508 } 509 510 511 512 void wd_client_set_host(wd_client_t *client, wi_string_t *host) { 513 WD_CLIENT_SET_OBJECT(client->host, host); 514 } 515 516 517 518 wi_string_t * wd_client_host(wd_client_t *client) { 519 WD_CLIENT_RETURN_OBJECT(client->host); 520 } 521 522 523 524 void wd_client_set_port(wd_client_t *client, wi_uinteger_t port) { 525 WD_CLIENT_SET_VALUE(client->port, port); 526 } 527 528 529 530 wi_uinteger_t wd_client_port(wd_client_t *client) { 531 WD_CLIENT_RETURN_VALUE(client->port); 532 } 533 534 535 536 void wd_client_set_version(wd_client_t *client, wi_string_t *version) { 537 WD_CLIENT_SET_OBJECT(client->version, version); 538 } 539 540 541 542 wi_string_t * wd_client_version(wd_client_t *client) { 543 WD_CLIENT_RETURN_OBJECT(client->version); 544 } 545 546 547 548 void wd_client_set_status(wd_client_t *client, wi_string_t *status) { 549 WD_CLIENT_SET_OBJECT(client->status, status); 550 } 551 552 553 554 wi_string_t * wd_client_status(wd_client_t *client) { 555 WD_CLIENT_RETURN_OBJECT(client->status); 556 } 557 558 559 560 void wd_client_set_image(wd_client_t *client, wi_string_t *image) { 561 WD_CLIENT_SET_OBJECT(client->image, image); 562 } 563 564 565 wi_string_t * wd_client_image(wd_client_t *client) { 566 WD_CLIENT_RETURN_OBJECT(client->image); 567 } 568 569 570 571 void wd_client_set_login_time(wd_client_t *client, wi_time_interval_t login_time) { 572 WD_CLIENT_SET_VALUE(client->login_time, login_time); 573 } 574 575 576 577 wi_time_interval_t wd_client_login_time(wd_client_t *client) { 578 WD_CLIENT_RETURN_VALUE(client->login_time); 579 } 580 581 582 583 void wd_client_set_idle_time(wd_client_t *client, wi_time_interval_t idle_time) { 584 WD_CLIENT_SET_VALUE(client->idle_time, idle_time); 585 } 586 587 588 589 wi_time_interval_t wd_client_idle_time(wd_client_t *client) { 590 WD_CLIENT_RETURN_VALUE(client->idle_time); 591 } 592 593 594 595 void wd_client_set_transfers_queue(wd_client_t *client, wi_array_t *transfers_queue) { 596 WD_CLIENT_SET_OBJECT(client->transfers_queue, transfers_queue); 597 } 598 599 600 601 wi_array_t * wd_client_transfers_queue(wd_client_t *client) { 602 WD_CLIENT_RETURN_OBJECT(client->transfers_queue); 603 } 604 605 606 607 void wd_client_increase_downloads(wd_client_t *client) { 608 WD_CLIENT_SET_VALUE(client->downloads, client->downloads + 1); 609 } 610 611 612 613 void wd_client_decrease_downloads(wd_client_t *client) { 614 WD_CLIENT_SET_VALUE(client->downloads, client->downloads - 1); 615 } 616 617 618 619 wi_uinteger_t wd_client_downloads(wd_client_t *client) { 620 WD_CLIENT_RETURN_VALUE(client->downloads); 621 } 622 623 624 625 void wd_client_increase_uploads(wd_client_t *client) { 626 WD_CLIENT_SET_VALUE(client->uploads, client->uploads + 1); 627 } 628 629 630 631 void wd_client_decrease_uploads(wd_client_t *client) { 632 WD_CLIENT_SET_VALUE(client->uploads, client->uploads - 1); 633 } 634
