blob: 88c4b577edc158488b207f3034561cba0274f561 [file] [log] [blame]
MG Mud User88f12472016-06-24 23:31:02 +02001#pragma strict_types
2#include <udp.h>
3#include <daemon.h>
4
5#define MAX_READ_FILE_LEN 50000
6
7// TEMPORARY
8
9#include <udp_language.h>
10#include <logging.h>
11
12#ifndef LOCAL_NAME
13#define LOCAL_NAME "MorgenGrauen"
14#endif
15
16#ifndef INETD_INVALID_ACCESS
17#define INETD_INVALID_ACCESS INTERMUDLOG("INVALID_ACCESS")
18#endif
19
20#ifndef INVALID_ACCESS
21#define INVALID_ACCESS(x) \
22 log_file(INETD_INVALID_ACCESS, \
23 sprintf(INETD_INV_ACCESS_MSG "TI: %O PO: %O\n", \
24 ctime()[4..15],this_interactive(), \
25 previous_object()))
26#endif
27
28
29// END TEMPORARY
30
31void udp_man(mapping data)
32{
33 mapping pages;
34 int index;
35 string manpage,ret;
36 string|string* tmp;
37
38 if (previous_object()!=find_object(INETD))
39 {
40 INVALID_ACCESS(Man);
41 return;
42 }
43
44 manpage=data[DATA];
45 tmp=explode(manpage,"/");
46 if (sizeof(tmp)>1)
47 {
48 if (file_size(MAND_DOCDIR+manpage)>=0)
49 tmp=({tmp[<1],manpage});
50 else
51 tmp=({});
52 }
53 else
54 tmp=(string *)call_other(MAND,"locate",data[DATA],0);
55 pages=([]);
56 index=sizeof(tmp);
57 while(index--)
58 {
59 if (tmp[1][0..1]!="g.") pages[tmp[index]]=tmp[index-1];
60 index--;
61 }
62 switch(sizeof(pages))
63 {
64 case 0:
65 ret=sprintf(INETD_NO_MANPAGE,LOCAL_NAME,manpage);
66 break;
67 case 1:
68 tmp=m_indices(pages)[0];
69 ret=sprintf(INETD_MANPAGE_FOUND,LOCAL_NAME,pages[tmp]);
70 index=0;
71 while(manpage=read_file(MAND_DOCDIR+tmp,index))
72 {
73 ret+=manpage;
74 index+=MAX_READ_FILE_LEN;
75 }
76 break;
77 default:
78 ret=sprintf(INETD_MANPAGES,LOCAL_NAME,"",
79 break_string(implode(m_values(pages)," "),78),"");
80 break;
81 }
82 INETD->_send_udp(data[NAME],
83 ([
84 REQUEST: REPLY,
85 RECIPIENT: data[SENDER],
86 ID: data[ID],
87 DATA: ret
88 ]));
89}
90
91string send_request(string mudname, string pagename)
92{
93 return (INETD->_send_udp(mudname,
94 ([REQUEST: "man",
95 DATA: pagename,
96 SENDER: getuid(previous_object())]),1)||
97 sprintf(INETD_MAN_REQUESTED,pagename,mudname));
98}