Subversion Repositories Kolibri OS

Rev

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