Rev 2288 | Go to most recent revision | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 2288 | Rev 2381 | ||
---|---|---|---|
Line 25... | Line 25... | ||
25 | ;; 22.09.2003 - [Mike Hibbett] : mikeh@oceanfree.net ;; |
25 | ;; 22.09.2003 - [Mike Hibbett] : mikeh@oceanfree.net ;; |
26 | ;; 11.11.2006 - [Johnny_B] and [smb] ;; |
26 | ;; 11.11.2006 - [Johnny_B] and [smb] ;; |
27 | ;; ;; |
27 | ;; ;; |
28 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
28 | ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; |
Line 29... | Line 29... | ||
29 | 29 | ||
Line 30... | Line 30... | ||
30 | $Revision: 2288 $ |
30 | $Revision: 2381 $ |
31 | 31 | ||
32 | ; socket data structure |
32 | ; socket data structure |
33 | struct SOCKET |
33 | struct SOCKET |
34 | .PrevPtr dd ? ; pointer to previous socket in list |
34 | PrevPtr dd ? ; pointer to previous socket in list |
35 | .NextPtr dd ? ; pointer to next socket in list |
35 | NextPtr dd ? ; pointer to next socket in list |
36 | .Number dd ? ; socket number (unique within single process) |
36 | Number dd ? ; socket number (unique within single process) |
37 | .PID dd ? ; application process id |
37 | PID dd ? ; application process id |
38 | .LocalIP dd ? ; local IP address |
38 | LocalIP dd ? ; local IP address |
39 | .LocalPort dw ? ; local port |
39 | LocalPort dw ? ; local port |
40 | .RemoteIP dd ? ; remote IP address |
40 | RemoteIP dd ? ; remote IP address |
41 | .RemotePort dw ? ; remote port |
41 | RemotePort dw ? ; remote port |
42 | .OrigRemoteIP dd ? ; original remote IP address (used to reset to LISTEN state) |
42 | OrigRemoteIP dd ? ; original remote IP address (used to reset to LISTEN state) |
43 | .OrigRemotePort dw ? ; original remote port (used to reset to LISTEN state) |
43 | OrigRemotePort dw ? ; original remote port (used to reset to LISTEN state) |
44 | .rxDataCount dd ? ; rx data count |
44 | rxDataCount dd ? ; rx data count |
45 | .TCBState dd ? ; TCB state |
45 | TCBState dd ? ; TCB state |
46 | .TCBTimer dd ? ; TCB timer (seconds) |
46 | TCBTimer dd ? ; TCB timer (seconds) |
47 | .ISS dd ? ; initial send sequence |
47 | ISS dd ? ; initial send sequence |
48 | .IRS dd ? ; initial receive sequence |
48 | IRS dd ? ; initial receive sequence |
49 | .SND_UNA dd ? ; sequence number of unack'ed sent packets |
49 | SND_UNA dd ? ; sequence number of unack'ed sent packets |
50 | .SND_NXT dd ? ; bext send sequence number to use |
50 | SND_NXT dd ? ; bext send sequence number to use |
51 | .SND_WND dd ? ; send window |
51 | SND_WND dd ? ; send window |
52 | .RCV_NXT dd ? ; next receive sequence number to use |
52 | RCV_NXT dd ? ; next receive sequence number to use |
53 | .RCV_WND dd ? ; receive window |
53 | RCV_WND dd ? ; receive window |
54 | .SEG_LEN dd ? ; segment length |
54 | SEG_LEN dd ? ; segment length |
55 | .SEG_WND dd ? ; segment window |
55 | SEG_WND dd ? ; segment window |
56 | .wndsizeTimer dd ? ; window size timer |
56 | wndsizeTimer dd ? ; window size timer |
57 | .lock MUTEX ; lock mutex |
57 | mutex MUTEX ; lock mutex |
Line 58... | Line 58... | ||
58 | .rxData dd ? ; receive data buffer here |
58 | rxData dd ? ; receive data buffer here |
59 | ends |
59 | ends |
60 | 60 | ||
Line 98... | Line 98... | ||
98 | xor eax, eax |
98 | xor eax, eax |
99 | rep stosd |
99 | rep stosd |
100 | pop eax |
100 | pop eax |
Line 101... | Line 101... | ||
101 | 101 | ||
102 | mov ebx, eax |
102 | mov ebx, eax |
103 | lea ecx, [eax+SOCKET.lock] |
103 | lea ecx, [eax+SOCKET.mutex] |
104 | call mutex_init |
104 | call mutex_init |
Line 105... | Line 105... | ||
105 | mov eax, ebx |
105 | mov eax, ebx |
106 | 106 | ||
Line 709... | Line 709... | ||
709 | stdcall net_socket_num_to_addr, ebx |
709 | stdcall net_socket_num_to_addr, ebx |
710 | or eax, eax |
710 | or eax, eax |
711 | jz .error |
711 | jz .error |
Line 712... | Line 712... | ||
712 | 712 | ||
713 | mov ebx, eax |
713 | mov ebx, eax |
714 | lea ecx, [eax + SOCKET.lock] |
714 | lea ecx, [eax + SOCKET.mutex] |
Line 715... | Line 715... | ||
715 | call mutex_lock |
715 | call mutex_lock |
716 | 716 | ||
717 | mov eax, [ebx + SOCKET.rxDataCount] ; get count of bytes |
717 | mov eax, [ebx + SOCKET.rxDataCount] ; get count of bytes |
Line 732... | Line 732... | ||
732 | rep movsd |
732 | rep movsd |
733 | pop ecx |
733 | pop ecx |
734 | and ecx, 3 |
734 | and ecx, 3 |
735 | rep movsb |
735 | rep movsb |
Line 736... | Line 736... | ||
736 | 736 | ||
737 | lea ecx, [ebx + SOCKET.lock] |
737 | lea ecx, [ebx + SOCKET.mutex] |
738 | mov ebx, eax |
738 | mov ebx, eax |
739 | call mutex_unlock |
739 | call mutex_unlock |
740 | mov eax, ebx |
740 | mov eax, ebx |
Line 741... | Line 741... | ||
741 | ret |
741 | ret |
742 | 742 | ||
743 | .error_release: |
743 | .error_release: |
744 | lea ecx, [ebx + SOCKET.lock] |
744 | lea ecx, [ebx + SOCKET.mutex] |
745 | call mutex_unlock |
745 | call mutex_unlock |
746 | .error: |
746 | .error: |
747 | xor ebx, ebx |
747 | xor ebx, ebx |
Line 767... | Line 767... | ||
767 | jz .error |
767 | jz .error |
Line 768... | Line 768... | ||
768 | 768 | ||
Line 769... | Line 769... | ||
769 | mov ebx, eax |
769 | mov ebx, eax |
770 | 770 | ||
771 | push ecx edx |
771 | push ecx edx |
772 | lea ecx, [eax + SOCKET.lock] |
772 | lea ecx, [eax + SOCKET.mutex] |
Line 773... | Line 773... | ||
773 | call mutex_lock |
773 | call mutex_lock |
774 | pop edx ecx |
774 | pop edx ecx |
Line 800... | Line 800... | ||
800 | pop ecx |
800 | pop ecx |
801 | and ecx, 3 |
801 | and ecx, 3 |
802 | rep movsb ; copy remaining bytes |
802 | rep movsb ; copy remaining bytes |
Line 803... | Line 803... | ||
803 | 803 | ||
804 | .exit: |
804 | .exit: |
805 | lea ecx, [ebx + SOCKET.lock] |
805 | lea ecx, [ebx + SOCKET.mutex] |
806 | mov ebx, eax |
806 | mov ebx, eax |
807 | call mutex_unlock |
807 | call mutex_unlock |
808 | mov eax, ebx |
808 | mov eax, ebx |
Line 814... | Line 814... | ||
814 | 814 | ||
815 | .copy_all_bytes: |
815 | .copy_all_bytes: |
816 | xor esi, esi |
816 | xor esi, esi |
817 | mov [ebx + SOCKET.rxDataCount], esi ; store new count (zero) |
817 | mov [ebx + SOCKET.rxDataCount], esi ; store new count (zero) |
818 | call .start_copy |
818 | call .start_copy |
819 | lea ecx, [ebx + SOCKET.lock] |
819 | lea ecx, [ebx + SOCKET.mutex] |
820 | mov ebx, eax |
820 | mov ebx, eax |
821 | call mutex_unlock |
821 | call mutex_unlock |
822 | mov eax, ebx |
822 | mov eax, ebx |