/[mldonkey]/mldonkey/src/networks/donkey/donkeyProtoUdp.ml
ViewVC logotype

Diff of /mldonkey/src/networks/donkey/donkeyProtoUdp.ml

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1.11 by spiralvoice, Mon Jun 20 18:38:49 2005 UTC revision 1.12 by spiralvoice, Mon Aug 8 16:47:31 2005 UTC
# Line 22  open Md4 Line 22  open Md4
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
# Line 46  module QueryReplyUdp  = struct Line 46  module QueryReplyUdp  = struct
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
# Line 57  module QueryReplyUdp  = struct Line 57  module QueryReplyUdp  = struct
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);
# Line 68  module QueryReplyUdp  = struct Line 68  module QueryReplyUdp  = struct
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;
# Line 78  module QueryReplyUdp  = struct Line 78  module QueryReplyUdp  = struct
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;
# Line 163  module PingServerReplyUdp = struct (* re Line 160  module PingServerReplyUdp = struct (* re
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;
# Line 172  module PingServerReplyUdp = struct (* re Line 169  module PingServerReplyUdp = struct (* re
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;
# Line 187  module PingServerReplyUdp = struct (* re Line 184  module PingServerReplyUdp = struct (* re
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;
# Line 205  module ServerDescUdp = struct Line 202  module ServerDescUdp = struct
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    
# Line 227  module ServerDescReplyUdp = struct Line 224  module ServerDescReplyUdp = struct
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;
# Line 239  module ServerDescReplyUdp = struct Line 236  module ServerDescReplyUdp = struct
236    
237  end  end
238    
   
       
239  module ServerListUdp = struct  module ServerListUdp = struct
240    type t = {    type t = {
241      ip : Ip.t;      ip : Ip.t;
# Line 268  end Line 263  end
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)
# Line 282  module QueryLocationUdp = struct Line 277  module QueryLocationUdp = struct
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
# Line 313  module QueryLocationReplyUdp = struct Line 308  module QueryLocationReplyUdp = struct
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);
# Line 359  module QueryUdp = DonkeyProtoServer.Quer Line 354  module QueryUdp = DonkeyProtoServer.Quer
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)
# Line 414  let parse magic s = Line 408  let parse magic 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
# Line 439  let print t = Line 432  let print 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 ->
# Line 454  let print t = Line 447  let print t =
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
# Line 506  let write buf t = Line 499  let 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 _

Legend:
Removed from v.1.11  
changed lines
  Added in v.1.12

savannah-hackers-public@gnu.org
ViewVC Help
Powered by ViewVC 1.1.26