Subversion Repositories Kolibri OS

Rev

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

Rev 4850 Rev 5155
Line 13... Line 13...
13
;;         GNU GENERAL PUBLIC LICENSE                              ;;
13
;;         GNU GENERAL PUBLIC LICENSE                              ;;
14
;;          Version 2, June 1991                                   ;;
14
;;          Version 2, June 1991                                   ;;
15
;;                                                                 ;;
15
;;                                                                 ;;
16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Line 17... Line 17...
17
 
17
 
Line 18... Line 18...
18
$Revision: 4850 $
18
$Revision: 5155 $
Line 19... Line 19...
19
 
19
 
20
struct  SOCKET
20
struct  SOCKET
Line 1221... Line 1221...
1221
        mov     [eax + SOCKET.device], ebx
1221
        mov     [eax + SOCKET.device], ebx
1222
        mov     [ebx + SOCKET.device], eax
1222
        mov     [ebx + SOCKET.device], eax
Line 1223... Line 1223...
1223
 
1223
 
1224
        lea     eax, [eax + STREAM_SOCKET.rcv]
1224
        lea     eax, [eax + STREAM_SOCKET.rcv]
-
 
1225
        call    SOCKET_ring_create
-
 
1226
        test    eax, eax
Line 1225... Line 1227...
1225
        call    SOCKET_ring_create
1227
        jz      .nomem1
1226
 
1228
 
1227
        lea     eax, [ebx + STREAM_SOCKET.rcv]
1229
        lea     eax, [ebx + STREAM_SOCKET.rcv]
-
 
1230
        call    SOCKET_ring_create
Line 1228... Line 1231...
1228
        call    SOCKET_ring_create
1231
        test    eax, eax
Line 1229... Line 1232...
1229
        pop     eax
1232
        jz      .nomem2
1230
 
1233
 
Line 1466... Line 1469...
1466
        ret
1469
        ret
Line 1467... Line 1470...
1467
 
1470
 
1468
 
1471
 
1469
;--------------------------
1472
;--------------------------
-
 
1473
;
1470
;
1474
; IN: eax = ptr to ring struct (just a buffer of the right size)
1471
; eax = ptr to ring struct (just a buffer of the right size)
1475
; OUT: eax = unchanged / 0 on error
1472
;
1476
;
Line 1473... Line 1477...
1473
align 4
1477
align 4
1474
SOCKET_ring_create:
1478
SOCKET_ring_create:
Line 1475... Line 1479...
1475
 
1479
 
1476
        push    esi
1480
        push    esi
1477
        mov     esi, eax
1481
        mov     esi, eax
-
 
1482
 
-
 
1483
        push    edx
Line 1478... Line 1484...
1478
 
1484
        stdcall create_ring_buffer, SOCKET_MAXDATA, PG_SW
Line 1479... Line 1485...
1479
        push    edx
1485
        pop     edx
1480
        stdcall create_ring_buffer, SOCKET_MAXDATA, PG_SW
1486
        test    eax, eax
Line 1494... Line 1500...
1494
        add     eax, SOCKET_MAXDATA
1500
        add     eax, SOCKET_MAXDATA
1495
        mov     [esi + RING_BUFFER.end_ptr], eax
1501
        mov     [esi + RING_BUFFER.end_ptr], eax
1496
        mov     eax, esi
1502
        mov     eax, esi
1497
        pop     esi
1503
        pop     esi
Line -... Line 1504...
-
 
1504
 
1498
 
1505
  .fail:
Line 1499... Line 1506...
1499
        ret
1506
        ret
1500
 
1507
 
1501
;-----------------------------------------------------------------
1508
;-----------------------------------------------------------------
Line 1537... Line 1544...
1537
        add     edi, ecx
1544
        add     edi, ecx
1538
        cmp     edi, [eax + RING_BUFFER.end_ptr]
1545
        cmp     edi, [eax + RING_BUFFER.end_ptr]
1539
        jb      @f
1546
        jb      @f
1540
        sub     edi, SOCKET_MAXDATA                             ; WRAP
1547
        sub     edi, SOCKET_MAXDATA                             ; WRAP
1541
  @@:
1548
  @@:
-
 
1549
 
1542
        mov     [eax + RING_BUFFER.write_ptr], edi
1550
        mov     [eax + RING_BUFFER.write_ptr], edi
1543
        pop     edi
1551
        pop     edi
Line 1544... Line 1552...
1544
 
1552
 
1545
; update size
1553
; update size
Line 1952... Line 1960...
1952
 
1960
 
1953
        cmp     [eax + SOCKET.Protocol], IP_PROTO_TCP
1961
        cmp     [eax + SOCKET.Protocol], IP_PROTO_TCP
Line 1954... Line 1962...
1954
        jnz     .no_tcp
1962
        jnz     .no_tcp
-
 
1963
 
-
 
1964
        mov     ebx, eax
1955
 
1965
        cmp     [ebx + STREAM_SOCKET.rcv.start_ptr], 0
-
 
1966
        je      @f
-
 
1967
        stdcall kernel_free, [ebx + STREAM_SOCKET.rcv.start_ptr]
-
 
1968
  @@:
1956
        mov     ebx, eax
1969
        cmp     [ebx + STREAM_SOCKET.snd.start_ptr], 0
-
 
1970
        je      @f
1957
        stdcall kernel_free, [ebx + STREAM_SOCKET.rcv.start_ptr]
1971
        stdcall kernel_free, [ebx + STREAM_SOCKET.snd.start_ptr]
1958
        stdcall kernel_free, [ebx + STREAM_SOCKET.snd.start_ptr]
1972
  @@:
Line 1959... Line 1973...
1959
        mov     eax, ebx
1973
        mov     eax, ebx
1960
  .no_tcp:
1974
  .no_tcp: