Subversion Repositories Kolibri OS

Rev

Rev 5976 | Rev 6912 | 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
;                                                                 ;
21
;                                                                 ;
22
; TCP_usrclosed                                                   ;
22
; tcp_usrclosed                                                   ;
23
;                                                                 ;
23
;                                                                 ;
24
;  IN:  eax = socket ptr                                          ;
24
;  IN:  eax = socket ptr                                          ;
25
;                                                                 ;
25
;                                                                 ;
26
;  OUT: /                                                         ;
26
;  OUT: /                                                         ;
27
;                                                                 ;
27
;                                                                 ;
Line 28... Line 28...
28
;-----------------------------------------------------------------;
28
;-----------------------------------------------------------------;
Line 29... Line 29...
29
align 4
29
align 4
30
TCP_usrclosed:
30
tcp_usrclosed:
Line 49... Line 49...
49
        dd      .disc                   ; TCPS_FIN_WAIT_2
49
        dd      .disc                   ; TCPS_FIN_WAIT_2
50
        dd      .disc                   ; TCPS_TIMED_WAIT
50
        dd      .disc                   ; TCPS_TIMED_WAIT
Line 51... Line 51...
51
 
51
 
52
  .close:
52
  .close:
53
        mov     [eax + TCP_SOCKET.t_state], TCPS_CLOSED
53
        mov     [eax + TCP_SOCKET.t_state], TCPS_CLOSED
54
        call    TCP_close
54
        call    tcp_close
55
        pop     ebx
55
        pop     ebx
Line 56... Line 56...
56
        ret
56
        ret
57
 
57
 
Line 64... Line 64...
64
        mov     [eax + TCP_SOCKET.t_state], TCPS_LAST_ACK
64
        mov     [eax + TCP_SOCKET.t_state], TCPS_LAST_ACK
65
        pop     ebx
65
        pop     ebx
66
        ret
66
        ret
Line 67... Line 67...
67
 
67
 
68
  .disc:
68
  .disc:
69
        call    SOCKET_is_disconnected
69
        call    socket_is_disconnected
70
  .ret:
70
  .ret:
71
        pop     ebx
71
        pop     ebx
Line 72... Line 72...
72
        ret
72
        ret
73
 
73
 
74
 
74
 
75
;-----------------------------------------------------------------;
75
;-----------------------------------------------------------------;
76
;                                                                 ;
76
;                                                                 ;
77
; TCP_connect                                                     ;
77
; tcp_connect                                                     ;
78
;                                                                 ;
78
;                                                                 ;
79
;  IN:  eax = socket ptr                                          ;
79
;  IN:  eax = socket ptr                                          ;
80
;                                                                 ;
80
;                                                                 ;
81
;  OUT: eax = 0 on success                                        ;
81
;  OUT: eax = 0 on success                                        ;
82
;       eax = -1 on error                                         ;
82
;       eax = -1 on error                                         ;
83
;       ebx = error code on error                                 ;
83
;       ebx = error code on error                                 ;
84
;                                                                 ;
84
;                                                                 ;
Line 85... Line 85...
85
;-----------------------------------------------------------------;
85
;-----------------------------------------------------------------;
86
align 4
86
align 4
Line 87... Line 87...
87
TCP_connect:
87
tcp_connect:
Line 110... Line 110...
110
        pop     [eax + IP_SOCKET.RemoteIP]
110
        pop     [eax + IP_SOCKET.RemoteIP]
Line 111... Line 111...
111
 
111
 
112
; Find a local port, if user didnt define one
112
; Find a local port, if user didnt define one
113
        cmp     [eax + TCP_SOCKET.LocalPort], 0
113
        cmp     [eax + TCP_SOCKET.LocalPort], 0
114
        jne     @f
114
        jne     @f
115
        call    SOCKET_find_port
115
        call    socket_find_port
Line 116... Line 116...
116
       @@:
116
       @@:
117
 
117
 
118
; Start the TCP sequence
118
; Start the TCP sequence
Line 122... Line 122...
122
        push    [TCP_sequence_num]
122
        push    [TCP_sequence_num]
123
        add     [TCP_sequence_num], 6400
123
        add     [TCP_sequence_num], 6400
124
        pop     [eax + TCP_SOCKET.ISS]
124
        pop     [eax + TCP_SOCKET.ISS]
125
        mov     [eax + TCP_SOCKET.timer_keepalive], TCP_time_keep_init
125
        mov     [eax + TCP_SOCKET.timer_keepalive], TCP_time_keep_init
Line 126... Line 126...
126
 
126
 
Line 127... Line 127...
127
        TCP_sendseqinit eax
127
        tcp_sendseqinit eax
128
 
128
 
129
        mov     ebx, eax
129
        mov     ebx, eax
130
        lea     eax, [ebx + STREAM_SOCKET.snd]
130
        lea     eax, [ebx + STREAM_SOCKET.snd]
131
        call    SOCKET_ring_create
131
        call    socket_ring_create
Line 132... Line 132...
132
        test    eax, eax
132
        test    eax, eax
133
        jz      .nomem
133
        jz      .nomem
134
 
134
 
135
        lea     eax, [ebx + STREAM_SOCKET.rcv]
135
        lea     eax, [ebx + STREAM_SOCKET.rcv]
Line 136... Line 136...
136
        call    SOCKET_ring_create
136
        call    socket_ring_create
137
        test    eax, eax
137
        test    eax, eax
138
        jz      .nomem
138
        jz      .nomem
139
 
139
 
Line 140... Line 140...
140
        push    ebx
140
        push    ebx
Line 141... Line 141...
141
        lea     ecx, [ebx + SOCKET.mutex]
141
        lea     ecx, [ebx + SOCKET.mutex]
142
        call    mutex_unlock
142
        call    mutex_unlock
143
        pop     eax
143
        pop     eax
144
 
144
 
Line 145... Line 145...
145
        call    SOCKET_is_connecting
145
        call    socket_is_connecting
146
 
146
 
147
; Now send the SYN packet to remote end
147
; Now send the SYN packet to remote end
Line 181... Line 181...
181
        cmp     [eax + SOCKET.errorcode], 0
181
        cmp     [eax + SOCKET.errorcode], 0
182
        jne     .fail
182
        jne     .fail
183
        cmp     [eax + TCP_SOCKET.t_state], TCPS_ESTABLISHED
183
        cmp     [eax + TCP_SOCKET.t_state], TCPS_ESTABLISHED
184
        je      .established
184
        je      .established
Line 185... Line 185...
185
 
185
 
186
        call    SOCKET_block
186
        call    socket_block
Line 187... Line 187...
187
        jmp     .loop
187
        jmp     .loop
188
 
188
 
189
  .timeout:
189
  .timeout:
190
        mov     eax, [esp+4]
190
        mov     eax, [esp+4]
191
        mov     [eax + SOCKET.errorcode], ETIMEDOUT
191
        mov     [eax + SOCKET.errorcode], ETIMEDOUT
192
        and     [eax + SOCKET.state], not SS_ISCONNECTING
192
        and     [eax + SOCKET.state], not SS_ISCONNECTING
Line 193... Line 193...
193
        call    SOCKET_notify
193
        call    socket_notify
194
        ret     4
194
        ret     4
195
 
195