22 |
open Autoconf |
open Autoconf |
23 |
open LittleEndian |
open LittleEndian |
24 |
open AnyEndian |
open AnyEndian |
25 |
|
|
26 |
open CommonTypes |
open CommonTypes |
27 |
open CommonGlobals |
open CommonGlobals |
28 |
|
|
29 |
open DonkeyTypes |
open DonkeyTypes |
30 |
open DonkeyMftp |
open DonkeyMftp |
31 |
|
|
32 |
module QueryReplyUdp = struct |
module QueryReplyUdp = struct |
33 |
|
|
34 |
type t = tagged_file list |
type t = tagged_file list |
35 |
|
|
36 |
let names_of_tag = file_common_tags |
let names_of_tag = file_common_tags |
37 |
|
|
38 |
let get_file s pos = |
let get_file s pos = |
39 |
let md4 = get_md4 s pos in |
let md4 = get_md4 s pos in |
40 |
let ip = get_ip s (pos + 16) in |
let ip = get_ip s (pos + 16) in |
46 |
f_port = port; |
f_port = port; |
47 |
f_tags = tags; |
f_tags = tags; |
48 |
} in |
} in |
49 |
file, pos |
file, pos |
50 |
|
|
51 |
let parse len s = |
let parse len s = |
52 |
let rec iter pos list = |
let rec iter pos list = |
53 |
if pos < len then |
if pos < len then |
57 |
else List.rev list |
else List.rev list |
58 |
in |
in |
59 |
iter 1 [] |
iter 1 [] |
60 |
|
|
61 |
let bprint oc t = |
let bprint oc t = |
62 |
Printf.bprintf oc "FOUND:\n"; |
Printf.bprintf oc "FOUND:\n"; |
63 |
List.iter (fun t -> |
List.iter (fun t -> |
64 |
Printf.bprintf oc "%s\n" (Md4.to_string t.f_md4); |
Printf.bprintf oc "%s\n" (Md4.to_string t.f_md4); |
68 |
bprint_tags oc t.f_tags; |
bprint_tags oc t.f_tags; |
69 |
Printf.bprintf oc "\n" |
Printf.bprintf oc "\n" |
70 |
) t |
) t |
71 |
|
|
72 |
let write buf t = |
let write buf t = |
73 |
List.iter (fun file -> |
List.iter (fun file -> |
74 |
buf_md4 buf file.f_md4; |
buf_md4 buf file.f_md4; |
78 |
) t |
) t |
79 |
|
|
80 |
end |
end |
81 |
|
|
82 |
module QueryCallUdp = struct |
module QueryCallUdp = struct |
83 |
type t = { |
type t = { |
84 |
ip : Ip.t; |
ip : Ip.t; |
85 |
port : int; |
port : int; |
86 |
id : int64; |
id : int64; |
87 |
} |
} |
88 |
|
|
89 |
let parse len s = |
let parse len s = |
90 |
let ip = get_ip s 1 in |
let ip = get_ip s 1 in |
91 |
let port = get_port s 5 in |
let port = get_port s 5 in |
92 |
let id = id_of_ip (get_ip s 7) in |
let id = id_of_ip (get_ip s 7) in |
93 |
{ ip = ip; port = port; id = id; } |
{ ip = ip; port = port; id = id; } |
94 |
|
|
95 |
let bprint oc t = |
let bprint oc t = |
96 |
Printf.bprintf oc "QueryCall %s : %d --> %Ld\n" (Ip.to_string t.ip) |
Printf.bprintf oc "QueryCall %s : %d --> %Ld\n" (Ip.to_string t.ip) |
97 |
t.port t.id |
t.port t.id |
98 |
|
|
99 |
let write buf t = |
let write buf t = |
100 |
buf_ip buf t.ip; |
buf_ip buf t.ip; |
101 |
buf_port buf t.port; |
buf_port buf t.port; |
102 |
buf_ip buf (ip_of_id t.id) |
buf_ip buf (ip_of_id t.id) |
103 |
|
|
104 |
end |
end |
105 |
|
|
|
|
|
106 |
module PingServerUdp = struct (* client -> serveur pour identification ? *) |
module PingServerUdp = struct (* client -> serveur pour identification ? *) |
107 |
type t = int64 |
type t = int64 |
108 |
|
|
|
|
|
109 |
let parse len s = |
let parse len s = |
110 |
try |
try |
111 |
get_uint64_32 s 1(*, get_int8 s 2, get_int8 s 3*) |
get_uint64_32 s 1(*, get_int8 s 2, get_int8 s 3*) |
112 |
with _ -> |
with _ -> |
113 |
Int64.zero |
Int64.zero |
114 |
|
|
115 |
let bprint oc t = |
let bprint oc t = |
116 |
Printf.bprintf oc "PING %s\n" (Int64.to_string t) |
Printf.bprintf oc "PING %s\n" (Int64.to_string t) |
117 |
|
|
118 |
let write buf t = |
let write buf t = |
119 |
buf_int64_32 buf t |
buf_int64_32 buf t |
120 |
|
|
121 |
|
(* let bprint oc (t1,t2,t3) = |
|
(* let bprint oc (t1,t2,t3) = |
|
122 |
Printf.bprintf oc "MESSAGE 150 UDP %d %d %d\n" t1 t2 t3*) |
Printf.bprintf oc "MESSAGE 150 UDP %d %d %d\n" t1 t2 t3*) |
123 |
|
|
124 |
(*let write buf (t1,t2,t3) = |
(*let write buf (t1,t2,t3) = |
125 |
buf_int8 buf t1; |
buf_int8 buf t1; |
126 |
buf_int8 buf t2; |
buf_int8 buf t2; |
127 |
buf_int8 buf t3;*) |
buf_int8 buf t3;*) |
128 |
|
|
129 |
end |
end |
130 |
|
|
131 |
module PingServerReplyUdp = struct (* reponse du serveur a 150 *) |
module PingServerReplyUdp = struct (* reponse du serveur a 150 *) |
132 |
|
|
133 |
let multiple_getsources = 1 |
let multiple_getsources = 1 |
134 |
let multiple_replies = 2 |
let multiple_replies = 2 |
135 |
|
|
136 |
type t = { |
type t = { |
137 |
challenge : int64; |
challenge : int64; |
138 |
users : int; |
users : int; |
160 |
max_users = max_users; |
max_users = max_users; |
161 |
flags = flags; |
flags = flags; |
162 |
} |
} |
163 |
|
|
164 |
let bprint oc t = |
let bprint oc t = |
165 |
Printf.bprintf oc "PING REPLY\n"; |
Printf.bprintf oc "PING REPLY\n"; |
166 |
Printf.bprintf oc " %d users %d files\n" t.users t.files; |
Printf.bprintf oc " %d users %d files\n" t.users t.files; |
169 |
(match t.max_users with Some x -> Printf.bprintf oc " Max nusers: %d\n" x | None -> ()); |
(match t.max_users with Some x -> Printf.bprintf oc " Max nusers: %d\n" x | None -> ()); |
170 |
(match t.flags with Some x -> Printf.bprintf oc " Flags: %x\n" x | None -> ()); |
(match t.flags with Some x -> Printf.bprintf oc " Flags: %x\n" x | None -> ()); |
171 |
Printf.bprintf oc "\n" |
Printf.bprintf oc "\n" |
172 |
|
|
173 |
let write buf t = |
let write buf t = |
174 |
buf_int64_32 buf t.challenge; |
buf_int64_32 buf t.challenge; |
175 |
buf_int buf t.users; |
buf_int buf t.users; |
184 |
buf_int buf ( |
buf_int buf ( |
185 |
match t.max_users with Some x -> x | None -> 0); |
match t.max_users with Some x -> x | None -> 0); |
186 |
match t.flags with Some x -> buf_int buf x | None -> () |
match t.flags with Some x -> buf_int buf x | None -> () |
187 |
) |
) |
188 |
end |
end |
189 |
|
|
190 |
module ServerDescUdp = struct |
module ServerDescUdp = struct |
191 |
type t = { |
type t = { |
192 |
ip : Ip.t; |
ip : Ip.t; |
202 |
{ |
{ |
203 |
ip = Ip.null |
ip = Ip.null |
204 |
} |
} |
205 |
|
|
206 |
let bprint b t = |
let bprint b t = |
207 |
Printf.bprintf b "ServerDescUdpReq %s\n" (Ip.to_string t.ip) |
Printf.bprintf b "ServerDescUdpReq %s\n" (Ip.to_string t.ip) |
208 |
|
|
224 |
name = name; |
name = name; |
225 |
desc = desc; |
desc = desc; |
226 |
} |
} |
227 |
|
|
228 |
let bprint b t = |
let bprint b t = |
229 |
Printf.bprintf b "ServerDescReplyUdpReq\n"; |
Printf.bprintf b "ServerDescReplyUdpReq\n"; |
230 |
Printf.bprintf b "name : %s\n" t.name; |
Printf.bprintf b "name : %s\n" t.name; |
236 |
|
|
237 |
end |
end |
238 |
|
|
|
|
|
|
|
|
239 |
module ServerListUdp = struct |
module ServerListUdp = struct |
240 |
type t = { |
type t = { |
241 |
ip : Ip.t; |
ip : Ip.t; |
263 |
module QueryServersUdp = DonkeyProtoServer.QueryServers |
module QueryServersUdp = DonkeyProtoServer.QueryServers |
264 |
module QueryServersReplyUdp = DonkeyProtoServer.QueryServersReply |
module QueryServersReplyUdp = DonkeyProtoServer.QueryServersReply |
265 |
module QueryLocationUdp = struct |
module QueryLocationUdp = struct |
266 |
open DonkeyProtoServer.QueryLocation |
open DonkeyProtoServer.QueryLocation |
267 |
|
|
268 |
type file = DonkeyProtoServer.QueryLocation.t |
type file = DonkeyProtoServer.QueryLocation.t |
269 |
type t = file list |
type t = file list |
270 |
|
|
271 |
let parse len s = |
let parse len s = |
272 |
let rec iter pos list = |
let rec iter pos list = |
273 |
if pos < len then |
if pos < len then |
274 |
iter (pos+16) (get_md4 s pos :: list) |
iter (pos+16) (get_md4 s pos :: list) |
277 |
in |
in |
278 |
iter 1 [] |
iter 1 [] |
279 |
|
|
280 |
let bprint b t = |
let bprint b t = |
281 |
Printf.bprintf b "UDP QUERY LOCATIONS: "; |
Printf.bprintf b "UDP QUERY LOCATIONS: "; |
282 |
List.iter (fun md4 -> Printf.bprintf b "%s " (Md4.to_string md4)) t |
List.iter (fun md4 -> Printf.bprintf b "%s " (Md4.to_string md4)) t |
283 |
|
|
284 |
let write buf t = |
let write buf t = |
285 |
List.iter (fun md4 -> buf_md4 buf md4) t |
List.iter (fun md4 -> buf_md4 buf md4) t |
286 |
end |
end |
287 |
|
|
288 |
module QueryLocationReplyUdp = struct |
module QueryLocationReplyUdp = struct |
289 |
open DonkeyProtoServer.QueryLocationReply |
open DonkeyProtoServer.QueryLocationReply |
290 |
|
|
291 |
type t = DonkeyProtoServer.QueryLocationReply.t list |
type t = DonkeyProtoServer.QueryLocationReply.t list |
292 |
|
|
293 |
let parse len s = |
let parse len s = |
294 |
let rec iter_len pos list = |
let rec iter_len pos list = |
295 |
if pos < len then |
if pos < len then |
296 |
let md4 = get_md4 s pos in |
let md4 = get_md4 s pos in |
308 |
List.rev list |
List.rev list |
309 |
in |
in |
310 |
iter_len 1 [] |
iter_len 1 [] |
311 |
|
|
312 |
let bprint b t = |
let bprint b t = |
313 |
Printf.bprintf b "UDP LOCATION: %d\n" (List.length t); |
Printf.bprintf b "UDP LOCATION: %d\n" (List.length t); |
314 |
List.iter (fun t -> |
List.iter (fun t -> |
315 |
Printf.bprintf b " of %s:\n" (Md4.to_string t.md4); |
Printf.bprintf b " of %s:\n" (Md4.to_string t.md4); |
316 |
List.iter (fun l -> |
List.iter (fun l -> |
317 |
Printf.bprintf b "%s:%d " (Ip.to_string l.ip) l.port; |
Printf.bprintf b "%s:%d " (Ip.to_string l.ip) l.port; |
318 |
) t.locs; |
) t.locs; |
319 |
Printf.bprintf b "\n") t |
Printf.bprintf b "\n") t |
320 |
|
|
321 |
let write buf t = |
let write buf t = |
322 |
List.iter (fun t -> |
List.iter (fun t -> |
323 |
buf_md4 buf t.md4; |
buf_md4 buf t.md4; |
324 |
buf_int8 buf (List.length t.locs); |
buf_int8 buf (List.length t.locs); |
354 |
*) |
*) |
355 |
|
|
356 |
module QueryIDReplyUdp = DonkeyProtoServer.QueryIDReply |
module QueryIDReplyUdp = DonkeyProtoServer.QueryIDReply |
357 |
|
|
358 |
type t = |
type t = |
359 |
| QueryServersUdpReq of QueryServersUdp.t |
| QueryServersUdpReq of QueryServersUdp.t |
360 |
| QueryServersReplyUdpReq of QueryServersReplyUdp.t |
| QueryServersReplyUdpReq of QueryServersReplyUdp.t |
361 |
|
|
362 |
| PingServerUdpReq of PingServerUdp.t |
| PingServerUdpReq of PingServerUdp.t |
363 |
| PingServerReplyUdpReq of PingServerReplyUdp.t |
| PingServerReplyUdpReq of PingServerReplyUdp.t |
364 |
|
|
365 |
| QueryLocationUdpReq of QueryLocationUdp.t |
| QueryLocationUdpReq of QueryLocationUdp.t |
366 |
| QueryLocationReplyUdpReq of QueryLocationReplyUdp.t |
| QueryLocationReplyUdpReq of QueryLocationReplyUdp.t |
367 |
|
|
368 |
| QueryReplyUdpReq of QueryReplyUdp.t |
| QueryReplyUdpReq of QueryReplyUdp.t |
369 |
| QueryUdpReq of CommonTypes.query |
| QueryUdpReq of CommonTypes.query |
370 |
| QueryMultipleUdpReq of CommonTypes.query |
| QueryMultipleUdpReq of CommonTypes.query |
371 |
| QueryCallUdpReq of QueryCallUdp.t |
| QueryCallUdpReq of QueryCallUdp.t |
372 |
| QueryIDReplyUdpReq of QueryIDReplyUdp.t |
| QueryIDReplyUdpReq of QueryIDReplyUdp.t |
373 |
| FileGroupInfoUdpReq of QueryLocationReplyUdp.t |
| FileGroupInfoUdpReq of QueryLocationReplyUdp.t |
374 |
| ServerDescUdpReq of ServerDescUdp.t |
| ServerDescUdpReq of ServerDescUdp.t |
375 |
| ServerDescReplyUdpReq of ServerDescReplyUdp.t |
| ServerDescReplyUdpReq of ServerDescReplyUdp.t |
376 |
| ServerListUdpReq of ServerListUdp.t |
| ServerListUdpReq of ServerListUdp.t |
377 |
|
|
378 |
| EmuleReaskFilePingUdpReq of Md4.t |
| EmuleReaskFilePingUdpReq of Md4.t |
379 |
| EmuleReaskAckUdpReq of Md4.t |
| EmuleReaskAckUdpReq of Md4.t |
380 |
| EmuleFileNotFoundUdpReq |
| EmuleFileNotFoundUdpReq |
381 |
| EmuleQueueFullUdpReq |
| EmuleQueueFullUdpReq |
382 |
|
|
|
|
|
383 |
| UnknownUdpReq of int * string |
| UnknownUdpReq of int * string |
384 |
|
|
385 |
let parse magic s = |
let parse magic s = |
386 |
try |
try |
387 |
let len = String.length s in |
let len = String.length s in |
388 |
if len = 0 then raise Not_found; |
if len = 0 then raise Not_found; |
389 |
let opcode = int_of_char (s.[0]) in |
let opcode = int_of_char (s.[0]) in |
390 |
(* lprintf "opcode: %d" opcode; lprint_newline (); *) |
(* lprintf "opcode: %d" opcode; lprint_newline (); *) |
391 |
match opcode with |
match opcode with |
392 |
| 150 -> PingServerUdpReq (PingServerUdp.parse len s) |
| 150 -> PingServerUdpReq (PingServerUdp.parse len s) |
393 |
| 151 -> PingServerReplyUdpReq (PingServerReplyUdp.parse len s) |
| 151 -> PingServerReplyUdpReq (PingServerReplyUdp.parse len s) |
394 |
|
|
395 |
| 146 -> QueryMultipleUdpReq (QueryUdp.parse len s) |
| 146 -> QueryMultipleUdpReq (QueryUdp.parse len s) |
396 |
| 152 -> QueryUdpReq (QueryUdp.parse len s) |
| 152 -> QueryUdpReq (QueryUdp.parse len s) |
397 |
| 153 -> QueryReplyUdpReq (QueryReplyUdp.parse len s) |
| 153 -> QueryReplyUdpReq (QueryReplyUdp.parse len s) |
408 |
| 145 -> EmuleReaskAckUdpReq (get_md4 s 1) |
| 145 -> EmuleReaskAckUdpReq (get_md4 s 1) |
409 |
(* | 146 -> EmuleFileNotFoundUdpReq *) |
(* | 146 -> EmuleFileNotFoundUdpReq *) |
410 |
| 147 -> EmuleQueueFullUdpReq |
| 147 -> EmuleQueueFullUdpReq |
411 |
|
|
412 |
| _ -> raise Exit |
| _ -> raise Exit |
413 |
with |
with |
414 |
e -> |
e -> |
415 |
lprintf "From UDP:\n"; |
lprintf "From UDP:\n"; |
416 |
dump s; |
dump s; |
417 |
UnknownUdpReq (magic, s) |
UnknownUdpReq (magic, s) |
418 |
|
|
|
|
|
419 |
let print t = |
let print t = |
420 |
let b = Buffer.create 100 in |
let b = Buffer.create 100 in |
421 |
begin |
begin |
422 |
match t with |
match t with |
423 |
|
|
424 |
| QueryUdpReq t -> QueryUdp.bprint b t |
| QueryUdpReq t -> QueryUdp.bprint b t |
425 |
| QueryMultipleUdpReq t -> QueryUdp.bprint b t |
| QueryMultipleUdpReq t -> QueryUdp.bprint b t |
426 |
| QueryReplyUdpReq t -> QueryReplyUdp.bprint b t |
| QueryReplyUdpReq t -> QueryReplyUdp.bprint b t |
432 |
| QueryServersUdpReq t -> QueryServersUdp.bprint b t |
| QueryServersUdpReq t -> QueryServersUdp.bprint b t |
433 |
| QueryServersReplyUdpReq t -> QueryServersReplyUdp.bprint b t |
| QueryServersReplyUdpReq t -> QueryServersReplyUdp.bprint b t |
434 |
| QueryIDReplyUdpReq t -> QueryIDReplyUdp.bprint b t |
| QueryIDReplyUdpReq t -> QueryIDReplyUdp.bprint b t |
435 |
|
|
436 |
| PingServerUdpReq t -> PingServerUdp.bprint b t |
| PingServerUdpReq t -> PingServerUdp.bprint b t |
437 |
| PingServerReplyUdpReq t -> PingServerReplyUdp.bprint b t |
| PingServerReplyUdpReq t -> PingServerReplyUdp.bprint b t |
438 |
| ServerDescUdpReq t -> ServerDescUdp.bprint b t |
| ServerDescUdpReq t -> ServerDescUdp.bprint b t |
439 |
| ServerDescReplyUdpReq t -> ServerDescReplyUdp.bprint b t |
| ServerDescReplyUdpReq t -> ServerDescReplyUdp.bprint b t |
440 |
| ServerListUdpReq t -> ServerListUdp.bprint b t |
| ServerListUdpReq t -> ServerListUdp.bprint b t |
441 |
|
|
442 |
| EmuleReaskFilePingUdpReq md4 -> |
| EmuleReaskFilePingUdpReq md4 -> |
443 |
Printf.bprintf b "EmuleReaskFilePingUdpReq %s" (Md4.to_string md4) |
Printf.bprintf b "EmuleReaskFilePingUdpReq %s" (Md4.to_string md4) |
444 |
| EmuleReaskAckUdpReq md4 -> |
| EmuleReaskAckUdpReq md4 -> |
447 |
Printf.bprintf b "EmuleFileNotFoundUdpReq" |
Printf.bprintf b "EmuleFileNotFoundUdpReq" |
448 |
| EmuleQueueFullUdpReq -> |
| EmuleQueueFullUdpReq -> |
449 |
Printf.bprintf b "EmuleQueueFullUdpReq" |
Printf.bprintf b "EmuleQueueFullUdpReq" |
450 |
|
|
451 |
| UnknownUdpReq (magic, s) -> |
| UnknownUdpReq (magic, s) -> |
452 |
Printf.bprintf b "UnknownReq magic %d\n" magic; |
Printf.bprintf b "UnknownReq magic %d\n" magic; |
453 |
bdump b s; |
bdump b s; |
454 |
end; |
end; |
455 |
Printf.bprintf b "\n"; |
Printf.bprintf b "\n"; |
456 |
Buffer.contents b |
Buffer.contents b |
457 |
|
|
458 |
let write buf t = |
let write buf t = |
459 |
match t with |
match t with |
460 |
|
|
461 |
| UnknownUdpReq (magic, s) -> |
| UnknownUdpReq (magic, s) -> |
462 |
buf_int8 buf magic; |
buf_int8 buf magic; |
463 |
Buffer.add_string buf s |
Buffer.add_string buf s |
464 |
|
|
465 |
| EmuleReaskFilePingUdpReq md4 -> |
| EmuleReaskFilePingUdpReq md4 -> |
466 |
buf_int8 buf 197; |
buf_int8 buf 197; |
467 |
buf_int8 buf 145; |
buf_int8 buf 145; |
468 |
buf_md4 buf md4 |
buf_md4 buf md4 |
469 |
|
|
470 |
| EmuleReaskAckUdpReq md4 -> |
| EmuleReaskAckUdpReq md4 -> |
471 |
buf_int8 buf 197; |
buf_int8 buf 197; |
472 |
buf_int8 buf 145; |
buf_int8 buf 145; |
473 |
buf_md4 buf md4 |
buf_md4 buf md4 |
474 |
|
|
475 |
| EmuleFileNotFoundUdpReq -> |
| EmuleFileNotFoundUdpReq -> |
476 |
buf_int8 buf 197; |
buf_int8 buf 197; |
477 |
buf_int8 buf 146 |
buf_int8 buf 146 |
478 |
|
|
479 |
| EmuleQueueFullUdpReq -> |
| EmuleQueueFullUdpReq -> |
480 |
buf_int8 buf 197; |
buf_int8 buf 197; |
481 |
buf_int8 buf 147 |
buf_int8 buf 147 |
482 |
|
|
483 |
| _ -> |
| _ -> |
484 |
buf_int8 buf 227; |
buf_int8 buf 227; |
485 |
match t with |
match t with |
486 |
| QueryServersUdpReq t -> |
| QueryServersUdpReq t -> |
487 |
buf_int8 buf 160; |
buf_int8 buf 160; |
488 |
QueryServersUdp.write buf t |
QueryServersUdp.write buf t |
489 |
| QueryServersReplyUdpReq t -> |
| QueryServersReplyUdpReq t -> |
490 |
buf_int8 buf 161; |
buf_int8 buf 161; |
491 |
QueryServersReplyUdp.write buf t |
QueryServersReplyUdp.write buf t |
492 |
|
|
493 |
| ServerDescUdpReq t -> |
| ServerDescUdpReq t -> |
494 |
buf_int8 buf 162; |
buf_int8 buf 162; |
495 |
ServerDescUdp.write buf t |
ServerDescUdp.write buf t |
499 |
| ServerListUdpReq t -> |
| ServerListUdpReq t -> |
500 |
buf_int8 buf 164; |
buf_int8 buf 164; |
501 |
ServerListUdp.write buf t |
ServerListUdp.write buf t |
502 |
|
|
503 |
| PingServerUdpReq t -> |
| PingServerUdpReq t -> |
504 |
buf_int8 buf 150; |
buf_int8 buf 150; |
505 |
PingServerUdp.write buf t |
PingServerUdp.write buf t |
506 |
| PingServerReplyUdpReq t -> |
| PingServerReplyUdpReq t -> |
507 |
buf_int8 buf 151; |
buf_int8 buf 151; |
508 |
PingServerReplyUdp.write buf t |
PingServerReplyUdp.write buf t |
509 |
|
|
510 |
| QueryLocationUdpReq t -> |
| QueryLocationUdpReq t -> |
511 |
buf_int8 buf 154; |
buf_int8 buf 154; |
512 |
QueryLocationUdp.write buf t |
QueryLocationUdp.write buf t |
513 |
| QueryLocationReplyUdpReq t -> |
| QueryLocationReplyUdpReq t -> |
514 |
buf_int8 buf 155; |
buf_int8 buf 155; |
515 |
QueryLocationReplyUdp.write buf t |
QueryLocationReplyUdp.write buf t |
516 |
| QueryUdpReq t -> |
| QueryUdpReq t -> |
517 |
buf_int8 buf 152; |
buf_int8 buf 152; |
518 |
QueryUdp.write buf t |
QueryUdp.write buf t |
519 |
| QueryMultipleUdpReq t -> |
| QueryMultipleUdpReq t -> |
520 |
buf_int8 buf 146; |
buf_int8 buf 146; |
521 |
QueryUdp.write buf t |
QueryUdp.write buf t |
522 |
| QueryReplyUdpReq t -> |
| QueryReplyUdpReq t -> |
523 |
buf_int8 buf 153; |
buf_int8 buf 153; |
524 |
QueryReplyUdp.write buf t |
QueryReplyUdp.write buf t |
525 |
| QueryCallUdpReq t -> |
| QueryCallUdpReq t -> |
526 |
buf_int8 buf 156; |
buf_int8 buf 156; |
527 |
QueryCallUdp.write buf t |
QueryCallUdp.write buf t |
528 |
| FileGroupInfoUdpReq t -> |
| FileGroupInfoUdpReq t -> |
529 |
buf_int8 buf 251; |
buf_int8 buf 251; |
530 |
QueryLocationReplyUdp.write buf t |
QueryLocationReplyUdp.write buf t |
531 |
|
|
532 |
| QueryIDReplyUdpReq t -> |
| QueryIDReplyUdpReq t -> |
533 |
buf_int8 buf 53; |
buf_int8 buf 53; |
534 |
QueryIDReplyUdp.write buf t |
QueryIDReplyUdp.write buf t |
535 |
|
|
|
|
|
536 |
| EmuleQueueFullUdpReq |
| EmuleQueueFullUdpReq |
537 |
| EmuleFileNotFoundUdpReq |
| EmuleFileNotFoundUdpReq |
538 |
| EmuleReaskAckUdpReq _ |
| EmuleReaskAckUdpReq _ |