Subversion Repositories Kolibri OS

Rev

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

Rev 3659 Rev 3673
Line 254... Line 254...
254
;
254
;
255
;-----------------------------------------------------------------
255
;-----------------------------------------------------------------
256
align 4
256
align 4
257
sys_socket:
257
sys_socket:
Line 258... Line 258...
258
 
258
 
Line 259... Line 259...
259
        mov     dword[esp+24], 0        ; Set error code to 0
259
        mov     dword[esp+20], 0        ; Set error code to 0
260
 
260
 
Line 261... Line 261...
261
        cmp     ebx, 255
261
        cmp     ebx, 255
Line 279... Line 279...
279
        dd      SOCKET_pair     ; 10
279
        dd      SOCKET_pair     ; 10
280
  .number = ($ - .table) / 4 - 1
280
  .number = ($ - .table) / 4 - 1
Line 281... Line 281...
281
 
281
 
282
  .error:
282
  .error:
283
        mov     dword[esp+32], -1
283
        mov     dword[esp+32], -1
Line 284... Line 284...
284
        mov     dword[esp+24], EINVAL
284
        mov     dword[esp+20], EINVAL
Line 285... Line 285...
285
 
285
 
286
        ret
286
        ret
Line 340... Line 340...
340
  .no_ppp:
340
  .no_ppp:
341
  .unsupported:
341
  .unsupported:
342
        push    eax
342
        push    eax
343
        call    SOCKET_free
343
        call    SOCKET_free
344
        pop     eax
344
        pop     eax
345
        mov     dword[esp+24], EOPNOTSUPP
345
        mov     dword[esp+20], EOPNOTSUPP
346
        mov     dword[esp+32], -1
346
        mov     dword[esp+32], -1
347
        ret
347
        ret
Line 348... Line 348...
348
 
348
 
349
  .nobuffs:
349
  .nobuffs:
350
        mov     dword[esp+24], ENOBUFS
350
        mov     dword[esp+20], ENOBUFS
351
        mov     dword[esp+32], -1
351
        mov     dword[esp+32], -1
Line 352... Line 352...
352
        ret
352
        ret
353
 
353
 
Line 427... Line 427...
427
 
427
 
428
        cmp     word [edx], AF_LOCAL
428
        cmp     word [edx], AF_LOCAL
Line 429... Line 429...
429
        je      .af_local
429
        je      .af_local
430
 
430
 
431
  .notsupp:
431
  .notsupp:
432
        mov     dword[esp+24], EOPNOTSUPP
432
        mov     dword[esp+20], EOPNOTSUPP
Line 433... Line 433...
433
        mov     dword[esp+32], -1
433
        mov     dword[esp+32], -1
434
        ret
434
        ret
435
 
435
 
436
  .invalid:
436
  .invalid:
Line 437... Line 437...
437
        mov     dword[esp+24], EINVAL
437
        mov     dword[esp+20], EINVAL
438
        mov     dword[esp+32], -1
438
        mov     dword[esp+32], -1
Line 475... Line 475...
475
        mov     dword[esp+32], 0
475
        mov     dword[esp+32], 0
476
        ret
476
        ret
Line 477... Line 477...
477
 
477
 
478
  .addrinuse:
478
  .addrinuse:
479
        mov     dword[esp+32], -1
479
        mov     dword[esp+32], -1
480
        mov     dword[esp+24], EADDRINUSE
480
        mov     dword[esp+20], EADDRINUSE
Line 506... Line 506...
506
 
506
 
507
        cmp     word [edx], AF_INET4
507
        cmp     word [edx], AF_INET4
Line 508... Line 508...
508
        je      .af_inet4
508
        je      .af_inet4
509
 
509
 
510
  .notsupp:
510
  .notsupp:
511
        mov     dword[esp+24], EOPNOTSUPP
511
        mov     dword[esp+20], EOPNOTSUPP
Line 512... Line 512...
512
        mov     dword[esp+32], -1
512
        mov     dword[esp+32], -1
513
        ret
513
        ret
514
 
514
 
515
  .invalid:
515
  .invalid:
Line 516... Line 516...
516
        mov     dword[esp+24], EINVAL
516
        mov     dword[esp+20], EINVAL
517
        mov     dword[esp+32], -1
517
        mov     dword[esp+32], -1
Line 689... Line 689...
689
 
689
 
690
        mov     dword[esp+32], 0
690
        mov     dword[esp+32], 0
Line 691... Line 691...
691
        ret
691
        ret
692
 
692
 
693
  .notsupp:
693
  .notsupp:
694
        mov     dword[esp+24], EOPNOTSUPP
694
        mov     dword[esp+20], EOPNOTSUPP
Line 695... Line 695...
695
        mov     dword[esp+32], -1
695
        mov     dword[esp+32], -1
696
        ret
696
        ret
697
 
697
 
698
  .invalid:
698
  .invalid:
Line 699... Line 699...
699
        mov     dword[esp+24], EINVAL
699
        mov     dword[esp+20], EINVAL
700
        mov     dword[esp+32], -1
700
        mov     dword[esp+32], -1
701
        ret
701
        ret
702
 
702
 
Line 703... Line 703...
703
  .already:
703
  .already:
Line 758... Line 758...
758
 
758
 
759
        call    SOCKET_block
759
        call    SOCKET_block
Line 760... Line 760...
760
        jmp     .loop
760
        jmp     .loop
761
 
761
 
762
  .wouldblock:
762
  .wouldblock:
763
        mov     dword[esp+24], EWOULDBLOCK
763
        mov     dword[esp+20], EWOULDBLOCK
Line 764... Line 764...
764
        mov     dword[esp+32], -1
764
        mov     dword[esp+32], -1
765
        ret
765
        ret
766
 
766
 
767
  .invalid:
767
  .invalid:
Line 768... Line 768...
768
        mov     dword[esp+24], EINVAL
768
        mov     dword[esp+20], EINVAL
769
        mov     dword[esp+32], -1
769
        mov     dword[esp+32], -1
770
        ret
770
        ret
771
 
771
 
Line 772... Line 772...
772
  .notsupp:
772
  .notsupp:
773
        mov     dword[esp+24], EOPNOTSUPP
773
        mov     dword[esp+20], EOPNOTSUPP
Line 819... Line 819...
819
 
819
 
Line 820... Line 820...
820
        ret
820
        ret
821
 
821
 
822
 
822
 
823
  .invalid:
823
  .invalid:
Line 824... Line 824...
824
        mov     dword[esp+24], EINVAL
824
        mov     dword[esp+20], EINVAL
Line 845... Line 845...
845
        call    SOCKET_num_to_ptr
845
        call    SOCKET_num_to_ptr
846
        jz      .invalid
846
        jz      .invalid
Line 847... Line 847...
847
 
847
 
Line 848... Line 848...
848
        call    [eax + SOCKET.rcv_proc]
848
        call    [eax + SOCKET.rcv_proc]
849
 
849
 
850
        mov     [esp+24], ebx
850
        mov     [esp+20], ebx
Line 851... Line 851...
851
        mov     [esp+32], eax
851
        mov     [esp+32], eax
852
        ret
852
        ret
853
 
853
 
854
 
854
 
Line 855... Line 855...
855
  .invalid:
855
  .invalid:
856
        mov     dword[esp+24], EINVAL
856
        mov     dword[esp+20], EINVAL
Line 1010... Line 1010...
1010
        mov     esi, edx
1010
        mov     esi, edx
Line 1011... Line 1011...
1011
 
1011
 
Line 1012... Line 1012...
1012
        jmp     [eax + SOCKET.snd_proc]
1012
        jmp     [eax + SOCKET.snd_proc]
1013
 
1013
 
1014
  .invalid:
1014
  .invalid:
1015
        mov     dword[esp+24], EINVAL
1015
        mov     dword[esp+20], EINVAL
Line 1016... Line 1016...
1016
        mov     dword[esp+32], -1
1016
        mov     dword[esp+32], -1
Line 1028... Line 1028...
1028
        je      .error
1028
        je      .error
1029
        ret
1029
        ret
Line 1030... Line 1030...
1030
 
1030
 
1031
  .error:
1031
  .error:
1032
        mov     dword[esp+32], -1
1032
        mov     dword[esp+32], -1
1033
        mov     dword[esp+24], EMSGSIZE ; FIXME: UDP_output should return error codes!
1033
        mov     dword[esp+20], EMSGSIZE ; FIXME: UDP_output should return error codes!
Line 1034... Line 1034...
1034
        ret
1034
        ret
1035
 
1035
 
Line 1048... Line 1048...
1048
        mov     [eax + SOCKET.errorcode], 0
1048
        mov     [eax + SOCKET.errorcode], 0
1049
        push    eax
1049
        push    eax
1050
        call    TCP_output              ; FIXME: this doesnt look pretty, does it?
1050
        call    TCP_output              ; FIXME: this doesnt look pretty, does it?
1051
        pop     eax
1051
        pop     eax
1052
        mov     eax, [eax + SOCKET.errorcode]
1052
        mov     eax, [eax + SOCKET.errorcode]
1053
        mov     [esp+24], eax
1053
        mov     [esp+20], eax
1054
        ret
1054
        ret
Line 1055... Line 1055...
1055
 
1055
 
1056
 
1056
 
Line 1065... Line 1065...
1065
        je      .error
1065
        je      .error
1066
        ret
1066
        ret
Line 1067... Line 1067...
1067
 
1067
 
1068
  .error:
1068
  .error:
1069
        mov     dword[esp+32], -1
1069
        mov     dword[esp+32], -1
1070
        mov     dword[esp+24], EMSGSIZE
1070
        mov     dword[esp+20], EMSGSIZE
Line 1071... Line 1071...
1071
        ret
1071
        ret
1072
 
1072
 
Line 1082... Line 1082...
1082
        je      .error
1082
        je      .error
1083
        ret
1083
        ret
Line 1084... Line 1084...
1084
 
1084
 
1085
  .error:
1085
  .error:
1086
        mov     dword[esp+32], -1
1086
        mov     dword[esp+32], -1
1087
        mov     dword[esp+24], EMSGSIZE
1087
        mov     dword[esp+20], EMSGSIZE
Line 1088... Line 1088...
1088
        ret
1088
        ret
1089
 
1089
 
Line 1101... Line 1101...
1101
        je      .error
1101
        je      .error
1102
        ret
1102
        ret
Line 1103... Line 1103...
1103
 
1103
 
1104
  .error:
1104
  .error:
1105
        mov     dword[esp+32], -1
1105
        mov     dword[esp+32], -1
1106
        mov     dword[esp+24], EMSGSIZE
1106
        mov     dword[esp+20], EMSGSIZE
Line 1107... Line 1107...
1107
        ret
1107
        ret
Line 1147... Line 1147...
1147
 
1147
 
Line 1148... Line 1148...
1148
        ret
1148
        ret
1149
 
1149
 
1150
  .invalid:
1150
  .invalid:
1151
        mov     dword[esp+32], -1
1151
        mov     dword[esp+32], -1
Line 1152... Line 1152...
1152
        mov     dword[esp+24], EINVAL
1152
        mov     dword[esp+20], EINVAL
1153
        ret
1153
        ret
Line 1205... Line 1205...
1205
        mov     dword [esp+32], 0
1205
        mov     dword [esp+32], 0
1206
        ret
1206
        ret
Line 1207... Line 1207...
1207
 
1207
 
1208
  .invalid:
1208
  .invalid:
1209
        mov     dword[esp+32], -1
1209
        mov     dword[esp+32], -1
1210
        mov     dword[esp+24], EINVAL
1210
        mov     dword[esp+20], EINVAL
Line 1211... Line 1211...
1211
        ret
1211
        ret
Line 1239... Line 1239...
1239
        cmp     dword [edx+4], SO_BLOCK
1239
        cmp     dword [edx+4], SO_BLOCK
1240
        je      .block
1240
        je      .block
Line 1241... Line 1241...
1241
 
1241
 
1242
  .invalid:
1242
  .invalid:
1243
        mov     dword[esp+32], -1
1243
        mov     dword[esp+32], -1
1244
        mov     dword[esp+24], EINVAL
1244
        mov     dword[esp+20], EINVAL
Line 1245... Line 1245...
1245
        ret
1245
        ret
1246
 
1246
 
1247
  .bind:
1247
  .bind:
Line 1282... Line 1282...
1282
 
1282
 
1283
        mov     dword[esp+32], 0        ; success!
1283
        mov     dword[esp+32], 0        ; success!
Line 1284... Line 1284...
1284
        ret
1284
        ret
1285
 
1285
 
1286
  .already:
1286
  .already:
1287
        mov     dword[esp+24], EALREADY
1287
        mov     dword[esp+20], EALREADY
Line 1319... Line 1319...
1319
        mov     [eax + SOCKET.PID], 0
1319
        mov     [eax + SOCKET.PID], 0
1320
        mov     ebx, eax
1320
        mov     ebx, eax
Line 1321... Line 1321...
1321
 
1321
 
1322
        call    SOCKET_alloc
1322
        call    SOCKET_alloc
1323
        jz      .nomem2
1323
        jz      .nomem2
Line 1324... Line 1324...
1324
        mov     [esp+24], edi   ; application's ebx
1324
        mov     [esp+20], edi   ; application's ebx
1325
 
1325
 
1326
        mov     [eax + SOCKET.Domain], AF_LOCAL
1326
        mov     [eax + SOCKET.Domain], AF_LOCAL
1327
        mov     [eax + SOCKET.Type], SOCK_STREAM
1327
        mov     [eax + SOCKET.Type], SOCK_STREAM
Line 2043... Line 2043...
2043
        pop     ebx
2043
        pop     ebx
Line 2044... Line 2044...
2044
 
2044
 
Line 2045... Line 2045...
2045
        ret
2045
        ret
2046
 
2046
 
2047
  .not_yet:
2047
  .not_yet:
2048
        mov     dword[esp+24], ENOTCONN
2048
        mov     dword[esp+20], ENOTCONN
Line 2049... Line 2049...
2049
        mov     dword[esp+32], -1
2049
        mov     dword[esp+32], -1
Line 2538... Line 2538...
2538
        call    SOCKET_notify
2538
        call    SOCKET_notify
Line 2539... Line 2539...
2539
 
2539
 
Line 2540... Line 2540...
2540
        ret
2540
        ret
2541
 
2541
 
2542
  .notconn:
2542
  .notconn:
2543
        mov     dword[esp+24], ENOTCONN
2543
        mov     dword[esp+20], ENOTCONN
2544
        mov     dword[esp+32], -1
2544
        mov     dword[esp+32], -1