filter.c
上传用户:minyiyu
上传日期:2018-12-24
资源大小:864k
文件大小:4k
源码类别:

Telnet服务器

开发平台:

Unix_Linux

  1. #if defined( LINUX )
  2. #include "innbbsconf.h"
  3. #include <varargs.h>
  4. #else
  5. #include <varargs.h>
  6. #include "innbbsconf.h"
  7. #endif
  8. #include "bbslib.h"
  9. /*
  10. #  filter.conf
  11. #node    in    out
  12. mynode:b2g:g2b
  13. */
  14. char   *big2gb(), *gb2big(), *gb2hz(), *hz2gb(), *big2hz(), *hz2big();
  15. char   *big2jis(), *jis2big();
  16. int     big2gb_init(), gb2big_init(), gb2hz_init();
  17. int     hz2gb_init(), big2hz_init(), hz2big_init();
  18. int     big2jis_init(), jis2big_init();
  19. typedef struct Filternode_t {
  20. char   *name;
  21. char   *(*cmd) ();
  22. int     (*cmd_init) ();
  23. }       filternode_t;
  24. static filternode_t FILTERS[] = {
  25. #ifdef BIG2GB
  26. {"big2gb", big2gb, big2gb_init},
  27. #endif
  28. #ifdef GB2BIG
  29. {"gb2big", gb2big, gb2big_init},
  30. #endif
  31. #ifdef GB2HZ
  32. {"gb2hz", gb2hz, gb2hz_init},
  33. #endif
  34. #ifdef HZ2GB
  35. {"hz2gb", hz2gb, hz2gb_init},
  36. #endif
  37. #if defined(GB2BIG) && defined(HZ2GB)
  38. {"hz2big", hz2big, hz2big_init},
  39. {"big2hz", big2hz, big2hz_init},
  40. #endif
  41. #ifdef BIG2JIS
  42. {"big2jis", big2jis, big2jis_init},
  43. #endif
  44. #ifdef JIS2BIG
  45. {"jis2big", jis2big, jis2big_init},
  46. #endif
  47. #ifdef GB2JIS
  48. {"gb2jis", gb2jis, gb2jis_init},
  49. #endif
  50. #ifdef JIS2GB
  51. {"jis2gb", jis2gb, jis2gb_init},
  52. #endif
  53. {"", NULL, NULL},
  54. };
  55. filtermatch(result, target, pat)
  56. int     result;
  57. char   *target, *pat;
  58. {
  59. char   *filterp = pat, *ptr;
  60. char   *arg;
  61. for (filterp = pat, ptr = strchr(filterp, ',');
  62. filterp && *filterp; ptr = strchr(filterp, ',')) {
  63. if (ptr)
  64. *ptr = '';
  65. arg = filterp;
  66. if (*arg == '!') {
  67. if (wildmat(target, arg + 1)) {
  68. result = 0;
  69. }
  70. } else if (wildmat(target, arg)) {
  71. result = 1;
  72. }
  73. if (ptr) {
  74. *ptr = ',';
  75. filterp = ptr + 1;
  76. } else {
  77. break;
  78. }
  79. }
  80. return result;
  81. }
  82. FuncPtr 
  83. search_filtercmd(cmd)
  84. char   *cmd;
  85. {
  86. filternode_t *nodep;
  87. char   *ptr;
  88. int     savech;
  89. for (ptr = cmd; *ptr && strchr("rntb ", *ptr) == NULL; ptr++);
  90. savech = *ptr;
  91. *ptr = '';
  92. for (nodep = FILTERS; nodep && nodep->name && *nodep->name; nodep++) {
  93. if (strcasecmp(nodep->name, cmd) == 0)
  94. return nodep->cmd;
  95. }
  96. *ptr = savech;
  97. return NULL;
  98. }
  99. #if defined(HZ2GB) && defined(GB2BIG)
  100. int
  101. big2hz_init(arg)
  102. char   *arg;
  103. {
  104. big2gb_init(arg);
  105. gb2hz_init(arg);
  106. }
  107. int
  108. hz2big_init(arg)
  109. char   *arg;
  110. {
  111. hz2gb_init(arg);
  112. gb2big_init(arg);
  113. }
  114. char   *
  115. hz2big(buf, len, init)
  116. char   *buf;
  117. int    *len;
  118. int     init;
  119. {
  120. hz2gb(buf, len, init);
  121. return gb2big(buf, len, init);
  122. }
  123. char   *
  124. big2hz(buf, len, init)
  125. char   *buf;
  126. int    *len;
  127. int     init;
  128. {
  129. big2gb(buf, len, init);
  130. return gb2hz(buf, len, init);
  131. }
  132. #endif
  133. #ifdef MYCONVERSION
  134. static  FILTERoutbuffer[8192];
  135. Rfprintf(va_alist)
  136. va_dcl
  137. {
  138. va_list ap;
  139. register char *fmt;
  140. newsfeeds_t *nf;
  141. FILE   *fp;
  142. va_start(ap);
  143. nf = va_arg(ap, newsfeeds_t *);
  144. fp = va_arg(ap, FILE *);
  145. fmt = va_arg(ap, char *);
  146. if (nf->rfilter) {
  147. vsprintf(FILTERoutbuffer, fmt, ap);
  148. if (nf->rfilter(FILTERoutbuffer, sizeof FILTERoutbuffer))
  149. fputs(FILTERoutbuffer, sizeof(FILTERoutbuffer), fp);
  150. else
  151. fputs(FILTERoutbuffer, sizeof(FILTERoutbuffer), fp);
  152. } else {
  153. fprintf(fp, fmt, ap);
  154. }
  155. va_end(ap);
  156. }
  157. static  FILTERoutbuffer[8192];
  158. int
  159. Snfprintf(va_alist)
  160. va_dcl
  161. {
  162. va_list ap;
  163. register char *fmt;
  164. newsfeeds_t *nf;
  165. FILE   *fp;
  166. int     n;
  167. va_start(ap);
  168. nf = va_arg(ap, newsfeeds_t *);
  169. fp = va_arg(ap, FILE *);
  170. fmt = va_arg(ap, char *);
  171. if (nf->sfilter) {
  172. vsprintf(FILTERoutbuffer, fmt, ap);
  173. if (nf->rfilter(FILTERoutbuffer, sizeof FILTERoutbuffer))
  174. fputs(FILTERoutbuffer, sizeof(FILTERoutbuffer), fp);
  175. else
  176. fputs(FILTERoutbuffer, sizeof(FILTERoutbuffer), fp);
  177. } else {
  178. fprintf(fp, fmt, ap);
  179. }
  180. va_end(ap);
  181. }
  182. int
  183. Rfputs(string)
  184. char   *string;
  185. {
  186. }
  187. int
  188. Sfputs(string)
  189. char   *string;
  190. {
  191. }
  192. #if defined(GB2BIG)
  193. char   *
  194. gb2big()
  195. {
  196. }
  197. #endif
  198. #if defined(BIG2GB)
  199. char   *
  200. big2gb()
  201. {
  202. }
  203. #endif
  204. #if defined(GB2BIG)
  205. int 
  206. g2bfputs()
  207. {
  208. }
  209. int
  210. g2bfprintf()
  211. {
  212. }
  213. #endif
  214. #if defined(BIG2GB)
  215. int 
  216. b2gfputs()
  217. {
  218. }
  219. int
  220. b2gfprintf()
  221. {
  222. }
  223. #endif
  224. #if defined(JIS2BIG)
  225. char   *
  226. jis2big()
  227. {
  228. }
  229. #endif
  230. #if defined(BIG2JIS)
  231. char   *
  232. big2jis()
  233. {
  234. }
  235. #endif
  236. #if defined(HZ2GB)
  237. char   *
  238. hz2gb()
  239. {
  240. }
  241. #endif
  242. #if defined(HC)
  243. #endif
  244. #if defined(WORDG2B)
  245. #endif
  246. #endif