-
Notifications
You must be signed in to change notification settings - Fork 4
/
socket_staff.asm
98 lines (88 loc) · 2.78 KB
/
socket_staff.asm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
;-------------------------------------------------------------------------------
; <FindHostIP>
;-------------------------------------------------------------------------------
; Parameters
; pServerName pointer to a string containing the server
; name to resolve the IP number for.
; Return value
; IP number in network byte order or NULL if the hostname
; was not found.
FindHostIP proc uses ebx pServerName:dword
invoke gethostbyname, [pServerName]
test eax, eax
jz _return
; eax is a pointer to a HOSTENT structure now,
; get first address list pointer in list:
mov eax, [(hostent ptr [eax]).h_list]
test eax, eax
jz _return
; get first address pointer in list:
mov eax, [eax]
test eax, eax
jz _return
; get first address from pointer
mov eax, [eax]
; eax is IP number now, fall through so IP gets returned
_return:
ret
FindHostIP endp
;-------------------------------------------------------------------------------
; <FillSockAddr>
;-------------------------------------------------------------------------------
; Parameters
; pSockAddr pointer to the sockaddr_in structure to fill
; pServerName pointer to a string containing the server
; name to address
; portNumber address port number
; Return value
; 0: host lookup failed
; not 0: function succeeded
FillSockAddr proc pSockAddr:dword, pServerName:dword, portNumber:dword
invoke FindHostIP, [pServerName]
test eax, eax
jz _done
mov edx, [pSockAddr]
mov ecx, [portNumber]
xchg cl, ch ; convert to network byte order
mov [edx][sockaddr_in.sin_family], AF_INET
mov [edx][sockaddr_in.sin_port], cx
mov [edx][sockaddr_in.sin_addr.S_un.S_addr], eax
_done:
ret
FillSockAddr endp
;-------------------------------------------------------------------------------
; <FThread>
;-------------------------------------------------------------------------------
; Parameters
; FCParams pointer to forward structure
;Returns nothing - works in infinite loop.
FThread proc pFCParams:dword
local Fbuffer[1024]:byte, nBytesRec:dword, nBytesSend:dword;
.WHILE TRUE
invoke ZeroMemory, addr Fbuffer, sizeof Fbuffer;
mov edx, pFCParams
mov ebx, [edx]
invoke recv, ebx,addr Fbuffer, sizeof Fbuffer,0
mov nBytesRec,eax
.IF eax == SOCKET_ERROR
.IF DBG_OUTPUT == 1
invoke printf, addr g_errLocalConn
.ENDIF
;invoke printf addr g_errLocalConn
invoke ExitProcess, 0;
.ENDIF
.IF eax > 0
.IF DBG_OUTPUT == 1
invoke printf, addr g_msgncoming
.ENDIF
.ENDIF
mov edx, pFCParams
mov ebx, [edx+4]
invoke sendto, ebx, addr Fbuffer, nBytesRec, 0, pFCParams+8, sizeof pFCParams+8;
.IF eax == SOCKET_ERROR
;invoke ExitProcess, 0;
.ENDIF
invoke Sleep, 1
.ENDW
ret
FThread endp