亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? stack.inc

?? Menuet 操作系統源代碼。 非常難得的東西
?? INC
?? 第 1 頁 / 共 3 頁
字號:
    mov     eax, IPIN_QUEUE

sot_notlocal:
       ; Send it.
    pop     ebx
    call    queue

    mov     esi, [sktAddr]
    
    ; increment SND.NXT in socket
    add     esi, 48
    call    inc_inet_esi
     
sot_done:
    pop     eax      ; Get the socket number back, so we can return it
   
sot_exit:
    ret

   
   
;***************************************************************************
;   Function
;      socket_close
;
;   Description
;       socket # in ebx
;       returns 0 for ok, -1 for socket not open (fail)
;
;***************************************************************************
socket_close:
    shl     ebx, 12
    add     ebx, sockets
    mov     eax, 0xFFFFFFFF         ; assume this operation will fail..
    cmp     [ebx], dword SOCK_EMPTY
    jz      sc_exit
   
    ; Clear the socket varaibles
    xor     eax, eax
    mov     edi,ebx
    mov     ecx,SOCKETHEADERSIZE
    cld
    rep     stosb
   
sc_exit:
    ret
    
   

;***************************************************************************
;   Function
;      socket_close_tcp
;
;   Description
;       socket # in ebx
;       returns 0 for ok, -1 for socket not open (fail)
;
;***************************************************************************
socket_close_tcp:
    shl     ebx, 12
    add     ebx, sockets
    mov     [sktAddr], ebx
    mov     eax, 0xFFFFFFFF         ; assume this operation will fail..
    cmp     [ebx], dword SOCK_EMPTY
    jz      sct_exit

    ; Now construct the response, and queue for sending by IP
    mov     eax, EMPTY_QUEUE
    call    dequeue
    cmp     ax, NO_BUFFER
    je      stl_exit

    push    eax
    
    mov     bl, 0x11        ; FIN + ACK
    mov     ecx, 0
    mov     esi, 0
    
    call    buildTCPPacket
    
    mov     ebx, [sktAddr]   

    ; increament SND.NXT in socket
    mov     esi, 48
    add     esi, ebx
    call    inc_inet_esi


    ; Get the socket state
    mov     eax, [ebx + 28]
    cmp     eax, TCB_LISTEN
    je      destroyTCB
    cmp     eax, TCB_SYN_SENT
    je      destroyTCB
    cmp     eax, TCB_SYN_RECEIVED
    je      sct_finwait1
    cmp     eax, TCB_ESTABLISHED
    je      sct_finwait1
    
    ; assume CLOSE WAIT
    ; Send a fin, then enter last-ack state
    mov     eax, TCB_LAST_ACK
    mov     [ebx + 28], eax
    xor     eax, eax
    jmp     sct_send
       
sct_finwait1:
    ; Send a fin, then enter finwait2 state
    mov     eax, TCB_FIN_WAIT_1
    mov     [ebx + 28], eax
    xor     eax, eax

sct_send:
    mov     eax, NET1OUT_QUEUE

    mov     edx, [stack_ip]
    mov     ecx, [ sktAddr ]
    mov     ecx, [ ecx + 16 ]
    cmp     edx, ecx
    jne     sct_notlocal
    mov     eax, IPIN_QUEUE

sct_notlocal:
       ; Send it.
    pop     ebx
    call    queue
    jmp     sct_exit
      
destroyTCB:
    pop     eax
    ; Clear the socket varaibles
    xor     eax, eax
    mov     edi,ebx
    mov     ecx,SOCKETHEADERSIZE
    cld
    rep     stosb
   
sct_exit:
    ret


   
;***************************************************************************
;   Function
;      socket_poll
;
;   Description
;       socket # in ebx
;       returns count in eax.
;
;***************************************************************************
socket_poll:
    shl     ebx, 12
    add     ebx, sockets
    mov     eax, [ebx + 24]
    
    ret
   
   
   
;***************************************************************************
;   Function
;      socket_status
;
;   Description
;       socket # in ebx
;       returns TCB state in eax.
;
;***************************************************************************
socket_status:
    shl     ebx, 12
    add     ebx, sockets
    mov     eax, [ebx + 28]
    
    ret
   
   
   
;***************************************************************************
;   Function
;      socket_read
;
;   Description
;       socket # in ebx
;       returns # of bytes remaining in eax, data in bl
;
;***************************************************************************
socket_read:
    shl     ebx, 12
    add     ebx, sockets
    mov     eax, [ebx + 24]         ; get count of bytes
    mov     ecx,1
    test    eax, eax
    jz      sr2
   
    dec     eax
    mov     esi, ebx            ; esi is address of socket
    mov     [ebx + 24], eax         ; store new count
    movzx   ebx, byte [ebx + SOCKETHEADERSIZE]  ; get the byte
    add     esi, SOCKETHEADERSIZE
    mov     edi, esi
    inc     esi
   
    mov     ecx, (SOCKETBUFFSIZE - SOCKETHEADERSIZE) / 4
    cld
    rep     movsd
    xor     ecx, ecx
    
sr1:
    jmp     sor_exit
   
sr2:
    xor     bl, bl
   
sor_exit:
    ret
   
   
   
;***************************************************************************
;   Function
;      socket_write
;
;   Description
;       socket in ebx
;       # of bytes to write in ecx
;       pointer to data in edx
;       returns 0 in eax ok, -1 == failed ( invalid socket, or
;       could not queue IP packet )
;
;***************************************************************************
socket_write:
    ; First, find the address of the socket descriptor
    shl     ebx, 12
    add     ebx, sockets         ; ebx = address of actual socket
   
    mov     eax, 0xFFFFFFFF
    ; If the socket is invalid, return with an error code
    cmp     [ebx], dword SOCK_EMPTY
    je      sw_exit


    mov     eax, EMPTY_QUEUE
    call    dequeue
    cmp     ax, NO_BUFFER
    je      sw_exit
   
    ; Save the queue entry number
    push    eax
   
    ; save the pointers to the data buffer & size
    push    edx
    push    ecx

    ; convert buffer pointer eax to the absolute address
    mov     ecx, IPBUFFSIZE
    mul     ecx
    add     eax, IPbuffs

    mov     edx, eax
   
    ; So, ebx holds the socket ptr, edx holds the IPbuffer ptr
   
    ; Fill in the IP header ( some data is in the socket descriptor)
    mov     eax, [ebx + 8]
    mov     [edx + 12], eax      ; source IP
    mov     eax, [ebx + 16]
    mov     [edx + 16], eax      ; Destination IP
   
    mov     al, 0x45
    mov     [edx], al         ; Version, IHL
    xor     al, al   
    mov     [edx + 1], al     ; Type of service
   
    pop     eax                   ; Get the UDP data length
    push    eax
   
    add     eax, 20 + 8           ; add IP header and UDP header lengths
    mov     [edx + 2], ah
    mov     [edx + 3], al
    xor     al, al   
    mov     [edx + 4], al
    mov     [edx + 5], al
    mov     al, 0x40
    mov     [edx + 6], al
    xor     al, al  
    mov     [edx + 7], al
    mov     al, 0x20
    mov     [edx + 8], al
    mov     al, 17
    mov     [edx + 9], al
   
    ; Checksum left unfilled
    xor     ax, ax
    mov     [edx + 10], ax
   
    ; Fill in the UDP header ( some data is in the socket descriptor)
    mov     ax, [ebx + 12]
    mov     [edx + 20], ax
   
    mov     ax, [ebx + 20]
    mov     [edx + 20 + 2], ax
   
    pop     eax
    push    eax
   
    add     eax, 8
    mov     [edx + 20 + 4], ah
    mov     [edx + 20 + 5], al
   
    ; Checksum left unfilled
    xor     ax, ax
    mov     [edx + 20 + 6], ax
   
    pop     ecx                  ; count of bytes to send
    mov     ebx, ecx            ; need the length later
    pop     eax                  ; get callers ptr to data to send
   
    ; Get the address of the callers data
    mov     edi,[0x3010]
    add     edi,0x10
    add     eax,[edi]
    mov     esi, eax
   
    mov     edi, edx
    add     edi, 28
    cld
    rep     movsb               ; copy the data across
   
    ; we have edx as IPbuffer ptr.
    ; Fill in the UDP checksum
    ; First, fill in pseudoheader
    mov     eax, [edx + 12]
    mov     [pseudoHeader], eax
    mov     eax, [edx + 16]
    mov     [pseudoHeader+4], eax
    mov     ax, 0x1100            ; 0 + protocol
    mov     [pseudoHeader+8], ax
    add     ebx, 8
    mov     eax, ebx
    mov     [pseudoHeader+10], ah
    mov     [pseudoHeader+11], al
      
    mov     eax, pseudoHeader
    mov     [checkAdd1], eax
    mov     [checkSize1], word 12
    mov     eax, edx
    add     eax, 20
    mov     [checkAdd2], eax
    mov     eax, ebx
    mov     [checkSize2], ax      ; was eax!! mjh 8/7/02
   
    call    checksum
   
    ; store it in the UDP checksum ( in the correct order! )
    mov     ax, [checkResult]

    ; If the UDP checksum computes to 0, we must make it 0xffff
    ; (0 is reserved for 'not used')
    cmp     ax, 0
    jne     sw_001
    mov     ax, 0xffff
   
sw_001:
    mov     [edx + 20 + 6], ah
    mov     [edx + 20 + 7], al
   
    ; Fill in the IP header checksum
    mov     eax, edx
    mov     [checkAdd1], eax
    mov     [checkSize1], word 20
    mov     [checkAdd2], dword 0
    mov     [checkSize2], word 0
   
    call    checksum
   
    mov     ax, [checkResult]
    mov     [edx + 10], ah
    mov     [edx + 11], al
   
    ; Check destination IP address.
    ; If it is the local host IP, route it back to IP_RX
   
    pop     ebx   
    mov     eax, NET1OUT_QUEUE

    mov     ecx, [ edx + 16]
    mov     edx, [stack_ip]
    cmp     edx, ecx
    jne     sw_notlocal
    mov     eax, IPIN_QUEUE

sw_notlocal:
    ; Send it.
    call    queue
    
    xor     eax, eax

sw_exit:
    ret
   


;***************************************************************************
;   Function
;      socket_write_tcp
;
;   Description
;       socket in ebx
;       # of bytes to write in ecx
;       pointer to data in edx
;       returns 0 in eax ok, -1 == failed ( invalid socket, or
;       could not queue IP packet )
;
;***************************************************************************
socket_write_tcp:
    ; First, find the address of the socket descriptor
    shl     ebx, 12
    add     ebx, sockets         ; ebx = address of actual socket

    mov     [sktAddr], ebx
   
    mov     eax, 0xFFFFFFFF
    ; If the socket is invalid, return with an error code
    cmp     [ebx], dword SOCK_EMPTY
    je      swt_exit


    mov     eax, EMPTY_QUEUE
    call    dequeue
    cmp     ax, NO_BUFFER
    je      swt_exit
   
    push    eax
    
    mov     bl, 0x10        ; ACK

    ; Get the address of the callers data
    mov     edi,[0x3010]
    add     edi,0x10
    add     edx,[edi]
    mov     esi, edx
    
    pop     eax
    push    eax
    
    push    ecx
    call    buildTCPPacket
    pop     ecx
    
    ; Check destination IP address.
    ; If it is the local host IP, route it back to IP_RX
    
    pop     ebx   
    push    ecx
    mov     eax, NET1OUT_QUEUE

    mov     edx, [stack_ip]
    mov     ecx, [ sktAddr ]
    mov     ecx, [ ecx + 16 ]
    cmp     edx, ecx
    jne     swt_notlocal
    mov     eax, IPIN_QUEUE
    
swt_notlocal:
    pop     ecx
       ; Send it.
    call    queue

    mov     esi, [sktAddr]
    
    ; increament SND.NXT in socket
    ; Amount to increment by is in ecx
    add     esi, 48
    call    add_inet_esi
   
    xor     eax, eax
    
swt_exit:
    ret


   
; Below, the main network layer source code is included
; 
   
include "QUEUE.INC"
include "IP.INC"
include "TCP.INC"   
include "UDP.INC"   
if SLIP_PRESENT = TRUE   
include "SLIP.INC"
end if
include "ETHERNET.INC"

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲成人av福利| 91超碰这里只有精品国产| 日韩精品专区在线影院观看| 有坂深雪av一区二区精品| av在线不卡网| 国产精品伦一区二区三级视频| 韩国精品在线观看| 久久久久久久久久美女| 狠狠狠色丁香婷婷综合激情| 欧美成人精精品一区二区频| 免费看欧美美女黄的网站| 欧美福利视频导航| 蜜臀av性久久久久蜜臀aⅴ| 精品美女一区二区| 国产剧情av麻豆香蕉精品| 国产欧美一区二区三区在线老狼| 国产乱码精品一区二区三| 中文一区一区三区高中清不卡| 成人国产精品免费观看视频| 悠悠色在线精品| 精品国产污污免费网站入口| 国产成人av福利| 夜夜爽夜夜爽精品视频| 91精品国产综合久久精品| 久久精品久久综合| 中文字幕佐山爱一区二区免费| 欧美日韩黄色影视| 国产.欧美.日韩| 亚洲成av人片在线| 久久毛片高清国产| 欧美日韩一区国产| 99精品欧美一区二区三区小说 | 久久综合久久综合亚洲| 91麻豆自制传媒国产之光| 人妖欧美一区二区| 伊人开心综合网| 国产日产欧产精品推荐色 | 国产成a人亚洲精| 亚洲成a人v欧美综合天堂下载| 日本一区二区三区四区在线视频 | 国产成人免费在线视频| 亚洲高清免费视频| 亚洲欧美日韩久久精品| 国产午夜精品久久| wwwwww.欧美系列| 日韩亚洲欧美综合| 337p亚洲精品色噜噜狠狠| 粉嫩嫩av羞羞动漫久久久 | 日韩avvvv在线播放| 亚洲国产精品久久久久婷婷884 | 成人午夜伦理影院| 国产老女人精品毛片久久| 免费成人在线网站| 日韩av高清在线观看| 日韩黄色片在线观看| 五月天丁香久久| 免费看黄色91| 国产精品亚洲成人| 99久久精品国产一区| 日本二三区不卡| 精品1区2区3区| 精品日韩一区二区三区| 久久这里只有精品视频网| 国产精品免费丝袜| 一区二区三区国产豹纹内裤在线 | 国产午夜精品一区二区三区嫩草 | 国产揄拍国内精品对白| 成人免费毛片aaaaa**| 一本一本大道香蕉久在线精品| 99riav久久精品riav| 91精品欧美综合在线观看最新| 欧美高清一级片在线观看| 综合中文字幕亚洲| 久久精品人人做人人爽人人| 欧洲av在线精品| 欧美在线free| 欧美一区二区女人| 最新热久久免费视频| 日韩不卡一二三区| 91丨九色丨国产丨porny| 91精品国产综合久久小美女| 国产精品乱码一区二区三区软件 | 欧美三片在线视频观看| 国产精品免费aⅴ片在线观看| 午夜天堂影视香蕉久久| 国产成人精品亚洲777人妖| 欧美福利视频一区| 亚洲欧美另类在线| 懂色av中文一区二区三区| 精品电影一区二区三区| 亚洲成在线观看| 色噜噜狠狠一区二区三区果冻| 精品少妇一区二区三区日产乱码| 亚洲国产综合色| 日本久久一区二区三区| 亚洲欧美在线高清| 国产精品99久| 久久亚洲二区三区| 看片的网站亚洲| 欧美日韩高清一区| 亚洲成人精品一区二区| 欧美在线视频你懂得| 亚洲综合久久久| 欧美日韩中文精品| 三级在线观看一区二区| 91精品国产免费| 美国欧美日韩国产在线播放| 欧美成人vps| 国产大陆a不卡| 亚洲精品乱码久久久久久| 在线观看欧美黄色| 青青草97国产精品免费观看无弹窗版| 777xxx欧美| 国产真实精品久久二三区| 久久精品亚洲乱码伦伦中文| 色综合天天天天做夜夜夜夜做| 亚洲综合在线第一页| 欧美成人猛片aaaaaaa| 国产成人精品网址| 亚洲国产中文字幕在线视频综合| 91麻豆精品国产91久久久使用方法 | 一区二区三区在线看| 欧美一级视频精品观看| 成人中文字幕电影| 亚洲午夜视频在线| 国产三级一区二区| 欧美在线免费播放| 国产一区二区三区久久久| 一区二区三区鲁丝不卡| 国产亚洲综合性久久久影院| 欧美性做爰猛烈叫床潮| 高清国产一区二区三区| 久久99久久99精品免视看婷婷| 亚洲精品欧美二区三区中文字幕| 欧美大片拔萝卜| 欧美剧情电影在线观看完整版免费励志电影| 国产美女在线观看一区| 老司机免费视频一区二区| 五月天欧美精品| 亚洲高清在线精品| 亚洲美女屁股眼交3| 亚洲欧美在线视频| 国产精品成人免费在线| 日本一区免费视频| 国产目拍亚洲精品99久久精品| 久久婷婷一区二区三区| 日韩视频一区二区| 欧美白人最猛性xxxxx69交| 欧美高清dvd| 精品欧美一区二区三区精品久久 | 丁香婷婷深情五月亚洲| 国产又粗又猛又爽又黄91精品| 老色鬼精品视频在线观看播放| 另类欧美日韩国产在线| 精品午夜久久福利影院| 粉嫩aⅴ一区二区三区四区| 粉嫩aⅴ一区二区三区四区| 成人激情电影免费在线观看| 色婷婷激情综合| 制服丝袜亚洲精品中文字幕| 精品国产一区二区三区忘忧草| 精品成a人在线观看| 欧美高清一级片在线观看| 亚洲精品国产精品乱码不99| 亚洲福利视频三区| 久久99在线观看| 91丨porny丨在线| 欧美精品在线一区二区三区| 久久久一区二区三区| 亚洲综合在线视频| 久久成人免费日本黄色| 色久优优欧美色久优优| 日韩欧美国产一区二区三区| 国产精品伦理一区二区| 日韩av网站免费在线| 91免费视频网址| 久久久久久毛片| 奇米精品一区二区三区在线观看| 国产高清不卡一区| 日韩限制级电影在线观看| 亚洲欧美日韩在线| 国产成人精品免费网站| 日韩视频一区二区三区| 亚洲一区精品在线| 97精品国产97久久久久久久久久久久| 91精品国产丝袜白色高跟鞋| 亚洲人成网站在线| 成人午夜电影网站| 久久久久久日产精品| 久久er99热精品一区二区| 欧美三区免费完整视频在线观看| 国产精品久久久一本精品| 激情欧美一区二区三区在线观看| 精品视频在线看| 亚洲大片免费看| 91精品麻豆日日躁夜夜躁| 亚洲在线成人精品| 欧美亚洲另类激情小说| 一区二区欧美视频| 欧美日韩一级二级三级|