/[mod_czs]/mod_czs.c
This is repository of my old source code which isn't updated any more. Go to git.rot13.org for current projects!
ViewVC logotype

Diff of /mod_czs.c

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

revision 1.12 by dpavlin, Sun Aug 13 18:30:24 2000 UTC revision 1.13 by dpavlin, Sun Aug 13 20:11:51 2000 UTC
# Line 40  FILE *in; Line 40  FILE *in;
40  static int czs_handler(request_rec *r) {  static int czs_handler(request_rec *r) {
41    
42          char buffer[MAX_STRING_LEN] = "undefined buffer content";          char buffer[MAX_STRING_LEN] = "undefined buffer content";
43          char *b;          char *b,*do_czs,*do_mac;
44          char *rexp = "< *META *HTTP-EQUIV=\"(Content-Type)\" *CONTENT=\"(text/html[^\"]+)\" *>";          char *rexp = "< *META *HTTP-EQUIV=\"(Content-Type)\" *CONTENT=\"(text/html[^\"]+)\" *>";
45          regex_t *regexp;          regex_t *regexp;
46          int nsub = 10;          int nsub = 10;
# Line 52  static int czs_handler(request_rec *r) { Line 52  static int czs_handler(request_rec *r) {
52          if(r->finfo.st_mode == 0)          if(r->finfo.st_mode == 0)
53                  return NOT_FOUND;                  return NOT_FOUND;
54    
55            do_czs = (char *)ap_table_get(r->notes,"do_czs");
56            do_mac = (char *)ap_table_get(r->notes,"do_mac");
57    
58          in = ap_pfopen(r->pool, r->filename, "r");          in = ap_pfopen(r->pool, r->filename, "r");
59    
60          if(in == NULL) {          if(in == NULL) {
# Line 59  static int czs_handler(request_rec *r) { Line 62  static int czs_handler(request_rec *r) {
62                  return FORBIDDEN;                      return FORBIDDEN;    
63          }          }
64  #ifdef DEBUG  #ifdef DEBUG
65          if(r->args != 0 || ap_table_get(r->notes,"do_czs")) {          ap_table_setn(r->headers_out, "X-czs_filename", r->filename);
66                  ap_table_setn(r->headers_out, "X-czs_filename", r->filename);          if (r->args != 0) {
67                  ap_table_setn(r->headers_out, "X-czs_content-type", r->content_type);                  ap_table_setn(r->headers_out, "X-czs_args", r->args);
                 if (r->args != 0) {  
                         ap_table_setn(r->headers_out, "X-czs_args", r->args);  
                 }  
68          }          }
69            ap_table_setn(r->headers_out, "X-do_czs", do_czs);
70            ap_table_setn(r->headers_out, "X-do_mac", do_mac);
71            ap_table_setn(r->headers_out, "X-content-type", r->content_type);
72  #endif  #endif
73    
74  #ifdef TEST_QUERYSTRINGV  #ifdef TEST_QUERYSTRINGV
75          if(r->args == 0 && !ap_table_get(r->notes,"do_czs") ||          if (r->args == 0 && do_czs == NULL && do_mac == NULL || ap_strcasestr(r->content_type,"cgi") != NULL) {
                  ap_strcasestr(r->content_type,"cgi") != NULL) {  
76  #else  #else
77          if(!ap_table_get(r->notes,"do_czs") ||          if (do_czs == NULL && do_mac == NULL || ap_strcasestr(r->content_type,"cgi") != NULL) {
                 ap_strcasestr(r->content_type,"cgi") != NULL) {  
78  #endif  #endif
79                  return DECLINED;                  return DECLINED;
80  /*              ap_send_fd(in, r); */  /*              ap_send_fd(in, r); */
# Line 98  static int czs_handler(request_rec *r) { Line 99  static int czs_handler(request_rec *r) {
99    
100    
101                  while(fgets(buffer,MAX_STRING_LEN,in)) {                  while(fgets(buffer,MAX_STRING_LEN,in)) {
102                          for(i=0; i<MAX_STRING_LEN && buffer[i]; i++) {                          if (do_czs != NULL) {
103                                  switch ( buffer[i] ) {                                  for(i=0; i<MAX_STRING_LEN && buffer[i]; i++) {
104                                  case '¹': buffer[i]='s'; break;                                          switch ( buffer[i] ) {
105                                  case 'ð': buffer[i]='d'; break;                                          case '¹': buffer[i]='s'; break;
106                                  case 'è': buffer[i]='c'; break;                                          case 'ð': buffer[i]='d'; break;
107                                  case 'æ': buffer[i]='c'; break;                                          case 'è': buffer[i]='c'; break;
108                                  case '¾': buffer[i]='z'; break;                                          case 'æ': buffer[i]='c'; break;
109                                  case '©': buffer[i]='S'; break;                                          case '¾': buffer[i]='z'; break;
110                                  case 'Ð': buffer[i]='D'; break;                                          case '©': buffer[i]='S'; break;
111                                  case 'È': buffer[i]='C'; break;                                          case 'Ð': buffer[i]='D'; break;
112                                  case 'Æ': buffer[i]='C'; break;                                          case 'È': buffer[i]='C'; break;
113                                  case '®': buffer[i]='Z'; break;                                          case 'Æ': buffer[i]='C'; break;
114                                            case '®': buffer[i]='Z'; break;
115                                            }
116                                  }                                  }
117                          }                          }
118    
# Line 147  static int czs_handler(request_rec *r) { Line 150  static int czs_handler(request_rec *r) {
150  int translate_path(request_rec *r) {  int translate_path(request_rec *r) {
151          char *uri = r->uri;          char *uri = r->uri;
152          request_rec *subr;          request_rec *subr;
153          char *type = NULL;          char *ct;
154            char *ua;
155    
156  #ifdef DEBUG  #ifdef DEBUG
157          ap_table_setn(r->headers_out, "X-translate", r->uri);          ap_table_setn(r->headers_out, "X-translate-uri", r->uri);
158  #endif  #endif
159          if (uri[0]=='/' && (uri[1] | 0x20) =='c' && (uri[2] | 0x20)=='z' && (uri[3] | 0x20) =='s') {  
160  #if 0          if (uri[0]=='/' && (uri[1] | 0x20) =='c' && (uri[2] | 0x20)=='z' && (uri[3] | 0x20) =='s' && uri[4]=='/') {
161                  ap_table_setn(r->headers_out, "Location", ap_pstrcat(r->pool, uri+2, "?czs", NULL));                  subr = (request_rec *) ap_sub_req_lookup_uri(r->uri+4, r);
162                  return REDIRECT;                  r->filename=ap_pstrdup(r->pool, subr->filename);
163                    ct = (char *)subr->content_type;
164                    if (ct == NULL) return DECLINED; /* hm? */
165    #ifdef DEBUG
166                    ap_table_setn(r->headers_out, "X-translate-sub-ct", ct);
167  #endif  #endif
168                    ap_table_setn(r->notes,"do_czs",ap_pstrdup(r->pool,"1"));
169                    ap_destroy_sub_req(subr);
170                    return OK;
171            }
172    
173            ua = (char *)ap_table_get(r->headers_in, "User-Agent");
174            if (ua == NULL) ua = "unknown";
175    
176    #ifdef DEBUG
177            ap_table_setn(r->headers_out, "X-translate-UA", ua);
178    #endif
179    
180            if (uri[0]=='/' && (uri[1] | 0x20) =='m' && (uri[2] | 0x20)=='a' && (uri[3] | 0x20) =='c' && uri[4]=='/') {
181                  subr = (request_rec *) ap_sub_req_lookup_uri(r->uri+4, r);                  subr = (request_rec *) ap_sub_req_lookup_uri(r->uri+4, r);
182                  r->filename=ap_pstrdup(r->pool, subr->filename);                  r->filename=ap_pstrdup(r->pool, subr->filename);
183                  type = subr->content_type;                  ct = (char *)subr->content_type;
184                    if (ct == NULL) return DECLINED; /* hm? */
185  #ifdef DEBUG  #ifdef DEBUG
186                  ap_table_setn(r->headers_out, "X-translate-content-type", type);                  ap_table_setn(r->headers_out, "X-translate-sub-ct", ct);
187  #endif  #endif
188                  if (type == NULL) {                  /* will store User-Agent in do_mac as true value */
189                          return DECLINED; /* hm? */                  if (ap_strcasestr(ua, "Mac"))
190                            ap_table_setn(r->notes,"do_mac",ua);
191                    else {
192                            ap_table_setn(r->headers_out, "Location", r->uri+4);
193                            return REDIRECT;
194                  }                  }
                 ap_table_setn(r->notes,"do_czs",1);  
195                  ap_destroy_sub_req(subr);                  ap_destroy_sub_req(subr);
196                  return OK;                  return OK;
197          }          }
198    
199    #if 0
200            if (ap_strcasestr(ua, "Mac")) {
201                    ap_table_setn(r->headers_out, "Location", ap_pstrcat(r->pool, "/mac/", r->uri, NULL));
202                    return REDIRECT;
203            }
204    #endif
205    
206          return DECLINED;          return DECLINED;
207  }  }
208    
209  static int add_charset_header(request_rec * r)  static int add_charset_header(request_rec * r)
210  {  {
211          const char *ua, *ct;          char *ua, *ct;
   
         ua = ap_table_get(r->headers_in, "User-Agent");  
         if (ua == NULL)  
                 ua = "<unknown>";  
212    
213          ct = r->content_type;          ua = (char *)ap_table_get(r->notes, "do_mac");
214            ct = (char *)r->content_type;
215    
216          if (ct != NULL && !ap_table_get(r->notes,"do_czs")) {          if (ct != NULL && !ap_table_get(r->notes,"do_czs")) {
217    
218                  if (strstr(ct, "text/html") == NULL)                  if (ap_strcasestr(ct, "text") == NULL)
219                          return DECLINED; /* Don't mess with other types */                          return DECLINED; /* Don't mess with other types */
220    
221                  if (strstr(ua, "Mac") != NULL) {                  if (ua) {       /* do_mac */
222                          if (strstr(ua, "MSIE") != NULL)                          if (ap_strcasestr(ua, "MSIE") != NULL)
223                                  r->content_type = "text/html; charset=x-mac-roman";                                  r->content_type = ap_pstrcat(r->pool, ct,"; charset=x-mac-roman", NULL);
224                          else                          else
225                                  r->content_type = "text/html; charset=MacCE";                                  r->content_type = ap_pstrcat(r->pool, ct,"; charset=MacCE", NULL);
226                  } else                  } else
227                          r->content_type = "text/html; charset=iso-8859-2";                          r->content_type = ap_pstrcat(r->pool, ct,"; charset=iso-8859-2", NULL);
228          }          }
229    
230  #ifdef DEBUG  #ifdef DEBUG

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

  ViewVC Help
Powered by ViewVC 1.1.26