Subversion Repositories Kolibri OS

Rev

Rev 1529 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
1159 hidnplayr 1
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
2
;;                                                                 ;;
1514 hidnplayr 3
;; Copyright (C) KolibriOS team 2004-2010. All rights reserved.    ;;
1159 hidnplayr 4
;; Distributed under terms of the GNU General Public License       ;;
5
;;                                                                 ;;
6
;;  SOCKET.INC                                                     ;;
7
;;                                                                 ;;
1529 hidnplayr 8
;;    Written by hidnplayr@kolibrios.org,                          ;;
9
;;     and Clevermouse.                                            ;;
1159 hidnplayr 10
;;                                                                 ;;
1529 hidnplayr 11
;;       Based on code by mike.dld                                 ;;
1159 hidnplayr 12
;;                                                                 ;;
1529 hidnplayr 13
;;         GNU GENERAL PUBLIC LICENSE                              ;;
14
;;          Version 2, June 1991                                   ;;
15
;;                                                                 ;;
1159 hidnplayr 16
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
17
 
1206 hidnplayr 18
$Revision: 1533 $
1159 hidnplayr 19
 
1514 hidnplayr 20
virtual at 0
1249 hidnplayr 21
 
1514 hidnplayr 22
	SOCKET:
23
	.NextPtr		dd ? ; pointer to next socket in list
24
	.PrevPtr		dd ? ; pointer to previous socket in list
25
	.Number 		dd ? ; socket number
1249 hidnplayr 26
 
1514 hidnplayr 27
	.lock			dd ? ; lock mutex
1249 hidnplayr 28
 
1514 hidnplayr 29
	.PID			dd ? ; application process id
30
	.Domain 		dd ? ; INET/UNIX/..
31
	.Type			dd ? ; RAW/UDP/TCP/...
32
	.Protocol		dd ? ; ICMP/IPv4/ARP/
33
	.errorcode		dd ?
1249 hidnplayr 34
 
1514 hidnplayr 35
	.options		dd ?
1529 hidnplayr 36
	.state			dd ?
1249 hidnplayr 37
 
1514 hidnplayr 38
	.end:
39
end virtual
1249 hidnplayr 40
 
1514 hidnplayr 41
virtual at SOCKET.end
1254 hidnplayr 42
 
1514 hidnplayr 43
	IP_SOCKET:
1318 hidnplayr 44
 
1514 hidnplayr 45
	.LocalIP		dd ?
46
				rd 3 ; for IPv6 addresses
1249 hidnplayr 47
 
1514 hidnplayr 48
	.RemoteIP		dd ?
49
				rd 3 ; for IPv6 addresses
1249 hidnplayr 50
 
1514 hidnplayr 51
	.end:
52
end virtual
1159 hidnplayr 53
 
1514 hidnplayr 54
virtual at IP_SOCKET.end
1249 hidnplayr 55
 
1514 hidnplayr 56
	TCP_SOCKET:
57
 
58
	.LocalPort		dw ? ; In INET byte order
59
	.RemotePort		dw ? ; In INET byte order
60
 
61
	.backlog		dw ? ; Backlog
62
	.backlog_cur		dw ? ; current size of queue for un-accept-ed connections
63
 
64
	.OrigRemoteIP		dd ? ; original remote IP address (used to reset to LISTEN state)
65
	.OrigRemotePort 	dw ? ; original remote port (used to reset to LISTEN state)
66
 
67
	.t_state		dd ? ; TCB state
68
	.t_rxtshift		dd ?
69
	.t_rxtcur		dd ?
70
	.t_dupacks		dd ?
71
	.t_maxseg		dd ?
72
	.t_force		dd ?
73
	.t_flags		dd ?
74
 
75
;---------------
76
; RFC783 page 21
77
 
78
; send sequence
79
	.SND_UNA		dd ? ; sequence number of unack'ed sent Packets
80
	.SND_NXT		dd ? ; next send sequence number to use
81
	.SND_UP 		dd ?
82
	.SND_WL1		dd ? ; window minus one
83
	.SND_WL2		dd ? ;
84
	.ISS			dd ? ; initial send sequence number
85
	.SND_WND		dd ? ; send window
86
 
87
; receive sequence
88
	.RCV_WND		dw ? ; receive window
89
	.RCV_NXT		dd ? ; next receive sequence number to use
90
	.RCV_UP 		dd ?
91
	.IRS			dd ? ; initial receive sequence number
92
 
93
;---------------------
94
; Additional variables
95
 
96
; receive variables
97
	.RCV_ADV		dd ?
98
 
99
; retransmit variables
100
	.SND_MAX		dd ?
101
 
102
; congestion control
103
	.SND_CWND		dd ?
104
	.SND_SSTHRESH		dd ?
105
 
106
;----------------------
107
; Transmit timing stuff
108
	.t_idle 		dd ?
109
	.t_rtt			dd ?
110
	.t_rtseq		dd ?
111
	.t_srtt 		dd ?
112
	.t_rttvar		dd ?
113
	.t_rttmin		dd ?
114
	.max_sndwnd		dd ?
115
 
116
;-----------------
117
; Out-of-band data
118
	.t_oobflags		dd ?
119
	.t_iobc 		dd ?
120
	.t_softerror		dd ?
121
 
122
 
123
;---------
124
; RFC 1323
125
	.SND_SCALE		db ? ; Scale factor
126
	.RCV_SCALE		db ?
127
	.request_r_scale	db ?
128
	.requested_s_scale	dd ?
129
 
130
	.ts_recent		dd ?
131
	.ts_recent_age		dd ?
132
	.last_ack_sent		dd ?
133
 
1519 hidnplayr 134
 
135
;-------
136
; Timers
1529 hidnplayr 137
	.timer_retransmission	dw ? ; rexmt
1519 hidnplayr 138
	.timer_ack		dw ?
139
	.timer_persist		dw ?
1529 hidnplayr 140
	.timer_keepalive	dw ? ; keepalive/syn timeout
141
	.timer_timed_wait	dw ? ; also used as 2msl timer
1519 hidnplayr 142
 
1249 hidnplayr 143
	.end:
1514 hidnplayr 144
end virtual
1249 hidnplayr 145
 
1514 hidnplayr 146
virtual at IP_SOCKET.end
1249 hidnplayr 147
 
1514 hidnplayr 148
	UDP_SOCKET:
1249 hidnplayr 149
 
1514 hidnplayr 150
	.LocalPort		dw ? ; In INET byte order
151
	.RemotePort		dw ? ; In INET byte order
152
	.firstpacket		db ?
1249 hidnplayr 153
 
154
	.end:
1514 hidnplayr 155
end virtual
1249 hidnplayr 156
 
1514 hidnplayr 157
virtual at IP_SOCKET.end
1249 hidnplayr 158
 
1514 hidnplayr 159
	ICMP_SOCKET:
160
 
161
	.Identifier		dw ? ;
162
 
163
	.end:
164
end virtual
165
 
1529 hidnplayr 166
struc	RING_BUFFER {
167
	.start_ptr		dd ? ; Pointer to start of buffer
168
	.end_ptr		dd ? ; pointer to end of buffer
169
	.read_ptr		dd ? ; Read pointer
170
	.write_ptr		dd ? ; Write pointer
171
	.size			dd ? ; Number of bytes buffered
1533 hidnplayr 172
	.end:
1529 hidnplayr 173
}
1514 hidnplayr 174
 
1529 hidnplayr 175
virtual at 0
176
 
177
	RING_BUFFER	RING_BUFFER
178
 
179
end virtual
180
 
181
virtual at TCP_SOCKET.end
182
 
183
 STREAM_SOCKET:
1533 hidnplayr 184
	.rcv	rd     RING_BUFFER.end/4
185
	.snd	rd     RING_BUFFER.end/4
1529 hidnplayr 186
	.end:
187
 
188
end virtual
189
 
190
 
1274 hidnplayr 191
struct	socket_queue_entry
192
	.data_ptr	dd ?
1514 hidnplayr 193
	.buf_ptr	dd ?
1274 hidnplayr 194
	.data_size	dd ?
195
	.size:
196
ends
197
 
1514 hidnplayr 198
 
1249 hidnplayr 199
SOCKETBUFFSIZE		equ 4096     ; in bytes
1514 hidnplayr 200
 
1249 hidnplayr 201
SOCKET_QUEUE_SIZE	equ 10	     ; maximum number ofincoming packets queued for 1 socket
1514 hidnplayr 202
; the incoming packet queue for sockets is placed in the socket struct itself, at this location from start
203
SOCKET_QUEUE_LOCATION	equ SOCKETBUFFSIZE - SOCKET_QUEUE_SIZE*socket_queue_entry.size - queue.data
1249 hidnplayr 204
 
1159 hidnplayr 205
uglobal
1514 hidnplayr 206
	net_sockets	rd 4
1159 hidnplayr 207
	last_UDP_port	dw ? ; These values give the number of the last used ephemeral port
208
	last_TCP_port	dw ? ;
209
endg
210
 
211