Subversion Repositories Kolibri OS

Rev

Rev 2288 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 2288 Rev 2381
Line 25... Line 25...
25
;;   22.09.2003 - [Mike Hibbett] : mikeh@oceanfree.net          ;;
25
;;   22.09.2003 - [Mike Hibbett] : mikeh@oceanfree.net          ;;
26
;;   11.11.2006 - [Johnny_B] and [smb]                          ;;
26
;;   11.11.2006 - [Johnny_B] and [smb]                          ;;
27
;;                                                              ;;
27
;;                                                              ;;
28
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
28
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 29... Line 29...
29
 
29
 
Line 30... Line 30...
30
$Revision: 2288 $
30
$Revision: 2381 $
31
 
31
 
32
; socket data structure
32
; socket data structure
33
struct SOCKET
33
struct  SOCKET
34
  .PrevPtr        dd ? ; pointer to previous socket in list
34
        PrevPtr        dd ? ; pointer to previous socket in list
35
  .NextPtr        dd ? ; pointer to next socket in list
35
        NextPtr        dd ? ; pointer to next socket in list
36
  .Number         dd ? ; socket number (unique within single process)
36
        Number         dd ? ; socket number (unique within single process)
37
  .PID            dd ? ; application process id
37
        PID            dd ? ; application process id
38
  .LocalIP        dd ? ; local IP address
38
        LocalIP        dd ? ; local IP address
39
  .LocalPort      dw ? ; local port
39
        LocalPort      dw ? ; local port
40
  .RemoteIP       dd ? ; remote IP address
40
        RemoteIP       dd ? ; remote IP address
41
  .RemotePort     dw ? ; remote port
41
        RemotePort     dw ? ; remote port
42
  .OrigRemoteIP   dd ? ; original remote IP address (used to reset to LISTEN state)
42
        OrigRemoteIP   dd ? ; original remote IP address (used to reset to LISTEN state)
43
  .OrigRemotePort dw ? ; original remote port (used to reset to LISTEN state)
43
        OrigRemotePort dw ? ; original remote port (used to reset to LISTEN state)
44
  .rxDataCount    dd ? ; rx data count
44
        rxDataCount    dd ? ; rx data count
45
  .TCBState       dd ? ; TCB state
45
        TCBState       dd ? ; TCB state
46
  .TCBTimer       dd ? ; TCB timer (seconds)
46
        TCBTimer       dd ? ; TCB timer (seconds)
47
  .ISS            dd ? ; initial send sequence
47
        ISS            dd ? ; initial send sequence
48
  .IRS            dd ? ; initial receive sequence
48
        IRS            dd ? ; initial receive sequence
49
  .SND_UNA        dd ? ; sequence number of unack'ed sent packets
49
        SND_UNA        dd ? ; sequence number of unack'ed sent packets
50
  .SND_NXT        dd ? ; bext send sequence number to use
50
        SND_NXT        dd ? ; bext send sequence number to use
51
  .SND_WND        dd ? ; send window
51
        SND_WND        dd ? ; send window
52
  .RCV_NXT        dd ? ; next receive sequence number to use
52
        RCV_NXT        dd ? ; next receive sequence number to use
53
  .RCV_WND        dd ? ; receive window
53
        RCV_WND        dd ? ; receive window
54
  .SEG_LEN        dd ? ; segment length
54
        SEG_LEN        dd ? ; segment length
55
  .SEG_WND        dd ? ; segment window
55
        SEG_WND        dd ? ; segment window
56
  .wndsizeTimer   dd ? ; window size timer
56
        wndsizeTimer   dd ? ; window size timer
57
  .lock       MUTEX ; lock mutex
57
        mutex          MUTEX ; lock mutex
Line 58... Line 58...
58
  .rxData         dd ? ; receive data buffer here
58
        rxData         dd ? ; receive data buffer here
59
ends
59
ends
60
 
60
 
Line 98... Line 98...
98
        xor     eax, eax
98
        xor     eax, eax
99
        rep stosd
99
        rep stosd
100
        pop     eax
100
        pop     eax
Line 101... Line 101...
101
 
101
 
102
        mov     ebx, eax
102
        mov     ebx, eax
103
        lea     ecx, [eax+SOCKET.lock]
103
        lea     ecx, [eax+SOCKET.mutex]
104
        call    mutex_init
104
        call    mutex_init
Line 105... Line 105...
105
        mov     eax, ebx
105
        mov     eax, ebx
106
 
106
 
Line 709... Line 709...
709
        stdcall net_socket_num_to_addr, ebx
709
        stdcall net_socket_num_to_addr, ebx
710
        or      eax, eax
710
        or      eax, eax
711
        jz      .error
711
        jz      .error
Line 712... Line 712...
712
 
712
 
713
        mov     ebx, eax
713
        mov     ebx, eax
714
        lea     ecx, [eax + SOCKET.lock]
714
        lea     ecx, [eax + SOCKET.mutex]
Line 715... Line 715...
715
        call    mutex_lock
715
        call    mutex_lock
716
 
716
 
717
        mov     eax, [ebx + SOCKET.rxDataCount]         ; get count of bytes
717
        mov     eax, [ebx + SOCKET.rxDataCount]         ; get count of bytes
Line 732... Line 732...
732
        rep movsd
732
        rep movsd
733
        pop     ecx
733
        pop     ecx
734
        and     ecx, 3
734
        and     ecx, 3
735
        rep movsb
735
        rep movsb
Line 736... Line 736...
736
 
736
 
737
        lea     ecx, [ebx + SOCKET.lock]
737
        lea     ecx, [ebx + SOCKET.mutex]
738
        mov     ebx, eax
738
        mov     ebx, eax
739
        call    mutex_unlock
739
        call    mutex_unlock
740
        mov     eax, ebx
740
        mov     eax, ebx
Line 741... Line 741...
741
        ret
741
        ret
742
 
742
 
743
  .error_release:
743
  .error_release:
744
        lea     ecx, [ebx + SOCKET.lock]
744
        lea     ecx, [ebx + SOCKET.mutex]
745
        call    mutex_unlock
745
        call    mutex_unlock
746
  .error:
746
  .error:
747
        xor     ebx, ebx
747
        xor     ebx, ebx
Line 767... Line 767...
767
        jz      .error
767
        jz      .error
Line 768... Line 768...
768
 
768
 
Line 769... Line 769...
769
        mov     ebx, eax
769
        mov     ebx, eax
770
 
770
 
771
        push    ecx edx
771
        push    ecx edx
772
        lea     ecx, [eax + SOCKET.lock]
772
        lea     ecx, [eax + SOCKET.mutex]
Line 773... Line 773...
773
        call    mutex_lock
773
        call    mutex_lock
774
        pop     edx ecx
774
        pop     edx ecx
Line 800... Line 800...
800
        pop     ecx
800
        pop     ecx
801
        and     ecx, 3
801
        and     ecx, 3
802
        rep movsb                                          ; copy remaining bytes
802
        rep movsb                                          ; copy remaining bytes
Line 803... Line 803...
803
 
803
 
804
  .exit:
804
  .exit:
805
        lea     ecx, [ebx + SOCKET.lock]
805
        lea     ecx, [ebx + SOCKET.mutex]
806
        mov     ebx, eax
806
        mov     ebx, eax
807
        call    mutex_unlock
807
        call    mutex_unlock
808
        mov     eax, ebx
808
        mov     eax, ebx
Line 814... Line 814...
814
 
814
 
815
  .copy_all_bytes:
815
  .copy_all_bytes:
816
        xor     esi, esi
816
        xor     esi, esi
817
        mov     [ebx + SOCKET.rxDataCount], esi            ; store new count (zero)
817
        mov     [ebx + SOCKET.rxDataCount], esi            ; store new count (zero)
818
        call    .start_copy
818
        call    .start_copy
819
        lea     ecx, [ebx + SOCKET.lock]
819
        lea     ecx, [ebx + SOCKET.mutex]
820
        mov     ebx, eax
820
        mov     ebx, eax
821
        call    mutex_unlock
821
        call    mutex_unlock
822
        mov     eax, ebx
822
        mov     eax, ebx