Rev 5976 | Rev 7678 | 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 |