Subversion Repositories Kolibri OS

Rev

Rev 5984 | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 5984 Rev 6078
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: 5584 $
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