Rev 3626 | Rev 3908 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 3626 | Rev 3725 | ||
---|---|---|---|
Line 48... | Line 48... | ||
48 | add_to_queue TCP_queue, TCP_QUEUE_SIZE, sizeof.TCP_queue_entry, .fail |
48 | add_to_queue TCP_queue, TCP_QUEUE_SIZE, sizeof.TCP_queue_entry, .fail |
49 | popf |
49 | popf |
Line 50... | Line 50... | ||
50 | 50 | ||
Line -... | Line 51... | ||
- | 51 | add esp, sizeof.TCP_queue_entry |
|
- | 52 | ||
- | 53 | call NET_ptr_to_num4 |
|
51 | add esp, sizeof.TCP_queue_entry |
54 | inc [TCP_segments_rx + edi] |
52 | 55 | ||
53 | xor edx, edx |
56 | xor edx, edx |
54 | mov eax, [TCP_input_event] |
57 | mov eax, [TCP_input_event] |
55 | mov ebx, [eax + EVENT.id] |
58 | mov ebx, [eax + EVENT.id] |
Line 60... | Line 63... | ||
60 | 63 | ||
61 | .fail: |
64 | .fail: |
62 | popf |
65 | popf |
Line -... | Line 66... | ||
- | 66 | DEBUGF DEBUG_NETWORK_VERBOSE, "TCP incoming queue is full, discarding packet!\n" |
|
63 | DEBUGF DEBUG_NETWORK_VERBOSE, "TCP incoming queue is full, discarding packet!\n" |
67 | |
Line 64... | Line 68... | ||
64 | 68 | call NET_ptr_to_num4 |
|
65 | inc [TCP_segments_missed] ; FIXME: use correct interface |
69 | inc [TCP_segments_missed + edi] |
66 | 70 | ||
Line 144... | Line 148... | ||
144 | ; IP Packet TCP Destination Port = local Port |
148 | ; IP Packet TCP Destination Port = local Port |
145 | ; (IP Packet SenderAddress = Remote IP) OR (Remote IP = 0) |
149 | ; (IP Packet SenderAddress = Remote IP) OR (Remote IP = 0) |
146 | ; (IP Packet TCP Source Port = remote Port) OR (remote Port = 0) |
150 | ; (IP Packet TCP Source Port = remote Port) OR (remote Port = 0) |
Line 147... | Line 151... | ||
147 | 151 | ||
- | 152 | .findpcb: |
|
- | 153 | pusha |
|
- | 154 | mov ecx, socket_mutex |
|
- | 155 | call mutex_lock |
|
- | 156 | popa |
|
148 | .findpcb: |
157 | |
149 | mov ebx, net_sockets |
158 | mov ebx, net_sockets |
Line 150... | Line 159... | ||
150 | mov si, [edx + TCP_header.DestinationPort] |
159 | mov si, [edx + TCP_header.DestinationPort] |
151 | 160 | ||
152 | .socket_loop: |
161 | .socket_loop: |
153 | mov ebx, [ebx + SOCKET.NextPtr] |
162 | mov ebx, [ebx + SOCKET.NextPtr] |
Line 154... | Line 163... | ||
154 | or ebx, ebx |
163 | or ebx, ebx |
155 | jz .respond_seg_reset |
164 | jz .no_socket ;respond_seg_reset |
Line 156... | Line 165... | ||
156 | 165 | ||
Line 174... | Line 183... | ||
174 | cmp [edx + TCP_header.SourcePort], ax |
183 | cmp [edx + TCP_header.SourcePort], ax |
175 | je .found_socket |
184 | je .found_socket |
176 | test ax, ax |
185 | test ax, ax |
177 | jnz .socket_loop |
186 | jnz .socket_loop |
178 | .found_socket: ; ebx now contains the socketpointer |
187 | .found_socket: ; ebx now contains the socketpointer |
179 | DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_input: socket ptr=%x state=%u flags=%x\n", ebx, [ebx + TCP_SOCKET.t_state], [edx + TCP_header.Flags]:2 |
- | |
180 | - | ||
181 | ;------------- |
188 | pusha |
- | 189 | mov ecx, socket_mutex |
|
- | 190 | call mutex_unlock |
|
182 | ; update stats |
191 | popa |
Line 183... | Line 192... | ||
183 | 192 | ||
Line 184... | Line 193... | ||
184 | inc [TCP_segments_rx] ; FIXME: correct interface? |
193 | DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_input: socket ptr=%x state=%u flags=%x\n", ebx, [ebx + TCP_SOCKET.t_state], [edx + TCP_header.Flags]:2 |
185 | 194 | ||
Line 186... | Line 195... | ||
186 | ;---------------------------- |
195 | ;---------------------------- |
Line 1159... | Line 1168... | ||
1159 | jmp .ack_processed |
1168 | jmp .ack_processed |
Line 1160... | Line 1169... | ||
1160 | 1169 | ||
1161 | .ack_la: |
1170 | .ack_la: |
Line -... | Line 1171... | ||
- | 1171 | jnc .ack_processed |
|
- | 1172 | ||
- | 1173 | push ebx |
|
- | 1174 | lea ecx, [ebx + SOCKET.mutex] |
|
- | 1175 | call mutex_unlock |
|
- | 1176 | pop ebx |
|
1162 | jnc .ack_processed |
1177 | |
1163 | 1178 | push ebx |
|
1164 | mov eax, ebx |
1179 | mov eax, ebx |
- | 1180 | call TCP_disconnect |
|
- | 1181 | pop ebx |
|
Line 1165... | Line 1182... | ||
1165 | call TCP_disconnect |
1182 | |
1166 | jmp .drop |
1183 | jmp .destroy_new_socket |
1167 | 1184 | ||
1168 | .ack_tw: |
1185 | .ack_tw: |
Line 1221... | Line 1238... | ||
1221 | lea eax, [ebx + STREAM_SOCKET.rcv] |
1238 | lea eax, [ebx + STREAM_SOCKET.rcv] |
1222 | call SOCKET_ring_create |
1239 | call SOCKET_ring_create |
Line 1223... | Line 1240... | ||
1223 | 1240 | ||
Line -... | Line 1241... | ||
- | 1241 | and [ebx + TCP_SOCKET.temp_bits], not TCP_BIT_DROPSOCKET |
|
- | 1242 | ||
1224 | and [ebx + TCP_SOCKET.temp_bits], not TCP_BIT_DROPSOCKET |
1243 | pusha |
- | 1244 | mov eax, ebx |
|
Line 1225... | Line 1245... | ||
1225 | 1245 | call SOCKET_notify |
|
Line 1226... | Line 1246... | ||
1226 | ;;; call SOCKET_notify_owner |
1246 | popa |
1227 | 1247 | ||
Line 1296... | Line 1316... | ||
1296 | DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_input: active open\n" |
1316 | DEBUGF DEBUG_NETWORK_VERBOSE, "TCP_input: active open\n" |
Line 1297... | Line 1317... | ||
1297 | 1317 | ||
Line 1298... | Line 1318... | ||
1298 | ;;; TODO: update stats |
1318 | ;;; TODO: update stats |
- | 1319 | ||
- | 1320 | ; set socket state to connected |
|
1299 | 1321 | push eax |
|
- | 1322 | mov eax, ebx |
|
1300 | ; set socket state to connected |
1323 | call SOCKET_is_connected |
Line 1301... | Line 1324... | ||
1301 | mov [ebx + SOCKET.state], SS_ISCONNECTED |
1324 | pop eax |
1302 | mov [ebx + TCP_SOCKET.t_state], TCPS_ESTABLISHED |
1325 | mov [ebx + TCP_SOCKET.t_state], TCPS_ESTABLISHED |
1303 | 1326 | ||
Line 1618... | Line 1641... | ||
1618 | mov cl, TH_RST + TH_ACK |
1641 | mov cl, TH_RST + TH_ACK |
1619 | call TCP_respond |
1642 | call TCP_respond |
1620 | pop ebx |
1643 | pop ebx |
1621 | jmp .destroy_new_socket |
1644 | jmp .destroy_new_socket |
Line -... | Line 1645... | ||
- | 1645 | ||
- | 1646 | .no_socket: |
|
- | 1647 | ||
- | 1648 | pusha |
|
- | 1649 | mov ecx, socket_mutex |
|
- | 1650 | call mutex_unlock |
|
- | 1651 | popa |
|
1622 | 1652 | ||
1623 | .respond_seg_reset: |
1653 | .respond_seg_reset: |
1624 | test [edx + TCP_header.Flags], TH_RST |
1654 | test [edx + TCP_header.Flags], TH_RST |
Line 1625... | Line 1655... | ||
1625 | jnz .drop_no_socket |
1655 | jnz .drop_no_socket |