Mottagare: <2077> Infosystem (@) Lysator (Gopher, Wais, WWW) administration Ärende: --- Skriv nedan. Skicka in=C-c C-c, Avbryt=C-c C-k, Annat se C-h m --- Här kommer en liten RFC angående Spider standard modul.lpc fil. --- SNIP --- function nsocket_close=previous_object()->nsocket_close; function nsocket_write=previous_object()->nsocket_write; function nsocket_address=previous_object()->nsocket_address; /* Denna funktion tar en lokal Url som argument, och returnerar ett filnanm, eller 0. (Med en lokal url menas saker som "/~cardeci/hotlist", som skulle returnera "/usr/sound/users/cardeci/html/hotlist". Det här är mer krävande ett det kan verka, så var snäll och cacha resultatet om du ska göra det mer än en gång i samma funktion (Dvs, istället för if(translate_url(url)) data=read_bytes(translate_url(url)); gör string tmp; if(tmp=translate_url(url)) data=read_bytes(tmp); */ function translate_url=previous_object()->is_file_url; /* Den här funktionen tar en sträng med '%' escape-sequencer, och returnerar den med riktiga tecken ("%20" -> " ") */ function decode_string=previous_object()->decode_string; /* -------------------------------------------------------------------------- Argument som din parse-funktion får -------------------------------------------------------------------------- request_info: En mapping med följande innehåll: "client" -> klientens FULLA namn, enligt ({ "Mozilla", "0.9B" }) etc. För att få det som en sträng, skriv request_info["client"]*" "; Vad man är intresserad av är dock oftast request_info["client"][0]. "raw" -> Hela requesten "raw_url" -> Helt oparsad URL (Escapesequencer typ %20 (ASCII, hex 20) finns kvar, "prot" -> Protokollet som används (HTTP/0.9 eller HTTP/1.0) "method" -> GET, HEAD eller POST "variables" -> ([ "var":"value", ... ]) "rest_query" -> Allt efter ? som inte är variabler (En variabel definieras genom att det står 'a=b'.) "full" -> Som raw, men parsad ("%20" -> " ") "body" -> F|r method == POST, det som postas "accept" -> ([ "*":({"*"}) ]) från alla nuvarande klienter :) "from" -> En otillf|rlitlig identifikation av anv{ndaren.({ "id", ["id"] }) "refer" -> URLen[a] som användaren kom från. ({ "url", ["url"], ... }) "pragma" -> Allt som klienten inte tycker passar p} andra st{llen ({ "foo", "bar", ... }) "url" -> samma som variablen url "originalurl" -> Som url, men ./, ../ etc är inte parsat. "time" -> Tidpunkten när requesten gjordes, int --------------------------------------------------------- matches: Det som matchades i regeln i map.rules, Så här ser default-regeln ut: map ~%s/%s.lpc%s CALL /users/%s/.public/%s.lpc->parse Om då URLen ~user/script.lpc?rest kommer till spider, innehåller 'matches' ({ "user", "script", "?rest", 0, 0 }) ---------------------------------------------------------- file_descriptor En file-descriptor som klienten hänger på. Man behöver inte bry sig om den här om man inte vill, men man kan skriva till den med 'nsocket_write(fd,string)', man kan ta reda på den numeriska addressen med 'nsocket_address(fd)' (returnerar en sträng, typ "127.0.0.1".) och man kan vara lite elak med 'nsocket_close(fd)' ----------------------------------------------------------- Url är helt enkelt Url-en. */ mixed parse(int file_descriptor, string *matches, string url, mapping request_info) { // Den här regeln är nästan ett måste, eftersom det annars är stört // omöjligt att uppdatera modulen om du ändrar på den if(strstr(url, "reload")!=-1) { update(file_name(this_object())); destruct(); return "