Changeset 7458
- Timestamp:
- Dec 22, 2008, 4:55:07 AM (12 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/peer-io.c
r7456 r7458 96 96 97 97 tr_address addr; 98 tr_list * output_datatypes; /* struct tr_datatype */99 98 100 99 tr_can_read_cb canRead; … … 103 102 void * userData; 104 103 105 size_t bufferSize[2];106 107 104 tr_bandwidth * bandwidth; 108 105 tr_crypto * crypto; … … 110 107 struct evbuffer * inbuf; 111 108 struct evbuffer * outbuf; 109 tr_list * outbuf_datatypes; /* struct tr_datatype */ 112 110 113 111 struct event event_read; … … 124 122 while( bytes_transferred ) 125 123 { 126 struct tr_datatype * next = io->out put_datatypes->data;124 struct tr_datatype * next = io->outbuf_datatypes->data; 127 125 const size_t payload = MIN( next->length, bytes_transferred ); 128 126 const size_t overhead = getPacketOverhead( payload ); … … 139 137 next->length -= payload; 140 138 if( !next->length ) 141 tr_free( tr_list_pop_front( &io->out put_datatypes ) );139 tr_free( tr_list_pop_front( &io->outbuf_datatypes ) ); 142 140 } 143 141 } … … 212 210 { 213 211 int res; 214 short what = EVBUFFER_READ;215 212 tr_peerIo * io = vio; 216 213 const size_t howmuch = tr_bandwidthClamp( io->bandwidth, TR_DOWN, io->session->so_rcvbuf ); … … 228 225 229 226 res = evbuffer_read( io->inbuf, fd, howmuch ); 230 if( res == -1 ) { 231 if( errno == EAGAIN || errno == EINTR ) 232 goto reschedule; 233 /* error case */ 234 what |= EVBUFFER_ERROR; 235 } else if( res == 0 ) { 236 /* eof case */ 237 what |= EVBUFFER_EOF; 238 } 239 240 if( res <= 0 ) 241 goto error; 242 243 tr_peerIoSetEnabled( io, dir, TRUE ); 244 245 /* Invoke the user callback - must always be called last */ 246 canReadWrapper( io ); 247 248 return; 249 250 reschedule: 251 tr_peerIoSetEnabled( io, dir, TRUE ); 252 return; 253 254 error: 255 if( io->gotError != NULL ) 256 io->gotError( io, what, io->userData ); 227 228 if( res > 0 ) 229 { 230 tr_peerIoSetEnabled( io, dir, TRUE ); 231 232 /* Invoke the user callback - must always be called last */ 233 canReadWrapper( io ); 234 } 235 else 236 { 237 short what = EVBUFFER_READ; 238 239 if( res == 0 ) /* EOF */ 240 what |= EVBUFFER_EOF; 241 else if( res == -1 ) { 242 if( errno == EAGAIN || errno == EINTR ) { 243 tr_peerIoSetEnabled( io, dir, TRUE ); 244 return; 245 } 246 what |= EVBUFFER_ERROR; 247 } 248 249 if( io->gotError != NULL ) 250 io->gotError( io, what, io->userData ); 251 } 257 252 } 258 253 … … 341 336 *** 342 337 **/ 343 344 345 static int346 isFlag( int flag )347 {348 return( ( flag == 0 ) || ( flag == 1 ) );349 }350 338 351 339 static tr_peerIo* … … 375 363 event_set( &io->event_read, io->socket, EV_READ, event_read_cb, io ); 376 364 event_set( &io->event_write, io->socket, EV_WRITE, event_write_cb, io ); 377 #if 0378 bufevNew( io );379 #endif380 365 tr_peerIoSetBandwidth( io, session->bandwidth ); 381 366 return io; … … 389 374 { 390 375 assert( session ); 391 assert( addr);376 assert( tr_isAddress( addr ) ); 392 377 assert( socket >= 0 ); 393 378 … … 404 389 405 390 assert( session ); 406 assert( addr);391 assert( tr_isAddress( addr ) ); 407 392 assert( torrentHash ); 408 393 … … 426 411 tr_netClose( io->socket ); 427 412 tr_cryptoFree( io->crypto ); 428 tr_list_free( &io->out put_datatypes, tr_free );413 tr_list_free( &io->outbuf_datatypes, tr_free ); 429 414 430 415 io->magicNumber = 0xDEAD; … … 516 501 tr_bandwidth * bandwidth = io->bandwidth; 517 502 tr_peerIoSetBandwidth( io, NULL ); 518 519 503 tr_netSetTOS( io->socket, io->session->peerSocketTOS ); 520 #if 0521 bufevNew( io );522 #endif523 524 504 tr_peerIoSetBandwidth( io, bandwidth ); 525 505 return 0; … … 594 574 { 595 575 assert( tr_isPeerIo( io ) ); 596 assert( isFlag( flag ) );597 598 dbgmsg( io, "setting FEXT support flag to %d", (flag ?1:0) );576 assert( _isBool( flag ) ); 577 578 dbgmsg( io, "setting FEXT support flag to %d", (flag!=0) ); 599 579 io->fastExtensionSupported = flag; 600 580 } … … 617 597 { 618 598 assert( tr_isPeerIo( io ) ); 619 assert( isFlag( flag ) );620 621 dbgmsg( io, "setting LTEP support flag to %d", (flag ?1:0) );599 assert( _isBool( flag ) ); 600 601 dbgmsg( io, "setting LTEP support flag to %d", (flag!=0) ); 622 602 io->extendedProtocolSupported = flag; 623 603 } … … 715 695 { 716 696 struct tr_datatype * datatype; 697 717 698 assert( tr_amInEventThread( io->session ) ); 718 699 dbgmsg( io, "adding %zu bytes into io->output", writemeLen ); … … 721 702 datatype->isPieceData = isPieceData != 0; 722 703 datatype->length = writemeLen; 723 tr_list_append( &io->out put_datatypes, datatype );704 tr_list_append( &io->outbuf_datatypes, datatype ); 724 705 725 706 evbuffer_add( io->outbuf, writeme, writemeLen ); … … 742 723 743 724 void 744 tr_peerIoWriteBytes( tr_peerIo *io,725 tr_peerIoWriteBytes( tr_peerIo * io, 745 726 struct evbuffer * outbuf, 746 const void *bytes,727 const void * bytes, 747 728 size_t byteCount ) 748 729 { … … 768 749 769 750 void 770 tr_peerIoWriteUint8( tr_peerIo *io,751 tr_peerIoWriteUint8( tr_peerIo * io, 771 752 struct evbuffer * outbuf, 772 753 uint8_t writeme ) … … 776 757 777 758 void 778 tr_peerIoWriteUint16( tr_peerIo *io,759 tr_peerIoWriteUint16( tr_peerIo * io, 779 760 struct evbuffer * outbuf, 780 761 uint16_t writeme ) … … 786 767 787 768 void 788 tr_peerIoWriteUint32( tr_peerIo *io,769 tr_peerIoWriteUint32( tr_peerIo * io, 789 770 struct evbuffer * outbuf, 790 771 uint32_t writeme ) … … 800 781 801 782 void 802 tr_peerIoReadBytes( tr_peerIo *io,783 tr_peerIoReadBytes( tr_peerIo * io, 803 784 struct evbuffer * inbuf, 804 void *bytes,785 void * bytes, 805 786 size_t byteCount ) 806 787 { … … 824 805 825 806 void 826 tr_peerIoReadUint8( tr_peerIo *io,807 tr_peerIoReadUint8( tr_peerIo * io, 827 808 struct evbuffer * inbuf, 828 uint8_t *setme )809 uint8_t * setme ) 829 810 { 830 811 tr_peerIoReadBytes( io, inbuf, setme, sizeof( uint8_t ) ); … … 832 813 833 814 void 834 tr_peerIoReadUint16( tr_peerIo *io,815 tr_peerIoReadUint16( tr_peerIo * io, 835 816 struct evbuffer * inbuf, 836 uint16_t *setme )817 uint16_t * setme ) 837 818 { 838 819 uint16_t tmp; … … 845 826 846 827 void 847 tr_peerIoReadUint32( tr_peerIo *io,828 tr_peerIoReadUint32( tr_peerIo * io, 848 829 struct evbuffer * inbuf, 849 uint32_t *setme )830 uint32_t * setme ) 850 831 { 851 832 uint32_t tmp; … … 858 839 859 840 void 860 tr_peerIoDrain( tr_peerIo *io,841 tr_peerIoDrain( tr_peerIo * io, 861 842 struct evbuffer * inbuf, 862 843 size_t byteCount )
Note: See TracChangeset
for help on using the changeset viewer.