| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252 |
- #include "../../structures.h"
- #include <stdio.h>
- #include <stdlib.h>
- #include <string.h>
- #include <time.h>
- #ifdef __cplusplus
- extern "C" {
- #endif
- struct pluginlink * mypl;
- int count_load_str_proxy_from_file=0,count_load_str_admin_from_file=0;
- int count_str_proxy_in_3proxy=0,count_str_admin_in_3proxy=0;
- char ** old_proxy_table=NULL;
- char ** old_admin_table=NULL;
- struct schedule myschedule;
- char **load_string(FILE *f,int max_count_str, int *countloadstr,
- char *start,char *stop,char **table_3proxy)
- {
- int cstr=0,i=0;
- char tmpbuf1[1024],*rstr,*pt=NULL,*p=NULL;
- char **old_table;
- tmpbuf1[0]='\0';
- fseek(f,0,SEEK_SET);
- /*find start service section*/
- while(!feof(f))
- {
- fgets(tmpbuf1, 1023,f);
- if ((strstr(tmpbuf1,start))!=NULL) { i++; break; }
- tmpbuf1[0]='\0';
- }
- if (i==0){
- fprintf(stderr,"Error StringsPlugin: No start section %s strings! \n",start);
- return NULL;
- }
- /*create table for old strings */
- old_table=(char **)mypl->myalloc(max_count_str*sizeof(char *));
- memset(old_table,0,max_count_str*sizeof(char *));
- /*load from file new strings */
- i=0;
- while ( !feof(f) || i< max_count_str)
- {
- fgets(tmpbuf1, 1023,f);
-
- if ((strstr(tmpbuf1,stop))!=NULL) { break; }
- if (strstr(tmpbuf1,"[end]")==NULL)
- {
- /* find and replace \n \r*/
- rstr = tmpbuf1;
- while (*rstr!='\0')
- {
- if (*rstr=='\r' || *rstr=='\n' )
- { *rstr='\0'; rstr++; }
- rstr++;
- }
- while ((rstr=strstr(tmpbuf1,"\\n")))
- {
- if (rstr!=NULL){ *rstr='\r'; rstr++; *rstr='\n'; }
- }
- /* add string */
- if (pt!=NULL) { cstr=cstr+(int)strlen(pt); }
- cstr=cstr+(int)strlen(tmpbuf1)+1;
- p = (char *)mypl->myalloc(cstr);
-
- if (pt!=NULL)
- {
- strcpy(p, pt);
- strcat(p, tmpbuf1);
- mypl->myfree(pt);
- }
- else
- { strcpy(p, tmpbuf1); }
- pt=p; cstr=0;
-
- }
- else
- {
- /* save old string */
- old_table[i]=table_3proxy[i];
- /* replace string */
- table_3proxy[i]=pt;
- pt=NULL; i++;
- }
- }
- if(pt)mypl->myfree(pt);
- *countloadstr=i;
- if (i==0) { mypl->myfree(old_table); old_table=NULL; }
-
- return old_table;
- }
- /*-------------------------------------------------------------------*/
- static int restore_old_table(void * v)
- {
- int i; char *p=NULL;
- /* restore old proxy table */
- if(old_proxy_table)
- {
-
- for(i=0; i < count_str_proxy_in_3proxy; i++){
- p=mypl->proxy_table[i];
- mypl->proxy_table[i]=old_proxy_table[i];
- mypl->myfree(p);
- }
- mypl->myfree(old_proxy_table);
- old_proxy_table = NULL;
- }
- p=NULL;
- /* restore old admin table */
- if(old_admin_table)
- {
- for(i=0; i < count_str_admin_in_3proxy; i++){
- p=mypl->admin_table[i];
- mypl->admin_table[i]=old_admin_table[i];
- mypl->myfree(p);
- }
- mypl->myfree(old_admin_table);
- old_admin_table = NULL;
- }
- /*return 1 delete job, 0 no delete!!! :)*/
- return 1;
- }
- /*-------------------------------------------------------------------*/
- #ifdef _WIN32
- BOOL WINAPI DllMain( HINSTANCE hModule,
- DWORD ul_reason_for_call,
- LPVOID lpReserved
- )
- {
- if (ul_reason_for_call == DLL_PROCESS_DETACH)
- {
- if(old_proxy_table) { restore_old_table(NULL); }
-
- }
- return TRUE;
- }
- #endif
- #ifdef WATCOM
- #pragma aux start "*" parm caller [ ] value struct float struct routine [eax] modify [eax ecx edx]
- #undef PLUGINCALL
- #define PLUGINCALL
- #endif
- PLUGINAPI int PLUGINCALL start(struct pluginlink * pluginlink,
- int argc, char** argv)
- {
- FILE *f=NULL;
- mypl=pluginlink;
-
- if(old_proxy_table||old_admin_table) restore_old_table(NULL);
-
- if(!(f=fopen(argv[1],"r"))) return 1001;
- /*count string service PROXY in 3proxy */
- count_str_proxy_in_3proxy=0;
- while( mypl->proxy_table[count_str_proxy_in_3proxy] != NULL )
- { count_str_proxy_in_3proxy++; }
- /*count string service ADMIN in 3proxy */
- count_str_admin_in_3proxy=0;
- while( mypl->admin_table[count_str_admin_in_3proxy] != NULL )
- { count_str_admin_in_3proxy++; }
- /*---- load string for PROXY service ----*/
- old_proxy_table=load_string(f,count_str_proxy_in_3proxy,
- &count_load_str_proxy_from_file,
- "[--proxy--]","[/--proxy--]",
- mypl->proxy_table);
-
- if (old_proxy_table == NULL)
- {
- fprintf(stderr,"Error StringsPlugin: No load string from file %s \
- for service PROXY !\n",argv[1]);
- }
- if(count_str_proxy_in_3proxy!= count_load_str_proxy_from_file)
- {
- fprintf(stderr,"Warning StringsPlugin: Count string for service PROXY in\
- 3proxy not equality count string in file %s \n",argv[1]);
- }
- /*---- load string for ADMIN service ----*/
- old_admin_table=load_string(f,count_str_admin_in_3proxy,
- &count_load_str_admin_from_file,
- "[--admin--]","[/--admin--]",
- mypl->admin_table);
-
- if (old_admin_table == NULL)
- {
- fprintf(stderr,"Error StringsPlugin: No load string from file %s \
- for service ADMIN !\n",argv[1]);
- }
- if(count_str_admin_in_3proxy!= count_load_str_admin_from_file)
- {
- fprintf(stderr,"Warning StringsPlugin: Count string for service ADMIN in\
- 3proxy not equality count string in file %s\n",argv[1]);
- }
- fclose(f);
-
- /* create job shedule for processing reload */
- if(*pluginlink->schedule!=&myschedule){
- memset(&myschedule,0,sizeof(struct schedule));
- myschedule.type=NONE;
- myschedule.function=restore_old_table;
- myschedule.next = *pluginlink->schedule;
- *pluginlink->schedule=&myschedule;
- }
-
- return 0;
- }
- #ifdef __cplusplus
- extern }
- #endif
|