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
  
// 
// $Id: Server.pike,v 1.7 2009/05/07 14:15:53 mast Exp $ 
// 
// Roxen HTTP RPC 
// 
// Copyright © 1996 - 2009, Roxen IS 
// 
 
private int port; 
private string host; 
 
private object rpc; 
private function security; 
 
mapping http(string path) 
{ 
  if(path == "rpc/") 
    return ([ "raw":1, "data":"port "+port ]); 
} 
 
private int ip_security(string ip) 
{ 
  ip = (ip/" ")[0]; 
  array a = gethostbyaddr(ip) || ({ ip }); 
  return search(Array.map(({ a[0] }) + a[1] + a[2], security),1)+1; 
} 
 
void create(object o, function|void security_in) 
{ 
  rpc = RoxenRPC.Server(0, 0); 
  if(security = security_in) 
    rpc->set_ip_security(ip_security); 
  rpc->provide("Q", o); 
   
  string adr = rpc->query_address(); 
  host = (adr/" ")[0]; 
  port = (int) (adr/" ")[1]; 
}