Rev 5976 | Rev 6474 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 5976 | Rev 6011 | ||
---|---|---|---|
Line 12... | Line 12... | ||
12 | ;; GNU GENERAL PUBLIC LICENSE ;; |
12 | ;; GNU GENERAL PUBLIC LICENSE ;; |
13 | ;; Version 2, June 1991 ;; |
13 | ;; Version 2, June 1991 ;; |
14 | ;; ;; |
14 | ;; ;; |
15 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
15 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 16... | Line 16... | ||
16 | 16 | ||
Line 17... | Line 17... | ||
17 | $Revision: 5976 $ |
17 | $Revision: 6011 $ |
18 | 18 | ||
19 | ;-----------------------------------------------------------------; |
19 | ;-----------------------------------------------------------------; |
20 | ; ; |
20 | ; ; |
21 | ; TCP_output ; |
21 | ; tcp_output ; |
22 | ; ; |
22 | ; ; |
23 | ; IN: eax = socket pointer ; |
23 | ; IN: eax = socket pointer ; |
24 | ; ; |
24 | ; ; |
25 | ; OUT: eax = 0 on success/errorcode ; |
25 | ; OUT: eax = 0 on success/errorcode ; |
26 | ; ; |
26 | ; ; |
27 | ;-----------------------------------------------------------------; |
27 | ;-----------------------------------------------------------------; |
Line 28... | Line 28... | ||
28 | align 4 |
28 | align 4 |
29 | proc TCP_output |
29 | proc tcp_output |
30 | 30 | ||
Line 70... | Line 70... | ||
70 | cmp ecx, [eax + TCP_SOCKET.SND_CWND] ; |
70 | cmp ecx, [eax + TCP_SOCKET.SND_CWND] ; |
71 | jb @f ; |
71 | jb @f ; |
72 | mov ecx, [eax + TCP_SOCKET.SND_CWND] ; |
72 | mov ecx, [eax + TCP_SOCKET.SND_CWND] ; |
73 | @@: ; |
73 | @@: ; |
Line 74... | Line 74... | ||
74 | 74 | ||
Line 75... | Line 75... | ||
75 | call TCP_outflags ; flags in dl |
75 | call tcp_outflags ; flags in dl |
76 | 76 | ||
Line 77... | Line 77... | ||
77 | ;------------------------ |
77 | ;------------------------ |
Line 277... | Line 277... | ||
277 | jnz @f |
277 | jnz @f |
Line 278... | Line 278... | ||
278 | 278 | ||
Line 279... | Line 279... | ||
279 | DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_output: Entering persist state\n" |
279 | DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_output: Entering persist state\n" |
280 | 280 | ||
281 | mov [eax + TCP_SOCKET.t_rxtshift], 0 |
281 | mov [eax + TCP_SOCKET.t_rxtshift], 0 |
Line 282... | Line 282... | ||
282 | call TCP_set_persist |
282 | call tcp_set_persist |
283 | @@: |
283 | @@: |
Line 507... | Line 507... | ||
507 | mov ebx, [eax + IP_SOCKET.device] |
507 | mov ebx, [eax + IP_SOCKET.device] |
508 | mov edx, [eax + IP_SOCKET.LocalIP] ; source ip |
508 | mov edx, [eax + IP_SOCKET.LocalIP] ; source ip |
509 | mov edi, [eax + IP_SOCKET.RemoteIP] ; dest ip |
509 | mov edi, [eax + IP_SOCKET.RemoteIP] ; dest ip |
510 | mov al, [eax + IP_SOCKET.ttl] |
510 | mov al, [eax + IP_SOCKET.ttl] |
511 | mov ah, IP_PROTO_TCP |
511 | mov ah, IP_PROTO_TCP |
512 | call IPv4_output |
512 | call ipv4_output |
513 | jz .ip_error |
513 | jz .ip_error |
Line 514... | Line 514... | ||
514 | 514 | ||
515 | ;------------------------------------------ |
515 | ;------------------------------------------ |
Line 547... | Line 547... | ||
547 | jz .nodata |
547 | jz .nodata |
548 | mov edx, [eax + TCP_SOCKET.SND_NXT] |
548 | mov edx, [eax + TCP_SOCKET.SND_NXT] |
549 | add [eax + TCP_SOCKET.SND_NXT], ecx ; update sequence number |
549 | add [eax + TCP_SOCKET.SND_NXT], ecx ; update sequence number |
550 | sub edx, [eax + TCP_SOCKET.SND_UNA] ; offset |
550 | sub edx, [eax + TCP_SOCKET.SND_UNA] ; offset |
551 | add eax, STREAM_SOCKET.snd |
551 | add eax, STREAM_SOCKET.snd |
552 | call SOCKET_ring_read |
552 | call socket_ring_read |
553 | .nodata: |
553 | .nodata: |
554 | pop edi |
554 | pop edi |
555 | pop esi ; begin of data |
555 | pop esi ; begin of data |
556 | pop ecx ; full packet size |
556 | pop ecx ; full packet size |
557 | mov eax, [esp + 8] ; socket ptr |
557 | mov eax, [esp + 8] ; socket ptr |
Line 604... | Line 604... | ||
604 | 604 | ||
605 | xor dx, dx |
605 | xor dx, dx |
606 | test [ebx + NET_DEVICE.hwacc], NET_HWACC_TCP_IPv4_OUT |
606 | test [ebx + NET_DEVICE.hwacc], NET_HWACC_TCP_IPv4_OUT |
Line 607... | Line 607... | ||
607 | jnz .checksum_ok |
607 | jnz .checksum_ok |
Line 608... | Line 608... | ||
608 | 608 | ||
609 | TCP_checksum (eax + IP_SOCKET.LocalIP), (eax + IP_SOCKET.RemoteIP) |
609 | tcp_checksum (eax + IP_SOCKET.LocalIP), (eax + IP_SOCKET.RemoteIP) |
Line 610... | Line 610... | ||
610 | 610 | ||
Line 622... | Line 622... | ||
622 | ; Ok, data sent! |
622 | ; Ok, data sent! |
Line 623... | Line 623... | ||
623 | 623 | ||
624 | pop ecx |
624 | pop ecx |
Line 625... | Line 625... | ||
625 | pop eax |
625 | pop eax |
626 | 626 | ||
627 | call NET_ptr_to_num4 |
627 | call net_ptr_to_num4 |
Line 628... | Line 628... | ||
628 | inc [TCP_segments_tx + edi] |
628 | inc [TCP_segments_tx + edi] |
629 | inc [TCPS_sndtotal] |
629 | inc [TCPS_sndtotal] |
Line 656... | Line 656... | ||
656 | 656 | ||
657 | ;----------------------------- |
657 | ;----------------------------- |
Line 658... | Line 658... | ||
658 | ; Check if we need more output |
658 | ; Check if we need more output |
659 | 659 | ||
Line 660... | Line 660... | ||
660 | test [temp_bits], TCP_BIT_SENDALOT |
660 | test [temp_bits], TCP_BIT_SENDALOT |
Line 661... | Line 661... | ||
661 | jnz TCP_output.again |
661 | jnz tcp_output.again |
662 | 662 |